用随机函数生成无周期随机序列(数组)

  随机函数生成的随机数是有周期、有规律的(源于同样的算式)。用随机函数辅助生成没有周期、没有规律的(或者很难找到规律)序列值是很有意义的,密码学需要这样的序列(数组)。

  方法很简单,选择一个性能优良的随机函数,所谓性能优良是指函数生成的数组元素分布均匀,能通过各项随机数指标的检测。例如我们需要N个元素的随机序列,先用函数产生一个N个元素的伪随机序列,然后选择一个种子用随机函数的生成值对伪随机序列进行随机排序,当然还可以选择另一个种子用随机函数的生成值对随机序列继续进行随机排序...,最后得到我们所要的随机数组。这个数组虽然随机性很好但却是可控的,使用者很容易再造它们,而窃密者却很难得到。

  其实此种方法依据的是熵增加原理(热力学第二定律),随机排序只能增加序列的混乱程度而不能使其越来越秩序化。举例说明,假设一个锅里放着各种颜色的沙子,红的、蓝的、黄的...,当你用铲子搅拌它们时,只能越来越混乱,而不能相反,单颜色沙子的浓度只能从大向小变化而不能相反,最后达到平衡。对序列排序就相当于搅拌它们,所以只能越来越混乱,最后达到均匀分布。

  假如有人想复现这个数组需要怎么做呢?假设随机函数的周期是T,模仿上面的过程,随机函数可以看成是一个长度为T的首尾相接的序列数组,要从中选择N个连续排列的元素,免不了要进行T次尝试,对应于每次尝试得到的数组,进行随机排序,我们知道随机函数的种子的取值可能有T个数值,这样一遍随机排序总的试验次数就有T×T次了,如果两遍就是T×T×T次,如果三遍就是T×T×T×T次...,这只是粗略的计算,可以看出如果T很大试验次数是惊人的。再者最终的随机数组也不会摆在那里等着你去复现它,往往和明文纠缠在一起,以密文的方式出现。在建造数组时有许多选择,主要是随机函数的种子和参数,如何选择它们而又能丰富多彩,只要将它们和用户密码联系起来就可以了,最好从用户密码单向的、不可逆算出各种需要的参数投入使用。上面举例是用一个随机函数,如果使用多个随机函数情况要复杂得多。

  即使完全掌握了数组的形成方式和所有细节也不能再造数组,这是因为在数组形成过程中有未知量的加入,未知量来自用户密码和自动加盐技术等,再说一遍用户密码并不直接参与运算,而是用它进行不可逆运算后的衍生值。

  如果建造数组的过程也是随机的将大大提高破解难度,我们知道对数组进行一次随机排序后,数组将得到脱胎换骨的改造,如果建造过程这样设计,当用户密码符合某条件时,增加进行某种随机排序,这样过程也是不确定的,想跟踪复现数组将非常困难。

  用此种方法建造的随机序列,能不能当做加密密钥?是否可靠?有什么缺陷?如何能够破解?欢迎大家讨论。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值