密钥管理包括:密钥的产生,分配,注入,验证和使用。
密钥分配是密钥管理中最大的问题。密钥必须通过最安全的通路进行分配。

网外分配方式:派非常可靠的信使携带密钥分配给互相通信的各用户。
网内分配方式:密钥自动分配

对称密钥分配存在以下两个问题:
1.如果n个人中的每一个都需要和其他n-1个人通信,就需要n(n-1)个密钥,但每两人共享同一个密钥,因此密钥数是n(n-1)/2,如果n非常大,则需要的密钥数量就非常大
2.通信的双方如何才能安全地得到共享的密钥呢?正因为网络不安全,所以才需要使用加密技术,但密钥又需要怎样传送呢?

目前最常用的密钥分配方式是设立密钥分配中心KDC,KDC是大家都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次)。

KDC分配密钥的基本步骤:
前提:需要通信的用户A和B都是KDC的登记用户,且在KDC服务器上安装了各自和KDC服务器进行通信是的主密钥KA和KB。
1.用户A向KDC发送明文,说明想和用户B通信,在明文中给出A和B在KDC登记的身份。
2.KDC用随机数产生“一次一密”的会话密钥Kab供A和B的这次会话使用,然后向A发送回答报文,这个回答报文用A的主密钥KA加密。这个报文中包含这次会话使用的密钥Kab和请A转给B的一个票据,该票据包括A和B在KDC登记的身份,以及这次会话将要使用的密钥Kab。票据用B的密钥Kb加密,A无法知道此票据的内容,因为A没有B的密钥KB,当然A也不需要知道此票据的内容。
3.当B收到A转来的票据并使用自己的密钥KB解密后,就知道A要和他通信,同时也知道KDC为这次和A通信所分配的会话密钥Kab。

此后A和B就可以通过会话密钥Kab进行这次通信了。

几点小注意:
1.网络上传输密钥时,都是经过加密的,解密用的密钥都不在网上传送。
2.KDC还可以在报文中加入时间戳,以防止报文的截取者利用以前已记录下的报文进行重放攻击
3.KDC分配给用户的密钥KA和KB,都应该定期更换,以减少攻击者破译密钥的机会。

目前最出名的密钥分配协议是Kerberos V5,它既是鉴别协议,同时也是KDC,下面简单介绍下Kerberos V4的大致工作过程,原理和V5大体一样,但是稍简单些。

Kerberos使用两个服务器:
1.鉴别服务器AS
2.票据授予服务器TGS

Kerberos只用于客户和服务器之间的鉴别,而不用于人对人的鉴别。
Kerberos用以下六个步骤鉴别的确是A,而不是其他人冒充A向B请求服务后,才向A和B分配会话使用的密钥
1.A用明文向鉴别服务器AS表明自己的身份。AS就是KDC,它掌握各实体登记的身份和相应的口令。AS对A的身份进行验证,只有验证结果正确,才允许A和票据授予服务器TGS进行联系。
2.鉴别服务器AS向A发送用A的对称密钥KA加密的报文,这个报文包含A和TGS通信的会话密钥KS以及AS要发送给TGS的票据(这个票据是用TGS的对称密钥Ktg加密的),A并不保存密钥KA,但当这个报文到达A时,A就键入其口令,若口令正确,则该口令和适当的算法一起就能生成密钥KA。这个口令随即被销毁。密钥KA用来对AS发送过来的报文进行解密。这样就提取出会话密钥KS(这是A和TGS通信要使用的)以及要转发给TGS的票据(这是用密钥Ktg加密的)
3.A向TGS发送三项内容:

  • 转发鉴别服务器AS发来的票据
  • 服务器B的名字,这表明A请求B的服务。请注意,现在A向TGS证明自己的身份并非通过键入口令 (因为入侵者能够从网上截获明文口令),而是通过转发AS发出的票据(只有A才能提取出)。票 据是加密的,入侵者伪造不了。
  • 用KS加密的时间戳T,它用来防止入侵者的重放攻击。

4.TGS发送两个票据,每一个都包含A和B通信的会话密钥KAB。给A的票据用KS加密,给B的票据用KB加密,注意,现在入侵者不能提取KAB,因为不知道KS和KB,入侵者也不能重放步骤3,因为入侵者不能把时间戳更换为一个新的(因为不知道KS),如果入侵者在时间戳到期之前,非常迅速地发送步骤3的报文,那么对TGS发送过来的两个票据仍然不能解密。
5.A向B转发TGS发来的票据,同时发送用KAB加密的时间戳T。
6.B把时间戳T加1来证实收到了票据,B向A发送的报文用KAB加密。
此后,A和B就使用TGS给出的会话密钥KAB进行通信。

公钥的分配
在公钥密码体制中,如果每个用户都具有其他用户的公钥,就可以实现安全通信。看起来好像可以随意公布用户的公钥,其实不然。设想A要欺骗用户B,A可以向B发送一份伪造是C发送的报文,A用自己的私钥进行数字签名,并附上A自己的公钥,谎称这公钥是C的。B如何知道这个公钥不是C的呢?这需要一个值得信赖的机构来将公钥与其对应的实体(人或机器)进行绑定,这样的机构叫做认证中心CA。每个实体都有CA发来的证书,里面有公钥及其拥有者的标识(人名或IP),此证书被CA进行而来数字签名。