下一代加密技术 (CNG) 安全通信示例
更新: 2008 年 7 月
下一代加密技术 (CNG) 安全通信示例针对中间人攻击的加密解决方案进行建模,它模拟虚构广告公司中的三人 Alice、Bob 和 Melvin 之间的通信。该示例使用 CNG 类(一个命名管道传输)和交互式控制台窗口来演示针对中间人攻击的安全解决方案。
这是一个高级示例,假定您熟悉加密、进程间通信和网络安全。
本主题概述 CNG 示例,它讨论了以下内容:
示例方案
IM 工具的安全漏洞
版本 1:命名管道
版本 2-5:依次增加安全改进
测试结果
代码示例
命名约定
详细信息
示例方案
一家广告公司开发了一个在桌面上运行的即时消息 (IM) 工具。所有员工都能够查看进入该工具的消息。
Alice 和 Bob 在销售部门工作。他们使用 IM 工具互相发送销售联系人信息。Mallory 是一名从事系统运营工作的网络工程师。他一直秘密监视着 Alice 和 Bob 的消息。为了个人利益,他每个月复制一次有价值的销售联系人信息并将它们卖给竞争对手。
几个月后,公司发现有人在窃取销售联系人信息,并且部门间的通信被破坏了。公司决定开发一个新的 IM 工具,他们从分析当前工具的安全性开始。
IM 工具的安全漏洞
公司意识到当前的 IM 工具有以下安全漏洞:
传输纯文本(非加密)消息。
通过企业网络广播这些消息。
任何人都可以查看甚至记录这些消息。
公司认为新的 IM 工具可以通过在企业网络上启用点对点通信来解决这些问题。
版本 1:命名管道
公司开发了一个新的 IM 工具,该工具依赖命名管道(或通道)来进行进程间通信 (IPC)。此版本不使用加密或数字签名。
向 Alice 和 Bob 说明以下事项:
在名为 PublicChannel 的通道上建立一个初始连接。
将各自的专用通道的名称发送给对方,然后立即从 PublicChannel 断开连接。
使用专用通道连接,并互相发送销售联系人信息。
公司希望点对点信道可提供与企业网络其余部分的充分隔离,但很快就意识到这一解决方案并不充分。Mallory 发现了如何攻进新系统。他继续窃取销售联系人信息,并开始谨慎地更改销售联系人的地址来掩饰他的罪行。
公司决定向 IM 工具添加安全防护措施来阻止这种窃取行为。
版本 2 至 5:依次增加安全改进
新软件经过了若干个月的测试和增强。到测试完成时,已经创建了 IM 工具的四个附加版本。每个版本都以前一版本为基础:
版本 2 采用了基于 CNG 的加密,该加密技术使用公钥/私钥对。
版本 3 使用数字签名来签署加密密钥和消息。
版本 4 添加了专用通道来传输数字签名,并用数字签名来签署加密密钥和消息。
版本 5 通过结束所有接收带有无效签名的签名密钥的 IM 会话来阻止入侵。
测试结果
版本 2 使用了一种高安全性的加密算法。破解此加密算法需要大量的资源和时间。因此,当公司得知该解决方案被破坏时很惊讶。
版本 3 使用的数字签名也不能防止窃取行为。但是,该版本帮助公司获得了一个重要的发现:如果加密密钥和数字签名被截获并替换,则用来传输密钥和签名的通道一定是问题的根源。
通过将专用通道添加到版本 4 来传输数字签名验证了这一想法。如果密钥或消息具有无效签名,则版本 4 也将显示一则警告。版本 4 只给了公司的两个人:Alice 和 Bob。一旦 Alice 和 Bob 发送了第一条消息,就开始显示安全警告。公司最后发现,他们的网络正在遭受中间人攻击。
版本 5 与版本 4 相同,但版本 5 在第一次发生安全冲突时就结束会话。该版本一安装,窃取销售联系人信息的行为就停止了。
代码示例
在该示例中提供的代码模拟了这五个安全版本。源代码概述(CNG 示例)中提供了代码概述。
说明: |
---|
该示例不提供全面的安全解决方案。其唯一目的是在一个看似可信的安全方案中演示 CNG API。完整的安全应用程序超出了本示例的范围。 |
命名约定
本示例的文档涉及五个软件版本和以数字标示的对应安全级别(例如,“版本 1”、“版本 2”等等)。
根据上下文,名称“Alice”、“Bob”和“Mallory”可能指本示例方案中涉及的三个人,也可能指三个 Visual Studio 应用程序。为简洁起见,文档使用同一名称来指代二者。例如,“Alice 自动加载 Bob 和 Mallory”指 Alice 应用程序自动加载 Bob 应用程序和 Mallory 应用程序。
详细信息
以下主题提供了关于示例方案和代码的深入信息:
执行中间人攻击介绍了示例如何演示模仿,这是一种典型的中间人攻击。
ECDH 算法概述简要探讨了椭圆曲线 Diffie-Hellman (ECDH) 算法的数学。
分步执行密钥和消息交换提供了示例的五个版本中使用的密钥和消息交换过程的分步指南。
如何:生成和运行 CNG 示例介绍了示例的结构并提供了生成、运行时和使用说明。本节还包含源代码清单。
源代码概述介绍了代码组件的交互和流。
Utility 类的代码分析介绍了 Utilities.cs 文件的内容和用途。
ChannelManager 类的代码分析介绍了 ChannelManager.cs 文件的内容和用途。
Communicator 类的代码分析介绍了 Communicator.cs 文件的内容和用途。
预期输出显示代码示例的输出。
请参见
概念
其他资源
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2008 年 7 月 |
新增主题。 |
信息补充。 |