Needham-Schroeder共享密钥协议
Needham-Schroeder共享密钥协议(Needham-Schroeder Shared-Key Protocol, NSSK) 是密码学史上首个基于可信第三方(Trusted Third Party, TTP) 的相互认证与密钥分发协议。旨在解决大规模网络中任意两方安全建立共享会话密钥的难题。
该协议的核心思想是引入一个各方都信任的密钥分发中心(Key Distribution Center, KDC),记作 S。每个用户(如Alice和Bob)预先与KDC共享一个长期密钥(K_AS, K_BS),用于安全地获取短期、一次性的会话密钥(K_AB)。
协议流程
协议由5条消息组成,分为密钥分发(消息1-3)和相互认证(消息4-5)两个阶段。
前提条件:
- A(发起方)与S(KDC)共享长期密钥
K_AS。 - B(响应方)与S(KDC)共享长期密钥
K_BS。 - 协议目标:A与B建立并相互认证一个新鲜的会话密钥
K_AB。
协议步骤:
-
A → S:
A, B, N_A
A向KDC发起会话请求,附上自己的身份A、目标身份B以及一个一次性随机数N_A(Nonce),用于保证消息的新鲜性。 -
S → A:
{ N_A, B, K_AB, { K_AB, A }_K_BS }_K_AS
KDC生成会话密钥K_AB,然后构造一个“票据(Ticket)”:{ K_AB, A }_K_BS,这个票据只有Bob能用他的密钥K_BS解密。KDC将N_A、B、K_AB和这个票据打包,并用Alice的密钥K_AS加密后发回给Alice。
Alice解密后,通过检查N_A和B来确认这是对她请求的、新鲜的响应。 -
A → B:
{ K_AB, A }_K_BS
Alice将收到的票据原样转发给Bob。
Bob用自己的密钥K_BS解密票据,从而获得会话密钥K_AB,并确认与之通信的对象是Alice。 -
B → A:
{ N_B }_K_AB
Bob生成一个新的随机数N_B,用刚得到的会话密钥K_AB加密后发送给Alice。这是一个挑战(Challenge),用于验证Alice是否真的持有K_AB。 -
A → B:
{ N_B - 1 }_K_AB
Alice解密消息4得到N_B,对其进行一个约定的变换(如减1),再用K_AB加密后发回给Bob。这是对挑战的响应(Response)。
Bob解密并验证N_B - 1正确,即可确信对方确实拥有K_AB,从而完成了对Alice的认证。
协议缺陷与攻击
该协议存在一个著名的重放攻击(Replay Attack)
- 攻击场景:假设攻击者(I)已经通过某种方式(如破解或泄露)获取了一个旧的会话密钥
K_AB。 - 攻击流程:
- 攻击者记录下在旧会话中A发给B的票据
{ K_AB, A }_K_BS。 - 在新会话中,攻击者冒充A,将此旧票据重放给B。
- B解密票据,以为在与A通信,并使用旧的
K_AB加密自己的新鲜随机数N_B发给“A”(实际被攻击者截获)。 - 攻击者用已知的旧密钥
K_AB解密得到N_B,并计算出N_B-1,再用K_AB加密后发回给B。
- 攻击者记录下在旧会话中A发给B的票据
- 攻击结果:B成功完成了认证,相信自己正与A进行新鲜的安全通信,但实际上共享的是攻击者已知的旧密钥,通信内容可被攻击者解密。该攻击的本质是协议无法保证消息3(票据)的新鲜性。
协议的改进
为解决上述缺陷,主要提出了两种改进思路:
- 引入时间戳(Timestamp):Denning和Sacco提出,在KDC生成的票据中加入时间戳
T。接收方(Bob)通过检查时间戳是否在可接受的窗口内,来判断票据是否新鲜。这简化了协议(可省略消息4和5),但要求所有参与者时钟同步,这在分布式系统中并非易事。 - 增加一次握手:Kerberos认证协议基于此思想进行了改进,通过增加额外的认证步骤来确保票据的新鲜性。

浙公网安备 33010602011771号