moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1173回复:0

PGP的安全问题分析<四>

楼主#
更多 发布于:2002-05-25 17:12
PGP的安全问题分析<四>
2000-08-18? loking?105安全中心

--------------------------------------------------------------------------------

  口令长度和信息论

  根据传统信息论,英语的每个8-bits字母的信息熵为1.3bits。如果口令足够长,MD5的结果就会足够随机。对 128-bits 的MD5输出来说,一个长达98个字符的口令将给出一个随机的密匙。

  (8/1.3)*(128/8) = 98.46 chars

  可是谁会用一个象下面这样长的口令呢?

  12345678901234567890123456789012345678901235678901234567890
  1234567890123456789012345678

  1.3 bits 的信息熵来自于英语语法的规律性这个事实,字母出现概率的不等造成了熵的减小。如果26个拉丁字母出现的概率均等,信息熵将会增至log(26)/log(2) = 4.7 bits

  这样一个随机密匙所需口令长度就减为 27.23 chars 了,如果再加上大小写和几个符号还可以减少。关于选择口令的问题可以参考任何关于安全性的书籍,它们都适用,上面是关于PGP本身特色的部分。


  随机数的安全性问题


  PGP使用两个伪随机数发生器(PRNG),一个是ANSI X9.17发生器,另一个是从用户击键的时间和序列中计算熵值从而引入随机性。ANSI X9.17 PRNG使用IDEA而不是 3DES 来产生随机数种子。

  Randseed.bin 文件最初是利用用户击键信息产生的,每次加密前后都会引入新的随机数,而且随机数种子本身也是加密存放的。


  ANSI X9.17 PRNG

  官方发布的 ANSI X9.17 标准使用的是 Triple DES 作为内核,这个很容易改用IDEA实现。 X9.17 需要randseed.bin中的 24 bytes 的随机数,PGP把其他384 bytes用来存放其他信息。X19.7 工作过程大致如下:

  E() = IDEA 加密函数,使用一个可复用的密匙(使用明文产生)。
  T = 从 randseed.bin 文件中来的时间
  V = 初始化向量
  R = 生成的随机密匙(用来加密一次PGP明文)

  R = E[E(T) XOR V]

  下一次的初始化向量计算如下:

  V = E[E(T) XOR R]

  用户击键引入随机性

  这是真正的随机数,没有什么好说的,只是尽量使击键无规则就行。输入的熵越大输出的随机数的熵就越大。

  X9.17 用MD5进行预洗

  洗 所谓“洗”就是指象洗牌一样把数据打乱,加密前叫预洗,加密后为下一次加密的 准备叫后洗。PGP的日常随机数产生器 X19.7 是用明文的MD5值来预洗的,它基于攻击者不知道明文这样一个假设。如果攻击者知道明文他就没有太大必要去攻击了,当然也 有这种可能,不过这只是会削弱一点PRNG的随机性罢了。下面我们将看到还有后洗操作。

  randseed.bin 的后洗操作

  后洗操作被认为是更安全的。更多的随机字节被用来重新初始化 randseed.bin 文 件,它们被用当前的随机临时PGP密匙来加密。同样如果攻击者知道这个密匙,他就不用 攻击 randseed.bin 文件,相反他更关心 randseed.bin 文件当前的状态,因为可能从 中获得下次加密的部分信息。因此对 randseed.bin 文件的保护和公匙环及私匙环文件 同样重要。当然,如果不是密码专家这些文件都给他也没事。
 

按第一贴的“给分”键,给分。
游客

返回顶部