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

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

你可能感兴趣的:(用伪随机数打造坚实的密钥)