找回密码
 新注册用户
搜索
查看: 4216|回复: 9

DistrRTgen、SHA-1 Collision Search Graz第二讲-我们真正怕的是什么?

[复制链接]
发表于 2011-9-27 13:26:07 | 显示全部楼层 |阅读模式
本帖最后由 snowyleaf 于 2011-9-29 00:25 编辑

(申明:本系列讲座内容大量使用互联网公开文献,为便于理解可能会对原文内容、行文方式进行不同程度的修改。本系列讲座为的是普及科学知识,传播先进技术,不涉及任何商业成分。再此对所有互联网公开文献作者致以崇高的敬意!)

首先简单的讲一下Hash算法和他的通途!
Hash算法不管是MD5也好SHA1也好. 他们都是一种散列算法,其算法的特点是,可以把任意长度的字符串经过运算生成固定长度的字符串,并且这个产生的字符串代表着原来字符串里的所有字符。
简单的举个例子:
admin 运算后后:
16位8f00b204e9800998
32位d41d8cd98f00b204e9800998ecf8427e

其中不管是16位也好,32位也好其生成的字符串8f00b204e9800998 (16bit)或者d41d8cd98f00b204e9800998ecf8427e(32bit)他们表示着admin这个原始字符串。只要admin这个字符串没有变,不管怎样重复使用MD5或者SHA1进行重新运算,其结果保持不变。利用这个特点,在计算机安全学上,我们使用这种算法来保证数据完整性(Integrity)。

显而易见Hash算法,是用来保证 Integrity的算法。什么叫做完整性,不单单指数据不丢失,并且要保证数据没有被非法修改过。举个简单的例子。

比如:A 发了一个Email给B内容为"Hello",因为我们目前使用的以太网的特点,任何人在网络上都有可能截获这封Email,任何人都有可能,修改Hello这个字符串。那么当B收到这封A发来的Email的时候,怎么确定这封Email在传送过程中没有被修改过呢? 我们就使用了Hash算法来保证数据的完整性。他的工作方式是这样的:
1.A写一封Email内容为Hello
2.A用Hash算法对Hello进行编码(这里我用了编码,没有用加密这个词)
3.A将原始Email Hello 以及经过Hash算法编码过后的digest(原始Email的摘要信息)一起发送给B(因此,A给B发的Email由2部分组成,1是原始的Hello,2是经过Hash编码的摘要信息)
4.B接收到了A的Email,首先分离由2部分组成的邮件。
5.B通过Hash算法,根据收到的Email的内容,重新计算出该Email的摘要信息.
6.B将自己计算出的摘要信息和收到的摘要信息进行比较,如果比较结果一样,则认为这封Email在中途没有被修改过,否则的话,这封Email在中途一定被修改过,因此内容不可信。

至此,保证了原始数据的完整性。

SHA1和MD5等Hash算法,在设计时候,设计这个算法的人认为不同的字符串要产生相同结果的摘要信息的可能性几乎为零。而王教授则证明了SHA1和MD5等Hash算法产生的摘要信息规则是可以在比较短时间内被破解的。这样一来,原始数据的 Integrity 就被打破了。 所谓的破解,也就是体现在这里。

还是继续前面的例子:C截获A给B写的这个Hello的Email,然后通过王教授的碰撞法,得到Fuck***这个字符串的摘要信息和Hello这个这个字符串产生的摘要信息是一样的。因此当B收到C冒充A发来的Email内容为Fuck***的邮件。 B将认为这是A发来的Email,并且没有被修改过!

当然或许很多人认为这或许只是一个恶作剧或许玩笑。那么下面简单的介绍一下在特定情况下,怎么利用给定的碰撞来做坏事(翻译自Attacking Hash Functions):

Caesar给实习生Alice叫写了一封推荐信(letter)。同一天,Alice叫Caesar在推荐信上数字签名,并提供了一份推荐信的电子板。Caesar打开文件,发现和原件一模一样。所以他在文件上签了名。几个月后,Caesar发现他的秘密文件被非法察看。这到底是怎么回事呢?
事实上,Alice要求Caesar签名的文件letter已经被Alice做了手脚,准确地说,Alice还准备了另外一个文件order,它们的MD5码完全一致。而Caesar的数字签名还依赖于MD5算法,所以Alice用order文件替换Letter文件之后,Caesar的数字签名依然有效。那封order给Alice提供了察看秘密文件的权限。

如果把这个“查看秘密文件的权限”换成“任意从银行账户里提款”大家会不会感到一丝丝的害怕呢?
当然大家可以稍微放心的是现在的银行系统已经不再使用MD5哈希算法,而对于SHA-1的碰撞破解也暂时只是停留在理论阶段。
就算SHA-1 Collision Search Graz取得突破性进展,SHA-2也依然能在未来较长的一段时间内保证信息传递的完整性。


看到这里,大家可能都会发现自己目前在使用Hash算法的目的都是和Hash算法本身的设计目的不一样的。


很多开发者,他们为了实现向客户承诺的所谓的 Pravicy,他们在开发Web base应用的时候,使用了Hash算法。这样他们会对使用他们Webbase的应用的用户说:"你们在我这里的登陆密码是安全的,没有人能够知道。" 看上去好像想得很周到,其实,仔细想想,光光使用这种方法,如何保证用户的Pravicy呢? 说白了,就是形同虚设。这样做的最终结果最多最多就是能够让使用的这个软件的人放心。
放心什么呢?放心的就是他们在你的软件里面所保存的密码,其他人不能获得。除此之外,没有其他任何价值。
如果一定要说出其他的价值的话。也就是如果数据库泄密的话,得到这个数据库的人,只能得到密码的哈希值,无法从数据库中获得那些客户的密码明文。


但是,大家想想清楚,我都获得了数据库的数据,我还需要那些密码干什么呢?
更何况在这种情况下,拿到了实际上用于比对的哈希值和拿到密码明文有什么太大的区别吗?
无非是用密码明文可以直接登录,而使用哈希值登录要跳过默认需要进行的哈希计算而已。

评分

参与人数 1基本分 +50 收起 理由
Youth + 50 精品文章

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-9-27 17:15:14 | 显示全部楼层
已经更新。。。
回复

使用道具 举报

 楼主| 发表于 2011-9-28 13:03:02 | 显示全部楼层
没人回复  我感到很伤心
回复

使用道具 举报

发表于 2011-9-28 13:20:42 | 显示全部楼层
我在想,要怎样才能做到保证用户的Pravicy?
先是sony被X了,之前kernel.org也被X了,真是……
回复

使用道具 举报

发表于 2011-9-28 14:25:19 | 显示全部楼层
期待后面的
回复

使用道具 举报

 楼主| 发表于 2011-9-29 00:35:13 | 显示全部楼层
期待后面的
zglloo 发表于 2011-9-28 14:25



    你们的期待 是我继续发文的动力啊
回复

使用道具 举报

 楼主| 发表于 2011-9-29 00:37:27 | 显示全部楼层
我在想,要怎样才能做到保证用户的Pravicy?
先是sony被X了,之前kernel.org也被X了,真是…… ...
jpegreader 发表于 2011-9-28 13:20


似乎 网银 还没有被 严重的X过
不知道对这个 离生活很近 的东西
大家有兴趣 想进一步了解不
回复

使用道具 举报

发表于 2011-9-29 09:58:44 | 显示全部楼层
感谢楼主科普。
回复

使用道具 举报

发表于 2011-9-29 21:59:41 | 显示全部楼层
回复 7# snowyleaf
密码加密是一个方面,现在网银貌似有几重加密吧?线路传输加密这是毋庸置疑的,密码哈希加密,貌似还有密码同步密钥,就是一个每隔一段时间就更换一次密码的小LED牌子(像电子表那样的),不知道这些是不是都能保护账户不被侵入。还是说黑客根本不在意这些,直接连接入网银窃取数据呢?
回复

使用道具 举报

发表于 2011-9-30 00:38:30 | 显示全部楼层
感谢楼主的分享。 人才啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-9-23 12:21

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表