Security 加密信用卡数据的最先进算法是什么

Security 加密信用卡数据的最先进算法是什么,security,encryption,Security,Encryption,我们有保存信用卡数据的业务要求。今天(2013年11月)最先进的加密信用卡数据的算法是什么? 此外,我希望有人能指点实现这些算法的Java库 请注意,我们是PCI兼容的,并且已经存储了信用卡数据。我正在做一项评估,以确保我们的加密方法仍然是最先进的我最近刚刚离开信用卡行业,作为一名开发人员,在非PCI兼容领域从事安全工作。BCrypt是一个不错的选择。它允许一个单向散列以及一个工作参数,强制每次尝试花费时间。这允许您停止暴力攻击。我将使用ISO/IEC 18033批准的分组密码之一:AES、Ca

我们有保存信用卡数据的业务要求。今天(2013年11月)最先进的加密信用卡数据的算法是什么? 此外,我希望有人能指点实现这些算法的Java库


请注意,我们是PCI兼容的,并且已经存储了信用卡数据。我正在做一项评估,以确保我们的加密方法仍然是最先进的

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

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


AES256很难出错。

请继续使用AES256,但请确保选择正确的模式。我不同意“AES256很难出错”的评论。请查看-

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

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


若不想回复运行应用程序的服务器上可用的这些JCE文件,请签出

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

有几个库试图为您捆绑所有这些详细信息,以便您只需发出大多数人都希望发出的愚蠢的“请加密此数据”呼叫。我为iOS维护了一个。有许多这种格式到其他语言的端口,包括一个名为的Java实现

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

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


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

我应该澄清我们需要解密信用卡数据。我的理解是BCrypt是一种单向散列算法,thsu不能满足我们的要求。在什么情况下需要解密?如果有人进行平衡检查,一种解决方案是对输入进行散列,并与DB存储的散列进行比较以找到匹配项。bcrypt的另一个好处是,由于时间的原因,加密相同的值总是会产生不同的散列;但是,仍然有一些方法可以匹配。如果仍然不想使用bcrypt,可以使用AES。然而,在我们公司,我们改为bcrypt。我们将原始卡号保存在一个只能在内部访问的数据仓库中,并为我们的安全官员提供一个安全密码。所有其他系统都在另一个表中使用哈希。我们是PCI级别1…我们需要对信用卡号进行解密,以获得明文中的原始值(而不仅仅是通过比较散列进行密码验证)。这只在内部使用。只需确保使用足够的回合。