密钥协商的方法、加/解密的方法及签名/验证的方法

文档序号:7655947阅读:306来源:国知局
专利名称:密钥协商的方法、加/解密的方法及签名/验证的方法
技术领域
本发明涉及信息安全与密码技术领域,特别是涉及一种能够完成密钥协商、对数据消息加密/解密以及签名/验证的公钥密码体制。

背景技术
密码技术是研究加密和解密变换的一门科学技术。通常情况下,人们将可懂的文本称为明文;将明文变换成的不可懂的文本称为密文。把明文变换成密文的过程叫加密;其逆过程,即把密文变换成明文的过程叫解密。这种加密或解密变换是由密钥来控制的。在开放环境下使用的密码系统应满足以下基本要求 保密性保证信息不被泄漏给非授权的用户; 完整性保证信息不被任意或蓄意地修改; 抗抵赖性防止个人或实体通过销毁证据来否认曾经发布过的信息,以证明某类事件确实曾经发生过。
公钥密码是解决上述的保密性、完整性、抗抵赖性的关键技术。其正式诞生的标志是1976年W.Diffie和M.Hellman发表的《密码学的新方向》(W.Diffe,M.E.Hellman,“New direction in cryptography”,IEEE Trans.,1976,22,644-654)。公钥密码使用一个公钥和一个私钥,公钥可以公开传递,但相关的私钥是保密的。只有使用私钥才能解密用公钥加密的数据、并对数据进行签名,公钥的作用则是对信息进行加密、以及验证签名的正确性。公钥密码还可以实现密钥协商协议,即两个用户在事先没有任何秘密约定的条件下,在完全公开的信道上,建立双方共享的密钥。
目前被公认为有较强的安全性、已广泛应用的公钥密码编码方案,按照所基于的数学难题分类,只有以下三种 一是RSA体制。由Rivest、Shamir和Adleman在1978年共同发明的公钥密码体制(R.L.Rivest,A.Shamir,and L.M.Adleman,“A method for obtainingdigital signatures public-key cryptosystems”,Communications of the ACM,21(1978),120-126),其安全性基于大整数因子分解问题。
二是DH体制。由Diffie和Hellman在1976年发明的密钥协商协议,以及由ElGamal在1985年提出的ElGamal加密和数字签名方案(T.ElGamal,“Apublic key cryptosystem and signature scheme based on discrete logarithms”,IEEETransactions on Information Theory,31(1985),pp.469-472.),其安全性基于有限域的乘法群上的离散对数问题。这种类型的算法还包括美国数字签名标准DSS(美国联邦信息处理标准FIPS186)等。
三是ECC体制。由Miller和Koblits在1985年各自独立地发明的椭圆曲线公钥密码体制(V.S.Miller,“Use of elliptic curve in cryptography”,CRYPTO’85,Springer-Verlag,1986,pp.417-426.)(N.Koblitz,“Elliptic curvecryptosystems”,Mathematics of Computation,v.48,n.177,1987,pp.203-209.),其安全性基于椭圆曲线群的离散对数问题。这种类型的算法还包括超椭圆曲线公钥密码体制(N.Koblitz,“Hyperelliptic cryptography”,J.of Crypto.,1989,1(3),pp.139-150.)。
值得注意的是,RSA、DH、ECC被大量使用,但其安全性都没有得到理论证明,主要是由于现实需要(签名、识别、支付、密钥管理等),在苦于没有其它替代技术的情况下,不得不用。但是,由于上述三种公钥密码体制的安全性并没有得到数学理论的证明,所以不排除这样一种可能经过几十年的分析研究,实际已经有人找到了破译它们的有效方法,只不过这个事实没有公开而已。
并且,随着量子计算机的研究进展,支持上述三种公钥密码体制被破译的可能性大大增加。例如,由Shor在1994年发明的Shor算法(P.W.Shor,“Algorithms for quantum computationDiscrete log and factoring”,Proceedings ofthe 35th Symposium on Foundations of Computer Science,1994,pp.124-134.),能以多项式时间攻破所有的能够转换成广义离散傅立叶变换的公钥密码。
为此,构建具有更大的算法空间和更强安全性的公钥密码体制,具有重要意义。本发明便是基于这种思想而完成的研究结果。


发明内容
本发明所要解决的技术问题是运用保形迭代变换的方法,提供一种公钥密码体制编码方法和装置,以实现具有更大的算法空间和更强安全性的密钥协商、加解密和数字签名的技术方案。
为了解决上述问题,依据本发明的实施例,公开了一种密钥协商的方法,包括 步骤1,预置用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤2,所述用户群中的各用户互相交换各自与A(x)的整数层迭代有关的中间结果; 步骤3,各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
优选的,当该用户群仅包括两个用户时,所述步骤2进一步包括 第一用户选择整数k1,计算第一中间结果,并传递至第二用户;所述第一中间结果与A(x)的k1层迭代有关; 第二用户选择整数k2,计算第二中间结果,并传递至第一用户;所述第二中间结果与A(x)的k2层迭代有关。
进一步,可以依据伪随机序列确定A(x)中的系数的值;采用该伪随机序列的种子,标识该A(x)。
依据本发明的另一实施例,公开了一种用于编码和译码数字消息的方法,包括 步骤1,预置加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤2、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 步骤3、加密端选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关; 步骤4、解密端利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
优选的,通过以下步骤建立私钥 预置λ个私钥表L1,...,Lλ以及对应的公钥表G1,...,Gλ,分布在λ个密钥分配中心; 依据预置规则,根据用户的身份ID获得指向多个私钥表的指针; 分别从所指向的多个私钥表中各获取一个或者多个私钥分量,组合得到该用户的私钥。
依据本发明的另一实施例,公开了一种用于数字签名及验证的方法,包括 步骤1,预置签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤2、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 步骤3、签名端选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关; 步骤4、验证端利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
依据本发明的另一实施例,公开了一种密钥协商的系统,包括 共享单元,用于存储用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 中间结果交换单元,连接所述用户群中的各用户端,用于传递所述用户群中的各用户与A(x)的整数层迭代有关的中间结果至其他用户; 密钥计算单元,位于所述用户群中的各用户端,用于针对各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
依据本发明的另一实施例,还公开了一种用于编码和译码数字消息的系统,包括 共享单元,用于存储加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 加密单元,位于加密端,用于选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关; 解密单元,位于解密端,用于利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
依据本发明的另一实施例,还公开了一种用于数字签名及验证的系统,包括 共享单元,用于存储签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 签名单元,位于签名端,用于选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关; 验证单元,位于验证端,用于利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
与现有技术相比,本发明具有以下优点 本发明创造性的提出运用基于域上的或环上的多变元非线性保形迭代变换的层数问题,构建公钥密码体制;该公钥密码体制可实现密钥协商、加密和数字签名,具有独特的编码风格和很强的抗攻击能力,使密码算法的规模和复杂性获得显著增强,以解决现有技术存在的算法空间小、安全性不够等问题。



图1是本发明一种密钥协商的方法实施例的步骤流程图; 图2是本发明一种建立非线性函数组A(x)的方法实施例的步骤流程图; 图3是本发明另一种建立非线性函数组A(x)的方法实施例的步骤流程图; 图4是本发明一种用于编码和译码数字消息的方法实施例的步骤流程图; 图5是本发明一种用于数字签名及验证的方法实施例的步骤流程图; 图6是本发明一种数字签名数据流的示意图; 图7是本发明一种签名验证数据流的示意图; 图8是本发明的安全性所基于的数学难题—基于多变元非线性保形迭代变换的迭代层数问题的示意图1; 图9是本发明的安全性所基于的数学难题—基于多变元非线性保形迭代变换的迭代层数问题的示意图2。

具体实施例方式 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。
本发明属于信息安全产品的范畴,主要应用于网络信任系统,例如证件、银行、手机、互联网、电子商务、电子政务、物流、网络监控、权力控制、资金转移、交易、数据加密等环节。
应用本发明所需的硬件环境属于本领域技术人员所熟知的知识。例如计算机、网络设备、手持设备或便携式设备、可编程的消费电子设备、智能卡、单片机、专用数字信号处理芯片、多处理器系统、包括以上任何系统或设备的分布式计算环境等等。
下面对本发明可能涉及的一些术语进行简单解释 密码通常可理解为进行信息加密和解密变换的算法。它的基本目的是伪装信息,使局外人不能理解信息的真正含义,而局内人能够理解伪装信息的本来含义。
密钥在执行密码算法的过程中,唯一能控制明文与密文之间进行有效变换的关键参数,叫做密钥。
公钥密码体制公钥密码体制使用两个密钥——一个公开密钥(简称公钥)和一个私人密钥(简称私钥)。公钥和私钥在数学上是相关的,但由公钥计算出私钥是困难的。公钥可在通信双方之间公开传递,也可以像电话号码本一样公开发布,私钥则由授权用户自己秘密保管。任何人从某个用户的名字就能查到它的公钥,因而可以给这个用户发送加密消息。只有授权用户自己才能用他的私钥完成解密。
公钥密码体制还提供了数字签名及认证的能力授权用户能用他的私钥对信息进行签名(相当于上述用私钥解密的过程);其他用户由于不掌握私钥而不能进行签名,但能用该用户的公钥验证签名的正确性(相当于上述用公钥加密的过程)。
密钥协商协议(key agreement protocol)两个或者多个用户在事先没有任何秘密约定的条件下,在完全公开的信道上,建立双方或多方共享的密钥。
域(finite field)是一种具体而又形象的数学结构,可以通俗地理解为能进行加减乘除四则运算的有限个元素的集合。(通常记做F,当域的元素数量为素数p时,记做有限域Fp。) 有限域上的多项式(polynomial)通俗地理解当只有一个变元时 f(x)=asxs+as-1xs-1+...+a0x0(mod p) 其中x叫作变元,ai叫作系数,aixi叫作项,它们在0,...,p-1之间取值。当有多个变元时 如果多项式中的项的数量相对很少,叫做稀疏多项式;反之叫做稠密多项式。稠密多项式不仅有很高的次数,而且项的数量非常多,把它展开来表示需要占用很大的空间位置。
有限域上的有理分式(rational fraction)可理解为两个多项式相除 除了0多项式以外的多项式的乘法逆为 (f(x1,...,xn))-1(modp-1)=(f(x1,...,xn))p-2(mod p) 但当p较大时,把上式展开需要巨大的存储空间,因此两个稀疏多项式相除(分母不为0多项式)的结果,通常是一个稠密多项式 有理函数(rational function)可用两个多项式相除表示的函数。若其分母多项式的次数大于0,则表示为有理分式,若其分母为0次多项式,则表示为多项式。
环(ring)是一种数学结构,记做R,可以通俗地理解为具有加法和乘法两种运算并满足乘法分配律的元素的集合。例如,由{0,1,...m-1}组成的其元素数量为正整数m集合,以及在模m的意义上规定的加法和乘法,叫做整数剩余类环Zm。
环上的多元多项式(polynomial),例如 m不一定是素数 由于环的数学结构中没有定义除法运算,因此我们只能建立环上的多项式,而不能建立环上的有理分式。
参照图1,示出了一种密钥协商的方法实施例,具体可以包括 步骤101,预置一用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤102,所述用户群中的各用户互相交换各自与A(x)的整数层迭代有关的中间结果; 步骤103,各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
本实施例可以通过所述用户群中的各用户互相交换隐藏在A(x)的迭代结果中的整数,而达到在公开信道上,建立各方共享的密钥。密钥协商成功之后,就可以进行对称加密了。一般情况下,密钥协商的目的就是建立对称密码使用的密钥。通常的原因是公钥加密速度太慢,一般先用公钥建立对称密码使用的密钥,再用对称密码以较快的速度完成加解密。这种方式的使用目的还包括无密钥保密通信,即每次通信都要临时进行密钥协商的保密通信,特点是不怕密钥被事先泄露,使得内部人员出卖密钥变的没有意义,因为公私钥方式毕竟还有一个私钥被事先泄露的问题。
所述的用户群可以包括两个或者两个以上的用户,当然,需要该用户群内的各个用户都互相交换信息,才能够建立整个群上共享的密钥。由于两个用户之间互相交换信息是多个用户互相交换的基础,并且多个用户之间的信息交换过程可以看作是用户两两之间交换的重复过程,所以下面都以两个用户为例进行说明。
优选的,当该用户群仅包括两个用户时,所述步骤2可以进一步细化包括第一用户选择整数k1,计算第一中间结果,并传递至第二用户;所述第一中间结果与A(x)的k1层迭代有关;第二用户选择整数k2,计算第二中间结果,并传递至第一用户;所述第二中间结果与A(x)的k2层迭代有关。
在本发明的另一个优选实施例中,如果还包括以下步骤建立该用户群共享的、变元数量大于1的向量q;并且,该用户群仅包括两个用户,则, 所述步骤102进一步包括第一用户选择整数k1,把q代入A(x)并进行k1层A(x)的迭代把计算结果d1传递给第二用户;第二用户选择整数k2,把q代入A(x)并进行k2层A(x)的迭代把计算结果d2传递给第一用户; 所述步骤103进一步包括第一用户计算密钥第二用户计算密钥 其中,所述A(x)进一步满足这样才可以保证第一用户和第二用户计算得到的密钥K相同。
在本发明的另一个优选实施例中,当该用户群仅包括两个用户时, 所述步骤102进一步包括第一用户选择整数k1,计算k1层A(x)的迭代并把函数组B1(x)传递给用户2;第二用户选择整数k2,计算k2层A(x)的迭代并把函数组B2(x)传递给第一用户; 所述步骤103进一步包括第一用户计算密钥第二用户计算密钥 其中,所述A(x)进一步满足若则从而可以保证第一用户和第二用户计算得到的密钥K相同。
下面对如何建立合适的A(x)进行简单介绍,当然,除了本发明公开的这些函数类型及其建立方法,实际中,还可能存在其他的A(x)函数类型及建立A(x)的方法,比如以指数幂方式出现的有限域或有限环上的函数;在此无法一一详述,仅仅描述本发明认为的优选实施方式。只要建立得到的A(x)满足本发明的限定要求即可。步骤101中所述的“预置”可以包括实时建立、预先建立或者他人建立等多种方式。
在下面的描述中,本发明给出了三种类型的A(x)的建立方法。设n>1,F为规定的域,R为规定的环,x=(x1,...,xn),y=(y1,...,yn),z=(z1,...,zn),xi,yi,zi∈F或R;随机选择一个n元非线性保形迭代变换y=A(x),则可以从下面的三种建立方法中选择。
第一种类型 参照图2,第一种类型的n元非线性函数组A(x)可以通过以下步骤建立 步骤201、预置A(x)的结构A(x)由n个域F上的n元有理分式函数组成,其每个有理分式函数中的分子、分母均为关于(x1,...,xn)的线性多项式,其分母多项式相同; 步骤202、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n和变元的数据长度; 步骤203、生成A(x)中的每个项的系数; 步骤204、按照预置结构,输出得到的A(x)。
具体而言,第一种类型的A(x)由n个F上的n元有理分式函数组成 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)),其中 aij,xi,yi∈F,1≤i≤n,0≤j≤n, 其有理分式中的分子、分母均为线性多项式,分母相同,该A(x)的特征是把其代入自身并展开、化简, z=(z1,...,zn)=A(A(x))=(A1(y1,...,yn),...,An(y1,...,yn)),其中 满足 第二种类型 参照图3,第二种类型的n元非线性函数组A(x)可以通过以下步骤建立 步骤301、预置A(x)的结构A(x)由n个域F上的n元有理函数组成,其含有关于(x1,...,xn)的大于1次的项;当Ai(x1,...,xn)的分母为0次多项式时,该有理函数为多项式;当Ai(x1,...,xn)的分母为大于1次的多项式时,该有理函数为有理分式; 步骤302、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数; 步骤303、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示; 步骤304、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x)); 步骤305、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组; 步骤306、判断该方程组是否有解,如果没有解,则返回步骤303;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤303生成的A(x)的表示形式; 步骤307、输出所得到的A(x)。
具体而言,第二种类型的A(x)由n个F上的n元有理函数组成 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)),其中 1≤i≤n,1≤j≤n, 其含有关于x1,...,xn的l1次的项,l1>1,当分母多项式为常数时该有理函数为多项式,该A(x)的特征是把其代入自身并展开、化简, z=(z1,...,zn)=A(A(x))=(A1(y1,...,yn),...,An(y1,...,yn)),其中 满足 第三种类型 第三种类型的n元非线性函数组A(x)可以通过以下步骤建立,由于流程步骤非常相似,因此也可以参见图3。
步骤a、预置A(x)的结构A(x)由n个环R上的n元多项式组成其含有关于(x1,...,xn)的大于1次的项; 步骤b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数; 步骤c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示; 步骤d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x)); 步骤e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组; 步骤f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式; 步骤g、输出所得到的A(x)。
具体而言,第三种类型的A(x)由n个R上的n元多项式函数组成 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)),其中 1≤i≤n,1≤j≤n 其含有关于x1,...,xn的l1次的项,l1>1,该A(x)的特征是把其代入自身并展开、化简, 满足 实际上,为了达到很好的安全性,第二种和第三种类型的A(x)应该满足由s、A(x)求B(x)=A(s)(x)容易,而由A(x)、B(x)求s困难;或者,由s、q、A(x)求d=A(s)(q)容易,而由d、q、A(x)求s困难,其中q=(q1,...,qn),d=(d1,...,dn),qi,di∈F或R。
优选的,在第二种类型和第三种类型的A(x)的建立过程中,可以存在很多的优化步骤,例如,在步骤304和305之间,或者在步骤e和f之间,还可以包括将B(x)与A(x)对比,若B(x)中的关于x的每一种新出现的项,都至少有两个,则执行步骤305或者步骤e,否则返回到步骤303或者步骤c。
原因在于,本发明的目的在于寻找满足保形迭代的具体函数,而如果存在一种新出现的项仅仅只有一个,则这个项的系数乘以任何不等于零的数都不可能等于零(若是环上的函数则等于零的可能性非常小),而若有两个以上的项,就可能让这些系数相加后等于零,从而在迭代后消去新增加的项。即可以达到初步过滤的效果,减少对解方程的调用次数,节省计算资源。
上述的用关于系数的不定方程组来建立A(x)的方法,可以确保经过2层迭代后的函数规模不扩张,并能在很大的概率上保证所得到的A(x)满足本发明的要求。当然,在本发明的优选实施例中,在步骤306和307之间,或者在步骤f和g之间,还可以包括更多的筛选步骤,用于对A(x)作进一步的过滤,例如,验证经过k层迭代后的函数规模也不扩张,或者是否满足关于迭代运算的结合律等等。
需要说明的是,虽然上面的描述中将这三种类型的函数建立方法作为独立的三种方法进行介绍,但是本领域技术人员应该知悉,完全可以将其做在同一个执行流程中,只需要增加一选择步骤即可,在此不再详述。
下面参照图3,通过具体的例子,对前述的建立过程进行详细描述,由于针对第二种类型和第三种类型的A(x)的建立过程比较相似,所以合在一起作为一个具体例子进行介绍 第一步,按照要求随意设置一个所期望的A(x)的表示形式,把该A(x)中的系数用变元符号表示 通常可把元素数量为素数p的有限域Fp作为有限域F,或把整数剩余类环ZN作为有限环R,但也可采用更加复杂的F或R。
其A(x)的表示形式由n个有理分式或者多项式组成,其函数中的系数用抽象的变量符号(诸如a0,a1,...等)表示。例如 y1=A1(x1,x2)=(a0+a1x1+a2x12+a3x1x2)mod p y2=A2(x1,x2)=(b0+b1x1+b2x12+b3x1x2)mod p 如何设置所期望的最佳的A(x)的函数表示形式,已超出了本发明的内容范围,但又对本发明的实现效果产生明显的影响。在某种意义上说,这项工作往往需要凭直觉和经验来进行设计与分析,而不是完全依赖于严格的理论推导与证明。尤其对于复杂的非线性函数,有很多种选择,最好的办法是尝试不同的变换,直到获得所期望的函数形式。应把函数的每一层的具体算法、各层之间的关系,以及怎样把若干个简单函数组合成一个相对复杂的函数的推导过程,输入到Mathematica等软件,作为解方程的已知条件,以提高计算效率。
例如对于上述实施例,可先设置一个简单的可逆非线性变换 h1=x1,h2=(x1x2+mx12)mod p 再设置一个线性变换 y1=(a0+a1h1+a2h2)mod p,y2=(b0+b1h1+b2h2)mod p 然后把非线性变换代入到线性变换中,则所期望的A(x)为 y1=A1(x1,x2)=(a0+a1x1+ma2x12+a2x1x2)mod p y2=A2(x1,x2)=(b0+b1x1+mb2x12+b2x1x2)mod p 其中ai、bi、m应理解为系数的因子。当然,我们也可以把A(x)直接设置为 y1=A1(x1,x2)=(a0+a1x1+a2x12+a3x1x2)mod p y2=A2(x1,x2)=(b0+b1x1+b2x12+b3x1x2)mod p 然而这将导致数学软件无法获取该函数的结构信息,在进入到以下的第三步“判断方程组T是否有解”时可能会遇到计算困难。
第二步,把A(x)代入自身,推导出z=A(y)=A(A(x))=B(x)并展开 将B(x)与A(x)对比,若B(x)中的关于x的每一种新出现的项的类型,都至少有两个这种类型的项,则A(x)的表示形式满足要求;否则说明它不符合要求,应返回到第一步重新设置,即 z=(z1,z2) z1=A1(y1,y2)=(a0+a1y1+ma2y12+a2y1y2)mod p =(a0+a1(a0+a1x1+ma2x12+a2x1x2)+ma2(a0+a1x1+ma2x12+a2x1x2)2+a2(a0+a1x1+ma2x12+a2x1x2)(b0+b1x1+mb2x12+b2x1x2))mod p =(a0+a0a1+ma02a2+a0a2b0+a12x1+2ma0a1a2x1+a1a2b0x1+a0a2b1x1+ma1a2x12+ma12a2x12+2m2a0a22x12+ma22b0x12+a1a2b1x12+ma0a2b2x12+2m2a1a22x13+ma22b1x13+ma1a2b2x13+m3a23x14+m2a22b2x14+a1a2x1x2+2ma0a22x1x2+a22b0x1x2+a0a2b2x1x2+2ma1a22x12x2+a22b1x12x2+a1a2b2x12x2+2m2a23x13x2+2ma22b2x13x2+ma23x12x22+a22b2x12x22)mod p z2=A2(y1,y2)=(b0+b1y1+mb2y12+b2y1y2)mod p =(b0+b1(a0+a1x1+ma2x12+a2x1x2)+mb2(a0+a1x1+ma2x12+a2x1x2)2+b2(a0+a1x1+ma2x12+a2x1x2)(b0+b1x1+mb2x12+b2x1x2))mod p =(b0+a0b1+ma02b2+a0b0b2+a1b1x1+2ma0a1b2x1+a1b0b2x1+a0b1b2x1+ma2b1x12+ma12b2x12+2m2a0a2b2x12+ma2b0b2x12+a1b1b2x12+ma0b22x12+2m2a1a2b2x13+ma2b1b2x13+ma1b22x13+m3a22b2x14+m2a2b22x14+a2b1x1x2+2ma0a2b2x1x2+a2b0b2x1x2+a0b22x1x2+2ma1a2b2x12x2+a2b1b2x12x2+a1b22x12x2+2m2a22b2x13x2+2ma2b22x13x2+ma22b2x12x22+a2b22x12x22)mod p 显然上式可以通过规定的检验。
第三步,建立联立方程组T并判断其是否有解 针对B(x)与A(x)对比而新出现的每一个关于x的项,列出B(x)中这些项的系数的多项式,并规定令A(x)中的每个多项式的关于x的已有的每一种项的类型,所对应的B(x)中的这种项的系数的多项式(用ui表示)都不为0;令B(x)中的每个多项式的相对于A(x)而新产生的关于x的每一种项的类型,所对应的关于其系数的多项式(用u’i表示)都为0;从而列出联立方程组,即 T{u1≠0,u2≠0,...,u’1=0,u’2=0,...} 具体对于上述实施例,先提取z1中有关项的系数,令其为0 对于项x13ma2(2ma1a2+a2b1+a1b2)=0mod p 对于项x14m2a22(ma2+b2)=0mod p 对于项x12x2a2(2ma1a2+a2b1+a1b2)=0mod p 对于项x13x22ma22(ma2+b2)=0mod p 对于项x12x22a22(ma2+b2)=0mod p 其它的项则令它们不等于0;然后再提取z2中有关项的系数,令其为0 对于项x13mb2(2ma1a2+a2b1+a1b2)=0mod p 对于项x14m2a2b2(ma2+b2)=0mod p 对于项x12x2b2(2ma1a2+a2b1+a1b2)=0mod p 对于项x13x22ma2b2(ma2+b2)=0mod p 对于项x12x22a2b2(ma2+b2)=0mod p 其它的项则令它们不等于0。把上述方程组化简,则联立方程组T为 这是一个有限域Fp上的关于(a1,a2,b1,b2,m)的不定方程组,T的通解为 ma1+b1=0mod p,ma2+b2=0mod p 这说明上述的A(x)的表示形式可以设置为保形迭代变换。
通常情况下T为复杂的多变元非线性不定方程组,但我们的任务是求其任意一组特解,其难度比直接求不定方程组的通解容易。
第四步,求出方程组T的一组解,代入我们所期望的A(x) 例如,对于上述实施例,设p=17,a0=1,b0=7,a1=3,a2=5,m=2,则b1=-ma1 mod 17=11,b2=-ma2 mod 17=7,可以证明这个A(x)是保形迭代函数 A(x)=((1+3x1+10x12+5x1x2)mod 17, (7+11x1+14x12+7x1x2)mod 17) A(2)(x)=((15+8x1+4x12+2x1x2)mod 17, (13+x1+9x12+13x1x2)mod 17) A(3)(x)=((7+10x1+5x12+11x1x2)mod 17, (12+14x1+7x12+12x1x2)mod 17) A(4)(x)=((14+4x1+2x12+x1x2)mod 17, (15+9x1+13x12+15x1x2)mod 17) A(5)(x)=((10+5x1+11x12+14x1x2)mod 17, (6+7x1+12x12+6x1x2)mod 17) A(6)(x)=((5+2x1+x12+9x1x2)mod 17, (16+13x1+15x12+16x1x2)mod 17) A(7)(x)=((3+11x1+14x12+7x1x2)mod 17, (3+12x1+6x12+3x1x2)mod 17) A(8)(x)=((9+x1+9x12+13x1x2)mod 17, (8+15x1+16x12+8x1x2)mod 17) …… 设x=(3,5),则A(x)=(5,16),A(2)(x)=(3,3),A(3)(x)=(9,8),A(4)(x)=(8,10),A(5)(x)=(11,4),A(6)(x)=(2,5),A(7)(x)=(12,2),A(8)(x)=(16,1),......。
上述的用Fp上的多项式来建立A(x)的方法,同样也适合于用Fp上的有理分式来建立A(x),以及用整数剩余类环ZN上的多项式来建立A(x),并推广到n>2的情形,只不过建立A(x)的推导过程更复杂。
需要注意的是计算Fp上的有理分式的值时,会出现虽然分母不是0多项式、但分母多项式的值为0的情况,应采取必要的容错、纠错措施。
随着向量长度n的增加,A(x)的函数规模将迅速增加,使得A(x)需要占用很大的存储空间。把一个很大的A(x)压缩成一个短数据是困难的。但是,我们可以用把一个短数据μ0作为一个伪随机序列发生器的种子,用其产生的伪随机序列(μ1,μ2,...),建立对应的A(x),从而用短数据μ0表示对应的A(x),更换A(x)只需要重新约定μ0即可。即优选的,可以依据伪随机序列确定A(x)中的系数的值;并采用该伪随机序列的种子,标识该A(x)。
具体过程介绍如下 对于第一类A(x),按照约定的规则,用(μ1,μ2,...)确定A(x)中的每个系数,用μ0表示该A(x); 对于第二类、第三类A(x),按照约定的规则,用(μ1,μ2,...)来确定A(x) 首先,用(μ1,μ2,...)来确定A(x)的函数形式,即确定A(x)中的哪些项的系数不为0,哪些项的系数为0,例如在上述实施例中, y1=A1(x1,x2)=(a0+a1x1+ma2x12+a2x1x2)mod p y2=A2(x1,x2)=(b0+b1x1+mb2x12+b2x1x2)mod p 假定我们是用(μ1,μ2,...)的值,来确定其关于x2、x22的项的系数为0,而x1、x12、x1x2的项的系数不为0; 其次,在确定了关于系数的方程组T有解后,用(μ1,μ2,...)的值,来确定该方程组的一组特解,例如在上述实施例中,用(μ1,μ2,...)的值,来确定a0=1,b0=7,a1=3,a2=5,m=2,然后计算出b1=-ma1 mod 17=11,b2=-ma2 mod 17=7,并用这些变量的值来确定A(x)的系数。
采用上述方法,在确定的伪随机序列(μ1,μ2,...)的控制下,一定能建立一个与该(μ1,μ2,...)相对应的A(x),从而可以用一个短数据的μ0,来表示一个长数据的A(x)。至于具体的对应过程,则由于其多种多样,所以在此仅仅以一个例子进行说明,其他方案就不再介绍了。
这种方法的突出优点是可实现A(x)的高效率压缩编码,让不同的用户、根据不同的情况、使用不同的A(x),从而做到了密码算法参数A(x)的勤换多变。实行这种技术体制,攻击者对于每种具体的A(x),都要投入力量进行专门的密码分析,将大大增加破译的代价。
下面本发明提供了两种密钥协商方法的具体方式,其区别在于公开传递的信息是采用向量di,还是采用函数Bi(x)。
密钥协商方法1 设密码参数A(x)=((1+3x1+10x12+5x1x2)mod 17,(7+11x1+14x12+7x1x2)mod 17),q=(3,5),执行 用户1随机选择整数k1=2,把q代入A(x)并进行k1层A(x)的迭代把计算结果d1=(3,3)传递给用户2; 用户2随机选择整数k2=3,把q代入A(x)并进行k2层A(x)的迭代把计算结果d2=(9,8)传递给用户1; 用户1计算密钥 用户2计算密钥 从而,用户1和用户2建立了相同的密钥K=(11,4)。
密钥协商方法2 设密码参数A(x)=((1+3x1+10x12+5x1x2)mod 17,(7+11x1+14x12+7x1x2)mod 17),执行 用户1随机选择整数k1=2,推导出k1层A(x)的迭代并把函数组B1(x)传递给用户2; 用户2随机选择整数k2=3,推导出k2层A(x)的迭代并把函数组B2(x)传递给用户1; 用户1计算密钥 用户2计算密钥 从而,用户1和用户2建立了相同的密钥K。
参照图4,公开了本发明一种用于编码和译码数字消息的方法,主要用于加解密情况,具体可以包括 步骤401,预置加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤402、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 步骤403、加密端选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关; 步骤404、解密端利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
上述实施例中,加密端将实时选择的整数t通过t的变换结果的方式传送给解密端,而解密端实际上在建立公钥的时候已经将私钥k的信息暗含在其中,因此,相当于双方交换了各自的信息t和k,因此,可以很好的完成加密和解密。具体的关于t的变换规则,本发明并不需要加以限定,变换的目的在于防止第三方获得t的信息,并且解密端可以利用其得到中间密钥即可。当然,变换规则设定的好坏,可能影响到本发明在加密和解密过程中的安全性。
在本发明的另一个优选实施例中,如果还包括以下步骤建立加密端和解密端共享的、变元数量大于1的向量q,公钥d=(d1,...,dn)=A(k)(q);则, 所述步骤403进一步包括加密端选择整数t,将公钥变换为关于t的中间密钥K,K=(K1,...,Kn)=A(t)(d),然后利用该中间密钥K对明文M进行加密,C=D(M,K),传送包含加密结果C和t的变换结果v的密文E至解密端,E={v,C},v=(v1,...,vn)=A(t)(q); 所述步骤404进一步包括解密端利用t的变换结果v、私钥k和A(x)计算得到相同的中间密钥K,K=(K1,...,Kn)=A(k)(v),然后利用该中间密钥K对加密结果C进行解密,得到明文M,M=D-1(C,K); 其中,所述A(x)进一步满足A(k)(A(t)(x))=A(k+t)(x)。
例如,设置共享的q=(q1,...,qn);选择整数k;计算d=(d1,...,dn)=A(k)(q);把k作为私钥;把d作为公钥; 运用公钥d,把明文M转换成密文E的加密方法是随机选择整数t,计算 v=(v1,...,vn)=A(t)(q),K=(K1,...,Kn)=A(t)(d), C=D(M,K),E={v,C}; 运用私钥k,把密文E={v,C},转换成明文M的解密方法是 K=(K1,...,Kn)=A(k)(v),M=D-1(C,K)。
上述的对称密码的加密变换“C=D(M,K)”,以及对应的解密变换“M=D-1(C,K)”的具体实现方法,均属于公知技术。
在本发明的另一个优选实施例中,当公钥B(x)=A(k)(x)时,则, 所述步骤403进一步包括加密端选择整数t,将公钥变换为关于t的中间密钥K,K=B(t)(x),然后利用该中间密钥K对明文M进行加密,C=D(M,K),传送包含加密结果C和t的变换结果V(x)的密文E至解密端,E={V(x),C},V(x)=A(t)(x); 所述步骤404进一步包括解密端利用t的变换结果V(x)、私钥k和A(x)计算得到相同的中间密钥K,K=V(k)(x),然后利用该中间密钥K对加密结果C进行解密,得到明文M,M=D-1(C,K); 其中,所述A(x)进一步满足若B(x)=A(k)(x),则B(t)(x)=A(kt)(x)。
例如,选择整数k;计算B(x)=A(k)(x);把k作为私钥;把B(x)作为公钥; 运用公钥B(x),把明文M转换成密文E的加密方法是随机选择整数t,计算 V(x)=A(t)(x),K=B(t)(x), C=D(M,K),E={V(x),C}; 运用私钥k,把密文E={V(x),C},转换成明文M的解密方法是 K=V(k)(x),M=D-1(C,K)。
上述的对称密码的加密变换“C=D(M,K)”,以及对应的解密变换“M=D-1(C,K)”的具体实现方法,均属于公知技术。
对于本部分关于加解密的实施例中n元非线性函数组A(x)的建立过程,可以参见前述相关部分即可,在此不再详述。本实施例也可以依据伪随机序列确定A(x)中的系数的值;采用该伪随机序列的种子,标识该A(x)。
优选的,本实施例还可以建立基于身份的密钥管理体制,所谓基于身份(ID-based)的密钥管理,就是把用户的身份标识——诸如姓名、地址、电话等信息,直接作为用户的公钥。
例如,可以通过以下步骤建立私钥预置λ个私钥表L1,...,Lλ以及对应的公钥表G1,...,Gλ,分布在λ个密钥分配中心;依据预置规则,根据用户的身份ID获得指向多个私钥表的指针;分别从所指向的多个私钥表中各获取一私钥分量,组合得到该用户的私钥。具体描述如下 (1)、由λ个密钥分配中心各自独立地随机建立自己的足够大的私钥表L1,...,Lλ以及对应的公钥表G1,...,Gλ;其私钥表的每个记录的内容为一个正整数,用Lij表示,i=1,...λ,j=1,2,...;其公钥表中的相关记录的内容为对应的公钥;把公钥表公开,把私钥表由各个密钥分配中心秘密保存; (2)、设置一个单向函数,其输入是用户的ID,其输出是指向λ个私钥表和λ个公钥表的θ个指针η1,η2,...ηθ{η1,η2,...ηθ}=Hash(ID); (3)、身份标识为ID的用户的私钥为 即每个授权用户,分别从λ个密钥分配中心各领取一私钥分量 然后把这些私钥分量相加,合成为该授权用户的私钥k=k(1)+...+k(λ); (4)、当公钥采用向量“d=(d1,...,dn)=A(k)(q)”时,设置共享的q=(q1,...,qn),身份标识为ID的用户的公钥为 当公钥采用函数“B(x)=A(k)(x)”时,身份标识为ID的用户的公钥为 本发明运用多个密钥分配中心联合建立用户私钥的方法,来实现基于身份的密钥管理体制,其特点是用户的ID就是该用户的公钥;各个密钥分配中心、各个用户各自管理各自的秘密,谁也不能获得全部的秘密;各个密钥分配中心并不是由于行政管理制度和计算能力的制约、而是由于缺少信息,而无法窃取用户的私钥。
下面本发明提供了两种加密方案,其区别在于公钥是采用向量d,还是采用函数B(x);方案1用一个向量作为公钥,方案2用一个函数组作为公钥。加密方案1的优点是公钥的数据长度很短,加密方案2的优点是密码的安全性更强。
加密方案1 首先,设n=2,设密码参数,即保形迭代变换函数为 A(x)=(A1(x1,x2),A1(x1,x2)),其中 A1(x1,x2)=(1+3x1+10x12+5x1x2)mod 17, A2(x1,x2)=(7+11x1+14x12+7x1x2)mod 17, 设置共享的向量q=(q1,q2)=(3,5),qi∈有限域Fp,p=17,选择正整数k=2作为私钥,把q代入A(x)进行k层迭代,计算 d=(d1,d2)=A(k)(q)=A(2)(3,5)=(3,3), 把d=(3,3)作为公钥(其计算结果,见本说明书的如何建立第二类、第三类A(x)的小数据实施例); 运用公钥d加密时,随机选择一个正整数t,设t=3,把t和q代入A(x),计算 v=A(t)(q)=A(3)(3,5)=(9,8), 把t和公钥d代入A(x),计算 K=A(t)(d)=A(3)(3,3)=(11,4), 把K作为对称加密使用的密钥,进行加密变换 C=D(M,K)=D(M,(11,4)), 其中,“C=D(M,K)”可选用任意一种对称密码加密算法,例如采用美国数据加密标准AES;以下我们将用“M=D-1(C,K)”表示与对应的对称密码解密算法; 上述的用公钥d加密的结果由两部分组成{v,C}={(9,8),C},其中v=(9,8)是密文报头,C是密文正文; 运用私钥k解密时,先把密文头v和私钥k代入A(x),计算 K=A(k)(v)=A(2)(9,8)=(11,4), 把K作为对称解密使用的密钥,进行解密变换 M=D-1(C,K)=D(M,(11,4)) 由于加密和解密使用了相同的K=(11,4),因此一定可以恢复出正确的明文。
加密方案2 两种加密方案的区别仅仅在于其公钥的数据格式不同加密方案1用一个向量d=(d1,...,dn)作为公钥,其优点是公钥数据长度短;加密方案2则用一个函数组B(x)=(B1(x1,...,xn),...,Bn(x1,...,xn))作为公钥,其优点是可以获得更长的密码周期。
设n=2,p=17,设密码参数 A(x)=(A1(x1,x2),A1(x1,x2)) =((1+3x1+10x12+5x1x2)mod 17,(7+11x1+14x12+7x1x2)mod 17), 设私钥k=2,其对应的公钥为 B(x)=A(k)(x)=A(2)(x) =((15+8x1+4x12+2x1x2)mod 17,(13+x1+9x12+13x1x2)mod 17); 运用公钥B(x)加密时,随机选择一个正整数t=3,计算密文报头 V(x)=A(t)(x)=A(3)(x) =((7+10x1+5x12+11x1x2)mod 17,(12+14x1+7x12+12x1x2)mod 17),计算出对称加密使用的密钥 K=B(t)(x)=B(3)(x)=A(3×2)(x)=A(6)(x) =((5+2x1+x12+9x1x2)mod 17,(16+13x1+15x12+16x1x2)mod 17),运用K进行加密变换,得到密文正文为 C=D(M,K) =D(M,((5+2x1+x12+9x1x2)mod 17,(16+13x1+5x12+16x1x2)mod 17)),上述的用公钥B(x)加密的结果由两部分组成 E={V(x),C} ={((7+10x1+5x12+11x1x2)mod 17,(12+14x1+7x12+12x1x2)mod 17),C}; 运用私钥k解密时,先把私钥k和代入密文头V(x),计算出对称加密使用的密钥 K=V(k)(x)=V(2)(x)=A(2×3)(x) =((5+2x1+x12+9x1x2)mod 17,(16+13x1+15x12+16x1x2)mod 17),然后运用K把密文正文C转换为明文M M=D-1(C,K) =D(M,((5+2x1+x12+9x1x2)mod 17,(16+13x1+15x12+16x1x2)mod 17)),由于加密和解密使用了相同的K,因此可以恢复出正确的明文。
参照图5,示出了一种用于数字签名及验证的方法实施例,包括 步骤501,建立签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 步骤502、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 步骤503、签名端选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关; 步骤504、验证端利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
由于预置规则是双方私下确定的,所以可以保证签名的有效性。至于具体的规则,本发明无法也无需加以限定,本领域技术人员根据需要自行设定即可。
一般情况下,直接验证是否满足所述预置规则;优选的,也可以对该预置规则进行变换,通过验证是否满足变换后的预制规则来验证签名是否正确。
在本发明的一个优选实施例中,还包括建立签名端和验证端共享的、变元数量大于1的向量q;则, 所述步骤503进一步包括签名端选择整数t,依据预置规则将待签名数据M变换为与t、私钥k相关的中间消息c,然后传送包含中间消息c和t的变换结果e的数字签名S至解密端,S={c,e};所述t的变换结果e与A(x)的t层迭代相关e=(e1,...,en)=A(t)(q);其中,所述预置规则为整数方程Φc=Φ(t,w,k),w为依据待签名数据M计算得到的整数; 所述步骤504进一步包括验证端利用t的变换结果e、依据待签名数据M计算得到的w、中间消息c、公钥和A(x)验证是否满足所述预置规则假设整数方程Φ可进一步表示为α=β,并且β中包含t,则验证A(α)(q)=A(β)(q)=A(β-t)(e)是否成立;如果正确,则该数字签名验证通过; 其中,当公钥d=(d1,...,dn)=A(k)(q)时,所述A(x)进一步满足A(k)(A(t)(x))=A(k+t)(x);当公钥B(x)=A(k)(x)时,所述A(x)进一步满足若B(x)=A(k)(x),则B(t)(x)=A(kt)(x)。
对于本部分关于数字签名的实施例中n元非线性函数组A(x)的建立过程,可以参见前述相关部分即可,在此不再详述。另外,本实施例也可以依据伪随机序列确定A(x)中的系数的值;采用该伪随机序列的种子,标识该A(x)。以及,本实施例也可以适用于构建基于身份的密钥管理体制的情况,这些都在前面已经详述,所以在此不再赘述。
下面本发明提供了两种数字签名方案,其区别在于公钥是采用向量d,还是采用函数B(x) 数字签名方案1 如图6、7所示设w=H(Δ)是单向函数,该函数的输入Δ为验证方可以获得的诸如数据M等信息的某种组合,但至少应包括M,其输出w为正整数; 设Φ是关于c、t、w、k的整数方程,该方程可采用不同的形式,例如k=c+w+t,k+w=c+t,k+c+w=t,...;即把c、t、w、k划分成均没有使用减号的α和β两部分,并且β中包含了t,从而把方程Φ,以及对应的迭代方程Φ’表示为 Φα=β, Φ’A(α)(x)=A(β)(x); 记“c=Φ(t,w,k)”是把已知的t、w、k代入方程Φ求c的运算。不同的Φ的计算速度有差别,但安全性相同。例如在本实施例中,我们规定 Φk=c+w+t, Φ’A(k)(x)=A(c+w+t)(x); 把d=A(k)(q)、e=A(t)(q)代入上式后,其具体的检验公式为 Φ’d=A(c+w)(e)? 规定了整数方程Φ以后,为保证Φ一定有解,还需要为c、t、w、k各规定一个范围。例如当c=Φ(t,w,k)=k-w-t时,要求k>c,k>w+t。
如附图6、7所示设密码参数A(x)=((1+3x1+10x12+5x1x2)mod 17,(7+11x1+14x12+7x1x2)mod 17);设q=(3,5),私钥k=8,其对应的公钥d=A(k)(q)=A(8)(3,5)=(16,1); 运用私钥k,把数据M,转换成关于M的数字签名S的方法是随机选择一个正整数t,设t=3,计算 e=(e1,e2)=A(t)(q)=A(3)(3,5)=(9,8), 假设w=H(Δ)=H(M)=2,则c=Φ(t,w,k)=k-w-t=8-2-3=3,其签名为S={c,e}={3,(9,8)}; 运用公钥d=(16,1),检验关于M的数字签名S是否正确的方法是先计算w=H(Δ)=H(M)=2,然后把d、c、w、e、q代入迭代方程 Φ’A(k)(x)=A(c+w+t)(x), 由于d=A(k)(q),e=A(t)(q),则具体的验证公式为 d=A(c+w)(e)? (16,1)=A(3+2)(9,8)=A(5)(9,8) 因此S={3,(9,8)}表示M的签名得到了验证。
数字签名方案2 如附图6、7所示设w=H(Δ)是单向函数,该函数的输入Δ为验证方可以获得的诸如数据M等信息的某种组合,但至少应包括M;其输出w为正整数; 设Φ是关于c、t、w、k的整数方程,该方程可采用不同的形式,例如wk=c+t,wk+c=t,...;即把c、t、w、k划分成均没有使用减号的α和β两部分,方程中可以有包含了k的两个变量的乘积项(如wk),并且β中包含了t,从而把方程Φ,以及对应的迭代方程Φ’表示为 Φα=β, Φ1’A(α)(x)=A(β)(x); 记“c=Φ(t,w,k)”是把已知的t、w、k代入方程Φ求c的运算。不同的Φ的计算速度有差别,但安全性相同。例如在本实施例中,我们规定 Φwk=c+t, Φ’A(wk)(x)=A(c+t)(x); 把B(q)=A(k)(q)、e=A(t)(q)代入上式后,具体的验证公式为 B(w)(q)=A(c)(e)? 规定了整数方程Φ以后,为保证Φ一定有解,还需要为c、t、w、k各规定一个范围。例如当c=Φ(t,w,k)=wk-t时,要求wk>c。
设密码参数A(x)=((1+3x1+10x12+5x1x2)mod 17,(7+11x1+14x12+7x1x2)mod 17);设q=(3,5),私钥k=2,其对应的公钥为B(x)=A(k)(x)=A(2)(x)=((15+8x1+4x12+2x1x2)mod 17,(13+x1+9x12+13x1x2)mod 17); 运用私钥k,把数据M,转换成关于M的数字签名S的方法是随机选择一个正整数t,例如设t=3,计算 e=(e1,e2)=A(t)(q)=A(3)(3,5)=(9,8), 假设w=H(Δ)=H(M)=4,则c=Φ(t,w,k)=wk-t=4×2-3=5,其签名为S={c,e}={5,(9,8)}; 运用公钥B(x),检验关于M的数字签名S是否正确的方法是先计算w=H(Δ)=H(M)=4,然后把B(x)、q、c、w、e代入迭代方程 Φ’B(w)(q)=A(c)(e)? 其中 B(w)(q)=B(4)(3,5)=A(4×2)(3,5)=A(8)(3,5)=(16,1) A(c)(e)=A(5)(9,8)=(16,1) 因此S={5,(9,8)}作为对M的签名得到了验证。
数字签名方案的可扩展性说明 一旦建立A(x)后,本领域的技术人员,通过对上述数字签名方案的理解和启迪,一定能设计出许多种看起来原理更复杂,编码技巧却十分相似的新的数字签名方案。例如,可以设置更复杂的方程Φ,单向函数H(.)的使用方式可以更灵活,当A(x)可逆时k还可以用负整数。建立Φ、H(.)的具体方法属于公知技术(详见《应用密码学——协议、算法与C程序》,Bruce Schneier,机械工业出版社(China Machine Press),2000.,pp.389-399)。然而,这些修改的数字签名方案都将遵循共同的本发明的必要技术特征其安全性基于多变元非线性保形迭代变换的层数问题。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
相应的,本发明还公开了一种密钥协商的系统实施例,具体包括 共享单元,用于存储用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 中间结果交换单元,连接所述用户群中的各用户端,用于传递所述用户群中的各用户与A(x)的整数层迭代有关的中间结果至其他用户; 密钥计算单元,位于所述用户群中的各用户端,用于针对各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
相应的,本发明还公开了一种用于编码和译码数字消息的系统,包括 共享单元,用于存储加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 加密单元,位于加密端,用于选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关; 解密单元,位于解密端,用于利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
相应的,本发明还公开了一种用于数字签名及验证的系统,包括 共享单元,用于存储签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组 y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn)) 其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x)); 公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥; 签名单元,位于签名端,用于选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关; 验证单元,位于验证端,用于利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。并且,在本发明的装置实施例中,其相应的模块单元都是针对相应的执行步骤虚拟出来的,为了节约篇幅,在此就不针对前述的各个流程步骤一一对应描述了,但是本领域技术人员应该知悉,各个执行步骤都是可以一一对应虚拟模块的。下面以一个例子进行简单说明 前述的装置实施例都还可以包括一A(x)建立单元,具体包括以下模块 A(x)结构确定模块,用于预置A(x)的结构A(x)由n个环R上的n元多项式组成其含有关于(x1,...,xn)的大于1次的项; 参数确定模块,用于接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数; 随机生成模块,用于依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示; 迭代模块,用于将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x)); 方程组建立模块,用于针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组; 判断模块,用于判断该方程组是否有解,如果没有解,则返回随机生成模块;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入随机生成模块生成的A(x)的表示形式; 结果输出模块,用于输出所得到的A(x)。
本说明书中的各个实施例均基于同一技术构思,所以在描述时重点说明的都是该实施例的独特之处,各个实施例之间相同相似的部分互相参见即可。
由于本发明技术复杂、核心构思比较抽象,为了方便理解,下面对本发明和现有技术的主要区别进行简单描述 现有技术中与本发明最近似的技术解决方案是DH,即1976年由Diffie和Hellman提出的密钥协商协议,以及ElGamal提出的加密与数字签名方案等。其安全性基于已知素数p、本原元1<g<p、以及d=gk mod p,求离散对数k是困难的。
Diffie-Hellman密钥协商协议为两个用户运用共同约定的p、g,在公开信道上建立双方共同秘密约定的密钥K时,执行 第一步用户1随机选择正整数k1,计算并传递给用户2; 第二步用户2随机选择正整数k2,计算并传递给用户1; 第三步用户1计算密钥 第四步用户2计算密钥 ElGamal加密方案为运用共同约定的p、g,随机选择正整数k,公钥为d=gk mod p,私钥为k; 加密算法为随机选择正整数t,t与(p—1)互素,计算a=gt mod p,b=dtM mod p,其中M为明文,a、b为密文; 解密算法为M=b/ak(mod p); 其中,“dt M”和“b/ak”可理解为简单的对称密码加解密运算。
ElGamal数字签名方案为运用共同约定的p、g,随机选择正整数k,公钥为d=gk mod p,私钥为k; 签名算法为随机选择正整数t,t与(p—1)互素,计算a=gt mod p,b满足M=(ka+tb)mod(p-1),把a、b作为签名; 验证算法为如果daab mod p=gMmod p,则该签名得到验证; 其中,签名方程“M=(ka+tb)mod(p-1)”,以及对应的验证方程“daab modp=gMmod p”,也可采用不同的形式。一般的签名方程可表示为 αt=(β+ωk)mod(p-1), 根据α、β、ω的±,以及取值是否为1,可以建立不同的签名方程(详见《应用密码学——协议、算法与C程序》,Bruce Schneier,机械工业出版社(ChinaMachine Press),2000.,pp.389-399)。
当年的DH作为一个开拓性的发明,首次证明了“在完全公开的信道上,即使通信双方没有任何事先共同约定的秘密,也能进行保密通信”,这是密码学几千年来最有革命性的进展,它的贡献主要是提出了新概念。但DH的具体算法的安全性还存在很大的上升空间。
本发明与DH的主要区别在于两者的安全性所基于的数学难题不同。
DH的安全性基于有限域上的离散对数问题已知素数p、本原元1<g<p、以及d=gk mod p,求离散对数k是困难的。各种DH密码算法的共同的必要技术特征是以某个整数k为秘密参数,以g的k次幂d(=gk mod p)为公开参数,则由公开参数d求秘密参数k是困难的。其中,密钥协商协议中的公开参数、秘密参数的功能,等价于加密或签名时使用的公钥和私钥。
本发明的安全性基于多变元非线性保形迭代变换的迭代层数问题,即设A(x)为给定的非线性保形迭代函数组,k为正整数,B(x)为A(x)的k层迭代,则已知A(x)、B(x)求k是困难的。其中,B(x)=A(k)(x)=A(A(...(A(A(x)))...)),可理解为把k个n输入、n输出的变换A(x)串联起来,合成为一个n输入、n输出的变换B(x),如图8所示,其中,虚框801表示A(x)的k层迭代。
本发明的各种算法的核心构思在于预设A(x),以某个整数k为秘密参数,以A(x)的k层迭代B(x)为公开参数,则由公开参数B(x)求秘密参数k是困难的,由秘密参数k求公开参数B(x)是容易的。
上述的难题还可采用另一种等价的表示设q=(q1,...,qn),d=(d1,...,dn)=A(k)(q)=B(x),则已知d、q、A(x)求k是困难的。也就是说,我们用从q到d的向量的数值的变化,来替代导致这些向量发生变化的从A(x)到B(x)的函数的变化,如图9所示,其中,虚框901表示A(x)的k层迭代。
即,本发明的各种算法的核心构思的另一种表述为预设q、A(x),以正整数k为秘密参数,以向量d为公开参数,则由公开参数d求秘密参数k是困难的,由秘密参数k求公开参数d是容易的。虽然我们没有直接把具体的B(x)表达式作为公开参数,但是在由k计算d的过程中,需要使用B(x)。这种表述的优点是d的数据长度比B(x)的函数长度明显减少,节约了公钥的存储空间。
本发明与DH相比,使密码的安全性获得了显著提高,其有益效果体现在与DH相比,本发明运行在一个更大、更复杂的算法空间中,使密码函数的规模发生爆炸。
在DH方案中,无论k多么大,其密码函数始终为关于变元g的一个单项式 当k=1时,d=g mod p; 当k=2时,d=g2 mod p; ......; 当k=s时,d=gs mod p; 其数学性质非常简单、清晰,容易给密码破译提供线索。例如,利用其密码周期为p-1的性质,可以用Shor量子算法进行破译(详见P.W.Shor,“Algorithmsfor quantum computationDiscrete log and factoring”,Proceedings of the 35thSymposium on Foundations of Computer Science,1994,pp.124-134.)。
与DH相比,本发明经过迭代后,一方面,其关于变元x的次数保持不变;另一方面,不仅其关于系数的非线性次数增加,而且其关于系数的函数规模也发生了爆炸,从而大大提高了进行数学分析的困难性。例如,看起来非常简单的只有两个变元(x1,x2)的第一类A(x),在经过k层迭代后的密码函数为 当k=1时, 当k=2时, 当k=3时, 把A(x)中的系数a00,a01,a02,a10,a11,a12,b0,b1,b2看作为A(x)中的9个变量,也就是把A(x)理解为 y=(y1,...,yn)=A(x,a00,...,b2) =(A1(x1,...,xn,a00,...,b2),...,An(x1,...,xn,a00,...,b2)), 则经过展开、化简后的A(k)(x)中的分子多项式或分母多项式中关于系数(a00,...,b2)的项的数量大约为 即A(x,a00,...,b2)由关于(a00,...,b2)的稠密多项式组成。例如当k仅为65536(即16比特二进制数10000000000000000)时,其每个多项式的项的数量将大约增加到 61497085601546282326893635550884880385; 规模如此巨大的多项式,虽然在数学世界中是客观存在的,但需要占用指数级的存储空间,实际上是难以操作的,通过数学分析来探索其中的规律就更加困难。
按照当代计算数学的进展,运用数学分析来进行破译(例如对有61497085601546282326893635550884880385个项的函数进行分析)的代价,将远远大于直接用穷举法来破译(例如只进行65536次试验)的代价。
与上述情况相比,当采用第二类、第三类A(x)时,随着k的增加,A(k)(x)的关于系数的非线性次数将以更快的速度增加,从而使A(k)(x)关于系数的函数规模以更快的速度发生爆炸。例如,当A(x)中含有x1x2的项时,A(k)(x)关于系数的非线性次数为(2k-1)。
运用Shor量子算法对本发明进行破译时,需要对A(k)(x)的函数序列{A(1)(x),A(2)(x),...,A(s)(x),...}进行广义离散傅立叶变换,实现这种变换要受到函数A(k)(x)中的项的数量的制约,即当A(k)(x)关于系数的函数规模发生爆炸时,将大大增加进行广义离散傅立叶变换的代价。
综上所述,本发明对于密码的安全性来说,实现了一种质的飞跃。
发明人作出本发明之后,在与背景技术中提及的三种现有技术相比较中发现在本发明降低安全性的极端情况下,其数学表达与DH相近似。即,当本发明基于n=1的1变元单项式函数的迭代层数问题时,其迭代函数为f(x)=gx,二层迭代的结果为f(f(x))=g2x,…,k层迭代的结果为f(...(f(x))...)=gkx;再令x=1,则从表面现象看,此时本发明的数学表述与DH相近似。为了避免他人在看到本发明之后,将本发明简单的理解为DH的自然拓展,下面对本发明的创新难点进行简单说明。
1、从DH方案看,对本发明没有任何的提示。
首先,现有技术已经认识到背景技术中提及的三种编码体制存在不安全的可能性,但是其具体导致不安全的因素是什么?改进的具体方向是什么?具体如何改进?以及应该以哪个编码体制为基础进行改进?这些问题,现有技术没有给出任何的提示。
其次,当将本发明限定在n=1、单项式函数以及x=1时,本发明和DH在数学表述上确实相近似,但是本领域技术人员都应该知悉,实际上,d=gk mod p可以是非常多的数学模型的极端情况,而从一个极端情况推导出其确定的普遍形式,是几乎不可能的事情。例如,也可以把基本域Fp的离散对数问题扩展为基本域Fp上的方阵的离散对数问题等。或者也可以说,本发明是从d=gk mod p所对应的非常多的数学模型中选择出来一个最合适的数学模型。
最重要的是,实际上是本发明第一次提出了迭代函数保形的概念,从DH来看,其中没有变元x,也没有该变元x的函数,进而难以想到函数的迭代,更不要说提示发明人需要考虑迭代函数是否能够保形,以及保形有什么意义。
事实上,本发明提出了一种完全崭新的研究方向,只不过恰好在数学表述上的极端形式上,与DH比较相似。在现有的各种公开文献中,不仅“保形迭代”的术语是本发明首次使用的,其概念、定义、性质描述、判定方法、建立步骤等,也是本发明首次提出的。
2、作出本发明,需要克服长久以来的技术偏见。
建立关于x的函数规模不扩张、而关于其系数的函数规模却发生爆炸的多变元非线性迭代变换,一直被认为是一个很难实现的问题。首先,把简单的单变元单项式的迭代,扩展为单变元多项式的非线性迭代,必然会遇到函数扩张问题。例如设迭代函数为f(x)=(a0+a1x+a2x2)mod p。当k=2时 f(f(x))=(a2(a0+a1x+a2x2)2+a1(a0+a1x+a2x2)+a0)mod p =(a0+a0a1+a02a2+a12x+2a0a1a2x+a1a2x2+a12a2x2+2a0a22x2+2a1a22x3+a23x4)mod p, 此时出现了x3、x4等在f(x)中不存在的项,经过多层迭代后上述函数的规模必将发生爆炸。用这种函数完成加密运算,需要指数级的巨大存储空间和漫长的计算时间。
其次,把单变元函数的迭代,简单地扩展为多变元函数的迭代,通常也会遇到函数扩张问题。例如(x12+x2,x1+x2),经过二层迭代后为(x14+2x12x2+x22+x1+x2,x12+x1+2x2),新出现了关于x14、x12x2、x22等原先不存在的项。
正是由于上述的情况,长久以来,本领域技术人员公认对于具有2个以上个项的一元非线性函数,经过迭代后必然导致函数的规模发生组合爆炸。因此,对于多元非线性函数,人们也普遍认为,经过迭代后也应该导致函数的规模发生组合爆炸。
然而并没有理论证明“对于具有2个以上个项的一元非线性函数,经过迭代后必然导致函数的规模发生组合爆炸”,这个结论一定可以推广到二元以上的情况也就是说,对于多元非线性函数,经过迭代后也必然导致函数的规模发生组合爆炸。因此,本发明的提出首先要克服这种几十年来形成的技术偏见。发明人需要确定在多元非线性函数中,存在既能够保证关于变元(x1,...,xn)的非线性次数保持不变、又能够保证关于该函数中的系数的非线性次数迅速增加的函数,并且,这种函数可以用确定的方法建立起来。
3、实现本发明,建立多变元非线性保形迭代变换有很高的难度。
首先,本发明属于开拓性研究,其数学理论背景不成熟,可供借鉴的文献资料非常少,例如怎样从抽象空间的角度来理解保形迭代变换的数学结构?怎样建立从有理分式扩域到多项式扩域的同态映射、以及从多项式扩域到基本域的同态映射?怎样求保形迭代的周期?如何确定保形迭代具体的数学性质,以及如何判定这些性质?这些问题涉及到一些深刻的、目前尚未完全解决的数学前沿课题。
其次,提出本发明的概念很容易,但要设计出可行的、实用的、完整的技术解决方案,却需要很高的技术门槛不仅要把握当代数学前沿的进展,还要有丰富的实际编码经验和分析水平,能熟练地运用数学工具,此外还要依赖于灵感、机遇等非确定因素,本领域一般技术人员很难完成这项工作,例如 ●对于第一类保形迭代变换,通过用两个线性多项式相除来建立有理分式,看起来很简单,但要理解其算法背后的原理,涉及到复杂的数学推导; ●对于第二类、第三类保形迭代变换,还涉及到解不定方程组的技术手段、保形迭代性质的判定方法问题,需要进行复杂的符号运算和定量分析; ●现有的DH数字签名算法都需要计算密码周期,但保形迭代变换的周期(即A(k)(x)=A(x)时的k)通常是难以计算的,如何在数字签名中绕过复杂的周期计算,需要相当高的编码技巧。本发明主要是通过整数的计算,而不是模一个周期的计算,来建立签名方程。需要指出的是,虽然这个周期问题在密钥协商、加密和签名中都存在,但在签名时问题尤其突出。
4、对于“保形迭代”这种函数性质能够带来怎样的有益效果需要对密码的规律和本质有深刻的认识,才能获得充分地理解。
例如,对于保形迭代所产生的“分形”(fractal)效果,就需要发挥想象力才能感悟到其算法设计的巧妙之处。具体的,在上述的n=2的第一类A(x)中,A(k+1)(x)相对于A(k)(x)来说,从A(k)(x)的未知元x1、x2的局部看进去,在A(k+1)(x)中的对应位置上,都存在着一个与A(x)相似的函数结构。这种描述不仅具有纯理论的、美妙的艺术观赏价值,而且是一种实质性的密码设计当迭代层数增加时,我们尚可以想象其函数规模的爆炸方式具有某种规律性,然而只要把A(k)(x)中的系数代入具体的值并展开、化简,这种规律性,即函数的结构信息,就会消失。
总之,如何建立满足密码学性质的既具有很强的非线性、又不会带来关于x的函数规模爆炸的保形迭代函数,是一项探索性极强的前沿课题,它的研究既有广泛的应用前景,又有很高的技术难度,经历了从理论到实践的反复过程,是发明人长期思考的结果,充分体现了发明人的智慧创新。
本发明与现有技术中的ECC公钥密码体制相比,主要区别在于 首先是数学概念不同椭圆曲线上的点用一个二维数组(x,y)来表示,椭圆曲线群定义了一种“加法”——这是一种由一条椭圆曲线中的两个点、求第三个点的非线性运算,但这种运算不满足保形迭代函数的定义。
其次是所基于的数学难题不同一个保形迭代变换A(x)等价于一个n输入、n输出的函数,集合{A(1)(x),A(2)(x),...,A(k)(x),...}对于迭代运算来说组成一个半群。所谓保形迭代层数问题,可理解为在该半群中定义了一种“保形迭代离散对数问题”,其数学性质与“椭圆曲线离散对数问题”有很大区别。
最后是密码周期不同目前尚未发现计算保形迭代的周期(该周期定义为A(k)(x)=A(x)时的k)的通用方法,为此本发明有意地避开了困难的周期计算问题;而ECC的周期(即椭圆曲线上的点的阶)是可以计算的。
由于本发明与ECC的算法原理不同,缺少可比性,所以我们从算法空间的角度来理解本发明的有益效果ECC采用两个点之间的值的运算,其算法空间对应于一个二维平面上的椭圆曲线的点的集合,该集合中的元素是用二维向量(x,y)的值来表示的;而本发明采用两个函数之间的算子的运算,其算法空间对应于一个多项式组或有理分式组的集合,从抽象空间的角度该集合中的元素是用该函数组中的系数来表示的,与它们的未知元x1,...,xn的值无关;例如,多项式组 ((a0+a1x1+a2x12+a3x1x2)mod p,(b0+b1x1+b2x12+b3x1x2)mod p) 是用系数a0,a1,a2,a3,b0,b1,b2,b3来描述的,与(x1,x2)的值无关,属于Fp上的8维空间的点的集合;显然,本发明具有更大的算法空间,其变化规律也更加复杂。
以上对本发明所提供的一种密钥协商的方法、一种用于编码和译码数字消息的方法和系统,以及一种用于数字签名的方法和系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种密钥协商的方法,其特征在于,包括
步骤1,预置用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
步骤2,所述用户群中的各用户互相交换各自与A(x)的整数层迭代有关的中间结果;
步骤3,各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
2.如权利要求1所述的方法,其特征在于,当该用户群仅包括两个用户时,所述步骤2进一步包括
第一用户选择整数k1,计算第一中间结果,并传递至第二用户;所述第一中间结果与A(x)的k1层迭代有关;
第二用户选择整数k2,计算第二中间结果,并传递至第一用户;所述第二中间结果与A(x)的k2层迭代有关。
3.如权利要求1所述的方法,其特征在于,还包括建立该用户群共享的、变元数量大于1的向量q;并且,该用户群仅包括两个用户,则,
所述步骤2进一步包括第一用户选择整数k1,把q代入A(x)并进行k1层A(x)的迭代把计算结果d1传递给第二用户;第二用户选择整数k2,把q代入A(x)并进行k2层A(x)的迭代把计算结果d2传递给第一用户;
所述步骤3进一步包括第一用户计算密钥第二用户计算密钥
其中,所述A(x)进一步满足
4.如权利要求1所述的方法,其特征在于,当该用户群仅包括两个用户时,
所述步骤2进一步包括第一用户选择整数k1,计算k1层A(x)的迭代并把函数组B1(x)传递给用户2;第二用户选择整数k2,计算k2层A(x)的迭代并把函数组B2(x)传递给第一用户;
所述步骤3进一步包括第一用户计算密钥第二用户计算密钥
其中,所述A(x)进一步满足若则
5.如权利要求1所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
预置A(x)的结构A(x)由n个域F上的n元有理分式函数组成,其每个有理分式函数中的分子、分母均为关于(x1,...,xn)的线性多项式,其分母多项式相同;
接收A(x)的相关技术指标参数,所述指标参数包括变元数量n和变元的数据长度;
生成A(x)中的每个项的系数;
按照预置结构,输出得到的A(x)。
6.如权利要求1所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个域F上的n元有理函数组成,其含有关于(x1,...,xn)的大于1次的项;当Ai(x1,...,xn)的分母为0次多项式时,该有理函数为多项式;当Ai(x1,...,xn)的分母为大于1次的多项式时,该有理函数为有理分式;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
7.如权利要求1所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个环R上的n元多项式组成其含有关于(x1,...,xn)的大于1次的项;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
8.如权利要求6或7所述的方法,其特征在于,在步骤d和步骤e之间还包括
将B(x)与A(x)对比,若B(x)中的关于x的每一种新出现的项,都至少有两个,则执行步骤e,否则返回到步骤c。
9.如权利要求1所述的方法,其特征在于,
依据伪随机序列确定A(x)中的系数的值;
采用该伪随机序列的种子,标识该A(x)。
10.一种用于编码和译码数字消息的方法,其特征在于,包括
步骤1,预置加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
步骤2、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥;
步骤3、加密端选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关;
步骤4、解密端利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
11.如权利要求10所述的方法,其特征在于,还包括建立加密端和解密端共享的、变元数量大于1的向量q,公钥d=(d1,...,dn)=A(k)(q);则,
所述步骤3进一步包括加密端选择整数t,将公钥变换为关于t的中间密钥K,K=(K1,...,Kn)=A(t)(d),然后利用该中间密钥K对明文M进行加密,C=D(M,K),传送包含加密结果C和t的变换结果v的密文E至解密端,E={v,C},v=(v1,...,vn)=A(t)(q);
所述步骤4进一步包括解密端利用t的变换结果v、私钥k和A(x)计算得到相同的中间密钥K,K=(K1,...,Kn)=A(k)(v),然后利用该中间密钥K对加密结果C进行解密,得到明文M,M=D-1(C,K);
其中,所述A(x)进一步满足A(k)(A(t)(x))=A(k+t)(x)。
12.如权利要求10所述的方法,其特征在于,
当公钥B(x)=A(k)(x)时,则,
所述步骤3进一步包括加密端选择整数t,将公钥变换为关于t的中间密钥K,K=B(t)(x),然后利用该中间密钥K对明文M进行加密,C=D(M,K),传送包含加密结果C和t的变换结果V(x)的密文E至解密端,E={V(x),C},V(x)=A(t)(x);
所述步骤4进一步包括解密端利用t的变换结果V(x)、私钥k和A(x)计算得到相同的中间密钥K,K=V(k)(x),然后利用该中间密钥K对加密结果C进行解密,得到明文M,M=D-1(C,K);
其中,所述A(x)进一步满足若B(x)=A(k)(x),则B(t)(x)=A(kt)(x)。
13.如权利要求10所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
预置A(x)的结构A(x)由n个域F上的n元有理分式函数组成,其每个有理分式函数中的分子、分母均为关于(x1,...,xn)的线性多项式,其分母多项式相同;
接收A(x)的相关技术指标参数,所述指标参数包括变元数量n和变元的数据长度;
生成A(x)中的每个项的系数;
按照预置结构,输出得到的A(x)。
14.如权利要求10所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个域F上的n元有理函数组成,其含有关于(x1,...,xn)的大于1次的项;当Ai(x1,...,xn)的分母为0次多项式时,该有理函数为多项式;当Ai(x1,...,xn)的分母为大于1次的多项式时,该有理函数为有理分式;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
15.如权利要求10所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个环R上的n元多项式组成其含有关于(x1,...,xn)的大于1次的项;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
16.如权利要求14或15所述的方法,其特征在于,在步骤d和步骤e之间还包括
将B(x)与A(x)对比,若B(x)中的关于x的每一种新出现的项,都至少有两个,则执行步骤e,否则返回到步骤c。
17.如权利要求10所述的方法,其特征在于,
依据伪随机序列确定A(x)中的系数的值;
采用该伪随机序列的种子,标识该A(x)。
18.如权利要求10所述的方法,其特征在于,通过以下步骤建立私钥
预置λ个私钥表L1,...,Lλ以及对应的公钥表G1,...,Gλ,分布在λ个密钥分配中心;
依据预置规则,根据用户的身份ID获得指向多个私钥表的指针;
分别从所指向的多个私钥表中各获取一个或者多个私钥分量,组合得到该用户的私钥。
19.一种用于数字签名及验证的方法,其特征在于,包括
步骤1,预置签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
步骤2、选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥;
步骤3、签名端选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关;
步骤4、验证端利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
20.如权利要求19所述的方法,其特征在于,
直接验证是否满足所述预置规则;
或者,对该预置规则进行变换,通过验证是否满足变换后的预制规则来验证签名是否正确。
21.如权利要求19所述的方法,其特征在于,还包括建立签名端和验证端共享的、变元数量大于1的向量q;则,
所述步骤3进一步包括签名端选择整数t,依据预置规则将待签名数据M变换为与t、私钥k相关的中间消息c,然后传送包含中间消息c和t的变换结果e的数字签名S至解密端,S={c,e};所述t的变换结果e与A(x)的t层迭代相关e=(e1,...,en)=A(t)(q);其中,所述预置规则为整数方程c=Φ(t,w,k),w为依据待签名数据M计算得到的整数;
所述步骤4进一步包括验证端利用t的变换结果e、依据待签名数据M计算得到的w、中间消息c、公钥和A(x)验证是否满足所述预置规则假设整数方程Φ可进一步表示为α=β,并且β中包含t,则验证A(α)(q)=A(β)(q)=A(β-t)(e)是否成立;如果成立,则该数字签名验证通过;
其中,当公钥d=(d1,...,dn)=A(k)(q)时,所述A(x)进一步满足A(k)(A(t)(x))=A(k+t)(x);当公钥B(x)=A(k)(x)时,所述A(x)进一步满足若B(x)=A(k)(x),则B(t)(x)=A(kt)(x)。
22.如权利要求19所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
预置A(x)的结构A(x)由n个域F上的n元有理分式函数组成,其每个有理分式函数中的分子、分母均为关于(x1,...,xn)的线性多项式,其分母多项式相同;
接收A(x)的相关技术指标参数,所述指标参数包括变元数量n和变元的数据长度;
生成A(x)中的每个项的系数;
按照预置结构,输出得到的A(x)。
23.如权利要求19所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个域F上的n元有理函数组成,其含有关于(x1,...,xn)的大于1次的项;当Ai(x1,...,xn)的分母为0次多项式时,该有理函数为多项式;当Ai(x1,...,xn)的分母为大于1次的多项式时,该有理函数为有理分式;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
24.如权利要求19所述的方法,其特征在于,通过以下步骤建立n元非线性函数组A(x)
a、预置A(x)的结构A(x)由n个环R上的n元多项式组成其含有关于(x1,...,xn)的大于1次的项;
b、接收A(x)的相关技术指标参数,所述指标参数包括变元数量n、变元的数据长度和最高的非线性次数;
c、依据所述指标参数和预置结构,生成一个A(x)的表示形式,该A(x)中的不为零的系数用变元符号表示;
d、将A(x)代入自身并执行展开、化简的数据处理B(x)=A(A(x));
e、针对B(x)与A(x)对比而新出现的每一个关于x的项,生成关于这些项的系数的多项式,令这些多项式的值为0,从而建立联立方程组;
f、判断该方程组是否有解,如果没有解,则返回步骤c;如果有解,则计算得到该方程组的一组解,并作为A(x)中的系数的值,代入步骤c生成的A(x)的表示形式;
g、输出所得到的A(x)。
25.如权利要求23或24所述的方法,其特征在于,在步骤d和步骤e之间还包括
将B(x)与A(x)对比,若B(x)中的关于x的每一种新出现的项,都至少有两个,则执行步骤e,否则返回到步骤c。
26.如权利要求19所述的方法,其特征在于,
依据伪随机序列确定A(x)中的系数的值;
采用该伪随机序列的种子,标识该A(x)。
27.如权利要求19所述的方法,其特征在于,通过以下步骤建立私钥
预置λ个私钥表L1,...,Lλ以及对应的公钥表G1,...,Gλ,分布在λ个密钥分配中心;
依据预置规则,根据用户的身份ID获得指向多个私钥表的指针;
分别从所指向的多个私钥表中各获取一个或者多个私钥分量,组合得到该用户的私钥。
28.一种密钥协商的系统,其特征在于,包括
共享单元,用于存储用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
中间结果交换单元,连接所述用户群中的各用户端,用于传递所述用户群中的各用户与A(x)的整数层迭代有关的中间结果至其他用户;
密钥计算单元,位于所述用户群中的各用户端,用于针对各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。
29.一种用于编码和译码数字消息的系统,其特征在于,包括
共享单元,用于存储加密端和解密端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥;
加密单元,位于加密端,用于选择整数t,运用A(x)将公钥变换为关于t的中间密钥,然后利用该中间密钥对明文进行加密,传送加密结果和t的变换结果至解密端;所述t的变换结果与A(x)的t层迭代相关;
解密单元,位于解密端,用于利用t的变换结果、私钥k和A(x)计算得到相同的中间密钥,然后利用该中间密钥对加密结果进行解密。
30.一种用于数字签名及验证的系统,其特征在于,包括
共享单元,用于存储签名端和验证端共享的A(x);所述A(x)是由n元向量x到n元向量y的非线性函数组
y=(y1,...,yn)=A(x)=(A1(x1,...,xn),...,An(x1,...,xn))
其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));
公私钥建立单元,用于选择整数k作为私钥;运用A(x)的k层迭代建立对应的公钥;
签名单元,位于签名端,用于选择整数t,依据预置规则将待签名数据变换为与t、私钥k相关的中间消息,然后传送包含中间消息和t的变换结果的数字签名至验证端;所述t的变换结果与A(x)的t层迭代相关;
验证单元,位于验证端,用于利用t的变换结果、待签名数据、中间消息、公钥和A(x)验证是否满足所述预置规则,如果满足,则该数字签名验证通过。
全文摘要
本发明提供了一种密钥协商方法、加/解密方法及签名/验证的方法,其中的密钥协商方法可以包括步骤1,预置用户群共享的A(x),所述用户群包括至少两个用户;所述A(x)是由n元向量x到n元向量y的非线性函数组y=(y1,…,yn)=A(x)=(A1(x1,…,xn),…,An(x1,…,xn))其中,n>1,所述A(x)需要满足把A(x)的s层迭代A(s)(x),与A(x)相比,其关于x的系数不为0的项的数量与类型保持不变,s为整数;若B(x)=A(A(x)),则A(B(x))=B(A(x));步骤2,所述用户群中的各用户互相交换各自与A(x)的整数层迭代有关的中间结果;步骤3,各用户分别利用所接收的中间结果,计算得到该用户群共享的密钥K。本发明具有独特的编码风格和很强的抗攻击能力,显著增强密码算法的规模和复杂性,提高算法空间和安全性。
文档编号H04L9/30GK101374043SQ20071012076
公开日2009年2月25日 申请日期2007年8月24日 优先权日2007年8月24日
发明者管海明 申请人:管海明, 管海鹰
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1