查看原文
其他

密钥密码学浅析

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488


微信公众号:计算机与网络安全

ID:Computer-network

保密性是数据的一个安全属性,它的主要目的是限制数据所含有的信息知识只能在某个能理解这些数据的群体(如一些人,或者是一些可编程的电子系统)之间共享。达到这一限制的过程,有时也被称为保密,就是将数据明文进行编码的过程,编码后的数据是可逆转的、但很可能没有语法,而且通常没有语义。


早在电子系统出现前很久,就已经出现了多种编码转换方法,这些方法目前通常被称为密码学。数据的加解密转换是一个确定性的过程,在这一过程中,明文形式的数据被隐藏为不暴露原始数据的密文。同样,密文可以被特定的接收者用一种确定性的过程逆转,从而恢复为原始数据。


一、背景知识介绍


早期的密码学算法通常是逐字处理明文输入,然后使用字母替换或换位等方法来进行加密。替换操作,把输入流中的一个字母替换成字母表中的另一个;而换位操作,则是将输入字符流中的一些字母顺序交换。一个著名的替换操作的例子是凯撒密码,这一密码据说被用于凯撒和他的军队进行联络。这一密码中,每个字符都被扩展字母表中它的后三个字母所代替,扩展字母表就是加上空格的字母表。形式上,它的加密算法就是将每个字母的值加三,然后再对27(加上空格)取余,这样就得到了结果。我们给A~Z的26个字母分别赋值为0到25,然后将每个字母P变为:f(P)=P+3 mod 26,图1显示了该算法的一个例子:“RETURN TO BASE”被转换为“UHWXUQ WR EDVH”。

图1  简单的替换密码

换位密码通常先把明文分割成不同块,然后使用某种确定程序将不同块间的字符混杂。如图2,需要加密的明文“RETURN TO BASE”被分成两块,一块是“RETURN”,一块是“TO BASE”,然后将两块字符采用循环的方式进行混杂,这样就形成了密文“ROTBRS TE UANE”。

图2  使用换位进行加密解密的例子

再举一个简单换位的例子,把明文写成一个具有固定行列的二维矩阵,然后简单地对矩阵进行换位即可。如图3所示,明文“RETURN TO BASE”被插入一个29的矩阵中,这样即形成一列密文。解密这一密文的方法就是其逆操作,只要将密文写入一个92的矩阵就可以了。

图3  行列变换加密

通常,换位加密容易被破解,不过如果将进行完一次换位的结果,再经过另外一个换位,就会大大增强加密强度。


尽管算法很简单,但是替换方法是密钥密码学的一个基本例子(需要加的数就是其密钥)。对密钥保密,将算法公开,就可以对密文进行穷举破解了,在本例中穷举破解的集合只是由1到26的数字。因此,在它使用的时代主要通过依赖算法本身的保密性来保证不会被破解。在我们所举的简单例子中,在已知算法后,几乎可以立即破解密文。


随着电子计算机的出现,早期的现代加密算法使用了类似的方法,即利用换位或者替换。主要的不同是,在这些加密算法中,这些转换通常发生于数据的二进制形式的比特层。一个比较常见的例子就是使用XOR操作。


1、XOR基础知识


XOR操作一般用“+”号来表示,是一个比特层的操作,它将{0,1} X {0,1}映射到{0,1}集合,映射方法如下:


0+0=0

0+1=1

1+0=1

1+1=0


如果我们将第二个操作数作为密钥值,XOR 操作就可以看作为根据密钥值进行比特层的替换操作。在这一假想下,如果密钥输入为0,则XOR操作返回其本身(0返回0而1返回1),如果密钥输入为1,则XOR操作则进行逆转(1返回0而0返回1)。XOR具有如下性质:


a+0=a

a+a=0,因此

a+b+b=a


后一性质显示出使用某一定密钥值,XOR操作就可以用来加密一段明文,使用相同的密钥值进行 XOR 操作,就可以将这一密文解密。这一属性产生了很多弱加密算法变种,这些算法都采用XOR操作,因此也容易被破解。


假设一个固定长度的密钥K用于对一明文块进行XOR操作加密。在知道了一个明文块P之后,通过将明文和相应的密文进行XOR操作的办法,可以直接得到K。


C=P+K

P+C=P+P+K=K


类似的,知道了两个明文的相应的密文后,可以通过XOR操作得到这两段明文的XOR值:


C1+C2=P1+K+P2+K=P1+P2


检查 P1+P2 的比特模式可以很容易地恢复其中的一段明文。明文和相应的密文做 XOR操作之后就可以得到密钥值。


每次只转换一个比特的特点使得XOR可以被划到流加密(stream cipher)的算法类中。块加密(block cipher)是另外一类,该算法中把明文分割成具有相同长度的若干块,通常每块长度等于或者大于64比特,然后每次对每块进行相同的加密变换。流加密算法适用于内存缓冲区有限或者是字符单独传输的情况下,比如说在某传输媒介的终点上。由于它们各比特单独进行变换,因此当发生传输异常时,不会产生更大影响。


下面介绍一次性XOR密码本。


尽管XOR操作简单,在固定密钥长度时强度不够,有一种办法,可以只使用这一种操作就建立完美的加密机制。如果密钥流数字随机产生,且只使用一次,那么所产生的密文就要强壮得多。这样加密方法是可被证明对于只具有一套密文的解密者来说是安全的。图4就是简单的基于一次性XOR密码本加密方法的图形表述。

图4  基于XOR操作的一个简单的一次性密码本

一次性XOR密码本的安全性来源于试图猜出密钥流的难度和直接猜测明文的难度相同。注意一次性XOR模板的密钥流长度和要加密的明文的长度相同,这样的属性使得散发和维护这么长的密钥流的工作变得十分困难,因此也就需要一种流加密算法,通过这样的算法,密钥流从一个可管理的密钥中以伪随机数的方式产生。


比特层的一次性密码本在字符层也工作得很好。其实在历史上,当Joseph Mauborgne和Gilbert Vernam最早发明这一方法时,本来是用在字符上的。每个模板中的字符操作于一个明文中的字符,接收方使用相同的密码本进行解密,然后就将密钥毁去。


2、密钥空间


密钥,也称作对称密钥,加密函数E通过这一密钥,将明文P转化为密文C。类似的,加密变换可以被解密变换逆转成明文。如图5所示。

图5  对称密钥加密和解密

现代密钥加密方法的强度一般只依赖于加秘密钥的安全性,而不依赖于对加密算法的保密。因此,可以使用密钥空间中的穷举法对这样的密码系统进行破解。密钥空间就是对于某个加密算法中有效的所有可能的密钥值的集合。举例来说,对于英文字母的任意换位组合有26种,因此这种加密算法的密钥空间由26种组合构成。如果加上一些限制条件,如每个字母只是转化为字母表中后面固定次序个的字母,且每次只转化一个字母,这时密钥空间就要小得多了,只含有从1到26的整数。复杂一些的,如规定块长度为3,也就是说将每个(p1,p2,p3)块转换为(e1,e2,e3),这时密钥空间的大小就是(263)个 。


大多数密钥密码系统中都使用固定长度随机产生的密钥。这些系统一般都会面临密钥空间的穷举性攻击。对于密码系统来说,要想安全的一个必要但不充分条件是密钥空间大到足以避免穷举性攻击。具有讽刺意义的是,加密算法快也有利于进行快速的穷举破解。


二、当前密钥加密算法


所有广为流传的密钥块算法都具有块加密算法的密码学特性。首先,密文中的每一比特都依赖于明文块中的所有比特。改变密钥中的任何比特,都会导致有50%的可能性要改变所有密文比特。而且,在明文和密文间无法推断出统计联系。


1、DES


现代密钥密码系统通过 DES 算法而得到广泛注意。DES 是一种对称密钥算法,该算法中,加密和解密使用相同的密钥。DES算法产生于20世纪70年代早期的IBM公司,从1976年起,它成为了用于保护敏感但未列入密级的电子信息的政府标准。这一算法是一种块算法,它将64比特的输入块转化为相应的64比特的输出密文。它使用56比特长的密钥,但通常写为64比特,其中每个字节具有一位奇偶校验位。图6是DES算法的高层抽象。

图6  DES算法的抽象表示

DES 标准中,数据经过 16 轮处理,每一轮中都根据密钥,使用了包括换位、替换、像XOR的标准算术或逻辑操作等在内的各种操作。


最近由于计算能力的大幅度提高,DES算法正在面临强力破解式的攻击,并显示出该算法易于受到穷举法攻击。TripleDES 是一种利用两个或三个密钥对明文进行三次DES加密的算法。使用两个密钥时,triple-DES 先用第一个密钥进行加密,然后再用第二个密钥进行解密,然后再用第一个密钥加密,从而得到密文。


使用三个密钥的triple-DES对于这三步使用不同的密钥。在 triple-DES中可能的密钥数目是2112个,而在DES算法中密钥空间只有256个。


2、RC4算法


WEP在对数据进行加密/解密的时候,使用的是RC4算法。RC4是RSA公司的Ron Rivest发明的。该算法利用已知的密钥触发一个伪随机数发生器产生可变长度的随机数,使用这个随机数,以字节为单位和明文做异或运算得到密文。


RC4的算法可以分为三个步骤:


步骤一:初始化向量表。即:


for  (  i=0; i <=255; i++ )            state(i)=i;


步骤二: 扰表过程。即:


j=k=0;

for  (  i=0; i<256; i++ )

{   k=[  seed(j) + state(i) + k  ] %  256;

swap [ state(i),state(k) ];

j=(  j + 1  )  %  key_length;

}


步骤三:对数据进行加密。即:


x=y=0;

for  (  ; ; )

{   x=(  x + 1  )  %256;

y=[  state(x) + y] %  256;

swap [ state(x),state(y) ];

xorIndex=[  state(x) + state(y)  ] %  256;

S'(n)=S(n) ^ state(xorIndex);

}


S'(n)为加密后的密文,S(n)为加密前的明文。在整个处理过程中,数据流的位宽都为一个字节长,seed(j)为种子序列。


可以看出,RC4算法的第三步实际上是一个无限循环,只要还有未被加密的数据,这个循环都会产生一个独特的序列号。RC4算法利用这个序列号查询SRAM(即数组state)得到加密所需要的随机数,再用这个随机数来加密数据。因此,RC4算法可以产生任意长的随机数序列用于加密过程。


有资料显示,破译RC4算法所需的工作量超过10100以上。可以认为,RC4算法是一种比较安全的加密方式。目前,RC4算法在SSL(Security Socket Layer)协议中得到了充分的应用,其安全性也得到了广泛的认可。


3、IDEA


尽管不如DES算法那样出名,IDEA算法被一些当代密码学专家认为是最安全可靠的块加密算法。和DES算法相似,IDEA也是以 64比特为单位加密,并得到其输出密文块。它使用相同的算法进行加密或解密,只是在加密解密的时候密钥调度有所不同。与DES算法不同的是,IDEA使用128比特的密钥,并主要使用三类操作:XOR、对216模加,以及对216+1的模乘。这些操作组合起来进行相似的8轮计算组合,然后经过输出转换得到最后的密文。


4、AES


Advanced Encryption Standard(AES),是美国政府准备用来替代DES的标准。最近被指定为AES的算法——Rijndael算法,是一种迭代块密码算法,它的密钥长度和块长度都是可变的,可以是128、192或256比特。Rijndael算法简单优美的设计使得它在现代处理器上运转快速高效。而且它只在单或者是4字节的字(words)中使用简单的全字节操作,该算法的实现中需要的内存相对也比较少。这一算法适合于在各种处理器上实现,包括8比特低能耗、存储空间有限的像智能卡之类的硬件。该算法也适用于并行处理或者多计算逻辑设备(ALU)的处理器中。Rijndael算法与传统的Feistel加密法不同,通常Feistel算法中其中间状态的某些部分比特是不变的。Rijndael算法没有采用这一传统的结构,相反,每一轮变换由三个不同的不可逆转的变化组成,每一个变化都以统一类似的方式来对中间状态的每一比特进行处理。


三、数据完整性和哈西


数据完整性服务和源认证服务都可以利用报文认证代码(Message Authentication Code,MAC)来保证,而且代价要比加密整个明文小得多。MAC主要靠摘要函数来组成。


1、哈西函数


所谓哈西函数,就是一个确定性的过程,通过这一过程,任意长度的报文都可以转换成为一个固定长度的数据摘要字符串。哈西函数目前已经成为了现代密码学中的一个基本组成元素。如果H为一个哈西函数,则需要满足如下条件:


对于任何输入p,都很容易地计算出h=H(p)。


计算p=H-1(h)在计算上是不可行的,这一属性也被称作哈西函数的单向属性。


计算出另一个p'使得H(p)=H(p')在计算上也是不可行的。这一属性也被称作哈西函数的抗冲突性。


如果一个函数满足对于随机生成的字节流,映射成一个n比特的哈西值的概率是2-n,那么哈西函数的抗冲突性就能够得到更好的保证。


这里做的假设是,取决于哈西函数的强度,哈西值能够成为原始数据的缩影,从这个意义出发,哈西值也通常被称为指纹。现代密码学中,哈西函数通常被用来提供文档的数字签名,保障数据完整性,以及进行数据源认证。


MD5 和 SHA-1 是目前广泛流行的两种哈西函数。MD5算法生成 128 比特的摘要,而SHA-1生成160比特的摘要。SHA-1算法要更强一些,更能够抵抗穷举破解,而另一方面,MD5算法计算时的性能要好一些。


将哈西函数和某种密钥加密算法组合在一起,就可以形成 MAC,可以用它来保证数据的完整性和源认证。与利用哈西函数防止数据被篡改的MDC(Modification Detection Codes)相比,MAC使用密钥算法进行加密,这样只有那些知道密钥的主体才能够验证摘要。


2、MAC举例


一个简单的单向哈西函数变成 MAC 的方法就是将所得的哈西值用某种块加密算法进行加密。类似的,MAC也可以只使用某种对称块加密算法,采用类似于CBC的方式来进行。在这种方式中,随机选择一块数据作为初始向量。将这一初始向量与要加密的第一块数据进行异或操作,然后加密这一块。将所得结果再与下一块进行类似操作,不断重复这一过程,如图7所示。最后一个密文块再以CBC方式进行加密,最后所得即为MAC值。目前,已经有一些这样的算法流程出现。其中使用DES算法的即为DES-MAC,使用Triple DES则称为Triple-DES-MAC。

图7  CBC模式的MAC算法

3、HMAC


还有这样一些 MAC 算法,它们只使用带密钥的单向哈西函数。一个简单的例子是将一个密钥加到数据上作为前缀或者是后缀,将所生成的结果再通过哈西函数。还有的算法则将密钥既加为前缀又加为后缀。此外,更可靠的方法是在计算哈西值时,也将数据的长度加到需要生成摘要的数据中去。


这种算法中,一个比较著名的算法即是HMAC。HMAC算法使用了一个通用循环哈西函数H。在实践中,大多数情况都选择MD5或者是SHA-1算法。


我们假定b为所用哈西函数输入块的块长度(对于MD5和SHA-1算法来说都是64),定义如下的内部和外部填充值:


innerPad=byte 0x36,重复b次

outerPad=byte 0x5C,重复b次

为计算HMAC值,需要对输入p执行如下操作:

H((K XOR outerpad) || H((K XOR innerpad) || p))


这里||表示字符串相连。这一计算可以分解成如下几步:


(1)K后填充0生成一个b字节的字符串

(2)将步骤(1)所生成的字符串与innerPad进行异或操作

(3)在步骤(2)所生成的b字节字符串后添加流p

(4)使用哈西函数H对步骤(3)中所生成的流进行操作

(5)将步骤(1)所生成的字符串与outerPad进行异或操作

(6)在步骤(5)所生成的b字节字符串后添加步骤(4)所生成的结果

(7)使用哈西函数H对步骤(6)中所生成的结果进行操作,得到最终结果


对于最后生成的哈西值来说,H对于该算法的有效性起着重要作用。这一算法可以对剩下的各个块进行相同操作。


四、密钥密码学的安全服务


密钥加密法可以用来保证数据机密性、完整性和源真实性。


1、保密性


使用密钥算法加密数据内容,可以使得只有具有正确密钥的实体才能解密并从密文中取得原始数据。密钥加密法所保证的机密性的可靠程度依赖于加密算法的强度,尤其依赖于所使用的密钥的长度。密钥长度直接影响密钥空间的大小。较长的密钥生存期间也会降低密钥算法所保证的保密服务的可靠性。密钥使用的时间越长,进行穷举破解成功的可能性就越大。现代大多数安全协议都只在某个通信会话的进行期间使用相同的密钥。


通过安全加密算法保证的保密性服务使得用户可以在公网中传输私人信息。类似的,这样的信息还可以保存在远程媒介而不用顾虑被窃取。保证数据机密性的花销依赖于所采用的加密算法,显然它与要被加密的数据多少成比例关系。


2、密钥密码学及抗抵赖性


密钥密码学本身不足以保证抗抵赖性,抵赖就是对一个已经发生的行为的否认,如一次交易的开始。尽管可以使用密钥加密技术在两个通信实体间建立可信数据通道,一个只使用密钥算法建立的抗抵赖系统有一个固有的缺陷就是密钥发布给多方。


3、源真实性


只要密钥只被双方共享,数据源的真实性就可得到保证。当三方或更多方共享相同密钥时,源真实性就无法只通过密钥算法得到保证。目前已经出现了各种基于密钥技术的认证协议。


图8举例说明了一个在A和B之间使用的一个简单的密钥认证协议。通过举证表明自己拥有密钥 K来实现认证。A为了认证 B,它首先产生一个随机值 R1,保存一个拷贝后把一份发给B,B使用E(R1,K)来加密R1,形成一个具有B'的身份标识和加密后值的报文,然后发送给A。A收到报文后,使用D(R1,K)来解密得到R1并与储存在本地的值相比较。B也可以使用类似的步骤来认证A,这时使用另外一个随机数R2。

图8  一个基本的密钥认证协议

如上所述的认证协议还需要仔细地审核。因为这个简单的协议是有缺陷的,它易于遭到反射攻击。在这种攻击中,V利用B愿意加密任何值这一特点,冒充A来向B认证。V首先冒充A产生R2并要求B来加密它,B然后产生随机值R1让V(冒充为A)去加密以便认证。现在V开始一个新的与B的会话,使用接到的值R1来向B要求进行加密,在得到B的答复后,V再回到第一个会话,发给B加密后的值,然后就向B验证了自己是A。


改善这一协议的一种方法是对于会话发起方和应答方必须使用不同的Challenge值。


五、密钥的发布和管理


一般说来,通过密钥密码学系统提供的安全服务要求密钥在此服务使用之前发布给两个或更多的实体。密钥发布过程也称作密钥的建立过程。为了抵抗潜在的窃听威胁,这个过程通常要求无论是在线还是带外来进行发布,必须通过一定的安全方式来进行。在发布之后,长期的密钥使用使安全管理过程变得必要。


显然,密钥在本地或网络上的存储介质中必须受保护;在进一步的向远端发布的过程中,密钥传输也应当受到保护。构建和维护密钥共享关系是同等重要的,该关系是由用户团体采用的通信方式所决定的。例如,额外的密钥管理细节可能要求两个实体间的密钥建立过程后还要进行密码学确认。密钥管理过程也需要支持万一密钥泄露,在进行相应处理措施的同时,还可以更新旧的密钥。


这些密钥管理功能的复杂性是与本地所采取的策略类型相对应的。更重要的是,它们更多取决于特定团体所遵从的通信模式及网络。


假设有n个人为了建立一个他们内部间加密通信的渠道,他们决定使用对称加密法。密钥建立的不同过程可能导致密钥发布的不同情形,一共有四种情形。


1、对于所有用户共用一个密钥


在这种情形下,所有用户共用一个密钥并用它来对要交换的信息进行加密和解密。这一共享的密钥需要有n次发布,每个用户需要管理一个密钥。这个密钥只要一处泄露,就会导致这个群体中所有加密通信被破解。而且由于所有人共享一个密钥,源认证很难可靠地实现,群体中的成员可以冒充其他人的身份。在这种情形下,非抵赖服务就无法完成。如图9 所示,即为所有成员共享一个密码的情形。

图9  群体所有成员共用一个密钥

2、每个用户一个密钥


在这种情形下,组里的每个成员使用一个单独的密钥,这样每个用户需要发布n-1次,对于整个团体来说,总共需要发布n(n-1)次密钥。每个用户需要管理他/她自己的密钥,以及其他(n-1)个用户的密钥,共有n个密钥。这种设计可以实现源认证服务,但是无法实现抗抵赖服务。既然每个用户知道使用的所有密钥,他/她就可以对其他用户的通信进行监听。事实上,一旦用户的密钥泄露给其他成员,这个用户就会面临可能的另一个用户冒充他身份的潜在威胁。


下面使用有向图来模仿一个团体中的通信方式,端点代表用户。端点a到端点b的有向连接表示需要从a到b的密钥发布过程。密钥发布的总数就是这个有向图的边数,或者是无向图边数的两倍。图10中显示了对于五个用户组成的一个群体的情形,群体中每个实体和其他成员是用自己的密钥,箭头表示密钥发布的方向。

图10  群体中每个实体和其他成员使用自己的密钥

3、每一对用户一个密钥


在第三种情形中,每一对用户共享一个特有的密钥。


相应的图表示就是一个完全的无向图。无向图的边总数(也就是密钥所需的分布次数)是n(n-1)/2。另外,每个用户需要保存和管理n-1个密钥(每一对用户共享一个密钥),如图11所示。破解一个密钥只会使相应的一对用户的通信遭到破坏。

图11  一对用户共享一个密钥

4、每个用户一个单独的密钥


在另一种情形下,每一个用户要使用不同的密钥和组里的其他成员进行通信,这样就有n(n-1)种密钥发布过程(用无向图边数的两倍表示)。另外,现在每个用户需要管理同其他(n-1)个用户进行通信的(n-1)个密钥,同时他/她还要记住给其他(n-1)个用户的每个密钥。这样,每个用户需要管理2(n-1)个密钥,如图12所示。这个数字正好是每对用户一个密钥中需要管理密钥数的两倍。

图12  组中为每个用户管理不同的密钥

图13描述了由七个用户组成的一个组中,通信模式可能会有的三个变种。图中的每个端点表示组里的每个用户,图中的邻边表示成员间双向通信。假设每个用户具有一个特定的密钥,在每种情形下,密钥发布的总数相当于对应图边数总和的两倍。因此,在图13(a)中,需要14个密钥发布过程;图13(b)中,用户分成两组,共需要24个密钥发布过程;在图13(c)中,每个用户需要和组中的其他用户通信,共需要34个密钥发布过程。

图13  密钥发布对应于基础通信模式

这些情形表明密钥发布的数目是与组间用户通信连接的数目成正比的。就如我们所看到的,一组用户间密钥关系策略也导致了密钥散发过程的复杂性。一旦需要更新一个密钥,一个密钥发布过程就会重新开始。


一般说来,密钥发布次数越频繁,那么密钥被窃取或破解的可能性就越大。密钥可能在发布时的传输过程,或在存储介质里遭到窃取或破解。事实上,长期使用密钥的发布和暴露实质上违反了对称密钥加密的核心前提,即对称密钥加密系统的安全性取决于密钥的保密性。


5、集中的密钥管理


软件系统的进步已经使密钥发布和管理操作所产生的安全风险有所减缓。如密钥发布中心(KDC)系统,该系统对密钥进行集中管理,集中保存。


这时每个通信实体只需要把密钥告诉给KDC,通过使用这样一个系统,密钥的发布次数减少到等同于参与的团体的数目n。而且,每个参与的实体就可以不必再关心密钥(包括自己的密钥)的管理。


图14详细说明了由第三方密钥发布中心引入的全新概念。对于该系统中的每个实体来说,第三方显示了该服务器的中立性。除非通过 KDC 中介进行访问,每个实体只相信KDC而不相信其他实体。

图14  集中密钥管理方式

然而,只有 KDC 还不足以在用户群中传播密钥,还需要一个安全协议用来引入其他实体进行中介。在某种程度上,实体是通过信任KDC服务器而与其他实体间建立起信任度的,而KDC只是承当把一个实体介绍给另一个实体的中间人角色。


6、Needham-Schroeder方案


Needham-Schroeder方案提供了一种全新的方式来实现前面所提到的实体安全引入。在这一方案中,可以通过使用临时密钥来实现认证和其他加密安全服务。这个密钥由KDC生成,短期内有效,与两实体间的一次对话相关。


下面简要介绍一下该协议的工作步骤。假设有A、B两实体,希望通过KDC获得一个对话密钥。在此之前,还需要一个建立过程,在这一过程中,A和B分别产生了和KDC对话的密钥Kz、Kb。我们用Kz,b表示a、b会话用的一个密钥。我们用Ez,b表示在a、b实体间使用一个密钥的加密过程。


最开始,实体A通过对KDC提出请求希望得到受理。它发送包含A、B身份和一个随机数字Na的信息。

KDC 产生一个对话密钥K,然后,它构成一个包含K和A身份的信息,并用Kb,kdc(和B共享的密钥)加密。再将结果和A产生的随机数字Na、B的身份、会话密钥K联在一起,用Ka,kdc加密。

A使用自己的密钥解密前一步骤接收到的信息,然后得到对话密钥K。它检验到即时随机数Na和前一步骤发送给KDC的数一样,接着,它把KDC用B的密钥进行加密过的那一部分信息发送给B。

B使用自己和KDC共享的密钥Kb,kdc,并对前一步骤接收到的信息进行解密,因此揭开对话密钥K。然后,它产生一个随机数Nb,使用K进行加密并把它发送给A。

A对前一步骤接收到的信息进行解密,计算出值Nb-1;用K进行加密后发送给B。

B 对前一步骤接收到的信息进行解密,并确认它确实接收到值 Nb-1。这一步是为了避免重发攻击。


现在,K可用来对A和B在建好的通道上进行交换的任何数据进行加密。


第三方认证协议后来发展成的一个实用体系,即 Kerberos 协议,实际上是Needham-Schroeder方案的一个变种。这个广泛使用的安全协议已经被证明是已设计出的第三方认证方案中最好的方案之一。具有讽刺意义的是,在安全界中,Kerberos 的发展比可信第三方概念的创造者具有更大的声誉和影响力。它的影响归功于它比可信第三方密钥管理的概念走得更深远一步,使得它更适合实际应用。这一点主要体现在通过在对话密钥上增加时间戳和生存期限,从而比Needham-Schroeder方案更好一些。在对话密钥上加上时间限制,就会使密钥破解或暴露所带来的影响有限。


当然,Kerberos不只包含一个认证协议。它的步骤完成之后,就会产生一个对话密钥的安全发布。这一点构成了Kerberos无需泄露任何长期密钥就在实体间建立加密通道的基础。不依赖于本机操作系统,也不要求运行应用程序的主机物理安全,每个实体均可使用Kerberos协议认证对方。实体是工作在开放网络的假设之下,所谓开放的网络,就是指在这样的网络上,传输的信息包都可能被读、修改或插入。


Kerberos的第5版本已经成为很多操作系统的一部分,并已成为一个 Internet标准。虽然它的所有协议很精致、安全,但在当今无所不在互联网计算方面,它仍存在一些缺点。首先,为了保证实体间介绍那一步发生,必须要求通信方能够在线访问KDC。另外,需要提供安全时间源以保证所产生的对话密钥的可靠性。最重要的是,即使 KDC 服务器一直在线,也无法满足普遍存在的Internet模型。KDC由于留有所有的密钥,极易成为单点故障点,一旦它遭到破坏,就会发生灾难性问题。


密钥发布的问题其实并不那么在于需要发布的次数,重要的在于寻找一个可靠的安全通道。由于这个问题的递归性质,密钥加密系统本身不能解决密钥发布问题。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存