加密技术、密钥和证书
本页内容
目标 | |
适用范围 | |
如何使用本章内容 | |
密钥和证书 | |
X.509 数字证书 | |
证书存储 | |
加密技术 | |
技术选择 | |
.NET 中的加密技术 | |
总结 |
目标
本章的目标是:
• | 了解加密技术、密钥和证书 |
• | 了解 System.Security.Cryptography 命名空间 |
适用范围
本章适用于以下产品和技术:
• | Windows 2000 Server 2000 SP3 |
• | Microsoft .NET Framework SP2 |
• | Microsoft SQL Server 2000 SP2 |
如何使用本章内容
本章是《构建安全的 ASP .NET 应用程序》指南的参考章节。它包含一些补充信息,可以帮助您进一步了解本指南其他章节中所述的解决方案,应在阅读时一并阅读。
密钥和证书
非对称加密使用公钥/私钥对。对于使用私钥加密的数据,只能使用相应的公钥进行解密,反之亦然。
顾名思义,公钥是指可以提供给很多人的密钥。相反,私钥是特定个人所独有的。向用户传送公钥使用的分发机制是证书。通常,证书颁发机构 (CA) 对证书进行签名,以便确认公钥来自声称发送公钥的主体。CA 是一个相互信任的实体。
数字认证的典型实现包含证书签名过程。图 1 中显示了此过程。
图 1
数字认证过程
图 1 中显示了以下事件的顺序:
1. | 王丽将一个签名的证书请求(包含她的名字、公钥、可能还有其他一些信息)发送到 CA。 |
2. | CA 使用王丽的请求创建一个消息。CA 使用其私钥对消息进行签名,以便创建一个单独的签名。CA 将消息和签名返回给王丽。消息和签名共同构成了王丽的证书。 |
3. | 王丽将她的证书发送给李华,以便授权他访问她的公钥。 |
4. | 李华使用 CA 的公钥对证书签名进行验证。如果证明签名是有效的,他就承认证书中的公钥是王丽的公钥。 |
与数字签名的情况一样,任何有权访问 CA 公钥的接收者都可以确定证书是否是由特定 CA 签名的。这个过程不要求访问任何机密信息。上面这个方案假定李华有权访问 CA 的公钥。如果李华拥有包含该公钥的 CA 证书的副本,则他有权访问该密钥。
X.509 数字证书
X.509 数字证书不仅包含用户名和公钥,而且还包含与用户有关的其他信息。这些证书并不仅仅是数字信任等级中的阶石。通过使用证书,CA 可以为证书接收者提供一种方法,使他们不仅信任证书主体的公钥,而且还信任有关证书主体的其他信息。其他信息可以包括电子邮件地址、授权对具有某种价值的 文档进行签名、授权成为 CA 并为其他证书签名等等。
X.509 证书和许多其他证书都有有效期限。证书在期满后就会失效。CA 可以出于许多原因吊销证书。要吊销证书,CA 保存并分发一个吊销证书的列表,即证书吊销列表 (CRL)。网络用户访问 CRL 以确定证书的有效性。
证书存储
证 书存储在称为“证书存储”的安全位置中。证书存储可以包含证书、CRL 和证书信任列表 (CTL)。每个用户都有存储其证书的个人存储(称为“我的存储”)。可以在许多位置中物理实现“我的存储”,其中包括注册表、本地或远程计算机、磁盘文 件、数据库、目录服务、智能设备或其他位置。
虽然可以将任何证书存储在“我的存储”中,但应该将此存储专用于存储用户的个人证书,即用于签名和解密该特定用户消息的证书。
除了“我的存储”外,Windows 还维护以下证书存储:
• | CA 和根。此存储包含特定证书颁发机构(用户信任其向其他用户颁发证书)的证书。操作系统提供了一套受信任的 CA 证书,管理员还可以添加其他的证书。 |
• | 其他。此存储包含用户与之交换签名消息的其他用户的证书。 |
CryptoAPI 提供管理证书的功能。只能通过非托管代码访问这些 API。另外,CAPICOM 是 CryptoAPI 基于 COM 的 API,可通过 COM Interop 对它进行访问。
更多信息
有关详细信息,请参见 MSDN 上的“Cryptography, CryptoAPI, and CAPICOM”(加密技术、CryptoAPI 和 CAPICOM)(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/Security/cryptography_cryptoapi_and_capicom.asp)。
加密技术
加密技术用于提供以下功能:
• | 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。 |
• | 数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。 |
• | 身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。 |
技术选择
• | 如果需要使用一种方法来验证数据在传输过程中没有被篡改,请使用哈希值。 |
• | 如果要证明实体知道机密但不来回发送机密,或者想使用简单的哈希值以防止在传输过程中被截获,请使用加密的哈希值。 |
• | 如果要隐藏通过不安全的媒介发送的数据或者要永久性保留数据,请使用加密。 |
• | 如果要验证声称是公钥所有者的人员的身份,请使用证书。 |
• | 如果双方事先共享密钥,请使用对称加密以提高速度。 |
• | 如果想通过不安全的媒介安全地交换数据,请使用非对称加密。 |
• | 如果要进行身份验证和实现不可否认性,请使用数字签名。 |
• | 使用 Salt 值(使用加密技术生成的随机数)以防范字典攻击。 |
.NET 中的加密技术
System.Security.Cryptography 命名空间提供加密服务,其中包括数据的安全编码和解码、哈希、随机数生成和消息身份验证。
.NET Framework 提供了许多标准加密算法的实现;由于明确定义了包含定义基本算法类型(对称、非对称和哈希算法)的抽象类以及算法类的继承等级,因此可以方便地对这些实现进行扩展。
表 1:显示 .NET Framework 为其提供现成实现类的算法。
对称算法 | 非对称算法 | 哈希算法 |
DES(数据加密标准) | DSA(数字签名算法) | HMAC SHA1(使用 SHA1 哈希算法且基于哈希的消息身份验证代码) |
TripleDES(三重数据加密标准) | RSA | MAC Triple DES(使用 Triple DES 的消息身份验证代码) |
Rijndael |
| MD5 |
RC2 |
| SHA1、SHA256、SHA384、SHA512(使用各种哈希大小的安全哈希算法) |
对称算法支持
.NET 提供以下实现类以提供对称的密钥加密算法:
• | DESCryptoServiceProvider |
• | RC2CryptoServiceProvider |
• | RijndaelManaged |
• | TripleDESCryptoServiceProvider |
注意:以“CryptoServiceProvider”结尾的类是使用加密服务提供程序 (CSP) 基础服务的包装类;而以“Managed”结尾的类则是在托管代码中实现的。
图 2 显示了 .NET Framework 采用的继承等级。算法类型基类(例如,SymmetricAlgorithm)是抽象类。可以从抽象类型基类派生一组抽象算法类。算法实现类提供所选算法的具体实现;例如,DES、Triple-DES、Rijndael 和 RC2。
图 2
对称加密类继承等级
非对称算法支持
.NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:
• | DSACryptoServiceProvider |
• | RSACryptoServiceProvider |
这些算法用于对数据进行数字签名和加密。图 3 显示了继承等级。
图 3
非对称加密类继承等级
哈希算法支持
.NET 提供了下列哈希算法:
• | SHA1、SHA256、SHA384、SHA512 |
• | MD5 |
• | HMACSHA(加密的哈希算法) |
• | MACTripleDES(加密的哈希算法) |
图 4 显示了哈希算法类的继承等级。
图 4
哈希加密类继承等级
总结
加密技术是用于构建安全 Web 应用程序的重要技术。本附录介绍了证书和加密技术的一些基础知识,并介绍了一些由 System.Security.Cryptography 命名空间公开的类,使您可以更轻松地将加密技术安全解决方案应用于 .NET 应用程序。
有关 .NET 中的加密技术的详细信息,请搜索 MSDN 中题为“.NET Framework Cryptography Model”(.NET Framework 加密技术模型)的页面。
没有评论:
发表评论