图书前言

前    言

“如果要实现加密系统,要么就出色完成,要么就干脆不要实现”。密码术并不能确保应用程序一定是安全的。如果要免受攻击者的入侵,必须了解潜在的弱点。虽然在.NET Framework安全命名空间中实现的大部分加密算法基本是不会被攻破的,但导致数据暴露的大部分缺陷是由应用程序实现中存在的错误引起的。

尽管密码术背后的实际算法比较复杂,但没有必要详细了解它们。最重要的是正确使用实现这些算法的.NET类。因此,本书将介绍如何充分利用.NET Framework的加密支持,重点是实际问题和良好的编码习惯。

本书读者对象

本书对象是创建分布式应用程序或需要以安全的方式存储数据的C# .NET开发人员。本书旨在使那些了解甚少或不具备加密知识的C#开发人员可以放心地实现他们自己的安全应用程序。

本书主要内容

本书介绍了在.NET Framework和Windows平台中使用对称和非对称的加密技术,并说明如何实际使用这些技术。

● 第1章—— 密码术简介

本章通过介绍在新的分布式计算环境下需要考虑的威胁,说明了使用密码术背后的动机。本章介绍了.NET支持的各种密码术的类型和用法。

● 第2章—— .NET密码术

在本章中,首先介绍了.NET的加密服务。我们将对类模型作详细研究,了解它如何与流和加密转换一起工作,如何用新算法和实现来扩展它。

● 第3章——  数据的完整性—— 散列码和签名

从本章中将学到如何应用散列技术确保数据不被篡改。我们将讨论基本的散列法、密钥散列、数字签名和XML签名标准。

● 第4章—— 保护长期保存的数据

本章讨论了如何保护在存储器中存储了很长时间的数据。同时,将看到如何将加密的数据存储到文件、XML文档和数据库中。还将介绍对操作系统功能的支持,如加密文件系统(EFS),以及这些技术在安全应用程序中的作用。

● 第5章—— 保护通信数据

在本章中,重点讨论了如何使用密码术和身份验证确保分布式系统中组件间通信的安全。将讨论内置到传输格式(例如可能使用SSL)中的自动(透明的)加密,使用.NET Framework的加密类在将部分数据发送到消息中之前有选择性地进行加密。

● 第6章—— 密钥和证书管理

密钥管理是密码术中最为重要的内容,但通常不易于理解。本章将讨论如何将密钥存储在Windows中,如何使用.NET环境访问它们。还将讨论数字证书背后的概念,证书到底是什么,证书的作用和如何管理证书。

● 第7章—— 密码术—— 最佳和最坏做法

要创建安全代码,开发人员不仅需要了解本书介绍的加密原理和概念,还需要深刻理解细节。本章介绍了一些开发人员需要养成的良好做法和应该避免的不好的做法。

● 第8章—— 设计安全的应用程序

本章介绍了一个综合运用前面所讲技术的完整例子。它演示了一个“虚拟硬盘”的Web服务,允许用户安全地存储和获取远程服务器上的所有类型的数据。

● 附录A—— 传输层安全(TLS)

● 附录B—— 生成安全的随机数

使用本书的条件

本节列出了运行本书中的示例代码所需要的软件。

● .NET Framework SDK—— 这显然是开发和运行本书中的C#代码所需要的。尽管不是绝对需要,我们还是推荐使用Visual Studio .NET,特别是在处理Windows Forms应用程序时。

● SQL Server 2000 —— 本书中存储加密和散列的数据的示例使用SQL Server 2000,原则上,这些几乎适合于所有的数据库。

● Microsoft Windows 2000 (或更高版本)—— 许多加密支持只可以在Windows更高版本中获得。为了充分利用本书,建议您至少使用Windows 2000 Professional(带有高度加密包,http://www.microsoft.com/windows2000/downloads/recommended/encryption/),不过Windows XP Professional(或在将来的.NET服务器中)更好。

.NET Framework只为Windows上的证书存储提供了有限的支持。在第6章中,使用了另外两个库,它们为处理证书提供了额外的支持。

● CAPICOM —— 它为大部分Windows加密API提供了一个简单的COM接口。可从http://www.microsoft.com/downloads/search.asp?下载CAPICOM 2.0。运用关键字搜索,把CAPICOM作为关键字。

● Web Service Enhancements for .NET —— 这个.NET库主要针对的是Web服务开发人员,但可以利用它所提供的额外的证书支持;可从http://msdn.microsoft.com/webservices/ building/wse/中下载它。