专利摘要
本发明属于信息安全领域,涉及一种分组加密方法,利用随机函数来构造分组加密方法,密码(加密)算法是不确定的、随机的,它通过随机的函数来加密,函数的具体形式由密钥、双方秘密共享的参数和其他参数确定,密钥影响函数的具体形式,又是函数的输入参数,这会使得密码分析者在不知道密钥和秘密参数的时候无法确定算法,从而无法通过已知明文密文对进行有效的密码分析,通过不同分组使用不同的函数具体形式,也可以有效方法一些潜在攻击。
权利要求
1.一种基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:采用随机函数F来构造密码算法,随机函数并不具有固定的形式,其具体形式有多个,{f1,f2,……},但是在具体加密中函数是确定的,随机函数F的具体形式fi的确定由一个编码来实现,我们称为确定编码A,确定编码A与函数的具体形式存在对应关系,A的决定因素包括k和g,存在函数S,A=S(k, g, ……),k也是随机的加密函数F(m,k)的输入参数之一,还有其他的因素,包括双方共享的一个秘密随机参数g;实际采用的加密函数是一个具体的函数形式fA,当前分组的密文cj= fA (mi,k)= f S(k, g, ……) (mi,k) ,mi是当前分组的明文消息。
2.一种如权利要求1所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:各个算法的运算量是均等的,密文输出的统计特征都是相同的,所有的密文值的概率分布趋向于等概率。
3.一种如权利要求2所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:函数A=S(k)设计的足够复杂,具有一定的单向性,通过k推测A很容易,而反过来推很困难,为了既保证复杂性,又减少工作量,可以在计算过程中,利用加密算法中对密钥k的一些中间计算结果来确定函数的具体形式。
4.一种如权利要求3所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:随机函数的各个具体函数形式的输入输出空间是相同的,且具有很好的遍历性。
5.一种如权利要求4所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:哈希函数的各个具体形式在计算方面应该具有很大的差异。
6.一种如权利要求5所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为:各个分组的加密函数的具体形式是独立决定的,A=S(k, g, h),h为加密解密双方都能够在本分组加密和解密前都知道的参数。
7.一种如权利要求6所述的基于随机函数的抗已知明文密文对攻击的分组加密方法,其特征为h采用以下方法确定:A)、对于第一个分组的明文加密的影响因素h使用一个收发双方秘密共享的参数,对于后面的分组的h,采用前一个分组的明文;B)、h代表分组位置信息,比如第x个分组,h=x;C)、h代表前一个分组的密文,对于第一个分组,采用一个公开的参数。
说明书
技术领域
本发明属于对称密码学领域,涉及一类抗已知明文密文对攻击的分组加密方法。
背景技术
现有的加密系统都是基于确定的加密算法,固然有方便,便于广泛使用和标准化,容易得到广泛的评价的好处,但是,这些算法都有非常清楚和固定的结构,只有明文、密钥和一些参数是变换的,它们都在固定的算法框架下参与运算,得到密文。这些对密码系统自由度的制约因素也对密码系统的安全性造成不好的影响,大量的密码分析也是针对算法确定的情形,这些分析已经假设算法已经知道。我们可以将确定的算法视为一个确定性的函数。假如一个加密算法对应的函数是随机的、不确定的,则密码分析者很难着手。
我们要对一个密码系统进行分析,一般要掌握一定的条件,这种条件一般是确定的,在这里我们要讨论重要的密码分析及其确定性的前提条件。下面对常见的密码分析做一个简单介绍。
差分密码分析是一种选择明文攻击,其基本思想是:通过分析特定明文差分对相对应密文差分影响来获得尽可能大的密钥,它是分组密码最重要的分析方法之一。它是一种选择明文分析,需要一定的选择的明文-密文对(一个分组明文及其对应的密文,也称为明文密文对),这些明文满足一定的差分条件。有文献对16轮DES进行差分密码分析,需要247个选择明文密文对,这个数量是比较大的。这一攻击方法对很多密码是有效的,并有很多变种攻击方法。显然差分分析包含需要获得同一算法、同一密钥下的大量的明文密文对这样的条件。
线性攻击是M.Matsui 在1993年提出的攻击方法,是一种已知明文攻击,它通过计算输入比特、输出比特和密钥之间满足某一线性关系的概率,若此概率与随机情形时(对于二进制是0.5的等概率)的概率偏差较大,则可利用该线性关系恢复部分密钥。对16轮des的线性密码分析需要243个已知明文密文对。线性密码分析的推广也很多,如多重线性密码分析、非线性密码分析、划分密码分析等。强力攻击、差分密码分析和线性密码分析是对DES的三种主要的攻击方法,对于16轮DES,差分密码分析和线性密码分析所需的选择明文个数太大,利用差分密码分析和线性密码分析相结合的技术而形成的差分-线性密码分析方法是很好的改进,降低了他们的复杂度。它需要一定的选择明文密文对,比如,攻击8轮DES需要768个明文密文对。同样,这些明文密文对是以相同的确定算法、相同的密钥作为前提的。
SQUARE攻击是Daemon, Knudsen和Rijmen针对Square密码提出的一种攻击,通过活跃字节的变化规律来猜测正确密钥。这一攻击对大多数以字节为变换单位的密码是有效的,对Rijndael算法的安全性分析结果中,该攻击方法也给出了比较好的结果。但是,到目前为止,SQUARE区分器的存在性都是通过经验判定,而无很强的理论支撑。Square攻击是一种选择明文攻击,可以对六轮和六轮以下的Rijndael密码进行成功的攻击。积分密码攻击是SQUARE攻击的更一般形式,利用“积分攻击”这一术语体现了该攻击的密码学本质。积分攻击是一种选择明文攻击方法,与差分密码分析求差对应,它体现求选择明文之和,也可以看作是差分攻击的一种推广,有时候比差分和线性分析更加有效。高阶差分也可以看作一种特殊的积分攻击形式。
插值攻击是Jakobsen和Knudsen提出的。如果一个密码对固定密钥是低次多项式函数,或者这个多项式的项数可以估算出来,则通过插值可以得到其代数表达式,从而有可能恢复出密钥。插值攻击是一种已知明文或选择明文攻击。代数攻击由Courtois和Pieprzyk提出,该攻击主要通过求解一个超定方程来恢复密钥。尽管密码学界普遍认为这是对AES算法最具威胁的潜在攻击,但这一方法目前仍受到广泛的质疑。该攻击对序列密码比较有效。
中间相遇攻击是一种时间空间权衡攻击,最早由Diffie和Hellman在1977年分析DES算法时提出,后来成功应用于对IDEA , Khufu和Rijndael算法的安全性分析。这种攻击思想与生日攻击具有很多相似的地方,该密码分析的条件为已知明文-密文对,同时依赖于一定的计算和存储,隐含有每一重加密的算法是相同且确定的前提条件。
从以上的密码分析也可以很容易得出,它们都基于一定的确定性条件,特别是算法是确定的,而且密钥基本上也是不变的。如果我们对这些确定性的条件进行随机化,则以上密码分析将无法着手或者非常困难。大多数分组密码分析需要大量的明文密文对,假如一个密码系统各个分组的加密算法是不同的,随机的,密码分析的这个基础就丧失了,一些密码分析有赖于确定的算法,才能得出代数方程式,对于不确定的算法将很难着手,相关密钥分析利用密钥扩展的缺陷,假如密钥扩展的函数部件是不确定的,这种密码分析方法也将失去基础。
一个好的算法,如果需要抗击以上的攻击方法,就应该具有在已知明文和密文对的时候难于逆推密钥的性质。
与传统的确定函数相对,我们提出了随机函数的概念,即这个函数的表达式、结构和形式是随机的,不确定的,比如随机函数y=F(a,b,c),F(a,b,c)只是一个抽象表示,并没有明确的形式,它的具体形式可能是f1(a,b,c)、f2(a,b,c)、f3(a,b,c)、f4(a,b,c)之中的一个函数。
本发明考虑现有的密码分析都是针对于传统的已知明文密文对,选择明文密文对的攻击而言,通过对这类攻击的规避,即可提高算法的抗攻击能力。从数学本质上而言,已知明文-密文对,密钥是可以确定的,或者是可以确定密钥范围的,一般现有的密码分析下,给定的明文密文对完全可以确定密钥,其攻击的困难性主要体现在计算困难上,而不是绝对不可以攻破。这种计算困难是一种单向性。本发明通过随机函数构造出一种新的单向性,从而为破译设置障碍。本发明从多个角度增加随机函数的随机性,以达到更好的安全效果,在同样计算量的情况下,表现出更好的安全性和单向性。
发明内容
本发明中构造的密码算法将是随机的,随机函数F的具体形式fi的确定由一个编码来实现,我们称为确定编码A。
在本发明中,这个加密算法的密钥k既是确定编码的影响因素,即存在函数S,A=S(k, g, ……),函数S的输入参数有k, k也是随机的加密函数F(m,k)的输入参数之一,也是通常我们所说的密钥,还有其他的因素,包括双方共享的一个秘密随机参数g,此外,还可以增加其他的加解密双方都共享的参数。即A的决定因素包括k和g,也可以包括其他因素。密码分析者掌握了许多明文密文对(m1,c1),(m2,c2),……,其中cj= F(mi,k),实际上,采用的加密函数是一个具体的函数形式fA。所以有cj= fA (mi,k)= f S(k,g,……) (mi,k)。这里限定设计的函数S使得k的每一个比特(对二进制而言是每个比特,对其他而言是每个符号)都可能影响A的值,这样以达到更好的相关性。在密码算法进行计算的时候,一般都是以二进制进行各种运算,这里的限定通过要求计算A的时候k的每一个比特都参与过运算即可实现。这种随机函数设计可以使得在相同计算量的函数的情况下,具有更强的安全性。为了使得函数的具体形式具有更大的随机性,还加入加密解密双方共享的一个秘密随机参数g,g同样影响函数的具体形式,这给破译带来更大的难度。S函数的所有输入参数对于收发双方都是已知的。这样对于加密者和解密者,由于知道这些参数,所以能够确定A,从而能够确定fA,从而进行加密和解密运算是很容易的。
如果不同的分组的加密算法的具体形式不一样,则会给更多的攻击带来麻烦,因为许多加密算法假定获得的明文密文对都是基于相同的密钥和相同的算法的,相同密钥和算法的明文密文对必须达到一定的数量,如果不同位置算法不同,这些攻击会失效。所以优选地,为了使得不同位置的分组的加密算法不一样,在S的输入参数中还可以有明文相关因素,或者明文位置相关因素,具体的做法可以有:A)、优选地,A=S(k, g, h),对于第一个分组的明文加密的影响因素h使用一个收发双方秘密共享的参数,对于后面的分组的h,采用前一个分组的明文,这一优选方案具有更好的安全性;B)、A=S(k, g, h),h代表分组位置信息,比如第x个分组,h=x。C)、A=S(k, g, h),h代表前一个分组的密文,对于第一个分组,采用一个公开的参数。以上三种方案中,对于加密者和解密者,由于知道k、g、h,所以能够确定A,从而能够确定fA,从而进行加密和解密运算是很容易的。
在此基础上,还可以引入更多的输入参数,比如引入双方都知晓的参数l,让A=S(k, g, h,l)。
但是对于一个破译者而言,他知道的是明文密文对(m1,c1),(m2,c2),……,通过这些信息他无法确定函数的具体形式是什么,现有的有效的密码分析方法都是以知道函数的具体形式为基础的,从而为破译设置了障碍。
本发明的加密方法,限定了密钥既是随机函数的输入参数,也是随机函数的具体形式的影响因素,假如密码分析者想要采取各个突破的方法,也会受到更多的限制,产生顾头不顾尾的效果。
这种构造方法设计出了一种新的单向性,即对于加密者和解密者很容易确定算法,对于破译者,已知明文-密文对的破译者,乃至于选择明文-密文对的破译者,他很难确定算法的具体形式,而已知算法(函数)是绝大多数密码分析方法的前提条件,一旦打破前提条件,破译无法着手。由于函数的具体形式本身都是不确定的,采用某种数学方程来表示它必然困难,自然很难采用代数方程攻击之类的方法。当然这种难用数学方式表达的特点还影响到其他的密码分析方法。
不仅如此,在此基础上,还增加了其他的随机性因素,这使得安全的防线更难突破。
当然,密码分析者可能试图通过直接间接的手段去确定算法(函数)的具体形式,为此,可以限定各个算法的运算量是均等的,密文输出的统计特征都是相同的,密文值的概率分布趋向于等概率,当然最好的就是所有的密文值都是等概率的。在二进制处理数据的情况下,随机函数的具体形式的数目最好是2的i次方,i为整数。
为了增加可能潜在攻击的复杂性,还应该将函数S设计的足够复杂,具有一定的单向性。为了既保证复杂性,又减少工作量,可以在计算过程中,利用加密算法中对密钥k的一些中间计算结果来确定函数的具体形式,比如,算法有多轮运算,每一轮函数都可以看成是一个部件,每一个轮都可以是一个随机函数,多轮随机函数的确定是在当前轮运算的时候,利用计算的一些中间结果得到的。这一点是可以实现的,因为加密函数可以有多个随机的部件,有些随机部件可能是在后面才确定,此时就可以利用前面的随机部件或确定部件的计算结果来确定,比如,我们可以将A划分为许多块A=A1| A2| A3|……|An,每一块决定每一轮的随机函数,计算的时候并不是一步计算出A,而是在计算中,利用密钥相关的一些当前轮的中间参数,逐步计算出A1, A2,A3,……, An来。这样可以减少运算量,又保证确定编码A的复杂性。每一个部分Ai的二进制编码长度不小于log2r,其中r为这一轮的随机函数的部件的具体形式的数目,最好是将r设计为2g的形式,g为正整数。这些部件可以是每一轮的函数,也可以是每一轮的一部分函数,即每一轮依然可以有多个随机函数的部件。
为了进一步增强安全性和防范潜在的攻击,做出以下限定:第一、随机函数的各个具体函数形式的输入输出空间是相同的,即它们的明文输入的可能值构成的集合中的元素是相同的,输出的可能值也是如此,输入输出值具有很好的遍历性,最好输入输出都遍历所有可能的值,比如输出是nbit,则遍历2n个数值。第二、随机函数的各个具体函数形式在运算量、能耗等方面应该具有很好的对等性,不能有太大的差异。第三、在消息等概率的情况下,随机函数的各个具体形式出现的概率应该是相近的,最好是等概率出现。第四、虽然在运算量等方面应该相近,但是随机函数的各个具体形式在计算方面应该具有很大的差异,不能仅仅是某些部分做一点点小改变,比如可以是一个分成一定长度块计算的部件,它的不同形式分块长度不一样,再比如每一步的运算符号或形式都不同,这样的好处是一方面可以防止统一为某个确定的函数,另一方面使得密码分析非常困难。第五、在采用同等运算量的函数的情况下,本方法相比确定的函数,会存在一定的附加运算工作量,这些工作量并不算大,但是带来的安全增益是很大的,要进一步减少这部分工作量,可以尽量复用运算中的一些中间结果。为了减少运算量,可将整个函数分为一些运算部件,在一些部件中采用随机函数部件,这样通过乘积效应放大随机函数具体形式的数目,减少随机函数设计的难度。
在具体实现的时候,函数S可以用查表的方法实现,更加方便,且容易理解。比如,函数S的形式为S(k, g)的时候,采用一个二维的表,行用k代表,列用g代表,通过行列可以决定一个函数的具体形式;函数S的形式为S(k, g, h)的时候,采用采用一个三维的表, k、g、h分别代表一个维度,构建的立体表格中的值为对应的函数的具体形式。
为了减少随机函数具体形式设计的工作量,可以采用随机函数部件的形式来组合出许多具体形式,为了减少上述多因素决定函数具体形式的难度,我们可以将k、g、乃至于h,分别用于确定一部分随机部件,这样减少了计算、查表等方面的工作量。
具体实施方式
以下为本加密方法的实施例,为了方便和简洁地描述,采用比较简短、密钥较短、轮数较少的算法,由于现有的加密方法都非常复杂,为了避免将大量篇幅描述复杂的算法,而掩盖本发明的限定的新特征,简化对实施例的阅读,我们借用已有的AES算法结构和其中的一些运算部件,由于已有现成的算法,所以这里不直接介绍算法的每一个步骤。现实中的算法往往要复杂的多。在这里的实施例仅仅是象征性使用了较少的随机函数的具体形式,真正使用的算法可以设计更多的具体形式。
实施例一:该分组加密方法是一个分组长度和密钥k的二进制长度都是128bit的密码算法,其迭代的轮数为10。具体加密流程如下:1、采用一个密钥扩展的函数扩展密钥k,这里称k为原始密钥,这个扩展的方法同AES算法,其输入参数仅仅是密钥,扩展生成一个序列依次截取分组长度的128比特数作为每一轮的轮密钥,轮密钥用于参与密钥加运算。2、初始轮1轮,加密方法同AES,是确定的运算,仅仅是进行一个密钥加运算。3、重复轮9轮,采用相同的轮函数,轮函数是随机函数,重复轮的每一轮又依次包括以下部件:S盒代换、行移位、列混合和密钥加运算。S盒代换、行移位和列混合运算的函数均为随机函数,它们分别有2、2、4种具体形式。S盒代换的2种形式中,有1种的S盒以4bit为代换单位,有1种以8bit问代换单位,考虑到同样的情况下可能4bit的运算量会小,应该增加运算以平衡运算量,之所以采用代换单位长度不一样的S盒,是为了增加不同具体形式具有更大的差异,此外具体形式满足发明内容提出的其他要求。4、最终轮1轮,密钥加运算为与轮密钥进行异或运算。最终轮是确定的加密方法,同AES。这些随机函数部件均是独立的。即使是相同的随机部件,其在每一轮采用的具体形式都是相互独立的,不一定相同。
随机函数的具体形式的确定方法,由一个函数A= S(k,g)确定,二进制下的A=A1| A2| A3|……|A9,“|”代表这些数据的二进制合并。考虑发明内容中说明的因素,这里将不同轮的编码Ai分别独立进行计算,虽然它们都是由k确定,但是为了增加复杂性,同时减少计算量,我们采用k扩展得到的每一轮的子密钥kri-1来得到下一轮的Ai。对于从1至5之间的i,每一轮的Ai的二进制数据包括4bit。Ai=a+b mod16 ,a*17+b=kri-1,b在0-16之间的整数,即a是kri-1除以大于24的质数17的结果取整,b为余数。以上数据是代表十进制数据下的十进制运算。对于从6至9之间的i,Ai由加密解密双方共享的秘密参数g决定,g的长度为32bit,将g以8bit为一个组截取下来,这4个组取模16得到的值,即分别为A6、A7、A8、A9。Ai的前一个比特用于决定S盒的具体形式,0代表第一个S盒,1代表第二个,同样,第二个比特用于决定行位移的两个形式,第三第四个比特联合起来决定到底是4种列混合运算的中的哪个。当然这里为了方便,随机部件依然具有很大的相似性,比如几个随机部件的形式都是类似的,比如都分别是S盒、行移位和列混合运算。实际上,并不一定要求这种相似性。解密过程相反,只不过子密钥要反过来使用,具体形式的确定编码A也是要按照顺序颠倒过来。
实施例二:该分组加密方法是一个分组长度和密钥k的二进制长度都是128bit的密码算法,其迭代的轮数为10。具体加密流程如下:1、采用一个密钥扩展的函数扩展密钥k,这里称k为原始密钥,这个扩展的方法同AES算法,其输入参数仅仅是密钥,扩展生成一个序列依次截取分组长度的128比特数作为每一轮的轮密钥,轮密钥用于参与密钥加运算。2、初始轮1轮,加密方法同AES,是确定的运算,仅仅是进行一个密钥加运算。3、重复轮9轮,采用相同的轮函数,轮函数是随机函数,重复轮的每一轮又依次包括以下部件:S盒代换、行移位、列混合和密钥加运算。S盒代换、行移位和列混合运算的函数均为随机函数,它们分别有2、2、4种具体形式。S盒代换的2种形式中,有1种的S盒以4bit为代换单位,有1种以8bit问代换单位,考虑到同样的情况下可能4bit的运算量会小,应该增加运算以平衡运算量,之所以采用代换单位长度不一样的S盒,是为了增加不同具体形式具有更大的差异,此外具体形式满足发明内容提出的其他要求。4、最终轮1轮,密钥加运算为与轮密钥进行异或运算。最终轮是确定的加密方法,同AES。这些随机函数部件均是独立的。即使是相同的随机部件,其在每一轮采用的具体形式都是相互独立的,不一定相同。
随机函数的具体形式的确定方法,由一个函数A= S(k,g,h)确定,二进制下的A=A1| A2| A3|……|A9,“|”代表这些数据的二进制合并。考虑发明内容中说明的因素,这里将不同轮的编码Ai分别独立进行计算,虽然它们都是由k确定,但是为了增加复杂性,同时减少计算量,我们采用k扩展得到的每一轮的子密钥kri-1来得到下一轮的Ai。对于从1至5之间的i,每一轮的Ai的二进制数据包括4bit。Ai=a+b mod16 ,a*17+b=kri-1,b在0-16之间的整数,即a是kri-1除以大于24的质数17的结果取整,b为余数。以上数据是代表十进制数据下的十进制运算。对于从6至7之间的i,Ai由加密解密双方共享的秘密参数g决定,g的长度为8bit,将g以4bit为一个组截取下来得到的值,即分别为A6、A7;A8、A9由h确定,h每一个分组都不一样,其中第一个分组的h由双方秘密共享的参数决定,而随后的h由前一个分组的明文确定,将前一个分组的明文分成两部分,m1和m2, 它们在十进制下有A8= (m1mod97)mod16,A9= (m2mod97)mod16,Ai的二进制的前一个比特用于决定S盒的具体形式,0代表第一个S盒,1代表第二个,同样,第二个比特用于决定行位移的两个形式,第三第四个比特联合起来决定到底是4种列混合运算的中的哪个。当然这里为了方便,随机部件依然具有很大的相似性,比如几个随机部件的形式都是类似的,比如都分别是S盒、行移位和列混合运算。实际上,并不一定要求这种相似性。解密过程相反,只不过子密钥要反过来使用,具体形式的确定编码A也是要按照顺序颠倒过来。
以上实施例中k、g、h单独决定各自的随机部件,有时候也可以是通过一定运算后得到的值确定各个随机部件,比如k和g+h决定各个的随机部件,或者计算3个参数之和k+g+h确定随机函数的具体形式,这里举例中的+代表现实中的加法。
实施例中的h还可以替换为关于分组的位置信息以及前一个分组的密文数据。
基于随机函数的抗已知明文密文对攻击的分组加密方法专利购买费用说明
Q:办理专利转让的流程及所需资料
A:专利权人变更需要办理著录项目变更手续,有代理机构的,变更手续应当由代理机构办理。
1:专利变更应当使用专利局统一制作的“著录项目变更申报书”提出。
2:按规定缴纳著录项目变更手续费。
3:同时提交相关证明文件原件。
4:专利权转移的,变更后的专利权人委托新专利代理机构的,应当提交变更后的全体专利申请人签字或者盖章的委托书。
Q:专利著录项目变更费用如何缴交
A:(1)直接到国家知识产权局受理大厅收费窗口缴纳,(2)通过代办处缴纳,(3)通过邮局或者银行汇款,更多缴纳方式
Q:专利转让变更,多久能出结果
A:著录项目变更请求书递交后,一般1-2个月左右就会收到通知,国家知识产权局会下达《转让手续合格通知书》。
动态评分
0.0