双向认证协议的并行会话攻击及改进方案
双向认证协议的并行会话攻击及改进方案
1. 攻击场景
考虑下面的双向认证协议,客户端 Alice 与服务端 Bob 共享秘钥为 KAB,H 为公开的安全 Hash() 函数。
- Alice (Client)->Bob (Server): Challenge1
- Bob (Server)-> Alice (Client) :Hash (KAB ⊕ Challenge1), Challenge2
- Alice (Client)->Bob (Server): Hash (KAB ⊕ Challenge2)
攻击者可以通过截获 Alice 发送的 Challenge1 并向 Bob 发送自己构造的 Challenge1' 来发起并行会话攻击。攻击者可以使用自己的秘钥 KAB' 来计算 Hash(KAB' ⊕ Challenge1'),并将结果发送给 Bob。Bob 会将 Challenge2 发送给攻击者,攻击者可以使用同样的方式计算出 Hash(KAB' ⊕ Challenge2) 并发送给 Bob,从而成功伪造 Alice 的身份。
2. 改进方案
为了避免上述并行会话攻击,可以改进协议如下:
- Alice (Client)->Bob (Server): Challenge1, Hash(KAB ⊕ Challenge1)
- Bob (Server)-> Alice (Client) :Challenge2, Hash(KAB ⊕ Challenge1 ⊕ Challenge2)
- Alice (Client)->Bob (Server): Hash(KAB ⊕ Challenge2)
在改进的协议中,Alice 在发送 Challenge1 时同时发送了 Hash(KAB ⊕ Challenge1),Bob 在收到 Challenge1 时先计算出 Hash(KAB ⊕ Challenge1) 并与 Alice 发送的值进行比较,以确保 Alice 拥有正确的秘钥 KAB。如果比较成功,Bob 会发送 Challenge2 和 Hash(KAB ⊕ Challenge1 ⊕ Challenge2) 给 Alice,Alice 再根据 Challenge2 计算出 Hash(KAB ⊕ Challenge2) 并发送给 Bob,完成认证过程。这种改进的协议可以有效避免并行会话攻击。
原文地址: https://www.cveoy.top/t/topic/f0Ck 著作权归作者所有。请勿转载和采集!