sjdkx的个人博客分享 http://blog.sciencenet.cn/u/sjdkx

博文

新型随机函数的制作

已有 2178 次阅读 2015-3-9 19:51 |个人分类:密码学相关|系统分类:科研笔记| 新型随机函数, 随机排序

  新型随机函数和以往的随机函数一样的地方是:使用时需要首先设置种子,每次调用得到一个数据,输出的是一些乱码。
  不同之处是这种随机函数输出的数据之间是没有关联的,你不能用连续几个输出值推算其计算公式,这是因为它生成方式所致,它没有公式你也推导不出来。
  以往的随机函数是由算式生成的,所以它的数据是由算法关联起来的,可能是线性关联甚至高维度的关联。
  新函数是采用构造法生成随机数的,现在基本数据是字节,别的结构可以用字节来组合,所以就单说以字节为单位的随机函数,它的元素是 0至 255共256个,构造法是这样运作的,例如要建造256×N长度的随机数组,所要材料是256×N个元素,一般需要元素分布均匀,所以每种元素取N个,将这些元素组成一个数组,初始状态如何都没关系,然后对这个数组进行随机排序,随机排序就是让数组内的元素位置随机的交换,一般可以用循环来完成,例如256×N的长度,用一个循环变量i,从头到尾的循环,另外随机的在256×N中选择一个位置,用这个位置的元素和第i个元素进行交换,这样循环一次每个元素都被交换了,交换完成后新的顺序建立了,生成了新的数组。从256×N中选择位置的操作可以用其它随机函数来完成,也可以拼凑一些随机性较强的变数来完成。一遍随机排序不理想可以进行多遍,一般借助于优秀的随机函数一遍就够了。这样子一下子就生成了一个长度为256×N的数组。如果借助于其它随机函数那么其需要的种子也就是此种生成方式的种子了,否则其中生成随机位置的参数等将作为种子。
  新型随机函数数据的生成机制上面已经说了,为了照顾到应用习惯,模拟老式随机函数的使用方式。方法是你可以生成一定数量随机数据,函数每调用一次输出一个数据,用完后继续生成新的,这样函数就形成了。具体细节是每次生成的量不可过小,要大于元素总和数的数倍,为了均匀一般是整数倍,为什么呢?可以这样看,例如这个量是由256个不同元素组成,那将出现一个问题,我们的输出可能是每次不相同的元素,可能连续256次都有此特点,这显然是让数组有了某些规律性,所以生成量要更大些才能消除这个规律。
  新型随机函数的随机性比老式的要更好些,它是数据混合均匀后的输出,什么数据都是等概率的,也可能输出的是零值,一般随机函数没有此特性。
  现在的输出数据是无符号字节数组,很容易变成其它形式,例如做32位无符号整形数组,只要每次取四个无符号字节就可以组合。
  基本的新函数已经做出性能还是不错的,并且生成速度可达到每秒几十兆字节。
  新函数还没有名称随便征求一下。由于还没有见到类似的随机数生成方式,所以暂时可称其为“构造随机函数”或“乱排随机函数”。
  此种方法的理论基础是热力学第二定律——熵增加原理,当我们以多种方式影响数组的序列时,数组将向着更加混乱的方向发展而不可能相反。
  虽然此种方式可以完全不利用任何随机函数,但利用随机函数可以使工作效率增高。所以本方法也可以看成是随机函数的改良方式,主要益处是生成的数据之间没有连带关系,所以适合于做信息加密中的密钥数组。
  即便是最简单的随机函数例如C语言中的rand(),它的运算只是一乘一加,用此来制作乱排函数也能得到一个性能优良的输出,原来数据间的关联不见了,周期大大的提高了,原来周期只有16M,现在至少大于10G(短时间测算)。
  如果是性能优良的随机函数其改造为乱排函数后,性能更加优良,直接用作密钥是能够胜任的,对于这样的无规律数据发生器破解者毫无办法。
  如何控制乱排函数,当然是用户密码,可以在原始数组阶段参与控制,也可以在随机排序部分参与控制是相当灵活的,多少字节的用户密码都可以被充分利用上。这是分组密码所没有的优势,后者只能使用有限的那几位所以相当虚弱。
  即便到了量子计算机时代,如果密钥是独立未知数也照样不能破解,这是肯定的。这一点很容易证明。
  

 

 

 



https://blog.sciencenet.cn/blog-251800-873224.html


下一篇:大众密码学
收藏 IP: 60.0.142.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-9 12:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部