0

我们有保留信用卡数据的业务需求。今天(2013 年 11 月)最先进的算法来加密将保存在磁盘上的信用卡数据是什么?此外,我很感激指向实现这些算法的 Java 库的指针

请注意,我们符合 PCI 标准,并且我们已经存储了信用卡数据。我正在审查以确保我们的加密方法保持最先进

4

4 回答 4

0

我将使用 ISO/IEC 18033 批准的分组密码之一:AES、Camellia 和 SEED。

AES256 很难出错。

于 2013-11-14T20:25:51.790 回答
0

只需继续使用 AES 256,但请确保选择正确的模式。我不同意“AES256 很难出错”的评论。退房 - https://pthree.org/2012/02/17/ecb-vs-cbc-encryption/

不用说,您需要注意密钥管理并避免 IV 出现任何问题 - 每次运行加密时,使用 key1+IV1 组合加密的消息“hello world”在密文中看起来完全相同。因此,请确保您从大型熵池中随机选择 IV

从 Java 实现的角度来看,Java 原生支持 AES 加密。只要确保您使用 256 位加密,您就拥有正确的无限强度 JCE 文件 - 如果没有这些提供加密方法的 JCE 文件,您将被限制为 128 位加密。

如果您不想回复运行应用程序的服务器上可用的这些 JCE 文件,请查看此内容。

于 2013-11-16T19:14:38.730 回答
0

我最近刚离开信用卡行业,作为一名开发人员从事非 PCI 兼容领域的安全工作。BCrypt 是一个不错的选择。它允许单向哈希以及强制每次尝试时间的工作参数。这使您可以停止暴力攻击。

于 2013-11-14T18:51:26.383 回答
0

正如@gauravphoenix 指出的那样,AES 实际上很容易出错。如果你给它一个完全随机的密钥,AES 算法本身只能安全地加密 16 个字节的数据。如果你的问题不是这个(几乎每个人的问题都不同),你需要添加更多的部分。具体来说,您需要选择合适的模式,正确配置该模式,正确生成密钥并防止修改。AES 不会自动为您完成这些,不幸的是,互联网上的大多数示例代码都没有正确执行。

有一些库试图为您捆绑所有这些细节,这样您就可以进行大多数人想要进行的愚蠢的“请加密此数据”调用。我为 iOS 维护了一个名为RNCryptor。有许多其他语言的格式端口,包括一个名为JNCryptor的 Java 实现。

另一个好的“整体解决方案”AES 实现是aescrypt,它包括一个 Java 实现。

请注意,保护数据的最重要的技术 (*) 步骤不是您选择的算法或格式。这就是您管理密钥的方式。如果您将密钥与信用卡号存储在同一个磁盘上,或者将其硬编码到您的软件中,那么您的加密强度就无关紧要了。密钥管理的最新技术称为 HSM(硬件安全模块)。像 SafeNet 这样的公司制造它们。它们可以是机架式、插入式卡,甚至是 USB 加密狗。我与Luna合作过,总体上对它很满意,但市场上有几种选择。

(*) 虽然密钥管理是 IMO 最重要的技术步骤,但到目前为止它还不是保护信用卡(或其他任何东西)的最重要步骤。最重要的一步是制定程序,鼓励安全设计、发布前和发布后的安全审查,以及对安全发现的补救的承诺。

于 2013-11-16T20:04:50.500 回答