如何使用SHA加密敏感的数据

日期: 2008-05-15 作者:Michael Cobb 来源:TechTarget中国 英文

问:当处理一个订单的时候,我们必须要进行搜索,把呈报的信用卡号码与第三方提供的热卡(失窃的或者封锁的卡)列表进行对照。根据支付卡行业数据安全标准,即使一个卡在这个列表上,我们也不能把这个卡的号码不进行任何加密处理就放在那里。我们正在考虑使用SHA-1(安全散列算法-1)把这些号码转换为它们的散列值,然后在我们处理一项支付的时候再进行对比。我们喜欢SHA-1,因为它不需要任何密钥管理功能。

然而,我们担心散列值冲突或者误报问题,所谓误报就是错误地把好卡识别为热卡。像这样使用SHA-1是不是一种好方法?   答:使用SHA-1创建信用卡号码的散列值以避免用明文形式存储信用卡是一种好方法。此外,由于散……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:当处理一个订单的时候,我们必须要进行搜索,把呈报的信用卡号码与第三方提供的热卡(失窃的或者封锁的卡)列表进行对照。根据支付卡行业数据安全标准,即使一个卡在这个列表上,我们也不能把这个卡的号码不进行任何加密处理就放在那里。我们正在考虑使用SHA-1(安全散列算法-1)把这些号码转换为它们的散列值,然后在我们处理一项支付的时候再进行对比。我们喜欢SHA-1,因为它不需要任何密钥管理功能。然而,我们担心散列值冲突或者误报问题,所谓误报就是错误地把好卡识别为热卡。像这样使用SHA-1是不是一种好方法?

  答:使用SHA-1创建信用卡号码的散列值以避免用明文形式存储信用卡是一种好方法。此外,由于散列值冲突的机会很少,你不可能得到误报。让我们看一下SHA-1和在这种情况下使用它为什么是安全的。

  安全散列算法(SHA)家族是由这种算法设计的一套相关的密码散列功能,能够根据任何种类的数据创建一个散列值,这些数据包括文件、口令和本案中的信用卡号码。这个值实际上对于输入的数据来说是独一无二的,因此,由于雪崩效应(avalanche effect),数据中很小的变化都会导致出现完全不同的散列值。此外,没有切实可行的方法计算一个将导致一个理想的散列值的特定的数据输入,因此使用这个散列值恢复原来的数据是不可能的。这个家族中最常用的功能是SHA-1。各种流行的安全设备和协议都使用SHA-1,如SSL、PGP、S/MIME和IPsec等。

  你担心的散列值冲突问题可能是2005年8月份发生的一次攻击的结果。那种攻击需要低于2^63(9,223,372,036,854,780,000)的散列值计算以发现在完整版本的SHA-1中的冲突。一个冲突意味着两块数据有同样的散列值。这种攻击需要的计算复杂性低于蛮力搜索冲突。蛮力搜索需要2^80计算。根据学术密码学,这可以认为是一种安全突破。虽然一些观察人士担心大规模分布式互联网搜索可能发现SHA-1的冲突,但是,这并不意味着这种攻击是实际上可以利用的。不管怎样,有趣的是需要指出,在2005年9月,微软宣布它在任何功能中都将停止使用DES、MD4、MD5和SHA-1加密算法。

  这样,为什么使用SHA-1加密你的信用卡号码仍是安全的呢?因为两个信用卡号码的散列值相同的机会是非常小的,你不可能发现一个好卡和坏卡的散列值是一样的,从而排除了误报的可能性。此外,这种攻击是一种冲突(collision)攻击,而不是pre-image攻击。正如我以前指出的那样,冲突攻击是找到拥有同样的散列值的两块数据,但是,攻击者并不知道这个散列值是什么,因此就不能破解使用SHA-1检查数据散列值变化的工具。另一方面,pre-image攻击能够让攻击者找到一个坏的信用卡号码。这个号码能够让散列值功能产生一个非法的信用卡的散列值。然而,因为你在使用一个黑名单,攻击者不能利用这个功能,因为这个对比过程能发现黑名单上的坏卡号码。

  如果你仍然感到担心,你可以考虑使用SHA-224、SHA-256、SHA-384或者SHA512。有时候,这些方法统称为SHA-2。然而,这需要额外的存储空间,因为SHA-1创建的散列值的大小的160字节,而SHA-224创建的散列值是224个字节。另外,对比的过程也要慢一些。

相关推荐