随笔 - 59, 评论 - 580, 引用 - 50

导航

工具

关于


微软提供的免费计数器

山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,唯吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴,阅金经。无丝竹之乱耳,无案牍之劳形。南阳诸葛庐,西蜀子云亭。
子曰∶“何陋之有?”


My name is BEN.
This is my master's "doghouse". hehe...

标签

每月存档

广告



访客

 

前一阵子看到豆腐基于密码的安全,很多人都在里面进行了讨论,这让我想起来那本我一直很推崇的书《应用密码学》。我记得在以前其它的Blog上面也提到过,甚至可能写了几乎完全相同的内容。不过在博客堂我没有写过类似的内容,在这里再写一遍吧。

我们平常经常都会涉及到加密、解密、签名以及验证等问题,这些都跟密码有关系。密码是一种学问,里面包含了很多的东西。如果我们看到上面那四个问题,我们固然会想到加密算法,比如RSA,DES,BlowFish。所谓加密算法无非就是怎样用一套称为密钥(包含非对称算法的公钥)的东西,将某些信息颠来倒去的过程。这个过程看似神秘,但是实际上这个并不是密码学里面发挥关键作用的东西。当然,算法不好,那么可能很容易通过一些方法进行破解,算法好则相对困难。那么什么是更关键的呢?下面这一大段话则是摘录自《应用密码学》一书第4页:

 

常用的密码分析共计有四类,当然,每一类都假设密码分析者知道所用的加密算法的全部知识:


1、唯密文攻击(ciphertext-only attack)。密码分析者有一些消息密文,这些消息都用同一加密算法加密。密码分析者的任务是恢复尽可能多的明文,或者最好是能推算出加密消息的密钥来,以便可采用相同的密钥解算出其它被加密的消息。……
2、已知密文攻击(known-plaintext attack)。密码分析者不仅可以得到一些消息的密文,而且也知道这些消息的明文。分析者的任务就是用加密信息推出用来加密的密钥或者到处一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。……
3、选择明文攻击(chosen-plaintext attack)。分析者不仅可得到一些消息的密文和相应的明文,而且他们也可选择被加密的明文。这闭一只明文攻击更有效。因为密码分析者能选择特定的明文块去加密,那这些块可能产生更多关于密钥的信息,分析着的任务是推出用来加密消息的密钥或者到处一个算法,此算法可以推用同一密钥加密的任何新的消息进行解密。……
4、自适应选择明文攻击(adaptive-chosen-plaintext attack)。这是选择明文攻击的特殊情况。密码分析者不仅能选择被加密的密文,而且也能给予以前加密的结果修正这个选择。在选取较小的明文块,然后再基于第一块的结果选择另一明文块,以此类推。……

另外还有至少三类其它的密码分析攻击。

5、选择密文攻击(chosen-ciphertext attack)。密码分析者能选择不同的被加密的密文,并可得到对应的解密的明文,例如密码分析者春去一个防篡改的自动解密盒,密码分析者的任务是推出密钥。……。这种攻击主要用于公开密钥算法,……。选择密文攻击有时也可有效的用于对称算法(有时选择明文攻击和选择密文攻击一起称作选择文本攻击(chosen-text attack))。
(注:稍微解释一下,这个攻击的前提是分析者能够获得一个密封的“解密盒”,也就是一个已经固化的、专门用于对用某一个特定密钥加密过的密文进行解密的硬件。攻击的方法就是随机产生一个“伪密文”(不一定是合法的),让解密盒进行解密,从所得到的明文和密文进行比较,得到关于密钥或者算法的相关信息。这种攻击实际上和选择明文攻击相类似(就是它的逆过程),只是明文变成密文肯定能够成功,但是逆过程则不一定成功。同时,一般加密算法的设计对于从加密后的密文里面泄露密钥信息是比较注意的,但是从明文里面泄露消息则考虑得相对较少。此外,如果是非对称加密算法,两个破解方向由于密钥长度的不同,会引起破解难度的巨大差别。因此选择密文攻击很可能得到比选择明文攻击更多的信息。)
6、选择密钥攻击(chosen-key attack)。这种攻击并不表示密码分析者能够选择密钥,它只表示密码分析者具有不同密钥之间的关系的有关知识。这种方法有点奇特和晦涩,不是很实际,……。
7、软磨硬泡攻击(Rubber-hose cryptananlysis)。密码分析者威胁、勒索,或者折磨某人,直到它给出密钥位置。行贿有时称为购买密钥攻击(purchase-key attack)。这些是非常有效的攻击,并且经常是破译算法的最好途径。

已知明文攻击和选择明文攻击比你想象的更常见。密码分析者得到加密的明文消息或者贿赂某人去加密锁选择的消息,这种事情时有所闻。如果你给某大使一则消息,你可能会发现该消息已被加密,并送回他的国家去研究。……。已知明文攻击(甚至选择明文攻击)在第二次世界大战中已被成功地用来破译德国和日本的密码。……

 

看到这里大家也许就会发现了,这里根本就没有讨论到具体某个加密算法。并且可以看到,越后面的攻击对于安全的危害性越大,而跟具体加密算法的强度的关系就越小。换句话说,整个系统的信息安全程度在很大程度上取决于与具体加密算法算法无关的部分。那么这些部分是什么呢?是协议。

协议是一套过程——比如保管密钥和密文的方法,或者交换密文信息或者密钥的步骤等等。协议的内容不一定全部都是和算法或者计算机内部相关的内容,有时候也包含了自然人如何能够接近甚至得到操作的机会或者其它的一些现实当中的事情。如果协议设计得不好的话,将会比较容易受到2-7的攻击,这个时候就不一定取决于加密算法的强度了。就像豆腐基于密码的安全里面提到的攻击,可以认为是3+7的一种混合攻击:首先通过7得到了数据库的访问和修改权限,其次通过3得到了一个已知明文的合法密文,然后修改数据库使得超级用户的密码是自己设定的密码。这里的选择明文攻击根本就不关心具体的密钥是什么,只要得到合法的密文就足够了。当然,如果作者有足够的知识和时间,完全可以破解出这个密钥出来,日后可以随时进行直接的攻击。其实在这本书里面有很多很有趣的例子,说明了协议在密码学里面是多么重要,如果有时间我在节选一下这本书里面的例子,给大家参考参考。

最后我再节选出该书当中对我有“开窍”作用的那么一段话,在第5页下面:

不要忘记Kerckhoffs的假设:如果你的信的密码系统的强度依赖于攻击这不知道算法的内部机理,你注定会失败。如果你相信保持算法的内部秘密避让研究团体公开分析它更能改进密码系统的安全性,那你就错了。如果你认为别人不能返回便溺的代码和你想设计你的算法,那你就太天真了(1994年RC4算法就发生了这种情况——参见17.1节)。最好的算法是那些已经公开的,并经过世界上最好的密码分析家们多年的攻击,但还是不能破译的算法(国家安全局对外保持他们算法的秘密,但他们有世界上最好的密码分析家在内部工作,你却没有。另外,他们互相讨论算法,通过执着的审查已发现工作中的弱点)。

也就是说,我们整个系统的强度应该是假设除了未加密的密钥之外,完全暴露在外界当中的情况下的强度。比如说豆腐基于密码的安全里面提到用用户名作为salt,实际上对于加强整个系统强度的帮助可能是有限的:
1、假如取得数据库的权限相当于取得系统的执行权限甚至调试权限,那么完全有可能通过类似调试的手段手动调用系统的“加密”部分的函数,得到密文结果。
2、或者如果我们得不到这个执行的权限,也可以通过选择明文攻击的方法来进行的破解,就是多注册几个不同的用户,密码一样,找出salt对于最终结果作用的关系。

当然,上面这个想法只是随便想想的,也许实际上也没有更好的办法。我的意思是考虑安全问题的时候如果焦点在算法安全性,或者系统的保密能力上面,那就错了。

相关文章

打印 | 张贴于 2004-08-05 11:30:00 | Tag:其他

留言反馈

#回复: 关于密码的问题 编辑
2007-12-18 05:17:00 | [匿名用户:runescape gold]
#re: 关于密码的问题 编辑
“2、已知密文攻击(known-plaintext attack)。密码分析者不仅可以得到一些消息的密文,而且也知道这些消息的明文。分析者的任务就是用加密信息推出用来加密的密钥或者到处一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。……”

这一点不应该是已经明文攻击吗?分析者已经得到了一些消息的明文,并得到了相对应的密文,他必须利用这些条件来推断出key...
2005-04-13 11:18:00 | [匿名用户:常建昭]
#re: 关于密码的问题 编辑
我想问一下:开机后,出现“用户名、密码”但我们输入以前的名和密码都不对,请问该怎么处理?
2005-03-04 16:17:00 | [匿名用户:岚新]
#re: 关于密码的问题 编辑
搞的我头晕脑涨的!
2004-09-20 22:47:00 | [匿名用户:哑哑]
#re: 关于密码的问题 编辑
软磨硬泡攻击(Rubber-hose cryptananlysis)




呵呵,我怎么觉得那么冷呢?



楼上的说什么?是说MS出什么你就买什么吗?
2004-08-05 16:27:00 | [匿名用户:TommyWOo]
#re: 关于密码的问题 编辑
MS在搞的东东我从来不搞,安全性可以用Money买的,俺们只要知道异或对称加密就OK了。
2004-08-05 11:54:00 | [匿名用户:leighsword]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System