随机函数用于加密——组合法

来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:25:58
一般的成见是随机函数不能用于信息加密,不能作为密钥来加密文件。在没有好的方法之前这些观念也许是对的。但事实未必如此,如果能够克服随机函数自身的缺陷,用于加密应该是没有问题的,这里将探索几种方法这是其一。下面介绍应用随机函数加密的方法之一“组合法”。
大家知道调用随机函数可以生成序列值,这些序列值看起来是乱码,实际上是按一定规律变化的,并且是有周期的,这是因为随机函数出自同一运算规则的原因。但是如果将多个随机函数的值用代数运算组合起来情况就不一样了,它将没有明显的特征,如果在代数运算中加入一些“用户密码相关的数值”作为参数那就不好破解了,举两个函数的例子:设有A函数和B函数,Ka和Kb各表示它们的函数序列值中的一个,K1、K2、K3是3个“用户密码相关”的参数,密钥的组成:
                    Ka×K1+Kb×K2+K3
A函数和B函数初值的选择:在函数的值域范围内,使用“用户密码”的衍生值作为初值。用户密码不可过于简单,否则信息量不足,你做出的参数将不能发挥作用或作用不大,所以加密程序要限定用户密码的最少字符数。靠分析法破解会遇到很大的麻烦,虽然随机函数的形式和算法容易从程序里解析出来,但未知数太多,在有未知数的情况里只能靠穷举来弥补,好像杂技演员舞动许多盘子,有一个掉了节目就演砸了。算式虽然简单要模仿穷举这样的算式需要做多少试验呢?设A函数的周期是Ta,B函数的周期是Tb,需要试验 Ta×Tb×K1的取值范围×K2的取值范围×K3的取值范围,这个只是模拟密钥的形成所需要的试验次数估计,如果算式里有些诸如求模等不可逆运算,那要想复现密钥将更加困难。如果周期大的话,试验次数就是天文数字,所以随机函数的周期要选择大一些的,例如周期1018以上,但是周期大的随机函数往往运算复杂,加密速度将受影响,这是程序员需要根据用户要求权衡的事情,要完成试验是遥不可及的事情,不止这些,每做一次试验要判断是否已经得到了正解也是个麻烦的事情,如果明文本身就是乱码,那就没有希望破解了。正解可能出现在试验中但是找出来是不容易的,往往需要分析上下文关系,这也是费时、费力的工作。
再看看靠穷举用户密码的情况,程序运行后显示效验码,首先让用户仿照输入这些效验码,这些效验码以图形方式出现,效验码字符由于采用扭曲变形、杂色、交叉等方式计算机不能有效识别读出这些字符,但用户可以通过联想判断读出效验码,这样就排除了自动运行的穷举攻击,而且效验码也许不止出现在开始,也许出现在其它运算过程中,如果没有人为的干预,是不能进行下去的。勉强输入少量的试解密码,也同样碰到判断解密成功的困难,程序不会为你筛选密码,只要输入格式、密码字节数限制等规则符合要求就开始解密运算了,密码不对当然不能得出正确的结果,并且密文被破坏掉了。由于密码的取值范围是天文数字,加之各种阻碍在有限的时间里不可能完成计算。并且程序有监测功能,如果发现你总是对某个密文进行解密操作超过一定次数它将退出运行。所以穷举用户密码这条路也走不通的。
方法新出难免有各方面的漏洞,希望指正。