用伪随机数打造坚实的密钥

原创 2006年06月14日 15:12:00

      大家知道伪随机是一种分布均匀的周期性数组。所谓分布均匀是指所有可能出现的元素都均匀出现了,并且它的平均值接近于元素的中值。
         伪随机组由随机函数生成,这是一类有趣的东西,有点像振荡器,有几种状态,参数搭配不同可能出现几种状态如输出常数、有规律的数、乱数,对应于振荡器的不起振、谐振、共振。
         
随机数组为什么可以作为密钥。因为它“毫无规律”,杂乱无章,所以其中可以藏污纳垢,隐藏数据,经它参杂后有规律的数据变为无规律。而优秀的伪随机数发生器产生的数组虽然是周期性的但周期很长,它的局部也是杂乱无章的,而且发生器多种多样的,我们假定窃密者已经掌握了正在使用的伪随机数组,而我们要用它做密钥,我们怎么做呢?
        很简单,只要用法得当即可。应该选择周期长的发生器,例如使用伪随机数组的长度最好不要大于数组的周期,且不直接引用,而使用数组元素的代数运算值作为密钥,如果所需数组的长度大于周期你可以这样:1)使用叠加的方式破坏周期加大数组的组合长度,例如周期为T,伪随机数组串为ch[],这样使用他们,密钥=ch[n1]+ch[n2],循环时n1=n1+1,n2不变,当n1>T时,n1=0,n2=n2+1,这样就可以使T变为T*T,这是简单说明,实际应用时还要加些东西。2)在伪随机数组形成时,选择性吸收,并不是按原序列排列。你可能说这些都可以从分析程序中知道,是啊,重要的是利用加密密码(password)使伪随机数种子和引用的起点和密钥组合及拣选组员等悬浮起来,这样就使分析处于不确定中。
        不要单独实用数组,那样比较危险,破解者形成数组后,拼来拼去可能泄密,要一个明文对应两个以上的密钥,最好是两个密钥是来自两个函数,在用作密钥时,起点都让其不确定,例如起点与密码相关,这样就比较安全,拿一个数组拼没有用,只有两个同时用,并且组合正确才行,那就比较困难了。

相关文章推荐

生成伪随机数.rar

  • 2010年07月02日 13:55
  • 35KB
  • 下载

伪随机数的生成

  • 2013年10月16日 13:31
  • 1KB
  • 下载

产生伪随机数两种常用算法

我们讲的随机数其实暗指伪随机数。不少朋友可能想到C语言的rand(),可惜这个函数产生的随机数随机性非常差,而且速度很慢,相信几乎不能胜任一般的应用。 古老的LCG(linear congruent...

伪随机数发生器的FPGA实现与研究

  • 2016年06月05日 23:50
  • 200KB
  • 下载

使用线性同余法生成伪随机数/序列(C++实现)

计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要方法和参数选择合适,所产生的...

ctr_drbg伪随机数发生器

  • 2017年02月16日 09:55
  • 1.07MB
  • 下载

伪随机数列

  • 2014年06月11日 01:41
  • 1.03MB
  • 下载

从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)

通过这篇短文想说明两个道理: 1. 看似高大上、神秘兮兮的算法,都是paper tiger; 2. 计算机的计算方式(动辄几Ghz的主频)简直就是为蒙特卡洛度身定做;...

伪随机数产生基于MFC

  • 2011年09月02日 12:34
  • 33KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用伪随机数打造坚实的密钥
举报原因:
原因补充:

(最多只允许输入30个字)