技术领域\n本发明涉及信息的编码和译码领域,特别是涉及一种对数据消息加密、解密以及签名、验证的公用密钥密码体制。\n背景技术\n密码技术是研究加密和解密变换的一门科学技术。通常情况下,人们将可懂的文本称为明文;将明文变换成的不可懂的文本称为密文。把明文变换成密文的过程叫加密;其逆过程,即把密文变换成明文的过程叫解密。这种加密或解密变换是由密钥来控制的。在开放环境下使用的密码系统应满足以下基本要求:\n保密性:保证信息不被泄漏给非授权的用户;\n完整性:保证信息不被任意或蓄意地修改;\n抗抵赖性:防止个人或实体通过销毁证据来否认曾经发布过的信息,以证明某类事件确实曾经发生过。\n公钥密码是解决上述的保密性、完整性、抗抵赖性的关键技术。其正式诞生的标志是1976年W.Diffie和M.Hellman发表的《密码学的新方向》(W.Diffe,M.E.Hellman,“New direction in cryptography”,IEEE Trans.,1976,22,644-654)。公钥密码使用一个公钥和一个私钥,公钥可以公开传递,但相关的私钥是保密的。只有使用私钥才能解密用公钥加密的数据、并对数据进行签名,公钥的作用则是对信息进行加密、以及验证签名的正确性。\n当前公钥密码面临的一个重要挑战,是量子计算的挑战。由Shor在1994年发明的Shor算法(P.W.Shor,“Algorithms for quantum computation:Discretelog and factoring”,Proceedings of the 35th Symposium on Foundations ofComputer Science,1994,pp.124-134.),能以多项式时间攻破所有的能够转换成广义离散傅立叶变换的公钥密码,包括目前广泛使用的RSA、DH和ECC等三种公钥密码体制。\n公钥密码应对量子计算挑战的基本对策是:采用不能转换成离散傅立叶变换的数学难题来建立公钥密码体制。按照这种思路,当前国际上主要有三类互 相竞争的“抗量子计算”的公钥密码方案:\n一是NTRU公钥密码体制(J.Hoffstein,J.Pipher,and J.H.Silverman,“NTRU:a ring based public key cryptosystem”,Crypto’96,LNCS 1423,pp.267-288.Springer-Verlag,1998.),其安全性基于在一个大维数的格中寻找一个很短向量的数学难题。\n二是OTU2000公钥密码体制(T.Okamoto,K.Tanaka,and S.Uchiyama,“Quantum Public-Key Cryptosystems,”CRYPTO2000,LNCS 1880,pp.147-165,Springer-Verlag(2000).),其安全性基于改进的背包问题。\n三是MQ公钥密码体制,即多变元二次多项式公钥密码体制(MultivariateQuadratic Polynomials in Public Key Cryptosystem),其安全性基于二次多项式不定方程组的难解性。这个领域典型的方案是SPLASH签名算法(J.Patarin,L.Goubin,N.Courtois,“C*+-and HM:Variations around two schemes of T.Matsumoto and H.Imai”,in Advances in Cryptology,Proceedings ofASIACRYPT’98,LNCS 1514.Springer Verlag,1998,pp.35-49.),该方案是欧洲密码标准NESSIE推荐的数字签名算法(http://www.cryptonessie.org),主要在智能卡等特殊的领域中使用。\n现有技术中与本发明最近似的技术解决方案是MQ公钥密码体制。MQ公钥密码体制的公钥的一般形式为:\n\nxi,yj,αi,βij,γijk∈F,1≤i≤n,m>n\n其中,F为规定的域。由于m>n,故MQ的公钥为不定方程组,属于不可逆函数。一般把公钥的逆函数规定为是与它相对应的私钥,即从y=(y1,...,ym)到x=(x1,...,xm)的可逆变换。\n但是MQ公钥密码体制存在以下缺点:\n1、加密算法过于简单,即二次多项式函数的数学结构限制了加密算法的规模。如果多项式的数量n与变元的数量m比较少,或者组合比较简单,则易于被破译。如果多项式的数量n与变元的数量m比较多,或者组合比较复杂,则密钥长度、编码和译码速度、存储器需求以及传输带宽等工程实用方面 都会带来难以克服的技术问题。由于这个缺点,再加上一些简单的MQ方案被破译,使人们怀疑MQ的安全性不够,目前研究MQ的论文很多,但真正使用的很少,即使成为国际标准(例如SPLASH签名算法),也很少被使用。\n2、只能签名、不能加密。其原因是:它的公钥(即加密算法)为不定方程组,而不定方程组的解是一个很大的集合,只能用于不可恢复的数字签名算法,不能从签名中还原出被签名的数据。具体而言:\nMQ产生签名的方法为:把待签名的数据a=(a1,...,am),代入私钥,进行求值运算,得到签名b=(b1,...,bm);\nMQ验证签名的方法为:设被签名的数据为a=(a1,...,am),把待验证的签名b代入公钥,计算出(c1,...,cn);如果(c1,...,cn)=(a1,...,an),则接受签名,否则拒绝签名。\n由于产生签名的计算是一一映射,例如,从(a1,...,am)到(b1,...,bm);而验证签名的计算并不是一一映射,例如,只得到(c1,...,cn);也就是说,不可能从签名b得到原始的完整的被签名数据(a1,...,am),即不能用于加密。\n当然,若把它的公钥(即加密算法)中的多项式数量n与变元数量m设置成一样多,让其公钥成为置换方程组,而不再是不定方程组,则虽然可以从签名b还原出被签名的数据a(即具备加密的功能),但容易被破译。\n发明内容\n本发明所要解决的技术问题是提供一种用于编码和译码数字消息的方法和装置,克服目前的MQ技术只能签名、不能加密的缺点。\n为解决上述问题,依据本发明实施例,公开了一种用于编码和译码数字消息的方法,具体可以包括:选择正整数m,n,其中,m>n;选择域F中的元素xi和yi,且1≤i≤m,1≤j≤n;令x=(x1,...,xm),y=(y1,...,yn),x、y均为由域F中的元素所组成的向量;生成一包含有E(x)的公钥,其中,E(x)为在域F上的从(x1,...,xm)到(y1,...,yn)的非线性映射函数组;并且,所述E(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);生成一与所述公钥相对应的私钥,所述私钥包括R(x);设置单向函数链H(w),以及单向函数链的逆函数H-1(z);通过单向函数链H(w)将消息w转换为x,然后采用所述公钥对所述x进行编码,得到编码结果y;和,采用所述私钥将编码结果y变换为z,然后运用单向函数链的逆函数\nH-1(z)以及私钥将z转换为译码消息w。\n依据本发明实施例,还公开了一种用于数字签名的方法,具体可以包括:\n选择正整数m,n,n’,其中,m>n≥n’;生成一包含有E’(x)的公钥,其中,E’(x)为在域F上的从(x1,...,xm)到(y1,...,yn’)的非线性映射函数组;xi和yj是域F中的元素,1≤i≤m,1≤j≤n;令x=(x1,...,xm),y=(y1,...,yn’),x、y均为由域F中的元素所组成的向量;并且,所述E’(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);生成一与所述公钥相对应的私钥,所述私钥包括R(x);设置单向函数链H(w),以及单向函数链的逆函数H-1(z);采用所述私钥先把待签名的消息y”变换为z,然后运用单向函数链的逆函数H-1(z)以及私钥将z转换为数字签名w;和,通过单向函数链H(w)将数字签名w转换为x,然后采用所述公钥对所述x进行译码,得到译码结果y;比较译码结果y和待验证的消息y’,根据比较结果确定数字签名w是否正确。\n依据本发明实施例,还公开了一种用于编码和译码数字消息的方法,包括:\n选择正整数m,n,n’,r,其中,m>n≥n’;生成一包含有E’(x,ID)的公钥,其中,E’(x,ID)为在域F上的从(x1,...,xm,ID1,...,IDr)到(y1,...,yn’)的非线性映射函数组,所述ID=(ID1,...,IDr)为授权用户的身份标识;xi、yj和IDk是域F中的元素,1≤i≤m,1≤j≤n,1≤k≤r;令x=(x1,...,xm),y=(y1,...,yn’),ID=(ID1,...,IDr),x、y、ID均为由域F中的元素所组成的向量;并且,所述E’(x,ID)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);针对身份标识为ID(K)的授权用户,生成一与该身份标识相对应的私钥,所述私钥包括R(x);设置单向函数链H(w),以及单向函数链的逆函数H-1(z);采用所述公钥、单向函数链H(w)和ID(K),对消息M进行编码,得到编码消息N;采用所述私钥和单向函数链的逆函数H-1(z)对该编码消息N进行译码,得到译码消息L;或者,采用所述私钥和单向函数链的逆函数H-1(z)对消息M’进行编码,得到编码消息N’;采用所述公钥、单向函数链H(w)和ID(K),对该编码消息N’进行译码,得到译码消息L’\n依据本发明实施例,还公开了一种用于编码和译码数字消息的系统,包括:\n公钥生成单元,用于生成一包含有E(x)的公钥,其中,E(x)为在域F上的从(x1,...,xm)到(y1,...,yn)的非线性映射函数组,m,n为正整数,m>n;设xi、yi是域F中的元素,1≤i≤m,1≤j≤n;设x=(x1,...,xm),y=(y1,...,yn),x、y均为由域F中的元素所组成的向量;并且,所述E(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n私钥生成单元,用于生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n加密单元,用于通过单向函数链H(w)将消息w转换为x,然后采用所述公钥对所述x进行编码,得到编码结果y;和\n解密单元,用于采用所述私钥将编码结果y变换为z,然后运用单向函数链的逆函数H-1(z)以及私钥将z转换为译码消息w。\n依据本发明实施例,还公开了一种用于数字签名的系统,包括:\n公钥生成单元,用于生成一包含有E’(x)的公钥,所述E’(x)为在域F上的从(x1,...,xm)到(y1,...,yn’)的非线性映射函数组;xi和yj是域F中的元素,1≤i≤m,1≤j≤n’;令x=(x1,...,xm),y=(y1,...,yn’),x、y’均为由域F中的元素所组成的向量;并且,所述E’(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);其中,m,n,n’为正整数,m>n≥n’;\n私钥生成单元,用于生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n签名单元,用于采用所述私钥先把待签名的消息y”变换为z,然后运用单向函数链的逆函数H-1(z)以及私钥将z转换为数字签名w;以及\n验证单元,用于通过单向函数链H(w)将数字签名w转换为x,然后采用所述公钥对所述x进行译码,得到译码结果y;以及,比较译码结果y和待验证的消息y’,根据比较结果确定数字签名w是否正确。\n依据本发明实施例,还公开了一种用于编码和译码数字消息的系统,包括:\n公钥生成单元,用于生成一包含有E’(x,ID)的公钥,所述E’(x,ID)为在域F上的从(x1,...,xm,ID1,...,IDr)到(y1,...,yn’)的非线性映射函数组,所述ID=(ID1,...,IDr)为授权用户的身份标识;xi、yj和IDk是域F中的元素,1≤i≤m,1≤j≤n,1≤k≤r;令x=(x1,...,xm),y=(y1,...,yn’),ID=(ID1,...,IDr),x、y、ID均为由域F中的元素所组成的向量;并且,所述E’(x,ID)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);其中,m,n,n’,r为正整数,m>n≥n’;\n私钥生成单元,用于针对身份标识为ID(K)的授权用户,生成一与该身份标识相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n加解密单元,用于采用所述公钥、单向函数链H(w)和ID(K),对消息M 进行编码,得到编码消息N;采用所述私钥和单向函数链的逆函数H-1(z)对该编码消息N进行译码,得到译码消息L;\n或者,签名验证单元,用于采用所述私钥和单向函数链的逆函数H-1(z)对消息M’进行编码,得到编码消息N’;采用所述公钥、单向函数链H(w)和ID(K),对该编码消息N’进行译码,得到译码消息L’。\n与现有技术相比,本发明具有以下优点:\n(1)本发明的加密算法以及可恢复的签名算法,其明文与密文、签名与数据之间的转换,等价为其一部分方程为单向函数的联立置换方程组。由于单向函数以一种几乎随机的方式把比特串映射到比特串,彻底破坏了原有的代数关系,使得单向函数链的数学变换规则等价于稠密多项式组,把它完全展开需要占用指数级的存储空间,从而在解方程时,必然会遇到单向函数难以展开的巨大困难。\n(2)本发明进一步将安全性归结为交替运用因式分解(factorization,主要针对“乘法”)和函数分解(decomposition,主要针对“迭代”)来分析隐藏在该有理分式不定方程组内部的多层嵌套结构的困难性;把多个简单函数组合成复杂函数,使密码的安全性不依赖于单一的变量,而依赖于多层的连锁关系,从而实现了:直接设置一个复杂表述的数学难题,但这个难题很难被证明等价于一个已知的简单表述的数学难题。\n(3)在保持明文、签名的分组长度不变的条件下,可通过增加公钥的函数规模,来任意增加密码系统的安全性。\n其次,在MQ发表后的20多年,才由发明人提出了本技术方案,其技术创新性充分体现在:\n(1)由“单向函数链”而带来的意想不到的有益效果,需要足够高的数学水平才能理解。例如,为什么MQ只能签名、不能加密其原因是:如果MQ的公钥是置换方程(即它的变元数量与多项式数量相等),就容易被 base(格罗布纳基)等方法破译。 base属于抽象代数的范畴,有深刻的理论背景。对于本领域一般技术人员来说,提出对抗 base攻击的有效方法,需要做创造性的研究。本发明创新的将单向函数组成函数链,并与接口函数以及公私钥有机结合,一方面实现了编码译码过程的可逆性(即使在变元数量大于多项式数量的情况下),另一方面使得运用 base等方法破译必然会遇到稠密多项式的分解问题。\n(2)提出“单向函数链”的概念,并设计出可行的、实用的、完整的技术解决方案,需要很高的技术门槛:不仅要把握当代数学前沿的进展,还要有丰富的实际编码经验和分析水平,能熟练地运用一些特殊的数学技巧,对密码的规律和本质有深刻的理解,并有一定的工程实现能力,此外还要依赖于灵感、机遇等非确定因素;而不是有了资金投入就一定能解决的问题。本说明书给出的大量诀窍性知识,经历了从科学理论到编码实践的反复过程,是发明人长期思考的结果。本发明的完成还涉及到大量数学公式的自动化推导技术,需要编制专用的软件系统。如果没有这些开拓性的研究积累,本领域一般技术人员很难完成方案的设计。\n(3)提出“单向函数链”的技术方案,需要克服技术偏见。1985年以来,国际密码学术界对MQ进行了深入分析,发表了大量文献,尤其是最近Wolf的总结性研究(C.Wolf,《Multivariate Quadratic Polynomials in Public KeyCryptography》,Katholieke Universiteit Leuven,ISBN 90-5682-649-2,2005.),提出构造MQ的十种基本算法,四种基本陷门,在分析现有技术进展的基础上设计出一种扩展TTS签名方案等。但Wolf的研究仍然不能从根本上克服上述MQ的缺点。20多年来的大部分研究都是在MQ框架内部挖潜力,而没有像本发明那样冲破MQ框架向外部拓展——添加单向函数链,在更大的算法空间中建立新的公钥密码体制。\n此外,单向函数链的设计还克服了长久以来对单向函数在理解、使用上的技术偏见:虽然单个的单向函数不可逆,但把若干个单向函数巧妙地组织起来,形成了一个相互制约的系统——单向函数链,却是可逆的;目前对单向函数的传统应用主要考察它的不可求逆性和抗碰撞性,而本发明则进一步要求它还要具备用多项式来表示时的稠密性。\n本发明的优选技术方案,与MQ相比,其有益效果还体现在:\n(1)用有理分式取代多项式,相当于把MQ的二次稀疏多项式提升为高次稠密多项式,使等价于公钥的多项式函数的规模发生爆炸,从本质上提高了求不定方程组的逆函数的困难性。\n(2)运用ID映射的方法,建立基于身份的工作方式。全网所有用户共用一个公钥,为网络环境下的公钥管理带来了极大的方便。运用“多个分配中心 合成私钥”和“私钥形态个性化”的方法,提高密码系统的抗合谋攻击能力。\n附图说明\n图1是用于编码和译码数字消息的方法实施例的步骤流程图;\n图2是用于数字签名的方法实施例的步骤流程图;\n图3是本发明实施例的数据流向示意图;\n图4是H(x)、R(x)与H-1(z)的关系示意图;\n图5是m=3、n=2的小数据实施例的加密或验证签名过程的数据流向图;\n图6是m=3、n=2的小数据实施例的解密或签名过程的数据流向图;\n图7是基于身份方式下用于编码和译码数字消息的优选实施例的步骤流程图;\n图8是多个私钥分配中心联合建立私钥的示意图;\n图9是m=12、n=8的小数据实施例实现私钥形态个性化的数据流向图;\n图10是m=12、n=8的小数据实施例的加密过程数据流向图。\n具体实施方式\n为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。\n本发明属于信息安全产品的范畴,主要应用于网络信任系统,例如证件、银行、手机、互联网、电子商务、电子政务、物流、网络监控、权力控制、资金转移、交易、数据加密等环节。\n应用本发明所需的硬件环境属于本领域技术人员所熟知的知识。其中:公钥生成单元、私钥生成单元、单向函数链确定单元,涉及到复杂数学公式的自动化推导,一般应采用高端的计算机系统;加解密单元、签名验证单元,只涉及到对给定的数学式的求值计算,可采用各种档次的硬件平台,例如单片机、专用数字信号处理芯片、智能卡等。\n下面对本发明可能涉及的一些术语进行简单解释:\n密码:通常可理解为进行信息加密和解密变换的算法。它的基本目的是伪装信息,使局外人不能理解信息的真正含义,而局内人能够理解伪装信息的本来含义。\n密钥:在执行密码算法的过程中,唯一能控制明文与密文之间进行有效变 换的关键参数,叫做密钥。\n公钥密码体制:公钥密码体制使用两个密钥——一个公开密钥(简称:公钥)和一个私人密钥(简称:私钥)。公钥和私钥在数学上是相关的,但由公钥计算出私钥是困难的。公钥可在通信双方之间公开传递,也可以像电话号码本一样公开发布,私钥则由授权用户自己秘密保管。任何人从某个用户的名字就能查到它的公钥,因而可以给这个用户发送加密消息。只有授权用户自己才能用他的私钥完成解密。\n公钥密码体制还提供了数字签名及认证的能力:授权用户能用他的私钥对信息进行签名(相当于上述用私钥解密的过程);其他用户由于不掌握私钥而不能进行签名,但能用该用户的公钥验证签名的正确性(相当于上述用公钥加密的过程)。数字签名算法有两种类型:可恢复的数字签名体制:由签名可以推导出被签名的数据;不可恢复的数字签名体制:由签名不能推导出被签名的数据。\n有限域(finite field):是一种具体而又形象的数学结构,可以通俗地理解为能进行加减乘除四则运算的有限个元素的集合。(通常记做F,当有限域的元素数量为素数p时,记做Fp。)\n有限域上的多项式(polynomial):通俗地理解:当只有一个变元时:\nf(x)=asxs+as-1xs-1+...+a0x0(modp)\n其中xi叫作变元,ai叫作系数,aixi叫作项,它们的取值在0,...,p-1之间取值。当有多个变元时:\n\nF上的多项式集合,对于多项式四则运算是域,叫作F的多项式扩域。\n如果多项式中的项的数量相对很少,叫做稀疏多项式;反之叫做稠密多项式。稠密多项式不仅有很高的次数,而且项的数量非常多,把它展开来表示需要占用很大的空间位置。\n有限域上的有理分式(rational fraction):可理解为两个多项式相除:\n\n除了0多项式以外的多项式的乘法逆为\nf(x1,...,xn))-1(modp-1)=(f(x1,...,xn))p-2(modp)\n但当p较大时,把上式展开需要巨大的存储空间,因此两个稀疏多项式相除(分母不为0多项式)的结果,通常是一个稠密多项式:\n\n该性质对于我们理解有理分式公钥密码的安全性非常重要。F上的有理分式集合,对于有理分式的四则运算是域,叫作F的有理分式扩域。\n有限域上的不定方程组(indeterminate equation system)设有限域上的方程组为:\n\n其中gi(x1,...,xm)为多项式或者有理分式,如果未知元数量m多于方程数量n,上式称为Fp的m元n阶不定方程组,通常也称为丢番图方程。不定方程组的解是一个很大的(x1,...,xm)的向量值的集合。\n当上述不定方程组有解时,它的解通常是一个由有限域上m维空间中的点组成的集合,可以表现为代数曲线、代数曲面乃至高度复杂的高维代数簇(若干个多项式的公共根的集合)。\n单向函数:设函数为y=Hash(x),已知x计算y是容易的,反之由y计算x是困难的,这种函数称为单向函数,也叫做杂凑函数、散列函数、Hash函数等,已被广泛应用于数据完整性检验和信息认证。它把一个任意长度的数据x,经过复杂的运算转换成一个固定长度或固定数域的数值或信息串y。\n构造单向函数的方法属于公知技术。当前最流行的单向函数算法是MD5和SHA-1(美国联邦信息处理标准FIPS180-1);更强的单向函数算法还有SHA-256、SHA-384和SHA-512等(美国联邦信息处理标准FIPS180-2)。\n本发明中规定的域F,可采用元素数量为素数p的有限域Fp,但不局限于这种Fp,而是可以推广到各种域。当F为有限域时,函数或变元的幂运算, 包括整数幂运算和分数幂运算,在经过展开、化简、整理之后,均可以转换成有理分式的表示形式。\n本发明中所述的编码消息可以由一地点的用户产生,并传送至另一地点,然后由该另一地点的用户译码,即编码译码可以不在同一地点。当然,在同一地点进行编码和译码是一种更简单的情况。\n参照图1,示出了本发明一种用于编码和译码数字消息的方法实施例的步骤流程图,具体可以包括以下步骤:\n步骤101、选择正整数m,n,其中,m>n;\n步骤102、生成一包含有E(x)的公钥,其中,E(x)为在域F上的从(x1,...,xm)到(y1,...,yn)的非线性映射函数组;并且,所述E(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n步骤103、生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n步骤104、设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n步骤105、通过单向函数链H(w)将消息w转换为中间结果x,然后采用所述公钥对所述中间结果x进行编码,得到编码结果y;和\n步骤106、采用所述私钥将编码结果y变换为中间结果z,然后运用单向函数链的逆函数H-1(z)以及私钥将中间结果z转换为译码消息w。\n对于本实施例而言,可以应用各种加解密的场合,例如,步骤105主要应用于加密的情况,而步骤106主要应用于解密的情况。当然,对于不同的应用场合,参数不同,其编译码的性能也有优劣之分,本说明书后面会提出更为优选的实施例加以说明。\n参照图2,示出了一种用于数字签名的方法实施例,具体可以包括:\n步骤201、选择正整数m,n,n’,其中,m>n≥n’;\n步骤202、生成一包含有E’(x)的公钥,其中,E’(x)为在域F上的从(x1,...,xm)到(y1,...,yn′)的非线性映射函数组;并且,所述E’(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n步骤203、生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n步骤204、设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n步骤205、采用所述私钥先把待签名的消息y”变换为中间结果z,然后运用单向函数链的逆函数H-1(z)以及私钥将中间结果z转换为数字签名w;和\n步骤206、通过单向函数链H(w)将数字签名w转换为中间结果x,然后采用所述公钥对所述中间结果x进行译码,得到译码结果y;\n步骤207、比较译码结果y和待验证的消息y’,根据比较结果确定数字签名w是否正确。\n对于本实施例而言,可以应用各种数字签名的场合,例如,步骤205主要应用于对消息进行签名的情况,而步骤206和207则主要应用于对签名进行验证的情况。\n将上述两个实施例统一起来看,则实际上,当m>n≥n’时,可以应用于各种数字签名的情况,而当m>n=n’时,可以应用于各种加解密的情况。\n在设计中,一个给定的E(x)不一定就是一个公钥E’(x)(假设公钥没有其他参数时,公钥就可以认为是E’(x)),根据n=n’还是n>n’,后者是前者的全部或一部分。\n一个公钥在数学性质上、即在给定的输入输出消息的变换规则上,只对应一个私钥;当然这个私钥可以采用不同的表现形式。\n建立公钥与私钥的具体方法很多,这属于数学设计方面的内容,在公钥体制的应用的这么多年中,本领域技术人员也具有了较多的针对该方面的技术沉淀,在此不详述了。但本发明可以给出一个较为优选的基本思路:随机产生若干个简单的可逆线性变换与可逆非线性变换,运用各种方法(迭代、相乘、相除、相加等)组装成一个整体,再展开、化简、整理而得到一个公钥;运用这些可逆线性变换和可逆非线性变换的逆函数,可以对公钥求逆,作为该公钥对应的私钥。\n参照图3,所示的是本实施例的数据流向图,包括加解密和数字签名等数据处理流程。其中,m>n=n’时,可以用于加解密以及可恢复的签名;当m>n>n’时,可以用于不可恢复的签名。\n对于可恢复的签名,译码消息和原始消息的全部数据进行比较,即可判断出是否属于正确的签名;而对于不可恢复的签名(即说明书中n>n’的情况), 是用译码消息与原始消息的一部分进行比较,即可判断出是否属于正确的签名。\n上述实施例的步骤中并没有必然的先后顺序,数字排序仅仅是为了说明的方便,各步骤的顺序可以实际情况进行调整。其中,所述的“单向函数”的具体实现方法,属于公知技术,在此就不详述了。\n本实施例引入了单向函数链,用于先将原始消息进行扩张,然后再压缩,并能够满足可逆的需求,因而,能够在具有较高安全性能的情况下适用于各种加解密和数字签名的场合。\n单向函数链有两个性质:\n一是复杂性:其数学性质应理解为稠密多项式函数组:\nxj=fj(w1,...,wn),\nxj,wi∈F,1≤j≤m,1≤i≤n,\n上式作为把明文变换成密文的置换方程组的一部分,使解方程遇到巨大困难;\n二是可逆性:当m>n时,(x1,...,xm)中有一部分变元是多余的,只需要其中的n个变元就能恢复出(w1,...,wn)。例如在图5的实施例中,不使用x3,只要运用x1、x2依次计算:w2=x2-H2(x1),w1=x1-H1(w2),就能恢复出w1、w2。\n实现上述性质的基本方法是:对于i=1,2,...(其顺序可任意规定),不断把wj(j≠i),经过单向函数的变换后,加到wi上。仍以图5为例:把w2经过H1的变换后加到w1,得到x1,再把x1经过H2的变换后加到w2,得到x2,依此类推,实现多层单向函数嵌套的、可逆的单向函数链。\n从数学的角度描述本发明的一个优选例子如下:\n(1)设w=(w1,...,wn),x=(x1,...,xm),y=(y1,...,yn),wi,xj,yk∈F,正整数m>n≥n’,F为规定的域;设置一个单向函数链,即设置一个由w到x的映射函数:x=H(w);该H(w)是用若干个单向函数来实现的、可逆的非线性变换,通过运用若干个单向函数H1(.),...,HL(.)的组合运算,把w扩张为x;该H(w)等价于F上的m个关于w1,...,wn的n元稠密多项式函数;已知H(w)的算法,由x求w是容易的;\n(2)建立函数R(x):u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x),其用于把x转换成n个F上的关于x1,...,xm的多项式函数;\n(3)由H(w)、R(x)推导出单向函数链的逆函数,其满足:\nw=H-1(R(H(w)))=H-1(u0)=H-1(z),\n其中,z=(z1,...,zn)=u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm)),zi∈F,u0i(x1,...,xm)是F上的关于(x1,...,xm)的多项式函数,zi是函数u0i(x1,...,xm)的值;\n(4)把H(w)作为公开的加密算法的一部分,把u0(x)合成到公钥中的n个m元函数组中,把H-1(z)作为解密算法的一部分,把R(x)的计算参数作为私钥的一部分。\n当运用公钥E’(x)来进行加密的数据处理时:\n首先运用H(w)把明文w扩张为中间结果x,即计算:x=H(w);\n然后运用公钥E’(x)把x压缩为密文y,即计算:y=E’(x)。\n下面简单介绍接口函数R(x):\n接口函数R(x)主要用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数,一般表示为:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n其中,最简单的R(x)为:对于m=n,把(x1,...,xm)转换为(x1,...,xn)的恒等变换。\n在本发明中,接口函数R(x)的功能可以理解为:把计算单向函数链x=H(w)而得到的m个变量(x1,...,xm),转换为n个关于(x1,...,xm)的函数,从而实现单向函数链H(w)与公钥E’(x)的结合,并把经过单向函数链扩张后的中间结果再缩小回来。它的数学描述通常很简单,例如图5中,对于m=3,n=2,把x1,x2,x3三个变量,转换为两个多项式:u01=x1+e3x3,u02=x2。R(x)的信息,包括u01、u02的函数形式和系数e3的数值,均属于非授权用户不应知道的秘密信息。当然,本领域技术人员可以依据R(x)的特性,设计出很多种模式,在此无法一一详述。\nR(x)本身并不具有可逆性,但结合H(w)的知识它就可逆了。即虽然不能仅从u01、u02的值z1、z2来恢复x1、x2、x3,但是借助于完全公开的H(w)的知识“x3=H3(x2)”,以及隐藏在E(x)中的R(x)的秘密参数e3,可计算出:x1=z1- e3x3=z1-e3H3(z2),x2=z2。\n采用任何符合本发明公钥属性要求的公钥生成方法完全是可行的,但是优选的,本实施例可以通过以下步骤得到公钥和私钥:\n步骤a、选取s+1个域F上的n元可逆线性变换T=(T1,...,Ts+1),其中,每个Ti包括n个域F上的关于(α1,...,αn)的n元线性多项式;\n步骤b、选取s个域F上的n元可逆非线性变换G=(G1,...,Gs),其中,每个Gi包括n个域F上的关于(α1,...,αn)的函数;\n其中,所述的函数可以包括多项式、有理分式等各种函数类型,本发明并不需要对此加以限制。\n步骤c、依据预置规则,合成所述u0(x)、T和G,得到从x到y的非线性映射函数组:(y1,...,yn)=E(x)=(E1(x1,...,xm),...,En(x1,...,xm));\n合成所述u0(x)、T和G的目的,在于将R(x)、T和G的有关信息嵌入并隐藏在公钥中,这些信息均属于非授权用户不应知道的秘密信息。为了达到隐藏目的,采用各种预置合成规则都是可行的。把u0(x)、T和G从E’(x)中分离出来非常困难,需要交替运用因式分解(factorization,主要针对“乘法”)和函数分解(decomposition,主要针对“迭代”)来分析隐藏在该不定方程组内部的多层嵌套结构。\n步骤d、选取E(x)中的n’个函数作为E’(x),得到公钥;其中,E’(x)中含有关于(x1,...,xm)的函数;E’(x)=(E1(x1,...,xm),...,En’(x1,...,xm));把公钥向全体用户公开;\n当m>n=n’,即步骤f中的选取并不删除函数,而选取E(x)中所有的函数作为E’(x)。此时本实施例可以用于加解密和数字签名等各种情况。\n当m>n>n’,即步骤f中采用了舍弃一部分函数的方法,此时本实施例可以用于数字签名的情况。\n当m=n=n’,此时的安全性能较差;当m=n>n’,此时本实施例可以用于数字签名的情况。进一步,如果本实施例中优选采用接口函数R(x)实现把m个变元,转换成n个多项式,则可以保证m>n。当然,如果依据实际情况需要m=n,则本领域技术人员可以根据各种现有技术得到,在此就不再详述。\n步骤g、生成T的逆函数T-1;生成G的逆函数G-1;由T-1和G-1计算得 到D(y);生成私钥,所述私钥包括R(x)和D(y),把该私钥发给授权用户秘密保存。所述私钥中的R(x)用于同单向函数链的逆函数H-1(z)一起将中间结果z转换为译码消息w。\n上述步骤e中所述的预置规则,可以由本领域技术人员根据实际情况进行设置即可。\n优选的,如果期望得到的E’(x)中含有关于(x1,...,xm)的有理分式函数,则所述预置规则可以为以下两种情况:\n把函数组u0(x)代入到T1,把T1代入到G1,把G1代入到T2,把T2代入到G2,...,把Tj代入到Gj,...,把Ts代入到Gs,把Gs代入到Ts+1;\n或者,把函数组u0(x)代入到T1,把T1代入到G1,把G1代入到T2,把T2代入到G2,...,把Tj代入到Gj,...,把Ts代入到Gs。\n对于上述两种可能的方式而言,当最后为线性变换Ts+1时,所得到的有理分式的公钥,其每个有理分式的分母多项式是相同的;当最后为非线性变换Gs时,其公钥中每个有理分式的分母多项式通常都不同。对于工程应用,默认相同的分母,可以节省公钥存储空间(只要存储n+1个,而不是2n个多项式),提高运算速度(只要计算n+1个,而不是2n个多项式的值)。\n相应的,针对上述实施例,本发明还提供了两个装置实施例:\n一种用于编码和译码数字消息的系统实施例,具体可以包括:\n公钥生成单元,用于生成一包含有E(x)的公钥,其中,E(x)为在域F上的从(x1,...,xm)到(y1,...,yn)的非线性映射函数组,m,n为正整数,m>n;并且,所述E(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n私钥生成单元,用于生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n加密单元,用于通过单向函数链H(w)将消息w转换为中间结果x,然后采用所述公钥对所述中间结果x进行编码,得到编码结果y;和\n解密单元,用于采用所述私钥将编码结果y变换为中间结果z,然后运用单向函数链的逆函数H-1(z)以及私钥将中间结果z转换为译码消息w。\n以及,一种用于数字签名的系统实施例,具体包括:\n公钥生成单元,用于生成一包含有E’(x)的公钥,所述E’(x)为在域F上的从(x1,...,xm)到(y1,...,yn,)的非线性映射函数组;并且,所述E’(x)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);其中,m,n,n’为正整数,m>n≥n’;\n私钥生成单元,用于生成一与所述公钥相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n签名单元,用于采用所述私钥先把待签名的消息y”变换为中间结果z,然后运用单向函数链的逆函数H-1(z)以及私钥将中间结果z转换为数字签名w;以及\n验证单元,用于通过单向函数链H(w)将数字签名w转换为中间结果x,然后采用所述公钥对所述中间结果x进行译码,得到译码结果y;\n比较译码结果y和待验证的消息y’,根据比较结果确定数字签名w是否正确。\n下面简单介绍单项函数链的生成:\n当然,建立单向函数链的方法不局限于以下的方法,而是可以推广到满足单向函数链功能的各种方法。本发明仅仅举出一优选实施例进行说明而已。\n第一步,建立单向函数链。设置L个单向函数:β=Hi(α1,α2,...),i=1,...,L,L≥(m-n),α1,α2,...,β∈Fp,其输入为若干个模p的整数,其输出为一个模p的整数。单向函数的求逆,即由其输出求其输入是困难的。用L个单向函数设置一个单向函数链:\nx=(x1,...,xm)=H(w)=H(w1,...,wn),\n使得从w到x的映射虽然是复杂的稠密多项式函数,将其展开、化简非常困难,但对它求逆,即由x求w却是容易的。本实施例的具体做法为:\n(1)设置函数(x1,...,xn)=K1(w1,...,wn):\n首先,令L2=m-n,L1=L-L2,(x1,...,xn)=(w1,...,wn),设置指针θ(1),...,θ(L1),1≤θ(i)≤n;\n然后,对于i=1,...,L1,依次替换:\nxθ(i)←(xθ(i)+Hi(x1,...,xθ(i)-1,xθ(i)+1,...,xn))modp。\n在本实施例中,我们把θ(i)设置为从1到n的循环。\n(2)设置函数(xn+1,...,xm)=K2(x1,...,xn):运用单向函数Hj,j=L1+1,...,L,由x1,...,xn计算出xn+1,...,xm。\n在本实施例中的函数K2为:对于i=1,...,L2,依次计算: \n(3)把上述的K1、K2合成为H(w):\nx=(x1,...,xn,xn+1,...,xm)=(K1(w1,...,wn),K2(K1(w1,...,wn)))。\n也就是把K1、K2的计算结果链接起来,作为H(w)的计算结果。\n第二步,设置函数u0(x),即把x转换成n个关于x的多项式u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x),满足已知u0、R(x)、HL1+1、...、HL,求(x1,...,xn)容易;\n在本实施例中的函数R(x)的算法为:令u0=(x1,...,xn),e1=...=en=1,随机选择en+1,...,em∈Fp;规定指针η(i),i=n+1,...,m,1≤η(i)≤n,但是η(i)≠θ(L1);对于i=n+1,...,m,依次替换:\nu0,η(i)←(u0,η(i)+eixi)modp。\n第三步,推导出单向函数链的逆:w=(w1,...,wn)=H-1(z)=H-1(z1,...,zn),满足:\nw=H-1(R(H(w)))=H-1(u0)。\n在本实施例中的H-1(z)的算法为:首先,对于i=m,...,n+1,依次替换:\n\n然后,对于i=L1,...,1,依次替换:\nzθ(i)←(zθ(i)-Hi(z1,...,zθ(i)-1,zθ(i)+1,...,zn)modp;\n最后,令(w1,...,wn)=(z1,...,zn)。\n第四步,把H(w)、H-1(z)作为密码算法公开发布,而把R(x)的算法参数(例如(e1,...,em)作为私钥的一部分,配发给授权用户秘密保存。计算H-1(z)需要这些参数。\n所述E’(x)中含有的关于(x1,...,xm)的函数形式可以为多项式,优选的,可 以为多项式和有理分式的组合,或者全部由有理分式组成。\n与多项式相比,有理分式具有显著增大的加密函数规模。为了便于分析,我们把有限域Fp上的有理分式转换为等价的多项式。例如,设本发明的公钥的次数为2,把它转换成多项式的表示形式:\n\n\n\n\n其项的数量将由 ,增加到大约 。例如,当p=5,m=2时:\n\n\n\n\n\n\n而当p=65537,m=8时,这种等价于有理分式的多项式的项的数量,将由MQ时的 大约增加到\n\n显然,规模如此巨大的多项式,虽然在数学世界中是客观存在的,但需要占用指数级的存储空间,实际上是难以操作的。这种性质的有益效果为:把MQ的二次稀疏多项式提升为高次稠密多项式,使等价于公钥的多项式函数的 规模发生爆炸,从本质上提高了求不定方程组的逆函数的困难性,从而显著增加抗破译能力。\n下面对单向函数链能够为编码译码过程带来的益处进行分析,以加解密和可恢复的签名过程为例进行说明。\n当m>n=n’时,E’(x)=E(x),已知密文(或待签名的数据y),破译明文(或关于数据y的签名)w,先要求中间结果x,这种情况相当于解不定方程组:\n(y1,...,yn)=(E1(x1,...,xm),...,En(x1,...,xm))\n其变元数量m大于方程式数量n,符合上述方程组的x的解很多,表现为一个巨大的解集。但是,我们把单向函数链与上述方程组放在一起,组成一个关于未知元w的联立方程组:\n\n其中,单向函数链由若干个含有单向函数变换的方程式组成,例如对于说明书中m=3、n=2、只有三个单向函数H1、H2、H3的情况:\n\n由于从w到y是可逆变换,上式为置换方程组,已知y求w有唯一解。然而,上式中的单向函数具有“以一种几乎随机的方式把比特串映射到比特串”的性质,即很难用一种简单的数学变换规则来描述其输入输出之间的规律性,它等价于稠密多项式,把它完全展开需要占用指数级的存储空间。因此,在解上述方程组时,要把某个含有单向函数的变量代入方程,就会遇到单向函数难以展开的困难,例如在实施例中,把x1、x2、x3看作为w1、w2的函数,代入E1:\ny1=E1(x1,x2,x3)=E1(w1+H1(w2),w2+H2(x1),H3(x2))\n=E1((w1+H1(w2)),(w2+H2(w1+H1(w2))),(H3(w2+H2(w1+H1(w2)))))代入到实际的E1:\ny1=((9+16x1+9x12+10x2+10x1x2+x22+15x3+2x1x3+3x2x3+2x32)/(12+13x1+x12+14x2+9x1x2+14x22+9x3+4x1x3+x2x3+4x32))mod17\n=((9+16(w1+H1(w2))+9(w1+H1(w2))2+10(w2+H2(w1+H1(w2)))+10(w1+H1(w2))(w2+H2(w1+H1(w2)))+(w2+H2(w1+H1(w2)))2+15(H3(w2+H2(w1+H1(w2))))+2(w1+H1(w2))(H3(w2+H2(w1+H1(w2))))+3(w2+H2(w1+H1(w2)))(H3(w2+H2(w1+H1(w2))))+2(H3(w2+H2(w1+H1(w2))))2)/(12+13(w1+H1(w2))+(w1+H1(w2))2+14(w2+H2(w1+H1(w2)))+9(w1+H1(w2))(w2+H2(w1+H1(w2)))+14(w2+H2(w1+H1(w2)))2+9(H3(w2+H2(w1+H1(w2))))+4(w1+H1(w2))(H3(w2+H2(w1+H1(w2))))+(w2+H2(w1+H1(w2)))(H3(w2+H2(w1+H1(w2))))+4(H3(w2+H2(w1+H1(w2))))2))mod17\n显然,把上式展开为关于w1、w2的多项式是不可行的。实际上,即使不把单向函数展开,仅仅把y1表示为如上所述的关于w1、w2的函数形式,随着单向函数嵌套层次的增加和复杂化,其函数规模也会发生组合爆炸。按照当今世界最先进的计算技术,解这类方程必将遇到巨大困难。\n下面对前述实施例的详细实现过程举例进行描述,其中,直接将E’(x)作为公钥进行说明。详细步骤如下:\n第一步、建立单向函数链H(w)\n首先,设置密码算法的结构。例如设F为有限域Fp,p为素数,正整数m≥n≥n’并且m>n’。设w=(w1,...,wn),x=(x1,...,xm),y=(y1,...,yn),z=(z1,...,zn),wi,xi,yi,zi∈F。\n建立单向函数链:x=H(w),其运用若干个单向函数H1(.),...,HL(.)的组合运算,把w转换为x,该H(w)是一个足够复杂的、可逆的非线性变换;\n建立接口函数R(x):u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x),其把x转换为n个关于x1,...,xm的函数;\n由H(w)、R(x)推导出单向函数链的逆:w=H-1(z),其满足:\nw=H-1(z)=H-1(u0(x))=H-1(R(H(w)));\n把H(w)作为公开的密码算法的一部分,把R(x)作为私钥的一部分,计算 H-1(z)需要使用R(x)。\n第二步、建立密码参数T、G\n随机选择s+1个F上的n元线性变换T,其中,每个n元线性变换Ti由n个F上的关于α1,...,αn的n元线性多项式组成:\nT=(T1,...,Ts+1),其中:\nTi=(Ti1(α1,...,αn),...,Tin(α1,...,αn)),\nβj=Tij(α1,...,αn)=bij0+bij1α1+bij2α2+...+bijnαn,\nαj,βj,bijk∈F,1≤i≤s+1,1≤j≤n,0≤k≤n;\n然后,推导出T的逆函数T-1,即分别推导出上述的s+1个n元线性变换的逆变换,其中,每个逆变换Ti-1由n个F上的关于β1,...,βn的n元线性多项式组成:\nT-1=(T1-1,...,Ts+1-1),其中:\nTi-1=(Ti1-1(β1,...,βn),...,Tin-1(β1,...,βn)),\nαj=Tij-1(β1,...,βn)=cij0+cij1β1+cij2β2+...+cijnβn,\nαj,βj,cijk∈F,1≤i≤s+1,1≤j≤n,0≤k≤n;\n随机选择s个F上的n元可逆非线性变换G,每个n元可逆非线性变换Gi由n个F上的关于α1,...,αn的函数组成:\nG=(G1,...,Gs),其中:\nGi=(Gi1(α1,...,αn),...,Gin(α1,...,αn)),\n\nαj,βj,∈F,1≤i≤s,1≤j≤n,lij0≥0,lij1≥0;\n然后,推导出G的逆函数G-1,即分别推导出上述的s个n元可逆非线性变换的逆变换,其中,每个逆变换Gi-1由n个F上的关于β1,...,βn的函数组成:\nG-1=(G1-1,...,Gs-1),其中:\nGi-1=(Gi1-1(β1,...,βn),...,Gin-1(β1,...,βn)),\n\nαj,βj,gij0,k1...kn,∈F,1≤i≤s,1≤j≤n,\n所述的T、T-1、G、G-1的具体实现方法均为公知技术,在此不进行详述。\n第三步、把函数组u0(x)、T、G合成为E(x),建立公钥E’(x)\n把所述的u0(x)、T、G合成为F上的m个输入、n个输出的非线性变换:\nE(x)=Ts+1(Gs(Ts(...Gj(Tj(...G2(T2(G1(T1(u0(x)))))...))...))),\n即把函数组u0(x)代入到T1,把T1代入到G1,把G1代入到T2,把T2代入到G2,…,把Tj代入到Gj,…,把Ts代入到Gs,把Gs代入到Ts+1。在合成过程中也可以不使用线性变换Ts+1。把E(x)展开、化简后,得到n个F上的m元函数:\n\nxi,yj,∈F,1≤i≤m,1≤j≤n,πj0≥0,πj1≥0;\n并且在π10,π20,...,πn’0中至少有一个πj0≥1,即它们之中至少有一个是有理分式。\n把E’(x)规定为E(x)中的n’个函数\n\n则:(y1,...,yn’)=E’(x)是F上的关于x1,...,xm的m元不定方程组;\n把E’(x)作为公钥。\n第四步、把T-1、G-1合成为D(y),建立私钥{D(y),R(x)}\n把T-1、G-1合成为F上的n个输入、n个输出的变换,其由n个关于y1,...,yn的n元函数组成:\nD(y)=(D1(y1,...,yn),...,Dn(y1,...,yn)),\n该D(y)可以采用各种函数表示形式:既可用展开、化简之后的n个函数式来表示,也可直接用T-1、G-1来表示,还可用其它函数形式来表示;\n把{D(y),R(x)}作为私钥;\n第五步、进行加密与解密、数字签名与验证\n设经过单向函数变换以后的被签名的数据为y=(y1,...,yn)、待验证的数据为y’=(y’1,...,y’n);\n若n=n’,即E’(x)=E(x)时,本发明既能实现加密,也能实现可恢复数据的签名,其方法为:\n运用公钥E’(x)进行加密或验证数字签名时,把明文w、或数字签名w,转换成密文y、或数据y,其计算方法为:y=E’(x)=E’(H(w)),如果y=y’,则接受签名,否则拒绝签名;\n运用私钥{D(y),R(x)}进行解密或产生数字签名时,把密文y、或数据y,转换成明文w、或数字签名w,其计算方法为:w=H-1(z)=H-1(D(y));\n若n>n’,即 时,本发明只能实现不可恢复数据的签名,不能实现加密,其方法为:\n运用私钥{D(y),R(x)}产生数字签名时,把数据y,转换成数字签名w,其计算方法为:w=H-1(z)=H-1(D(y));\n运用公钥E’(x)验证数字签名时,其计算方法为:(y1,...,yn’)=E’(x)=E’(H(w)),如果(y1,...,yn’)=(y’1,...,y’n’),则接受签名,否则拒绝签名。\n下面介绍一些上述具体实现过程中的诀窍性知识:\n优选的建立T的方法是:随机设置由s+1个Fp上n阶可逆方阵组成的方阵组A={A1,...,As+1},其逆为A-1={A1-1,...,As+1-1},以及由s+1个Fp上n阶向量组成的向量组B={B1,...,Bs+1};其线性变换和逆变换为:vi=Aiui-1+Bi,ui-1=Ai-1(vi-Bi),i=0,...,s。这种“线性变换”,对于有理分式中多项式来说,当分式的加法需要通分时,将使该多项式的次数增加,应理解为一种非线性变换。\n优选的建立G的方法是:预先建立一个足够大的函数库;以后在需要时,从该库中随机抽取若干个简单函数,按照一定规则组合成复杂的加解密函数。\n其中,优选的建立函数库的方法是:选择若干种不同类型的、其自变量数 目不超过n、并对于其最后一个自变量可逆的、Fp上的多项式函数或有理分式函数,按其自变量数目划分成n个类\nS={S1,...,Sn},其中:\nSi={β=G(ij)(α1,...,αi),αi=G(ij)-1(α1,...,αi-1,β),j=1,2,...},\nαi,β∈Fp,i=1,...,n,\n上式中的G(ij)、G(ij)-1表示自变量数目为i、在Si中的编号为j的一对互逆的函数。例如:对于i=1,在该函数库中S1至少可建立两条记录(设参数t1,t2,...∈Fp):\nG(11):β=(t1α1+t2)modp;G(11)-1: \nG(12): G(12)-1: \n对于i=2,在函数库中S2至少可建立4条记录:\nG(21):β=(t1α1α2+t2α12+t3α1)modp,G(21)-1: \nG(22): G(22)-1: \nG(23): G(23)-1: \nG(24): G(24)-1: \n建库完成后,还要分析其每种函数的性质、其若干函数的不同组合的性质、以及其最佳使用方式,制定出自动生成密码算法方案的规则和策略,并编写出实现这些规则和策略的软件。\n进一步,运用上述的函数库建立G的方法是:对于i=1,...,s,为每个i从函数库S的n个类S1,...,Sn中分别随机选出一对互逆的函数:\nG={G1,...,Gs},其中:Gi=(Gi1(1),...,Gin(n)),\nG-1={G1-1,...,Gs-1},其中:Gi-1=(Gi1(1)-1,...,Gin(n)-1),\nGij(j),Gij(j)-1∈Sj,1≤j≤n,\n上式中的Gij(k)、Gij(k)-1分别表示其自变量数目为k、并对于其第k个自变量可逆、在G、G-1的第i个函数向量中的第j个函数。这种类型的G的优点是:在加密过程中,各函数之间是独立的,后一次计算不需要引用前一次计算的结果;但在解密过程中,后一次计算要引用前一次计算的结果,使得解密函数比加密函数复杂,即:第i层的加密函数向量Gi为:\nui1=Gi1(1)(vi1),\nui2=Gi2(2)(vi1,vi2),\nuin=Gi2(2)(vi1,vi2,...,vin),\n而第i层的对应的解密函数向量Gi-1的函数规模却发生了爆炸:\nvi1=Gi1(1)-1(ui1),\nvi2=Gi2(2)-1(vi1,ui2)=Gi2(2)-1(Gi1(1)-1(ui1),ui2),\nvin=Gin(n)-1(vi1,vi2,...,vi,n-1,uin)\n=Gin(n)-1(Gi1(1)-1(ui1),Gi2(2)-1(Gi1(1)-1(ui1),ui2),...,Gi,n-1(n-1)-1(...),uin)。\n其他问题说明:当我们求有理分式的值时,可能会遇到虽然分母不是0多项式、但分母多项式作为函数的值为0、从而导致加解密发生错误。虽然其概率很小,仍应采取必要的容错或纠错措施。\n参照图4,下面对H(x)、R(x)与H-1(z)的关系进行简单说明:\n在建立公钥过程中,H(w)属于公开的密码算法,R(x)隐藏在函数组E(x)之中,把R(x)以及T、G从E(x)中分离出来是困难的;\n在建立私钥过程中,用T-1、G-1建立D(y),密文y经过D(y)得到中间结果z,也就是加密时的函数组u0(x)的值:\nz=(z1,...,zn)=u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm));\n但是,进一步的解密计算则需要把对H(w)和R(x)的求逆过程看作为一个整体,需要在两者相互配合下建立一个总的逆函数:w=H-1(z)。其原因:在从R(x)的输出z反推R(x)的输入x的过程中,既要使用R(x)自己的参数,也要使用单向函数链H(w),而仅仅运用R(x)不能把z变换成x。所以我们规定H-1(z) 是由z到w的直接变换,并且在计算H-1(z)时需要使用R(x)的参数,H-1(z)满足:w=H-1(z)=H-1(u0(x))=H-1(R(H(w)))。\nR(x)的参数(包括函数形式和系数)是私钥的一部分,将由授权用户秘密保存。\n为更清楚地表述实施例的具体实施方式,下面描述一个小数据的例子,如图5、图6所示,其中,虚框501表示采用单向函数链x=H(w)进行处理的过程,虚框502表示采用公钥E’(x)进行处理的过程;虚框601表示采用私钥z=D(y)进行处理的过程,虚框602表示采用逆函数H-1(z)及私钥的秘密参数e3进行处理的过程。\n设F为有限域Fp,p=17,n=n’=2,m=3,s=1,H1,H2,H3为3个单向函数,为便于验证,我们假定其算法为H1(α)=H2(α)=H3(α)=α3mod17,函数R(x)的参数e3=2,设置单向函数链H(w)的算法为:\nx1=(w1+H1(w2))modp=(w1+w23)modp,\nx2=(w2+H2(x1))modp=(w2+x13)modp=(w2+(w1+w23)3)modp,\nx3=H3(x2)=x23modp=(w2+x13)3modp=(w2+(w1+w23)3)3modp;\n其线性变换T、T-1(用A,B表示)和非线性变换G、G-1分别为:\n \n\n\nB1=(b11,b12)=(1,2),B2=(b21,b22)=(5,7),\nG11(1): G12(2): \nG11(1)-1: G12(2)-1: \n运用上述参数推导出E’(x)=E(x):\nu01=(x1+e3x3)modp,\nu02=x2,\nv11=(a111u01+a112u02+b11)modp,\nv12=(a121u01+a122u02+b12)modp,\nu11=(1/v11)modp,u12=(v11/v12)modp,\n\n\n\n\n代入具体的值,推导出y=(y1,y2)=E(x)=(E1(x1,x2,x3),E2(x1,x2,x3)),其中:\n\n\n\n\n由于n=n’=2,我们规定E’(x)=E(x)。\n然后,推导出对应的解密函数D(y):\nu11=(c211(y1-b21)+c212(y2-b22))modp,\nu12=(c221(y1-b21)+c222(y2-b22))modp,\nv11=(1/u11)modp,\nv12=(v11/u12)modp,\n\n\n\n\n\n\n\n\n\n\n\n\n若D(y)采用展开后表示形式,将上式代入具体的值,推导出z=(z1,...,zn)=D(y)=(D1(y1,y2),D2(y1,y2)),其中:\n\n\n显然,上述的展开后的E(x)、D(y)与展开之前的它们相比,其层次和嵌套方式等结构信息丢失了,这一性质为密码分析带来了巨大的困难;但通常D(y)的次数很高,只有在函数很简单时才能把它完全展开。\n计算单向函数链的逆H-1(z),需要使用私钥的秘密参数的e3:\nx1=(z1-e3H3(z2))modp,\nw2=z2-H2(x1)=(z2-H2(z1-e3H3(z2)))modp,\nw1=x1-H1(w2)=((z1-e3H3(z2))-H1(z2-H2(z1-e3H3(z2))))modp,\n虽然真实的单向函数是不可展开的,但按照本实施例的特殊规定:\nw2=(z2-(z1-2z23)3)modp,\nw1=(z1-2z23-(z2-(z1-2z23)3)3)modp;\n例如:设明文w=(7,8),x=H(w)=(9,6,12),密文y=E(x)=(3,12);z=D(y)=(16,6),恢复的明文w=H-1(z)=(7,8),这说明上述加解密算法是正确的。同理可证明签名算法的正确性。\nPKI(Public Key Infrastructure)是基于公钥密码而建立起来的网络信任技术体制。近年来,PKI建设面临重大挑战,突出表现在管理成本急剧增加。其主要原因之一是目前的公钥密码体制难以适应超大规模网络的复杂使用环境。本发明提出了一个公钥密码应对网络信任体系建设的挑战的基本对策:即采用基于身份的公钥密码编码体制。\n所谓“基于身份”,就是让公钥的内容就是用户的身份标志ID——诸如姓名、电话、Email等信息的某种组合,用这些信息本身,就能直接确定出这个公钥是属于谁的;而不再需要像PKI那样用一个公钥证书把用户的ID与这个用户的公钥绑定在一起。这种技术点的实质是“全网所有用户共用一个公钥”。“基于身份”的实现为网络环境下的公钥管理带来的好处:一是经济效益显著;二是用户容量巨大;三是实现了公钥数据与用户标识的一体化管理。\n参照图7,示出了一种用于编码和译码数字消息的方法实施例,图7示出了步骤流程图。该实施例采用了基于身份的技术点,具体可以包括:\n步骤701、选择正整数m,n,n’,r,其中,m>n≥n’;\n步骤702、生成一包含有E’(x,ID)的公钥,其中,E’(x,ID)为在域F上的从(x1,...,xm,ID1,...,IDr)到(y1,...,yn’)的非线性映射函数组,所述ID=(ID1,...,IDr)为授权用户的身份标识;并且,所述E’(x,ID)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);\n步骤703、针对身份标识为ID(K)的授权用户,生成一与该身份标识相对应的私钥,所述私钥包括R(x);\n步骤704、设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n步骤705、采用所述公钥、单向函数链H(w)和ID(K),对消息M进行编码,得到编码消息N;采用所述私钥和单向函数链的逆函数H-1(z)对该编码消息N进行译码,得到译码消息L;\n或者,步骤706、采用所述私钥和单向函数链的逆函数H-1(z)对消息M’进行编码,得到编码消息N’;采用所述公钥、单向函数链H(w)和ID(K),对该编码消息N’进行译码,得到译码消息L’。\n本实施例可以通过以下步骤得到公钥和私钥:\n设置由x到y的可逆非线性映射函数组:(y1,...,yn)=E(x,ID)=(E1(x1,...,xm,ID1,...,IDr),...,En(x1,...,xm,ID1,...,IDr));\n依据E(x,ID)的逆函数,生成私钥;\n选取E(x,ID)中的n’个函数作为E’(x,ID),得到公钥\n当用于加解密过程时,m>n=n’;而在m>n≥n’的情况下,可以用于各种数字签名的情况。\n优选的,本实施例也可以其他优选步骤得到公钥和私钥,在后面的具体实施例中会详细介绍。\n从数学角度描述本实施例的一个优选例子(以有理分式为例)如下:\n设ID为经过规定的变换以后的用户身份标识,ID=(ID1,...,IDr),r为正整数,IDi∈F;把公钥E’(x)中的系数规定为ID的映射函数,该公钥经过展开、化简、整理后可表示为F上的m+r元非线性变换:\n(y1,...,yn’)=E’(x,ID)\n=(E1(x1,...,xm,ID1,...,IDr),...,En’(x1,...,xm,ID1,...,IDr)),\n\nxi,yj,IDk∈F,\n1≤i≤m,1≤j≤n,1≤k≤r,πj0≥0,πj1≥0,τ>0,\n并且在π10,π20,...,πn’0中至少有一个πj0≥1;把该E’(x,ID)作为公钥密码系统中全体用户共享的基于身份的公钥。\n本实施例中结合“ID映射”的目的在于:实现基于身份的公钥密码体制。下面详细描述具体实现过程的例子:\n第一步、把密码参数T、G规定为ID的函数\n这是与前述实施例有所不同的一个地方:所述T和/或G中的至少一个系 数为ID的映射函数。即,在T中任一个或者多个Ti的至少一个系数为ID的映射函数;和/或,在G中任一个或者多个Gi的至少一个系数为ID的映射函数。优选的,最后一层Ti中的至少一个系数为ID的映射函数;和/或,最后一层Gi中的至少一个系数为ID的映射函数。\n例如,设授权用户的身份标识ID=(ID1,...,IDr),r为正整数,IDi∈F;由私钥分配中心把T、G中的函数的系数,规定为ID的映射函数,从而使T、G成为ID的函数;\n这样做的好处是:限制了公钥E’(x,ID)的函数规模。例如,E’(x,ID)仅仅是关于(ID1,...,IDr)的一次函数。反之,如果把T1中的系数规定为ID的函数,经过非线性变换后ID的次数增加,使得公钥的函数规模太大,降低实用性。\n第二步、把T、G合成为E(x,ID),建立公钥E’(x,ID)\n把u0(x)、T、G合成为F上的非线性变换:\ny=(y1,...,yn)=E(x,ID)\n=(E1(x1,...,xm,ID1,...,IDr),...,En(x1,...,xm,ID1,...,IDr)),\n展开、化简以后,\n\nxi,yj,IDk∈F,\n1≤i≤m,1≤j≤n,1≤k≤r,πj0≥0,πj1≥0,τ>0;\n令E’(x,ID)=(E1(x1,...,xm,ID1,...,IDr),...,En,(x1,...,xm,ID1,...,IDr)),\n\n把E’(x,ID)作为全体用户共享的公钥,公开发布;\n第三步、把T-1、G-1合成为D(y),建立每个用户的私钥{D(y),R(x)}\n私钥分配中心把授权用户的ID代入密码参数T-1、G-1,把T-1、G-1合成为D(y),然后把{D(y),R(x)}作为私钥,发给授权用户秘密保存;\n在上述合成中,ID的微小差别,在经过一系列公式推导后,所得到的公 钥和私钥将出现巨大的差别。\n第四步、进行加密与解密、数字签名与验证\n把授权用户K的身份标识ID(K),代入E’(x,ID),推导出E’K(x),再进行加密或验证数字签名的数据处理,即:y=E’K(x)=E’(x,ID(K))。\n为更清楚地表述本实施例的具体实施方式,下面描述一个小数据的例子:\n设r=1,即ID=(ID),e3=2,B1=(b11,b12)=(1,2),B2=(b21,b22)=(5+15ID+ID2,6+16ID+ID2),\n\n\n\n\n运用上述推导出E(x)的类似方法,计算出全体用户共享的公钥为:\nE’(x,ID)=E(x,ID)=(E1(x1,x2,x3,ID),E2(x1,x2,x3,ID)),其中:\ny1=E1(x1,x2,x3,ID)\n=((16+10ID+13ID2+5x1+10IDx1+9ID2x1+2IDx12+7ID2x12+6x2+14IDx2+11ID2x2+8x1x2+15IDx1x2+16ID2x1x2+16x22+5IDx22+4ID2x22+10x3+3IDx3+ID2x3+8IDx1x3+11ID2x1x3+16x2x3+13IDx2x3+15ID2x2x3+8IDx32+11ID2x32)/(12+13x1+x12+14x2+9x1x2+14x22+9x3+4x1x3+x2x3+4x32))mod17,\ny2=E2(x1,x2,x3,ID)\n=((13+7ID+13ID2+10x1+15IDx1+9ID2x1+13x12+15IDx12+7ID2x12+14x2+5IDx2+11ID2x2+14x1x2+4IDx1x2+16ID2x1x2+10x22+16IDx22+4ID222+3x3+13IDx3+ID2x3+x1x3+9IDx1x3+11ID2x1x3+11x2x3+8IDx2x3+15ID2x2x3+x32+9IDx32+11ID2x32)/(12+13x1+x12+14x2+9x1x2+14x22+9x3+ 4x1x3+x2x3+4x32))mod17;\n私钥分配中心为各个授权用户建立私钥,例如,对于ID=6的用户,把ID的值代入有关的密码参数:\nB2=(b21,b22)=(5+15ID+ID2,6+16ID+ID2)=(12,2),\n\n然后推导出该用户的私钥D(y)为:\n\n\n例如:设明文w=(7,8),x=H(w)=(9,6,12),密文y=E(x,ID)=(4,9);z=D(y)=(16,6),恢复的明文w=H-1(z)=(7,8),说明上述加解密算法是正确的。同理可证明签名算法的正确性。\n相应的,针对上述实施例,本发明还提供了一装置实施例,包括以下模块:\n公钥生成单元,用于生成一包含有E’(x,ID)的公钥,所述E’(x,ID)为在域F上的从(x1,...,xm,ID1,...,IDr)到(y1,...,yn’)的非线性映射函数组,所述ID=(ID1,...,IDr)为授权用户的身份标识;并且,所述E’(x,ID)中隐含有接口函数R(x),其用于根据(x1,...,xm)得到n个关于(x1,...,xm)的函数:u0(x)=(u01(x1,...,xm),...,u0n(x1,...,xm))=R(x);其中,m,n,n’,r为正整数,m>n≥n’;\n私钥生成单元,用于针对身份标识为ID(K)的授权用户,生成一与该身份标识相对应的私钥,所述私钥包括R(x);\n单向函数链确定单元,用于设置单向函数链H(w),以及单向函数链的逆函数H-1(z);\n加解密单元,用于采用所述公钥、单向函数链H(w)和ID(K),对消息M进行编码,得到编码消息N;采用所述私钥和单向函数链的逆函数H-1(z)对该 编码消息N进行译码,得到译码消息L;\n或者,签名验证单元,用于采用所述私钥和单向函数链的逆函数H-1(z)对消息M’进行编码,得到编码消息N’;采用所述公钥、单向函数链H(w)和ID(K),对该编码消息N’进行译码,得到译码消息L’。\n下面介绍一些上述实施例具体实现过程中的诀窍性知识。\n如何使得公钥中ID的次数比较低、私钥中的等价的ID的次数非常高:\n(1)在加密的最后一层密码参数(例如Gs中的系数)中注入ID的映射,对于推导解密函数的推导过程来说,相当于在第一层就注入了ID的映射,经过后面的多层非线性变换,使解密函数中的ID的次数得到放大。\n(2)使用比较大的n,在解密时依次计算vi1,...,vin的过程中,由于vi,j-1要参与vij的运算,使得解密函数的ID的次数被串行放大。\n(3)采用其非线性次数保持不变的非线性变换,例如把Gj设置为:\n\ntjkl,tj0l∈Fp,ujk,vjk∈Fp(x1,...,xm),k=1,...,n,\n然后由Gj推导出。例如,对于n=2, 为:\n\n\n显然,若把上述加密过程中的系数tjkl规定为ID的映射函数,则解密过程ID的次数是加密过程中ID的次数的n倍,而y的次数却保持不变。\n进一步,本实施例中具体的编译码步骤就可以优化为:\n针对加解密的情形,可以为:通过单向函数链H(w)将原始消息转换为中间结果消息M,采用所述公钥和ID(K),对消息M进行编码,得到编码消息N;以及,采用所述私钥对该编码消息N进行译码,得到译码消息L,通过单向函数链的逆函数H-1(z)将中间结果消息L转换为最终译码结果;\n针对签名的情形,可以为:采用所述私钥对消息M’进行编码,得到中间 结果z,通过单向函数链的逆函数H-1(z)将中间结果z转换为数字签名消息N’;以及,通过单向函数链H(w)将数字签名消息N’转换为中间结果x,采用所述公钥和ID(K),对该中间结果x进行译码,得到译码消息L’。\n由于关于单向函数链的技术点,在前面已经详细描述,故在此不再赘述。\n进一步,本实施例中建立私钥的方法可以优化如下,包括以下子步骤:\n子步骤a、由T-1和G-1计算得到D(y),并且,所述D(y)与ID相关;\n子步骤b、将所述D(y)分为至少两个部分,保存在至少两个私钥分配中心,每个部分都与ID相关;\n子步骤c、各私钥分配中心把授权用户标识ID(K)代入各自秘密保存的那部分D(y),计算出私钥的一部分,发送给该用户;\n子步骤d、该用户将各部分的私钥合成,计算得到私钥。\n从数学角度对上述过程的一个例子描述如下(如图8所示):\n(1)、由网络中唯一的一个一级私钥分配中心KDC11建立公钥E’(x,ID),并建立对应于E’(x,ID)的私钥生成函数:\nz=(z1,...,zn)=D(y,d1,d2,...)\n=(D1(y1,...,yn,d1,d2,...),...,Dn(y1,...,yn,d1,d2,...)),\n该函数中的变元d1,d2,...是ID的映射函数:d1=f1(ID),d2=f2(ID),...;\n(2)、KDC11按照约定的方法,把D(y,d1,d2,...)分离成h个部分:{D(1)(y,d1,d2,...),...,D(h)(y,d1,d2,...)},分别发给h个二级私钥分配中心,即对于1≤j≤h,把D(j)(y,d1,d2,...)发给KDC2j秘密保存;并把f1(ID),f2(ID),...,发给所有的二级私钥分配中心秘密保存;其中,所述的“把D(y,d1,d2,...)分离成h个部分”的具体实现方法,属于公知技术。\n(3)、在为某个授权用户K建立私钥时,KDC21,...,KDC2h分别先把该授权用户K的身份标识ID(K)的值,代入到ID的映射函数f1(ID),f2(ID),...,计算出d1,d2,...的值;再把d1,d2,...的值代入到KDC21,...,KDC2h各自秘密保存的D(j)(y,d1,d2,...),计算出DK(j)(y),然后分别把DK(j)(y)发给该用户。\n(4)、授权用户K从KDC21,...,KDC2h分别领取DK(1)(y),...,DK(h)(y),按照约定的方法,还原为该用户的完整的私钥DK(y)。\n采用多个私钥分配中心合成私钥的技术点,是为了保证即使是私钥分配中 心的内部人员,也无法窃取用户的私钥。为更清楚地表述具体实施方式,下面描述一个小数据的例子:\n在前述的实施例中,设A1,B1中的元素是数,A2,B2中的元素是ID的映射,G中没有参数,则私钥生成函数为\nz=(z1,z2)=D(y,A2,B2)=(D1(y,A2,B2),D2(y,A2,B2)),其中:\nz1=D1(y1,y2,a211,a212,a221,a222,b21,b22)\n=((a2122a2212+15a211a212a221a222+a2112a2222+2a212a2212b21+15a211a221a222b21+15a211a212a221b22+2a2112a222b22+15a212a2212y1+2a211a221a222y1+2a211a212a221y2-2a2112a222y2)/(16a221a222b212+a212a221b21b22+a211a222b21b22+16a211a212b222+2a221a222b21y1+16a212a221b22y1+16a211a222b22y1+16a221a222y12+16a212a221b21y2+16a211a222b21y2+2a211a212b22y2+a212a221y1y2+a211a222y1y2+16a211a212y22))mod17\nz2=D2(y1,y2,a211,a212,a221,a222,b21,b22)\n=((a2122a2212+15a211a212a221a222+a2112a2222+3a212a2212b21+14a211a221a222b21+16a221a222b212+14a211a212a221b22+3a2112a222b22+a212a221b21b22+a211a222b21b22+16a211a212b222+14a212a2212y1+3a211a221a222y1+2a221a222b21y1+16a212a221b22y1+16a211a222b22y1+16a221a222y12+3a211a212a221y2+14a2112a222y2+16a212a221b21y2+16a211a222b21y2+2a211a212b22y2+a212a221y1y2+a211a222y1y2+16a211a212y22)/(2a221a222b212+15a212a221b21b22+15a211a222b21b22+2a211a212b222+13a221a222b21y1+2a212a221b22y1+2a211a222b22y1+2a221a222y12+2a212a221b21y2+2a211a222b21y2+13a211a212b22y2+15a212a221y1y2+15a211a222y1y2+2a211a212y22))mod17\n设h=2,把D(y,A2,B2)分解成2部分,例如可以规定为:\nD(1)(y,A2,B2)=D(y,A2,B2)中的两个分子多项式,\nD(2)(y,A2,B2)=D(y,A2,B2)中的两个分母多项式。\nKDC11把上述的D(1)(y,A2,B2)发给KDC21,把D(2)(y,A2,B2)发给KDC22,同时把ID对于d1,d2,...的映射函数,以及R(x),也发给它们。\n为某个授权用户建立私钥时,KDC21、KDC22分别先把该用户的ID代入映射函数,计算出a211,a212,a221,a222,b21,b22,再把它们分别代入:\nD(1)(y,a211,a212,a221,a222,b21,b22),D(2)(y,a211,a212,a221,a222,b21,b22),\n计算出D(1)(y)、D(2)(y),然后分别发送给该用户;\n授权用户从KDC21、KDC22分别领取D(1)(y)、D(2)(y),然后按照规定的方法还原为D(y)。\n上述方案中:各KDC2i并不是由于管理制度和计算能力的制约、而是由于缺少信息,而无法窃取到用户的私钥;而掌握全部秘密的KDC11平时处于关闭封存状态,不直接参与建立私钥。建议KDC11在建立私钥生成函数时,对有关变量(例如a211,a212,a221,a222,b21,b22)重新命名,可达到更好的效果。\n为了实现私钥形态的个性化,本实施例还可以进一步包括步骤:在生成私钥的过程中,插入随机变换W()以及逆W-1()。\n从数学角度对的私钥形态个性化描述如下:\n在合成私钥D(y)的过程中,插入随机变换W()以及逆W-1():\nD(y)=Db(Da(y))=Db(W-1(W(Da(y))))=D’b(D’a(y)),\n其中D’a()=W(Da()),D’b()=Db(W-1()),把W()、W-1()分别从D’a()、D’b()中分解出来是困难的。W()、W-1()的具体实现方法属于公知技术。\n总之,实现私钥形态个性化的基本构思是:在推导D(y)的过程中插入随机变换,以掩盖D(y)与ID之间的相关性,并把R(x)隐藏起来;从而使得:对于不同用户的私钥D(y),不仅其数学性质不同,而且其函数的表达形式还受到了两种相互独立的因素——来自ID和随机变换——的双重控制,有效地提高了抗合谋攻击能力。\n为更清楚地表述具体实施方式,下面描述一个小数据的例子(如图9所示):在T1-1、R-1之间插入随机线性变换W1()、W1-1(),在G1-1、T2-1之间插入随机线性变换W2()、W2-1(),其具体步骤如下:\n第一步,计算:\nu’1j=Du’1j(y1,...,y8),1≤j≤8,它们均为8元有理分式,其分子、分母均为线性多项式,分母相同。\n第二步,依次计算:\nv11=Dv11(u’11,...,u’18),其为8元2次有理分式;\nv12=Dv12(u’11,...,u’18,v11),其为9元2次有理分式;\nv13=Dv13(u’11,...,u’18,v11,v12),其为10元2次有理分式;\nv14=Dv14(u’11,...,u’18,v11,v12,v13),其为11元2次有理分式;\nv15=Dv15(u’11,...,u’18,v11,...,v14),其为12元2次有理分式;\nv16=Dv16(u’11,...,u’18,v11,...,v15),其为13元2次有理分式;\nv17=Dv17(u’11,...,u’18,v11,...,v16),其为14元2次有理分式;\nv18=Dv18(u’11,...,u’18,v11,...,v17),其为15元2次有理分式;\n上述的v11,...,v17:在推导公式时,代入v1j的变元符号;在进行解密计算时,代入v1j的值。\n第三步,计算:\nz’j=Dz’j(v11,...,v18),1≤j≤8,其为8元线性多项式;\n第四步,依次计算:\nxj=Dxj(z’1,...,z’8),j=7,8,其为8元线性多项式;\n(x9,x10,x11,x12)=K2(x7,x8),其为一组单向函数的组合;\nxj=Dxj(z’1,...,z’8,x9,x10,x11,x12),1≤j≤6,其为12元线性多项式;\n(w1,...,w8)=K1-1(x1,...,x8),其为一组单向函数的组合。其中,(z1,...,z6)作为一组中间结果隐藏在第四步的计算过程中,可理解为私钥中的R(x)的参数也隐藏在个性化的私钥中,对授权用户保密。\n当采用“多个私钥分配中心联合建立用户私钥”时,应使各个二级私钥分配中心都使用相同的Wi()、\n下面从工程应用的角度,进一步理解密码算法的定量设计,对本发明进行更详尽的分析。参照图10,设n=n’=8,m=12,s=2:\n(1)根据允许的加解密出错概率,设置足够大的p。\n(2)设置合适的单向函数链,例如其K2部分把四个单向函数的功能合并在一个单向函数中。\n(3)设置n、m、T、G应考虑以下因素:\n不定方程组E’(x)=(y1,...,yn’)的解集的元素数量约为pm-n’,应大于264。\n设δ是E’(x)关于x的次数,则一个m元δ次多项式的项的数量为 其反映了公钥的存储空间和加密速度,应尽量小。\n设λ是D(y)关于y的次数,则一个n元λ次多项式的项的数量为,其反映了运用线性攻击法破译私钥的困难性,应尽量大。实施线性攻击的条件是已知函数z=u0=R(x),能大批量地随机产生(z、y)对。\n在基于身份方式下,设τ是E’(x,ID)关于ID1,...,IDr的次数,则一个m+r元δ+τ次多项式的项的数量为其反映了公钥的存储空间和加密速度,应尽量小。\n在基于身份方式下,为了隐藏ID的映射函数,可把建立D(y)的推导过程划分成若干段:\nD(y)=Dk(...Db(Da(y))...),\n并把Da(),Db(),...,Dk()分别展开;由于ID映射到Da(y),因此该Da(y)的每个系数等价于一个关于ID的r元μ次多项式,该多项式的项的数量为应使其远大于攻击者收集大量私钥的操作能力。\n设p为32比特,n=8,m=12,s=2,G1为:\nG11:u11=(t111v11+t112)modp,\nG11-1: \nG1j: j=2,...,8,\nG1j-1: j=2,...,8,\n其中,参数t1jk、γ1jkh、ρ1jk、ε1j为二次有理分式中的系数;\nG2采用如前所述的“其非线性次数保持不变的非线性变换”:\nj=1,...,8\nj=1,...,8\n其中,G2-1中的系数gijk,应理解为是关于G2中的系数t200,...,t288的8次函数; 设G2是ID的1次函数,则G2-1是ID的8次函数。\n上述方案的有关技术指标和加解密步骤如下:\npm-n≈232(12-8)=2128; 即E(x)总共有91×9=819个项(8个相同的分母多项式,应算作为1个多项式);但在基于身份方式下,设τ=1,r=4, 即E’(x,ID)共有455×9=4095个项。其加密步骤为:\n第一步,计算x=H(w):\n(x1,...,x8)=K1(w1,...,w8),其为一组单向函数的组合;\n(x9,x10,x11,x12)=K2(w7,w8),其为一组单向函数的组合;\n第二步,计算E’(x,ID):\nyj=Ej(x1,...,x12,ID1,...,ID4),1≤j≤8,其为16元3次有理分式。\nD(y)关于y的次数λ=255, 即在已知R(x)的条件下进行线性攻击所需要的存储空间为:\n\n在基于身份方式下,假设Da(y)关于y的次数为4,则μ=4×8=32,完成合谋攻击需要收集的私钥数量 提高该指标的主要方法是增加r。例如,当r由4增加到10时, 即E’(x,ID)的函数规模仅由4095个项增加到1001×9=9009个项,但其抗合谋攻击的指标却由58905增加到 增加了24979.9倍,相当于:若对我国的有14亿人口的公民身份证公钥密码系统进行合谋攻击,至少需要收买14亿7千万个私钥,显然失去了进行合谋攻击的意义。\n当然:即使Da(y)关于y的次数为4,其函数规模仍然很大。为此,优选的,建议采用前述的“私钥形态个性化”技术点。\n采用前述的优选实施例,通过运用ID映射的方法,建立基于身份的工作方式,使得全网所有用户共用一个公钥,为网络环境下的公钥管理带来了极大的方便;以及通过运用“多个私钥分配中心合成私钥”和“私钥形态个性化”的方法,提高密码系统的抗合谋攻击能力。\n本说明书中的各个实施例均基于同一技术构思,所以在描述时重点说明的都是该实施例的独特之处,各个实施例之间相同相似的部分互相参见即可。并 且,对于系统实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。\n以上对本发明所提供的一种用于编码和译码数字消息的方法和系统,以及一种用于数字签名的方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。