分步执行密钥和消息交换(CNG 示例)
更新: 2008 年 7 月
加密公钥/私钥解决方案易受中间人攻击。这些攻击采用多种形式,包括侦听、替换、拒绝服务和仿冒。下一代加密技术 (CNG) 安全通信示例演示了替换,即第三方 (Mallory) 将自身插入到两个通信终结点(Alice 和 Bob)之间。
下面几节提供了背景信息、插图以及 CNG 示例概述中讨论的五个安全版本的分步说明:
版本 1:基本消息交换
版本 2:未签名密钥和未签名消息的交换:
不带截获
带截获
版本 3:签名密钥和签名消息的交换
版本 4:带检测的签名密钥和签名消息交换
版本 5:带应用程序终止的签名密钥和签名消息交换
版本 1:基本消息交换
下图演示了 Alice 和 Bob 在没有中间人攻击时发送消息的情况。消息没有加密或进行数字签名。选择版本 1 时,CNG 示例将演示此过程。插图后提供了此过程的分步说明。
版本 1:基本消息交换
Alice 和 Bob 发送未加密、未签名的消息
1. Alice 创建一条消息。
2. Alice 将该消息发送给 Bob。
3. Bob 收到 Alice 的消息。
4. Bob 创建一条消息。
5. Bob 将该消息发送给 Alice。
6. Alice 收到 Bob 的消息。
版本 2:不带截获的未签名密钥和未签名消息
下图演示了无中间人攻击的密钥和消息交换。选择版本 2 并关闭 Mallory 的截获时,CNG 示例将演示此过程。插图后提供了此过程的分步说明。
版本 2:不带截获的未签名密钥和未签名消息
Alice 和 Bob 创建各自的密钥
1. Alice 生成一个公钥/私钥对。
2. Alice 将其公钥发送给 Bob。
3. Bob 存储 Alice 的公钥。
4. Bob 生成一个公钥/私钥对。
5. Bob 将其公钥发送给 Alice。
6. Alice 存储 Bob 的公钥。
Alice 和 Bob 派生匹配的密钥材料
7. Alice 使用自己的私钥和 Bob 的公钥生成一个共享机密协议。她使用该共享机密协议来派生密钥材料。
8. Bob 使用自己的私钥和 Alice 的公钥生成同样的共享机密协议。他使用该共享机密协议派生与 Alice 同样的密钥材料。
有关共享机密协议和密钥派生的更多信息,请参见 ECDH 算法概述(CNG 示例)。
Alice 和 Bob 互相发送消息
9. Alice 创建一条消息并用密钥材料对它进行加密。
10. Alice 将该加密消息发送给 Bob。
11. Bob 接收并解密该消息。
12. Bob 创建一条消息并用密钥材料对它进行加密。
13. Bob 将该消息发送给 Alice。
14. Alice 接收并解密该消息。
版本 2:带截获的未签名密钥和未签名消息
下图演示了有中间人攻击的密钥和消息流。选择版本 2 并启用 Mallory 的截获时,CNG 示例将演示此过程。
版本 2:带截获的未签名密钥和未签名消息
Mallory 模拟 Bob
1. Alice 生成一个公钥/私钥对。
2. Alice 将其公钥发送给 Bob。
3. Mallory 截获并存储 Alice 的公钥。
4. Mallory 生成他自己的公钥/私钥对以用于 Alice。
5. Mallory 将他的公钥发送给 Alice,诱使她认为此公钥来自 Bob。
6. Alice 存储 Mallory 的公钥,以为这是 Bob 的。
直到完成了与 Alice 的密钥交换之后,Mallory 才建立与 Bob 的通道。这样做是因为他与 Alice 共享 PublicChannel(请参见源代码概述)。他需要先向 Alice 发送他的替换密钥,然后才能关闭再重新打开 PublicChannel,然后与 Bob 连接。
将此与步骤 17-22 进行比较。在步骤 17-22 中,Alice 发送的消息直接传输给 Bob。
Mallory 模拟 Alice
7. Mallory 生成另一个公钥/私钥对以用于 Bob。
8. Mallory 将其公钥发送给 Bob。
9. Bob 存储 Mallory 的公钥,以为这是 Alice 的。
10. Bob 生成一个公钥/私钥对。
11. Bob 将其公钥发送给 Alice。
12. Mallory 截获并存储 Bob 的公钥。
Alice 和 Mallory 派生匹配的密钥材料
13. Alice 使用自己的私钥和她以为是 Bob 的公钥(实际是 Mallory/Alice 公钥)生成一个共享机密协议。她使用该共享机密协议派生 Mallory/Alice 密钥材料。
14. Mallory 使用自己的私钥和 Alice 的公钥生成同样的共享机密协议。然后使用该共享机密协议派生与 Alice 相同的密钥材料。
Bob 和 Mallory 派生匹配的密钥材料
15. Mallory 使用自己的私钥和 Bob 的公钥生成一个共享机密协议。他使用该共享机密协议派生 Mallory/Bob 密钥材料。
16. Bob 使用自己的私钥和他以为是 Alice 的公钥(实际是 Mallory/Bob 公钥)生成同样的共享机密协议。然后他使用该共享机密协议派生与 Mallory 相同的密钥材料。
说明: |
---|
步骤 13 和步骤 16 之后,Alice 和 Bob 以为他们共享的是同一密钥材料。实际上,他们不是彼此共享密钥材料,而是与 Mallory 共享密钥材料。 |
Alice 给 Bob 发送一条消息
此时,Mallory 有两条打开的管道可用,能够参与双重对话。这与步骤 1-6 不同。在步骤 1-6 中,Mallory 一次打开一条通道来截获加密密钥。
17. Alice 生成一条消息,并使用她在步骤 13 中生成的 Mallory/Alice 密钥材料加密此消息。她将一个潜在销售联系人的信息告诉给 Bob。
18. Alice 将该消息发送给 Bob。
19. Mallory 截获并解密该消息。他窃取了该联系人信息。
20. Mallory 根据 Alice 的消息生成一条假消息,但是他更改了联系人地址。他使用共享的 Mallory/Bob 密钥材料加密这条假消息。
21. Mallory 将该消息发送给 Bob。
22. Bob 解密该消息,以为它来自 Alice。
Bob 给 Alice 发送一条消息
23. Bob 生成一条消息,并使用他在步骤 16 中生成的 Mallory/Bob 密钥材料加密该消息。他告诉 Alice 他期待与这个联系人见面。
24. Bob 将该消息发送给 Alice。
25. Mallory 截获、解密并丢弃了该消息。
26. Mallory 使用共享的 Mallory/Alice 密钥材料生成一条假消息。他告诉 Alice 他认为这个销售联系人的地址不正确,但是他会继续尝试联系此联系人。
27. Mallory 将该消息发送给 Alice。
28. Alice 解密该消息,以为它来自 Bob。她接受了他的说明,并继续处理其他客户。
版本 3:带截获的签名密钥和签名消息
下图演示了加密密钥和消息流、中间人攻击和使用数字签名来签署密钥和消息。选择版本 3 并启用 Mallory 的截获时,CNG 示例将演示此方案。
版本 3:带截获的签名密钥和签名消息
除了演示使用数字签名来签署消息和加密密钥外,版本 3 与版本 2 完全相同。
在步骤 1-6 中,Alice 在不安全的 PublicChannel 上发送数字签名密钥,该密钥在此通道被 Mallory 截获,Mallory 用它来签署其替换密钥和消息。结果,Alice、Bob 和 Mallory 使用同一数字签名密钥。当 Alice 和 Bob 在步骤 15、20、35 和 42 中验证密钥和消息签名时,没有检测到 Mallory 的截获。
版本 4:带检测的签名密钥和签名消息
下图演示了加密密钥和消息流、中间人攻击和使用数字签名来签署密钥和消息。此外,版本 4 软件还检测到无效签名。选择版本 4 并启用 Mallory 的截获时,CNG 示例将演示此方案。
版本 4:带检测的签名密钥和签名消息
版本 4 和版本 3 存在以下不同:
版本 4 软件只给了 Alice 和 Bob。
版本 4 发送在版本 3 中使用的数字签名密钥,但将其视为假密钥。
版本 4 使 Alice 可以通过 Mallory 并不知道的一个专用通道给 Bob 发送另一个数字签名密钥。(这是上图中的步骤 0。)Alice 和 Bob 使用该专用数字签名来签署各自的密钥和消息。
版本 4 在步骤 15、20、35 和 42 中检测到 Mallory 的无效签名,并显示安全警告。
Mallory 继续使用版本 3 的数字签名来签署其替换密钥和消息。因此:
他不知道版本 4 的数字签名私钥。
他没有接收到安全警告。
他不知道 Alice 和 Bob 能够检测到他的无效密钥和消息签名。
版本 5:带会话终止的签名密钥和签名消息
下图演示了加密密钥和消息流、中间人攻击和使用数字签名来签署密钥和消息。与版本 4 一样,检测到了无效签名。选择版本 5 并启用 Mallory 的截获时,CNG 示例将演示此方案。
版本 5:带终止的签名密钥和签名消息
除了在 Alice 和 Bob 接收到带有无效数字签名的加密公钥时结束会话以外,版本 5 与版本 4 完全相同。
请参见
概念
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2008 年 7 月 |
新增主题。 |
信息补充 |