由于在很多加密应用中,要求加密后的信息具有抗反向分析(例如,破解者知道明文的前若干
个字符,在此基础上力图反推出密钥,并解密其余的信息)的能力。本文提出了一种等长双向流
式加密算法,经此算法加密的信息,其中的数据有全局的信息相关性,具有极强的抗反向分析以
及差分分析的能力。
算法思路:
将加解密对象看成一个Byte数组A[N]。首先,我们从头到尾对它进行遍历,将每次遇到的元素
的值与前一个元素的值相加,并写回到数组中。即 A[i]+A[i-1] => A[i] (i从2递增到N)。这样
一来,后面元素的密文就直接依赖于之前的元素的值,达到了部分抗分析的目的。不难发现,进
行一遍遍历,只能让数组中下标大的元素对下标小的元素形成依赖,而理想中的情况应该是混合
型的依赖。为了解决这个缺陷,我们很容易的想到了反向遍历——思路与正向遍历相同,只是起
止点颠倒了一下: A[i]+A[i+1] => A[i] (i从N-1递减到1)。经过了正反两次遍历,数组中的每
个元素的值都变得和其它所有元素的值相关了——由此,本算法也就相应的具备了抗反向分析以
及差分分析的能力。
在解决了信息相关性的问题之后,我们接下来需要思考的是,作为一个加密算法,密钥如何被
放置在上面的计算过程中去。首先,我分别在正向遍历和反向遍历中的求和计算过程中加入了一
个长度为一个字节的密钥,于是,加密过程就变成了:
(A[i]+A[i-1]) xor Key1 => A[
个字符,在此基础上力图反推出密钥,并解密其余的信息)的能力。本文提出了一种等长双向流
式加密算法,经此算法加密的信息,其中的数据有全局的信息相关性,具有极强的抗反向分析以
及差分分析的能力。
算法思路:
将加解密对象看成一个Byte数组A[N]。首先,我们从头到尾对它进行遍历,将每次遇到的元素
的值与前一个元素的值相加,并写回到数组中。即 A[i]+A[i-1] => A[i] (i从2递增到N)。这样
一来,后面元素的密文就直接依赖于之前的元素的值,达到了部分抗分析的目的。不难发现,进
行一遍遍历,只能让数组中下标大的元素对下标小的元素形成依赖,而理想中的情况应该是混合
型的依赖。为了解决这个缺陷,我们很容易的想到了反向遍历——思路与正向遍历相同,只是起
止点颠倒了一下: A[i]+A[i+1] => A[i] (i从N-1递减到1)。经过了正反两次遍历,数组中的每
个元素的值都变得和其它所有元素的值相关了——由此,本算法也就相应的具备了抗反向分析以
及差分分析的能力。
在解决了信息相关性的问题之后,我们接下来需要思考的是,作为一个加密算法,密钥如何被
放置在上面的计算过程中去。首先,我分别在正向遍历和反向遍历中的求和计算过程中加入了一
个长度为一个字节的密钥,于是,加密过程就变成了:
(A[i]+A[i-1]) xor Key1 => A[