基于中国剩余定理的加密算法初探
张 炯
摘 要 中国剩余定理(亦名孙子定理),是数论中最重要的基本定理之一,刻画了剩余系的结构.以此为理论基础,定义剩余系中每个数在m_1,…,m_k下的权重,从而使剩余系中的元素构成偏序关系,并且可以建立与一次同余方程组的解的一一对应关系. 本文应用这一定义及其性质设计实现两则加密算法,并分析了算法的计算复杂性.通过实验,有效验证了算法性能,并根据实测数据分析比较了这两则加密算法的优缺点.作者所设计的加密算法,不同于近现代主流的加密算法设计思路,有加解密速度较快,结合具体设计能形成较多实用加密算法等特点.
关键词 中国剩余定理;剩余系;加密;算法;
Encryption scheme study based on the Chinese remainder theorem
ZHANG Jiong
Abstract Chinese remainder theorem,the one of most important basic theorem in number theory, describe the structure of residue system.As infrastructure of the theory of this paper,author define the weight for every number in residue system under m_1,…,m_k,as a result,establish partial orders on it,also,build a mapping of each number onto the solutions of linear congruence equations.the property of the defination was used to design and realize two pieces of encryption scheme, subsequently analyzed the computational complexity of the two.Then author validated the performance of these algorithms by experiment and point out the good and bad of the two scheme.The design idea was different from others of modern encryption scheme,fast and lots of derivatives is its characteristics.
Keywords Chinese remainder theorem; residue system;encrypt;algorithm;
引言
中国剩余定理,是数论中最重要的基本定理之一.大约在公元5~6世纪,中国南北朝时期有一部著名的算术著作《孙子算经》,其中有这样一个”物不知其数”问题:”今有物,不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?这就是要求一次同余方程组
{█(x ≡2(mod 3),@x ≡3(mod 5),@x≡2(mod 7).)┤
的正整数解. 因此中国剩余定理也称孙子定理[1].后来中国还有一些数学家对此加以研究,其中最突出的有南宋数学家秦九韶,在总结前人成果的基础上,提出”大衍总数术”,从而给出了求解一次同余方程组的一般方法,并将这种方法称为”大衍求一术”.
随着人们对于信息技术不断提出更高的需求,信息技术中的各个领域都得到了极大的发展,加密算法领域亦是如此.现代加密算法大致可分为三类:分组密码、公钥密码和序列密码.分组密码是指对固定长度的一组明文进行加密的一种加密算法[2].代表性的分组加密算法有,Feistel加密算法、IDEA加密算法、Rijndael算法等;当保密通信进入计算机网络时代,传统密码便逐渐暴露出它固有的弱点:加解密使用同样的密钥,这样便带来一系列问题,(1)密钥应通过秘密信道私下约定.(2)当多用户通信时,密钥的管理可能成为一件很复杂的事情.于是公钥密码(也称非对称密码)应运而生,它有效的解决了以上问题,代表性的算法有由Rivest、Shamir和Adleman联合提出的简称为RSA公钥密码系统;而序列密码是基于这样的出发点设计的:Shannon证明,一次一密密码体制是不可破的.
而本文提出两种基于中国剩余定理设计实现的密码算法.具有算法设计简单,算法中参数可以灵活配置等优点.而其中前一种算法的计算复杂性相对RSA算法很低,可以实现对较大文件的快速加解密计算.
理论准备及相关定理
在给出定理之前,先引进同余方程组的解与解数的概念.设f_j (x)是整系数多项式(1≤j≤k).我们把含有变数x的一组同余式
f_j (x)≡0(mod m_j), 1≤j≤k, (1)
称为同余方程组.若整数c同时满足
f_j (c)≡0(mod m_j), 1≤j≤k,
则称c是同余方程组(1)的解,显见,这时同余类
c mod m, m = [m_1,…,m_k] (2)
中的任一整数也是同余方程组(1)的解,我们把这些解都看作是相同的,也常说同余类(2)是同余方程组的一个解,我们写为:
x ≡ c(mod m)
是同余方程组(1)的解。当c_1,c_2均为同余方程组(1)的解且对模m不同余时才把它们看作是同余方程组(1)的不同的解.我们把所有对模m两两不同余的同余方程组(1)的解的个数称为是同余方程组(1)的解数[1].
定理1(孙子定理) 设m_1,…,m_k是两两既约的正整数.那么,对任意整数a_1,…,a_k,一次同余方程组
x ≡ a_j(mod m_j), 1≤j≤k (3)
必有解,且解数为1.事实上,同余方程组(3)的解是
x ≡ M_1 M_1^(-1) a_1+…+M_k M_k^(-1) a_k(mod m), (4)
这里m=m_1,…,m_k,m=m_j M_j(1≤j≤k),以及M_k^(-1) 是满足
M_j M_j^(-1)≡ 1(mod m),1≤j≤k (5)
的一个整数(即是M_j对模m_j的逆)[1].
孙子定理实质上刻画了剩余系的结构.设
c = M_1 M_1^(-1) a_1+…+M_k M_k^(-1) a_k (6)
c^’= M_1 M_1^(-1) a_1^’+…+M_k M_k^(-1) a_k^’ (7)
下面证明:
c ≡ c^’(mod m) (8)
的充要条件是
a_j ≡ a_j^’(mod m_j), 1≤j≤k. (9)
证明. 先证明必要性,即(8)式推出(9)式.由(8)式得
c = km + c^’
代入(6)式得
km + c^’= M_1 M_1^(-1) a_1+…+M_k M_k^(-1) a_k (10)
减去(7)式得
km = M_1 M_1^(-1) (a_1-a_1^’)+…+M_k M_k^(-1) (a_k-a_k^’)
由于式(5)及m_i︱M_j , i≠j ,就推出
0≡km(mod m_j)= M_j M_j^(-1) (a_j-a_j^’)(mod m_j)
所以有(9)式成立.
同样的方法可证明充分性,即(9)式推出(8)式.证毕.
根据以上命题及孙子定理立即推出:
定理2 设m_1,…,m_k,m,M_1,…〖,M〗_k,
M_1^(-1),…,M_k^(-1)同定理1。再设
x ≡ M_1 M_1^(-1) x^((1))+…+M_k M_k^(-1) x^((k)).
那么,x遍历模m的完全剩余系的充要条件是x^((j))分别遍历模m_j的完全剩余系.此外还有
x ≡〖 x〗^((j)) (mod m_j), 1≤j≤k.
以上结论将成为加密算法设计的出发点和理论保证[1].
算法设计与复杂性分析
根据上节所述之定理2的内容,如果建立x到x^((j))之间的一一映射关系,那么也就是意味着建立了明文到密文之间的映射关系.于是引出如下定义.
定义 w_j=x^((j)) m_(j-1)…m_1,等式右侧符号意义同定理2; w=∑_(j=1)^k▒w_j ..
令x、w分别表示明文和密文在线性存储介质上的存储位置(x意义同定理2).显见,x的每个值都对应一个w的值,反之亦然.这样就在x和w之间,在模m的意义下,建立起了一个一一映射的关系.这样的一一映射关系有以下性质:
性质 1由于x和w之间是一一映射的.就保证映射的均匀性和逆向可解性,即可以进行加密和解密.
性质 2〖 序列m〗_1,…,m_k的排列顺序的改变将改变x和w之间的对应关系.例如,对于k = 128时,将有128!种排列,对于一个长度大于max(m_j)的一段明文,将对应128!种可能的密文.因此这样的密文已较难破解了.
根据以上定义和性质,本人设计了两种加密算法,分别叙述如下.
加密算法1
设待加密文件长度为L,对其做素因子分解,如果其因子数量过少,可以令L^’= L + d,并对L^’做素因子分解.以上过程可以重复多次,直到得到较为满意的素因子数量为止.假设L^’的素因子数量为k,则这k个素因子相当于孙子定理中的m_1,…,m_k.那么利用这些素因子,运用孙子定理便可对长度为L^’的文件进行加密处理.算法描述如下:
初始化变量j = k – 1;
当j ≠ 0时,j = j – 1,对i小于m_j计算w和x的部分和,并将j,w和x作为参数,重复该过程;
当j = 0时,计算w和x,并将明文中x位置的内容赋值到密文中w位置;
不难看出,该算法是对k的递归算法,所以计算时,递归深度最大为k;整个加密算法将做2L^’次加法和L^’次赋值操作.
加密算法2
预先计算出k(假设k≥64,这样将保证有足够的加密强度)个素因子,记为: m_1,…,m_k并保存.
对于一段明文,设x表示其中某个字符的位置,则容易计算〖 x〗^((j))进而可以计算出w.这样,将明文按w值的大小重新排序并保存便得到了密文.算法描述如下:
建立明文与密文之间的映射表.设该表以数组形式保存,建表时采用二分法查找并确定下一元素的插入位置.因此,设明文长度为L,则总查找次数不大于∑(j=1)^L▒log_2^j .但是将进行大概Ο(∑(j=1)^L▒〖(j⁄2+ 1)〗)次赋值操作.
查表生成密文.
以上两例算法均基于孙子定理.第一种算法计算量小,加密速度快,但k值(即素因数个数)较小,且素因数和文件长度相关,如不采用其它方法加强其保密性,密文将较容易被攻破.而第二种算法克服了这些缺点,但计算量较大.
实验结果
以下实验结果在Intel i5 520 处理器,4G内存的机器上测得.
在图表1中,横坐标表示待加密数据块大小,纵坐标表示相应的执行用时.可以看出,算法2随着数据块长度的增大,计算时间也呈线性增大;而算法1对于数据块长度的增长反映缓慢,即对于较大数据块的加密计算表现出较好的性能.
图表1
结论
本文运用定理2所描述的剩余系性质,设计两则加密算法,并分别分析了这两则算法的计算复杂性.通过实验测试,分别获得了算法1和算法2的计算性能,并加以比较分析.总的来说, 所述加密算法,不同于近现代主流的加密算法设计思路,有加解密速度较快,结合具体设计能形成较多使用加密算法等特点.这是一次有益的尝试,加深并拓展了数论知识的同时,也获得了较多的实际经验.
是不是对我有越来越多的兴趣?错!从我这儿你能学到的少之又少。当你认真地看完一些老教授、老专家穷其一生所学所写的书后,你们也许才有更多的认识和体会。
此文投稿于2010年7月,遂石沉大海。现贴在自己的博客中,期望和大家有更多交流。
参考文献
Pan Cheng-Dong,Pan Cheng-Biao. Elementary Number Theory Secend Edition. Peking University Press,2003(in Chinese)
(潘承洞,潘承彪.初等数论(第二版).北京大学出版社,2003)
Lu Kai-Cheng.Computer Cryptography Third Edition.Tsinghua University Press,2003(in Chinese)
(卢开澄.计算机密码学(第三版).清华大学出版社,2003)