2024年2月25日发(作者:阎千儿)
安全通信中的密钥分发和密钥交换
——07级计算机科学与技术<3>班 单娟
【关键字】信息安全、密钥管理、密钥分发、密钥交换
【摘 要】密钥分发(或密钥交换)可以有多种方法,它的安全性与采用的算法、信息交换的协议有紧密的联系。本文拟介绍一些常用的密钥分发或密钥交换方式,包括密钥的预分发、密钥的在线交换以及基于身份的密钥分发,同时介绍几个典型的应用。
随着现代通信技术的飞速发展,尤其是计算机网络技术日新月异的变化,越来越多的人希望通过现代的通信网络安全地交换信息。密码术在通信中的应用,使人们的这一愿望不再是幻想。在现代密码学中,对数据的保密一般不依赖于算法的保密,而仅仅依靠对密钥的保密。因此,要想获得安全的保障,就必须有安全可靠的密钥管理方法。
密钥管理是在一定的安全策略指导下的加密材料的产生、存储、分发、销毁、归档等过程。在安全通信系统的密钥管理中,一般需要设置一个可信机构,它负责验证用户的合法身份,有时也参与密钥的传送与交换过程。密钥管理通常采用离线的可信机构、在线的密钥分发中心和密钥证书中心等密钥管理单元进行。
密钥分发(或密钥交换)是密钥管理的核心问题。密钥分发(或密钥交换)是通信双方建立共同的加密材料的过程,要求确保加密材料的完整性、来源真实性和保密性。密钥分发协议或密钥协商协议的目的,是使得通信双方在实施了这种协议以后,可以建立一个共同的通信密钥,并且密钥的值不会被任何第三方所窃取(有时也包括权威机构)。
密钥预分发
密钥预分发就是在通信之前由可信机构通过安全的信道为参与通信的双方建立通信密钥。就密钥的预分发方式而言,对每一对通信伙伴u和v,权威机构需要随机地选择一个密钥作为用户U和V的通信密钥Ku,v,并通过一个安全信道把密钥Ku,v传给用户U和用户V。(由于网络是不安全的,所以密钥传输不能在网络上进行)。这种方案的安全性是无条件的,但它要求在可信机构和网络上的每个用户之间都要有一个安全信道。事实上,每个用户必须存储n-1个密钥,并且可信机构需要安全传送n2个密钥。即使对于相当小的网络,这样的费用也是难以承担的,所以这种方案实际上是行不通的。因此,如何减少需要传送和存储的信息量,同时还要保证每一对用户(u和v)能够独立地计算出一个共同的秘密密钥Ku,v就成为一个很有意义的工作。下面介绍的Blom密钥分发体制就能够做到这一点。
假定网络有n个用户。为了方便,假定密钥是从Zp(P是素数)里选出来的。设k是一个整数,1≤k≤n-2。在参数为k的Blom预分发体制中,权威机构要通过一个安全信道向每一个用户传送Zp中的k+1个元素。每一对用户(u和v)能够计算出一个密钥Ku,v=Kv,u。下面,我们看一下k=1时的情形。
(1)设素数p是公开的。对每个用户u,元素ruεZp是公开的,而且每个ur都不相同。
(2)权威机构选定三个随机数a,b,cεZp(可以相同),得到下面的多项式:
f(x,y)=a+b(x+y)+cxy mod p
(3)对每个用户U,权威机构计算多项式: gu(x)=f(x,ru)mod p并且通过安全信道把gu(x)
传送给用户u.显然gu(x)是一个线性多项式,所以它能写成:gu(x)=au+bux其中au=a+brumod
pbu=b+crumod p
(4)如果用户U想和用户V通信,那么他们需要使用相同密钥Ku,v=Kv,u=f(ru,rv)=
a+b(ru+rv)+Crurv mod则用户u计算f(ru,rv)=gu(rv)=ku,v用户V计算f(ru,rv)=gv(ru)=ku,v,于是两个用户可以获得相同的密钥。
密钥在线分发
密钥在线分发就是在保密通信开始之前通过通信信道分发会话密钥。如果使用在线的密钥分发方式,那么每个网络用户就不需要存储与其他用户通信的通信密钥(每个用户和网络权威机构共享一个密钥,它只保管好这个密钥就可以了)。会话密钥由权威机构传送给每一对用户。
目前比较常用的密钥在线分发一般有两种情况。
一、 基于对称密钥体制的密钥分发中心方式。
在这种方式下,要求参与保密通信的任何一方都与密钥分发中心(CKD)拥有一个共享的密钥,即拥有一个保密通道。在保密通信开始前,通信发起者按照一定协议通过与CKD间的密钥与该中心建立保密信道,CKD根据发起者的请求与通信对方建立另一个保密信道。然后保密通信双方就可以利用这两条保密信道获得一个共同的会话密钥。
下面以Kerboros系统的密钥分发为例说明一下这种方式。Kerboros系统是一个广泛流行的基于私钥密码体制的密钥服务系统。在Kerboros系统中,每个用户u和认证中心有一个共同的DES(数据加密标准)密钥Ku。ID(u)表示用户u的公开的身份识别信息。当中心收到一个请求会话密钥的消息时,会产生一个随机数作为会话密钥K。同时,认证中心还会记住收到请求的时间作为时间邮戳T,并且指定一个生命周期L,在生命周期内,密钥K是有效的。也就是说,会话密钥K在从T到T+L的时间段内被认为是有效的,所有这些信息加密以后传送给u,并且最后传送给v。
Kerboros体制中会话密钥的传输:
(1)通信发起者u在和用户v建立通信之前,先向中心申请一个会话密钥。
(2)中心随机地选定一个会话密钥K,一个时间邮戳T和一个生命周期L。
(3)中心计算m1=eku(K,ID(V),T,L)和m2=ekv(K,ID(U),T,L)并把m1,m2传给用户u。
(4)用户u使用解密算法dku从m1中解出K,T,L和ID(v),然后计算m3=ek(ID(U),T)并把m3和他从中心收到的m2一起传给用户v。
(5)用户v使用解密算法dkv 从m2中计算出K,T,L和ID(u)。他然后使用密钥dk从m3中算出T和ID(u),并检查两次得到的T和ID(u)是否一样。如果一样,那么v计算m4=ek(T+1)并把m4传给用户u。
(6)用户u用密钥dk将m4解密,并检查结果是否为T+1。
消息m1和m2提供了会话密钥K在传输过程中的保密性,而m3和m4提供了密钥的确认,也就是说,使用户U和用户V确信他们拥有相同的会话密钥。在大多数密钥分发体制中,会话密钥的认证都是体制的一部分,认证的方式一般是和KERBOROS的方式相类似的,也就是使用新的会话密钥K去加密已知量。采用时间邮戳T和生命周期L是为了对抗重放攻击。如果采用了时间邮戳T和生命周期L,用户就很容易判断收到的密钥是否已经过期。KERBOROS体制的一个缺点是网络上的所有用户的时钟都必须同步,因为每个用户要根据当前的时间来判断
收到一个会话密钥是否有效;另一方面,由于采用CKD机制,CKD与用户间的通信将成为网络的瓶颈。
二、 基于证书的密钥证书中心(CKC)方式。
这种方式的基础是公开密钥密码算法(非对称密码算法)。在公开密钥体制下,每一个用户都有一个公开的密钥和一个私有的保密的密钥。一方面,具有这样的非对称密码算法,使得任何一个人都可以利用该用户的公开密钥加密一段信息传送给该用户,而只有拥有这个公开密钥对应的私有密钥的人才能解密;另一方面,也存在这样的非对称算法,使得拥有一个公、私钥对的人可以利用他的私钥对一段信息作数字签名,任何人都可以利用公开的密钥验证签名。能够用做数字签名的公开密钥体制保证了只有拥有私钥的才能做出签名,从而保证签名是不可仿冒的。公开密钥体制的出现使密钥管理的情况发生了改变,通信双方不必非得共享一个密钥,而只需要知道对方的公开密钥就可以了。这仿佛解决了密钥分发的问题。但事实并非如此。一方面,现有的公开密钥算法一般都是基于模指数运算的,加、解密需要进行升幂和求模运算,速度是很慢的。因此,公开密钥算法常用来传递一些敏感的短信息,如密钥等。另一方面,在大规模的网络通信中,要维护许多用户的公钥也是很麻烦的事,谁能保证他得到的某人的公钥是真实的呢?某些罪犯用自己的公钥代替别人的公钥是完全有可能的。于是,基于证书的密钥管理方式就应运而生了。
在这种方式下,密钥证书中心——CKC应采用某种完善的、用做数字签名的公开密钥算法,并拥有一对公、私密钥对。由于密钥证书中心的公开密钥量很少,因此要保证它的真实性是很容易的。CKC预先给每一个用户一份经过CKC私钥签名的、包含用户身份标识及公钥的证书。密钥建立过程中通信双方互相传递证书,利用CKC的公开密钥和相应的验证算法验证对方的证书,从而得到对方的公开密钥,然后再利用对方公钥加密、利用自己的私钥签名会话密钥材料传送给通信对方。很显然,经过这样的过程之后,我们可以保证,除去通信双方之外,任何人不会了解有关密钥材料的情况(即使CKC也不会知道有关密钥的情况)。同时,由于双方都对传送的信息做了数字签名,任何恶意的篡改都会被检测出来。
密钥交换
实际上,通信中的会话密钥不一定非得由一方分发给另一方,也不一定非得加密传送。密钥建立过程中双方交换的信息在基于某种假设的基础上是可以公开的。一般的做法是采用密钥认证中心(CKC)来解决这个问题。每一个用户U要加入安全通信网时,必须向CKC提交自己的身份标识ID(U)(或由CKC指定)及自己签名的验证公钥veru,由CKC对该信息签名,于是得到用户U的证书C(U)=(ID(U), veru, sigkcc(ID(U),veru))。用户U在与通信对方建立会话密钥时,对传送信息做签名,同时传送C(U),于是可以使通信双方确认该信息的完整性和来源的真实性。著名的DIFFIE-HELLMAN密钥交换协议是最早提出来的,也是最有名的密钥交换协议。
假定P是素数,α是Zp的本原元,并且p和α的值都是公开的。DIFFIE-HELLMAN密钥交换过程如下:
(1)用户U随机地选取au,0aup-2
(2)用户U计算αau mod p并把结果发送给用户V
(3)用户V随机地选择αv,0avp-2
(4)用户V计算αav mod p并且把结果发送给用户U
(5)用户U计算k=(αav)au mod p并且V计算k=(αau)av mod p在协议的最后,用户U
和V已经获得了同一个密钥k=αauav mod p。Diffie-Hellman
密钥交换协议最大的一个缺点就是双方在建立密钥过程中交换的信息没有完整性和来源真实性的保护。因此,当有入侵者进行主动攻击时,如中间人攻击,则会使双方遭到欺骗,导致信息泄漏。对通信双方U和V来说,保证密钥交换是在他们之间进行而不是和入侵者进行交换是很重要的。在密钥交换之前,用户U和V应该分别实行一个身份认证的协议以确认对方的身份。但是,这种方法仍然对抗不了中间入侵者的攻击,因为W可以在用户U和V互相确认了对方的身份以后才开始攻击行为。所以,密钥协商协议在密钥建立的同时必须自动确认对方的身份。采用证书机制可以很好地解决这个问题。
站对站的协议(Station-to-Station Protocol)就是一种带确认的密钥协商协议,它是DIFFIE-HELLMAN密钥交换的一个改进。在采用该协议的系统中,至少存在一种采用公开密钥算法的签名方案。每个用户U都拥有一对签名的密钥对,用veru代表验证签名的公开密钥。可信机构也有一对用于签名的密钥,其验证算法和验证公钥是公开的。每个用户U有一个证书C(U)=(ID(U), veru, sigTA(ID(U),veru)),其中ID(U)是用户U的身份识别信息,sigTA(ID(U),veru)是可信机构对证书信息的数字签名。协议过程如下:
(1)用户U选择一个随机数au,0aup-2,
(2)用户U计算αau mod p,并把它发送给用户V。
(3)用户V选择一个随机数αv,0avp-2
(4)用户V计算αav mod p,然后再计算αau mod k=(αav)αu mod pyv=ek(sigv(αav,αau))
(5)用户V发送(c(v),αav,yv)给用户U。
(6)用户U计算k=(αau)av mod p,使用verv检验yv,并且使用verTA检验c(v)。
(7)用户U计算yu=ek(sigu(αau,αav)).并把(c(u),yu)发送给用户v。
(8)用户v用veru检验yu并用verTA检验C(U)。
基于身份的密钥分发
设置一个可靠的密钥生成中心。当新用户要加入安全通信网络时,向该中心递交他的身份信息(区别于其他用户的信息,如身份证号码等)。然后,密钥生成中心通过秘密的算法计算出密钥,通过秘密的渠道发送给用户。用户根据这些信息就可以独立地对自己发送的信息加密或鉴别。这种方法的优点就是不必设置全网统一的密钥管理中心,密钥生成中心只需在新用户进网时进行注册。下面以一种离散对数的基于身份的密钥分发体制为例,说明这种方法。
(1)密钥生成中心的准备工作。密钥生成中心随机选取一个大素数p和Zp*上的生成元以及一个Zp-1上的n的维矢量d=(d1,d2……,dn),计算h=(h1,h2,……,hn),使得hi=gdi(mod p)。对所有用户公开p、h和一个单向函数f(•),保持g和d的秘密。
(2)用户加入安全通信网络时,向中心提交身份信息ID,写成二进制为(xk……x2,x1),密钥中心计算用户的扩展身份标识EID=f(ID)=(y1,y2……yn),yi=0,1。于是,可以计算该用户的秘密密钥,通过安全的信道可以把S发送给这个新用户。
(3)当用户1可以用用户2的公开的ID计算用户2的扩展ID,得到EDI2=F(ID)=(y1,y2,…yn),,进一步可以得到Z2=∏1inh1yi(mod p)=gs2(mod p)。然后,用户1可以利用自己的秘密密钥S1计算出K12=Z2s1 (mod p) =gs1s2 (mod p)。同样,用户2也可以计算出K21=Z1s2 (mod p)=gs1s2 (mod p)。显然,这两个密钥相等。于是用户1和用户2获得了共同的密钥。
2024年2月25日发(作者:阎千儿)
安全通信中的密钥分发和密钥交换
——07级计算机科学与技术<3>班 单娟
【关键字】信息安全、密钥管理、密钥分发、密钥交换
【摘 要】密钥分发(或密钥交换)可以有多种方法,它的安全性与采用的算法、信息交换的协议有紧密的联系。本文拟介绍一些常用的密钥分发或密钥交换方式,包括密钥的预分发、密钥的在线交换以及基于身份的密钥分发,同时介绍几个典型的应用。
随着现代通信技术的飞速发展,尤其是计算机网络技术日新月异的变化,越来越多的人希望通过现代的通信网络安全地交换信息。密码术在通信中的应用,使人们的这一愿望不再是幻想。在现代密码学中,对数据的保密一般不依赖于算法的保密,而仅仅依靠对密钥的保密。因此,要想获得安全的保障,就必须有安全可靠的密钥管理方法。
密钥管理是在一定的安全策略指导下的加密材料的产生、存储、分发、销毁、归档等过程。在安全通信系统的密钥管理中,一般需要设置一个可信机构,它负责验证用户的合法身份,有时也参与密钥的传送与交换过程。密钥管理通常采用离线的可信机构、在线的密钥分发中心和密钥证书中心等密钥管理单元进行。
密钥分发(或密钥交换)是密钥管理的核心问题。密钥分发(或密钥交换)是通信双方建立共同的加密材料的过程,要求确保加密材料的完整性、来源真实性和保密性。密钥分发协议或密钥协商协议的目的,是使得通信双方在实施了这种协议以后,可以建立一个共同的通信密钥,并且密钥的值不会被任何第三方所窃取(有时也包括权威机构)。
密钥预分发
密钥预分发就是在通信之前由可信机构通过安全的信道为参与通信的双方建立通信密钥。就密钥的预分发方式而言,对每一对通信伙伴u和v,权威机构需要随机地选择一个密钥作为用户U和V的通信密钥Ku,v,并通过一个安全信道把密钥Ku,v传给用户U和用户V。(由于网络是不安全的,所以密钥传输不能在网络上进行)。这种方案的安全性是无条件的,但它要求在可信机构和网络上的每个用户之间都要有一个安全信道。事实上,每个用户必须存储n-1个密钥,并且可信机构需要安全传送n2个密钥。即使对于相当小的网络,这样的费用也是难以承担的,所以这种方案实际上是行不通的。因此,如何减少需要传送和存储的信息量,同时还要保证每一对用户(u和v)能够独立地计算出一个共同的秘密密钥Ku,v就成为一个很有意义的工作。下面介绍的Blom密钥分发体制就能够做到这一点。
假定网络有n个用户。为了方便,假定密钥是从Zp(P是素数)里选出来的。设k是一个整数,1≤k≤n-2。在参数为k的Blom预分发体制中,权威机构要通过一个安全信道向每一个用户传送Zp中的k+1个元素。每一对用户(u和v)能够计算出一个密钥Ku,v=Kv,u。下面,我们看一下k=1时的情形。
(1)设素数p是公开的。对每个用户u,元素ruεZp是公开的,而且每个ur都不相同。
(2)权威机构选定三个随机数a,b,cεZp(可以相同),得到下面的多项式:
f(x,y)=a+b(x+y)+cxy mod p
(3)对每个用户U,权威机构计算多项式: gu(x)=f(x,ru)mod p并且通过安全信道把gu(x)
传送给用户u.显然gu(x)是一个线性多项式,所以它能写成:gu(x)=au+bux其中au=a+brumod
pbu=b+crumod p
(4)如果用户U想和用户V通信,那么他们需要使用相同密钥Ku,v=Kv,u=f(ru,rv)=
a+b(ru+rv)+Crurv mod则用户u计算f(ru,rv)=gu(rv)=ku,v用户V计算f(ru,rv)=gv(ru)=ku,v,于是两个用户可以获得相同的密钥。
密钥在线分发
密钥在线分发就是在保密通信开始之前通过通信信道分发会话密钥。如果使用在线的密钥分发方式,那么每个网络用户就不需要存储与其他用户通信的通信密钥(每个用户和网络权威机构共享一个密钥,它只保管好这个密钥就可以了)。会话密钥由权威机构传送给每一对用户。
目前比较常用的密钥在线分发一般有两种情况。
一、 基于对称密钥体制的密钥分发中心方式。
在这种方式下,要求参与保密通信的任何一方都与密钥分发中心(CKD)拥有一个共享的密钥,即拥有一个保密通道。在保密通信开始前,通信发起者按照一定协议通过与CKD间的密钥与该中心建立保密信道,CKD根据发起者的请求与通信对方建立另一个保密信道。然后保密通信双方就可以利用这两条保密信道获得一个共同的会话密钥。
下面以Kerboros系统的密钥分发为例说明一下这种方式。Kerboros系统是一个广泛流行的基于私钥密码体制的密钥服务系统。在Kerboros系统中,每个用户u和认证中心有一个共同的DES(数据加密标准)密钥Ku。ID(u)表示用户u的公开的身份识别信息。当中心收到一个请求会话密钥的消息时,会产生一个随机数作为会话密钥K。同时,认证中心还会记住收到请求的时间作为时间邮戳T,并且指定一个生命周期L,在生命周期内,密钥K是有效的。也就是说,会话密钥K在从T到T+L的时间段内被认为是有效的,所有这些信息加密以后传送给u,并且最后传送给v。
Kerboros体制中会话密钥的传输:
(1)通信发起者u在和用户v建立通信之前,先向中心申请一个会话密钥。
(2)中心随机地选定一个会话密钥K,一个时间邮戳T和一个生命周期L。
(3)中心计算m1=eku(K,ID(V),T,L)和m2=ekv(K,ID(U),T,L)并把m1,m2传给用户u。
(4)用户u使用解密算法dku从m1中解出K,T,L和ID(v),然后计算m3=ek(ID(U),T)并把m3和他从中心收到的m2一起传给用户v。
(5)用户v使用解密算法dkv 从m2中计算出K,T,L和ID(u)。他然后使用密钥dk从m3中算出T和ID(u),并检查两次得到的T和ID(u)是否一样。如果一样,那么v计算m4=ek(T+1)并把m4传给用户u。
(6)用户u用密钥dk将m4解密,并检查结果是否为T+1。
消息m1和m2提供了会话密钥K在传输过程中的保密性,而m3和m4提供了密钥的确认,也就是说,使用户U和用户V确信他们拥有相同的会话密钥。在大多数密钥分发体制中,会话密钥的认证都是体制的一部分,认证的方式一般是和KERBOROS的方式相类似的,也就是使用新的会话密钥K去加密已知量。采用时间邮戳T和生命周期L是为了对抗重放攻击。如果采用了时间邮戳T和生命周期L,用户就很容易判断收到的密钥是否已经过期。KERBOROS体制的一个缺点是网络上的所有用户的时钟都必须同步,因为每个用户要根据当前的时间来判断
收到一个会话密钥是否有效;另一方面,由于采用CKD机制,CKD与用户间的通信将成为网络的瓶颈。
二、 基于证书的密钥证书中心(CKC)方式。
这种方式的基础是公开密钥密码算法(非对称密码算法)。在公开密钥体制下,每一个用户都有一个公开的密钥和一个私有的保密的密钥。一方面,具有这样的非对称密码算法,使得任何一个人都可以利用该用户的公开密钥加密一段信息传送给该用户,而只有拥有这个公开密钥对应的私有密钥的人才能解密;另一方面,也存在这样的非对称算法,使得拥有一个公、私钥对的人可以利用他的私钥对一段信息作数字签名,任何人都可以利用公开的密钥验证签名。能够用做数字签名的公开密钥体制保证了只有拥有私钥的才能做出签名,从而保证签名是不可仿冒的。公开密钥体制的出现使密钥管理的情况发生了改变,通信双方不必非得共享一个密钥,而只需要知道对方的公开密钥就可以了。这仿佛解决了密钥分发的问题。但事实并非如此。一方面,现有的公开密钥算法一般都是基于模指数运算的,加、解密需要进行升幂和求模运算,速度是很慢的。因此,公开密钥算法常用来传递一些敏感的短信息,如密钥等。另一方面,在大规模的网络通信中,要维护许多用户的公钥也是很麻烦的事,谁能保证他得到的某人的公钥是真实的呢?某些罪犯用自己的公钥代替别人的公钥是完全有可能的。于是,基于证书的密钥管理方式就应运而生了。
在这种方式下,密钥证书中心——CKC应采用某种完善的、用做数字签名的公开密钥算法,并拥有一对公、私密钥对。由于密钥证书中心的公开密钥量很少,因此要保证它的真实性是很容易的。CKC预先给每一个用户一份经过CKC私钥签名的、包含用户身份标识及公钥的证书。密钥建立过程中通信双方互相传递证书,利用CKC的公开密钥和相应的验证算法验证对方的证书,从而得到对方的公开密钥,然后再利用对方公钥加密、利用自己的私钥签名会话密钥材料传送给通信对方。很显然,经过这样的过程之后,我们可以保证,除去通信双方之外,任何人不会了解有关密钥材料的情况(即使CKC也不会知道有关密钥的情况)。同时,由于双方都对传送的信息做了数字签名,任何恶意的篡改都会被检测出来。
密钥交换
实际上,通信中的会话密钥不一定非得由一方分发给另一方,也不一定非得加密传送。密钥建立过程中双方交换的信息在基于某种假设的基础上是可以公开的。一般的做法是采用密钥认证中心(CKC)来解决这个问题。每一个用户U要加入安全通信网时,必须向CKC提交自己的身份标识ID(U)(或由CKC指定)及自己签名的验证公钥veru,由CKC对该信息签名,于是得到用户U的证书C(U)=(ID(U), veru, sigkcc(ID(U),veru))。用户U在与通信对方建立会话密钥时,对传送信息做签名,同时传送C(U),于是可以使通信双方确认该信息的完整性和来源的真实性。著名的DIFFIE-HELLMAN密钥交换协议是最早提出来的,也是最有名的密钥交换协议。
假定P是素数,α是Zp的本原元,并且p和α的值都是公开的。DIFFIE-HELLMAN密钥交换过程如下:
(1)用户U随机地选取au,0aup-2
(2)用户U计算αau mod p并把结果发送给用户V
(3)用户V随机地选择αv,0avp-2
(4)用户V计算αav mod p并且把结果发送给用户U
(5)用户U计算k=(αav)au mod p并且V计算k=(αau)av mod p在协议的最后,用户U
和V已经获得了同一个密钥k=αauav mod p。Diffie-Hellman
密钥交换协议最大的一个缺点就是双方在建立密钥过程中交换的信息没有完整性和来源真实性的保护。因此,当有入侵者进行主动攻击时,如中间人攻击,则会使双方遭到欺骗,导致信息泄漏。对通信双方U和V来说,保证密钥交换是在他们之间进行而不是和入侵者进行交换是很重要的。在密钥交换之前,用户U和V应该分别实行一个身份认证的协议以确认对方的身份。但是,这种方法仍然对抗不了中间入侵者的攻击,因为W可以在用户U和V互相确认了对方的身份以后才开始攻击行为。所以,密钥协商协议在密钥建立的同时必须自动确认对方的身份。采用证书机制可以很好地解决这个问题。
站对站的协议(Station-to-Station Protocol)就是一种带确认的密钥协商协议,它是DIFFIE-HELLMAN密钥交换的一个改进。在采用该协议的系统中,至少存在一种采用公开密钥算法的签名方案。每个用户U都拥有一对签名的密钥对,用veru代表验证签名的公开密钥。可信机构也有一对用于签名的密钥,其验证算法和验证公钥是公开的。每个用户U有一个证书C(U)=(ID(U), veru, sigTA(ID(U),veru)),其中ID(U)是用户U的身份识别信息,sigTA(ID(U),veru)是可信机构对证书信息的数字签名。协议过程如下:
(1)用户U选择一个随机数au,0aup-2,
(2)用户U计算αau mod p,并把它发送给用户V。
(3)用户V选择一个随机数αv,0avp-2
(4)用户V计算αav mod p,然后再计算αau mod k=(αav)αu mod pyv=ek(sigv(αav,αau))
(5)用户V发送(c(v),αav,yv)给用户U。
(6)用户U计算k=(αau)av mod p,使用verv检验yv,并且使用verTA检验c(v)。
(7)用户U计算yu=ek(sigu(αau,αav)).并把(c(u),yu)发送给用户v。
(8)用户v用veru检验yu并用verTA检验C(U)。
基于身份的密钥分发
设置一个可靠的密钥生成中心。当新用户要加入安全通信网络时,向该中心递交他的身份信息(区别于其他用户的信息,如身份证号码等)。然后,密钥生成中心通过秘密的算法计算出密钥,通过秘密的渠道发送给用户。用户根据这些信息就可以独立地对自己发送的信息加密或鉴别。这种方法的优点就是不必设置全网统一的密钥管理中心,密钥生成中心只需在新用户进网时进行注册。下面以一种离散对数的基于身份的密钥分发体制为例,说明这种方法。
(1)密钥生成中心的准备工作。密钥生成中心随机选取一个大素数p和Zp*上的生成元以及一个Zp-1上的n的维矢量d=(d1,d2……,dn),计算h=(h1,h2,……,hn),使得hi=gdi(mod p)。对所有用户公开p、h和一个单向函数f(•),保持g和d的秘密。
(2)用户加入安全通信网络时,向中心提交身份信息ID,写成二进制为(xk……x2,x1),密钥中心计算用户的扩展身份标识EID=f(ID)=(y1,y2……yn),yi=0,1。于是,可以计算该用户的秘密密钥,通过安全的信道可以把S发送给这个新用户。
(3)当用户1可以用用户2的公开的ID计算用户2的扩展ID,得到EDI2=F(ID)=(y1,y2,…yn),,进一步可以得到Z2=∏1inh1yi(mod p)=gs2(mod p)。然后,用户1可以利用自己的秘密密钥S1计算出K12=Z2s1 (mod p) =gs1s2 (mod p)。同样,用户2也可以计算出K21=Z1s2 (mod p)=gs1s2 (mod p)。显然,这两个密钥相等。于是用户1和用户2获得了共同的密钥。