繁体   English   中英

数据加密

[英]Data Encryption

存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分。 我想要的是卡号的最终安全性,我们设置了加密和解密的机制,但我们自己无法解密任何给定的号码。

我所追求的是一种即使在数据库级别也能保护这些信息的方法,因此没有人可以进入并生成卡号文件。 其他人如何克服这个问题? 什么是“标准”方法?

至于数据的使用情况,链接都是私有且安全的,除了创建记录并加密时,不会执行卡号的传输,所以我不担心前端只是后端。


那么数据库是ORACLE所以我可以使用PL / SQL和Java。

并不缺少愿意存储您的CC信息并将其换成令牌的处理器,您可以使用该令牌对存储的号码进行计费。 这可以让您摆脱PCI合规性,但仍允许按需计费。 根据为什么你需要存储的CC,这可能是一个更好的选择。

大多数公司将此称为“客户档案管理”,并且实际上费用相当合理。

我知道的一些提供者(没有特别的顺序):

除非您是支付处理器,否则您不需要存储任何类型的CC信息。

检查您的要求,您需要存储CC信息的情况并不多

不要存储信用卡号码,而是存储哈希值。 当您需要验证新号码是否与存储的号码匹配时,请获取新号码的哈希值并将其与存储的哈希值进行比较。 如果它们匹配,则该数字(理论上)是相同的。

或者,您可以通过让输入卡号的用户输入密码来加密数据; 你将它用作加密/解密密钥。

但是,任何有权访问您的数据库和源代码的人(即您和您的团队)都会发现解密该数据很简单(即修改实时代码,以便通过电子邮件发送输入到一次性Hotmail帐户的任何解密密钥等)。

如果您要存储信用卡信息,因为您不希望用户必须重新输入信息,那么任何形式的散列都不会有帮助。

您何时需要根据信用卡号码行事?

您可以将信用卡号存储在更安全的数据库中,并在主数据库中存储足够的信息以显示给用户,以及对卡的引用。 后端系统可以更加锁定,并使用实际的信用卡信息只是为了订单处理。 如果您愿意,可以通过一些主密码加密这些数字,但密码必须由需要获取数字的代码知道。

是的,你只是稍微解决了问题,但很多安全性更多的是减少攻击足迹而不是消除它。 如果你想消除它,那么不要在任何地方存储信用卡号码!

如果您使用的是Oracle,则可能对透明数据加密感兴趣。 仅适用于Enterprise许可证。

Oracle还具有加密实用程序 - 解密,例如DBMS_OBFUSCATION_TOOLKIT

至于“标准”,您感兴趣的适当标准是PCI DSS标准,该标准描述了为保护敏感信用卡信息需要采取哪些措施。

对于电子商务类型用例(想想亚马逊1-Click),您可以使用用户现有的强密码加密CC(或密钥)。 假设您只存储密码的哈希值,只存储用户(或彩虹表 - 但是,它必须在每个用户上运行,如果没有提供相同的密码则无法工作 - 而不仅仅是1,哈希相同)可以解密它。

当密码更改时,您必须小心重新加密数据,如果忘记密码,数据将毫无价值(并且需要由用户重新输入) - 但是,如果付款是用户启动的那么它的效果很好。

了解数据库服务器和语言/平台类型会有所帮助,因此我们可以更具体,但我会研究SHA

我对称加密(AES)一个安全的盐渍哈希(SHA-256 +盐)。 sal盐哈希就足够了,但是如果数据库而不是代码泄漏,那么加密会增加一些额外的东西,并且当时或其他方式有盐渍哈希的彩虹表。 当然,将密钥存储在代码中,而不是存储在数据库中。

值得注意的是,没有什么可以保护你免受弯曲的队友,例如,他们也可以在散列之前存储日期的副本。 您必须妥善保管代码存储库,并对信用卡处理路径中的所有代码进行频繁的代码修订。 还要尽量减少从接收数据到加密/散列数据的时间,手动确保从内存中清除存储它的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM