3.7 加密密钥管理
到这里,本书讨论的安全协议实例大都是对主体的名称或应用数据(比如对出租车计价器进行触发的脉冲)进行身份验证。实际上还有一种很重要的身份验证协议——?用于管理密钥的协议。直到最近,这种协议在支持其他运营的后台中广泛应用,大多数这类技术的开发都用于对密钥(比如取款机与银行彼此通信时使用的密钥)进行管理,不过现在,像付费电视这样的系统使用密钥管理直接控制对系统的访问。
身份验证协议现在也用于分布式计算机系统,以实现通常的密钥管理目的,因此也变得更重要。Kerberos是第一种得到广泛应用的这类系统,Windows中使用了该协议的一个变种。为理解Kerberos协议,下面介绍一些基础知识。
3.7.1 基本密钥管理
密钥分配协议的基本思想是,在两个主体需要进行通信时,使用一个可信的第三方进行身份验证。
讨论身份验证协议时,常规的做法是给主体赋予人名,以免迷失于太多的代数符号表示中,因此,本书将两个通信主体分别称为Alice与Bob,可信的第三方为Sam。但是不要认为本书正在讨论的是人本身。Alice和Bob很可能是程序,而Sam可能是服务器。比如,Alice可能是出租车计价器里的程序,Bob是变速箱传感器的程序,而Sam是出租车监察站的计算机。
总之,简单的身份验证协议运行方式如下:
(1) Alice首先呼叫Sam,申请密钥与Bob进行通信。
(2) Sam进行应答,向Alice发送一对证书。每个证书包括一个密钥副本,第一个加密证书只有Alice能读懂,第二个加密证书只有Bob能读懂。
(3) Alice呼叫Bob,提交第二个证书对自己进行介绍。双方都用和Sam共享的密钥对相应的证书进行解密,然后才可以得到新的密钥。Alice现在可以用这个密钥向Bob发送密文,并且接收Bob返回的消息。
重放攻击是身份验证协议中一个的已知问题,因此,为了让Alice和Bob能检测证书是新鲜的,Sam会在每个证书上包含一个时间戳。如果证书永远也不作废的话,处理那些权限已经撤消的用户时就会产生严重的问题。
使用协议表示法,可以把这个过程描述如下:
A→S: A,B
S→A: {A,B,KAB,T}KAS ,{A,B,KAB,T} KBS
A→B: {A,B,KAB,T} KBS ,{M} KAB
将上面的表示法适当扩展一下,Alice呼叫Sam,并声称需要与Bob通话。Sam构造一个会话密钥消息,包含Alice的名字、Bob的名字、他们使用的密钥和一个时间戳。Sam用其与Alice共享的密钥对所有这些数据进行加密,再用与Bob共享的密钥对这些数据进行加密,并将密文都发给Alice。Alice从发送给她的加密密文中重新获得密钥,并将为Bob加密的密文传送给他。现在Alice可以用这个密钥对任何数据进行加密并发送给Bob了。