唐文龙
(百色学院,广西 百色 533000)
在分布式的网络环境中,各节点希望能够充分利用互联网中所蕴含的潜在计算资源,因为这些节点在地理位置是处于不同位置,而且还具有匿名性、身份随意性和可用性动态变化等特点。节点提供资源共享服务只是一种自愿且不可靠的行为,不用承担任何法律责任。如何建立适应网络动态复杂性及恶意节点行为的节点间身份快速认证,使信任机制更加客观合理,是当前亟待解决的问题。针对这种情况,结合零知识证明并结合加密算法,建立节点间的快速身份认证方案。
(1)零知识证明的概念
1985年,Shafi Goldwasser,Silvio Micali和Charles Rackoff提出了零知识交互式证明的概念。“零知识证明”说的是示证者向验证者表明他知道某种秘密,不仅能使验证者完全确信他的确知道这个秘密,同时还保证一丁点秘密也不泄露给验证者。“知识”,可以是口令,公钥系统中的私钥,某个数学难题的一种解决方法,一系列的证书等等。因此,零知识证明就是证明方拥有某些知识,在不将该知识的内容泄露给验证方的前提下,向验证方证明自己拥有该知识。在这个过程中,一方面,验证方不可能向任何第三方假冒证明方,因为他没有得到关于这个秘密的任何一点信息。[1]另一方面,证明方不可能欺骗验证方,因为这个过程重复了很多次,证明方欺骗成功的概率很小。
(2)零知识身份认证
如果我们把合法用户的个人信息看作是证明方的知识,证明方通过零知识证明向验证方证实自己的身份就是零知识身份认证。零知识身份认证是零知识证明在身份认证方面的应用。目前的零知识身份认证方案主要有四种: Fiat-Shamir身份认证、Feige-Fiat-Shamir身份认证、Guillo-Quisquater身份认证和Schnorr身份认证。其中Fiat-Shamir身份认证是最早提出的,也是最基础的零知识身份认证方案,其他三种方案是对Fiat-Shamir的改进[2]。
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
(1)随机选取2 个大素数p、q,计算n = p · q
(2)计算 fx = ( p -1) · (q -1),然后随机选取e,满足 1 < e <fx,且 gcd(e,fx) = 1
(3)计算 d,使之满足 1 < d < fx 且 e ·d ≡1(mod fx) ,B 的公钥是(n,e),私钥是(d, p,q)
(4)H( n,e)是单向无碰撞的散列函数。第三方公布(n,e)和H。
RSA认证方案虽然可以解决通信双方之间的认证问题,但在分布式环境里会导致系统负担过重,效率低下。
由于在RSA认证方案中,任意选取的整数e,而e这个数太小则安全性不高,太大了则系统性能下降,特别在分布式环境里,节点间相互认证如果花的时间太多,会导致网络时延,影响性能。针对这一情况,对RSA认证算法的e的取值进行变换。
(1)对于e ·d ≡1(mod fx)式中的e是个大整数。
(2)取e=by,b为质数,且gcd(by,fx) = 1
(3)认证算法:节点m计算出密文,明文及明文的数字摘要传至节点n
C=pe(mod fx), e=by;
p’=IDEA(p,k),IDEA为分组加密算法,k为双方协商的密钥;
p’’=H(p’),H(p’)为用预定的散列算法对 p’进行散列得到摘要信息p’’;
节点m发至节点n实际是(c,p’,p’’)两方内容。
(4)验证算法:节点 n根据节点 m所发的三部分(c,p’,p’’)进行验证
P=Ce(mod fx),e=by;
判断P是否与IDEA(P’)相等,H(p)是否与P’’相等;
认证结束。
在改进的认证方案中,由于e=by,中的指数复杂性,第三方很难知道e,IDEA加密算法和散列函数的运用,增加了认证的安全性但效率高。在改进的算法中,缩短了认证过程时间。
在分布式系统中,利用零知识证明原理构建身份认证可以使证明过程更安全。零知识证明中节点间使对方相信自已知道某一知识,但并不向对方泄漏有关信息。利用零知识证明进行节点间相互认证,需要利用第三方认证中心CA来维护系统的公用参数和用户的密钥。
基于零知识证明的认证方案由3 个部分组成:系统初始化,用户注册协议和身份认证协议。
认证的前提是认证双方都需要具有第三方所签发的证书,这个第三方就是CA认证中心,它是采用PKI(Public Key Infrastructure)公开密钥基础架构技术,专门提供网络身份认证服务,负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构。在方案中,CA选取以下参数。
p、q:大素数,用于构建fx;
b,y∶相对小的数,构建e=by;
k:只对认证双方公开的IDEA加密算法密钥;
d∶私钥;
H() :单向哈希函数。
在初始化过程中,不能暴露用户的私钥信息。也不能使CA工作人员泄露信息。
设定用户为Jack,CA认证中心名为SA和中间机构SB。注册的要求就是Jack从机构SA获得公钥和私钥,但是不能对SA泄露个人私钥。这样对于公钥、私钥的产生就遵循一些协议,如公钥和私钥不能简单由一个部门产生,而是由几个权威部门交叉产生。注册阶段主要是做这些工作,其内容简要如下:
(1)Jack用户选择自已的ID身份标识
(2)Jack用户选择随机数b,b∈[2, p*q],由处于异地位置SB产生随机数y,by与互质,v=idea(p,q,by),发送v,ID发送给SA。
(3)SA对Jack的ID进行检查,若通过则进行以下运算∶选择随机数 p、q并计算 fx = ( p -1) · (q -1),且gcd(by,fx) = 1。计算Jack的公钥和私钥。所用的公式是为:by·d ≡1(mod fx)。
(4)Jack的计算机根据公钥和公钥的证据计算其私钥,私钥的计算机是在Jack的计算机上完成的,计算机结果根据公钥的证据动态变化,所以是安全的。
设有两个用户Jack和Bob,两个的密钥对为(PJ,SJ)、(PB,SB),身份标识付为IDJ和IDB。假设Jack和Bob希望通过公开密钥加密方法进行数据传输,但是只公开加密算法和密钥而不公开解密算法和密钥。Jack和Bob加密算法为E1和E2,解密算法分别为D1和D2,E1和D1互逆,E2和d2互逆
两人的认证(假如Jack向Bob认证)步骤如下:
(1)Jack通过自已的公钥PJ对一个随机数e和IDJ进行加密:c1=E1(e),c2=E1(PJ),为了方便 c1 和 c2都用 c表示。并将这两个密文发给BOB。
(2)Bob随机地选取其中一个发送给Jack,Jack利用自已的私钥对其解密D1 (c),如果没有发生改变则继续。
(3)Bob对另一个密文用自已的私钥 SB进行加密得c’=E2(c),再把c’发送给jack
(4)Jack用Bob的PB对其进行解密。由于
E2(E1(m))=E1(E2(m))
E1(D2(c))=E1(D2(E2(D1(m))))=E1(D1(m))
如果 Jack的解密结果没有发生改变,就可以证明其身份。同理可以通过上面算法相互认证,该方案可以快速在分布式网络进身份双向认证。
(1)认证双方的安全性主要依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA密码就一定需要做大数分解。但在方案中用by来表示e,对于y这个值有少量变化,e就会有大的改变。从而增强算法的安全性。
(2)网络侦听(Sniff):在网络上,任何一台主机所发送的数据包,都会通过网络线路传输到指定的目标主机上,所有在这个网络线路上的主机都可以侦听到这个传输的数据包。这种攻击一般需要进入到目标主机所在的网络内部,选择一台主机实施网络监听[3]。但是在方案中,Jack和Bob所传输的信息都进行特殊处理,所有在不安全信道中传输的信息都是采用RSA加密算法的,攻击者如想要破译出明文,就是要解决RSA的大数分解问题。由于在方案中由by代替e,这样在短时间内是不可能破译出密钥的,即使通过侦听将认证阶段的所有信息都得到了,由于不知道Jack和Bob的私钥SJ和SB,也就无法解出信息,不能伪装成其他用户欺骗Jack和Bob。
(3)选择明文攻击:分析者不仅可得到一些消息的密文和相应的明文,而且我们也可选择被加密的明文。这比已知明文攻击更有效。因为我们只在初始阶段随机生成了信息C,并且通过安全信道传输C,因此除了Jack和Bob外没有人知道C,而且在认证阶段时是在逐步中才根据信息生成C,如果在攻击时判断是否为初始阶段是不可行的,因此选择明文攻击是不可行的。
文章结合安全性高于其它密码体制的RSA密码体制和零知识证明的特点,构建了网络节点的身份快速认证方案.。该方案简单,不需要可信赖的第三方参与,而且可以抵御重放攻击、网络侦听、选择明文攻击和并行会话攻击。
[1] William Stallings.Cryptography and Network Security Principles and Practices,FourthEdition(第 4 版)[M].北京:电子工业出版社,2006:301-313.
[2] 邱成刚,李方伟,谭利平.基于双线性对和公钥自证明的认证加密方案[J].重庆邮电大学学报:自然科学版,2007,19(5):610-612.
[3] 张虎强,洪佩琳,李津生.一种零知识证明协议的安全分析与改进[J].信息安全与通信保密,2006,(11):56-59.