双向认证协议安全性分析及改进 - 抵御并行会话攻击
双向认证协议安全性分析及改进 - 抵御并行会话攻击
考虑下面的双向认证协议,客户端 Alice 与服务端 Bob 共享秘钥为 KAB,H 为公开的安全 Hash() 函数。
-
试分析一个恶意的攻击者即使不知道 KAB 也能够发起并行会话攻击假冒 Alice。
-
Alice (Client)->Bob (Server): Challenge1
-
Bob (Server)-> Alice (Client) : Hash(KAB ⊕ Challenge1), Challenge2
-
Alice (Client)->Bob (Server): Hash(KAB ⊕ Challenge2)
-
按照上述协议的格式回答如何改进该协议以避免第一问中的并行会话攻击缺陷。
1. 攻击者可以通过并行会话攻击来伪造 Alice 的身份,具体步骤如下:
- 攻击者向 Bob 发送 Challenge1,并获取 Bob 返回的 Hash(KAB ⊕ Challenge1) 和 Challenge2。
- 攻击者向 Bob 发送 Challenge2,并获取 Bob 返回的 Hash(KAB ⊕ Challenge2)。
- 攻击者将获取到的两个 Hash 值组合起来,构造出一个新的 Challenge1',然后向 Bob 发送 Challenge1'。
- Bob 会用 KAB ⊕ Challenge1' 计算 Hash 值,并将 Challenge2' 返回给攻击者。
- 攻击者将 Challenge2' 发送给 Alice,Alice 会用 KAB ⊕ Challenge2' 计算 Hash 值,并将结果发送给 Bob。
- 攻击者成功伪装成了 Alice,与 Bob 完成了认证过程。
2. 改进协议如下:
- Alice (Client)->Bob (Server): NonceA
- Bob (Server)-> Alice (Client) : NonceB, Hash(KAB ⊕ NonceA ⊕ NonceB)
- Alice (Client)->Bob (Server): Hash(KAB ⊕ NonceA ⊕ NonceB)
- Alice 和 Bob 分别生成一个随机的 NonceA 和 NonceB,并将其发送给对方。
- Bob 计算 Hash(KAB ⊕ NonceA ⊕ NonceB) 并将 NonceB 和 Hash 值发送给 Alice。
- Alice 计算 Hash(KAB ⊕ NonceA ⊕ NonceB) 并将结果发送给 Bob。
- Bob 验证收到的 Hash 值是否与自己计算的一致,如果一致则认证通过。
通过引入 NonceA 和 NonceB,并将其包含在 Hash 计算中,使得攻击者无法通过并行会话攻击构造有效的 Challenge 值来欺骗 Bob。 因为攻击者无法独立获取 NonceA 和 NonceB,也就无法计算出正确的 Hash 值。
原文地址: https://www.cveoy.top/t/topic/f0BY 著作权归作者所有。请勿转载和采集!