1、密钥和证书非对称加密使用公钥/私钥对。对于使用私钥加密的数据,只能使用相应的公钥进行解密,反之亦然。顾名思义,公钥是指可以给很多人提供的密钥。相反,私钥是特定个人所独有的。向用户传送公钥使用的分发机制是证书。通常,证书颁发机构 (CA) 对证书进行签名,以便确认公钥来自声称发送公钥的主体。CA 是一个相互信任的实体。数字认证的典型实现包含证书签名过程。图 1 中显示了此过程。Insert figure: REF Digital Certification.gif图 1数字认证过程图 1 中显示了事件的顺序:1. Alice 将一个签名的证书请求(包含她的名字、她的公钥、可能还有其他一些信息)发
2、送到 CA。 2. CA 使用 Alice 的请求创建一个消息。CA 使用其私钥对消息进行签名,以便创建一个单独的签名。CA 将消息和签名返回给 Alice 。消息和签名共同构成了 Alice 的证书。3. Alice 将她的证书发送给 Bob,以便授权他访问她的公钥。 4. Bob 使用 CA 的公钥对证书签名进行验证。如果证明签名是有效的,他就承认证书中的公钥是 Alice 的公钥。与数字签名的情况一样,任何有权访问 CA 公钥的接收者都可以确定证书是否是由特定 CA 签名的。这个过程不要求访问任何机密信息。上面这个方案假定 Bob 有权访问 CA 的公钥。如果 Bob 拥有包含该公钥的
3、CA 证书的副本,则他有权访问该密钥。X.509 qX.509 数字证书不仅包含用户名和公钥,而且还包含与用户有关的其他信息。这些证书并不仅仅是数字信任等级中的阶石。通过使用证书,CA 可以为证书接收者提供一种方法,使他们不仅信任证书主体的公钥,而且还信任有关证书主体的其他信息。其他信息可以包括电子邮件地址、授权对具有某种价值的文档进行签名、授权成为 CA 并为其他证书签名,等等。X.509 证书和许多其他证书都有有效期限。证书在期满后就会失效。CA 可以出于许多原因吊销证书。要吊销证书,CA 保存并分发一个吊销证书的列表,即证书吊销列表 (CRL)。网络用户访问 CRL 以确定证书的有效性。
4、证书存储证书存储在称为“证书存储”的安全位置中。证书存储可以包含证书、CRL 和证书信任列表 (CTL)。每个用户都有存储其证书的个人存储(称为“我的存储” ) 。可以在许多位置中物理实现“我的存储” ,其中包括注册表、本地或远程计算机、磁盘文件、数据库、目录服务、智能设备或其他位置。虽然可以将任何证书存储在“我的存储”中,但应该将此存储专用于存储用户的个人证书,即用于签名和解密该特定用户消息的证书。除了“我的存储”外,Windows 还维护以下证书存储: CA 和根。此存储包含特定证书颁发机构(用户信任其向其他用户颁发证书)的证书。操作系统提供了一套受信任的 CA 证书,管理员还可以添加其他
5、的证书。 其他。此存储包含用户与之交换签名消息的其他用户的证书。CryptoAPI 提供管理证书的功能。只能通过非托管代码访问这些 API。另外,CAPICOM 是 CryptoAPI 基于 COM 的 API,可通过 COM Interop 对它进行访问。更多信息有关更多信息,请参见 MSDN 上的“加密技术、CryptoAPI 和 CAPICOM”(http:/ 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将纯文本转换为密文,并使用等效的解密算法将密文转换回纯文本。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。 数据完整
6、性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。 身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。技术选择 如果需要使用一种方法来验证数据在传输过程中没有被篡改,请使用哈希值。 如果要证明实体知道机密但不来回发送机密,或者想使用简单的哈希值以防止在传输过程中被截获,请使用加密的哈希值。 如果要隐藏通过不安全的媒介发送的数
7、据或者要永久性保留数据,请使用加密。 如果要验证声称是公钥所有者的人员的身份,请使用证书。 如果双方事先共享密钥,请使用对称加密以提高速度。 如果想通过不安全的媒介安全地交换数据,请使用非对称加密。 如果要进行身份验证和不可否认性,请使用数字签名。 使用 Salt 值(使用加密技术生成的随机数)以防范字典攻击。.NET 中的加密技术System.Security.Cryptography 命名空间提供加密服务,其中包括数据的安全编码和解码、哈希、随机数生成和消息身份验证。.NET 框架提供了许多标准加密算法的实现;由于明确定义了包含定义基本算法类型(对称、非对称和哈希算法)的抽象类以及算法类的
8、继承等级,因此可以方便地对这些实现进行扩展。表 1:显示 .NET 框架为其提供现成实现类的算法。对称算法 非对称算法 哈希算法DES(数据加密标准) DSA(数字签名算法) HMAC SHA1(使用 SHA1 哈希算法且基于哈希的消息身份验证代码)TripleDES(三重数据加密标准) RSA MAC Triple DES(使用 Triple DES 的消息身份验证代码)Rijndael MD5RC2 SHA1、SHA256、 SHA384、SHA512(使用各种哈希大小的安全哈希算法)对称算法支持.NET 提供以下实现类以提供对称的密钥加密算法: DESCryptoServiceProvi
9、der RC2CryptoServiceProvider RijndaelManaged TripleDESCryptoServiceProvider注意:以“CryptoServiceProvider”结尾的类是使用加密服务提供程序 (CSP) 基础服务的包装类;而以“Managed”结尾的类则是在托管代码中实现的。图 2 显示了 .NET 框架采用的继承等级。算法类型基类(例如,SymmetricAlgorithm)是抽象类。可以从抽象类型基类派生一组抽象算法类。算法实现类提供所选算法的具体实现;例如,DES、Triple-DES、Rijndael 和 RC2 。Insert figure
10、: REF Crypto Object Model.gif图 2对称加密类继承等级非对称算法支持.NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法 : DSACryptoServiceProvider RSACryptoServiceProvider这些算法用于对数据进行数字签名和加密。图 3 显示了继承等级。Insert figure: REF Crypto Object Model (Asymmetric).gif图 3非对称加密类继承等级哈希算法支持.NET 提供了下列哈希算法:
11、 SHA1、SHA256、SHA384、SHA512 MD5 HMACSHA(加密的哈希算法 ) MACTripleDES(加密的哈希算法)图 4 显示了哈希算法类的继承等级。Insert figure: REF Crypto Object Model (Hashing).gif图 4哈希加密类继承等级总结加密技术是用于构建安全 Web 应用程序的重要技术。本附录介绍了证书和加密技术的一些基础知识,并介绍了一些由 System.Security.Cryptography 命名空间公开的类,使您可以更轻松地将加密技术安全解决方案应用于 .NET 应用程序。有关 .NET 中的加密技术的更多信息,
12、请搜索 MSDN 中题为“.NET 框架加密技术模型”的页面。密钥简 单 介 绍 一 下 密 码 学 知 识 。密 钥 是 一 种 参 数 , 它 是 在 明 文 转 换 为 密 文 或 将 密 文 转 换 为 明 文 的 算 法 中 输 入 的 数 据 .密 钥 分 为 两 种 : 对 称 密 钥 与 非 对 称 密 钥对 于 普 通 的 对 称 密 码 学 , 加 密 运 算 与 解 密 运 算 使 用 同 样 的 密 钥 。 通 常 ,使 用 的 加 密 算 法 比 较 简 便 高效 , 密 钥 简 短 , 破 译 极 其 困 难 , 由 于 系 统 的 保 密 性 主 要 取 决 于
13、密 钥 的 安 全 性 , 所 以 , 在 公 开 的 计 算 机网 络 上 安 全 地 传 送 和 保 管 密 钥 是 一 个 严 峻 的 问 题 。 正 是 由 于 对 称 密 码 学 中 双 方 都 使 用 相 同 的 密 钥 , 因此 无 法 实 现 数 据 签 名 和 不 可 否 认 性 等 功 能 。20 世 纪 70 年 代 以 来 , 一 些 学 者 提 出 了 公 开 密 钥 体 制 , 即 运 用 单 向 函 数 的 数 学 原 理 , 以 实 现 加 、解 密 密 钥 的 分 离 。 加 密 密 钥 是 公 开 的 , 解 密 密 钥 是 保 密 的 。 这 种 新 的
14、密 码 体 制 , 引 起 了 密 码 学 界 的 广泛 注 意 和 探 讨不 像 普 通 的 对 称 密 码 学 中 采 用 相 同 的 密 钥 加 密 、 解 密 数 据 , 非 对 称 密 钥 加 密 技 术 采 用 一 对 匹 配 的密 钥 进 行 加 密 、 解 密 , 具 有 两 个 密 钥 , 一 个 是 公 钥 一 个 是 私 钥 , 它 们 具 有 这 种 性 质 : 每 把 密 钥 执 行 一种 对 数 据 的 单 向 处 理 , 每 把 的 功 能 恰 恰 与 另 一 把 相 反 , 一 把 用 于 加 密 时 , 则 另 一 把 就 用 于 解 密 。 用 公钥 加 密
15、 的 文 件 只 能 用 私 钥 解 密 , 而 私 钥 加 密 的 文 件 只 能 用 公 钥 解 密 。 公 共 密 钥 是 由 其 主 人 加 以 公 开 的 ,而 私 人 密 钥 必 须 保 密 存 放 。 为 发 送 一 份 保 密 报 文 , 发 送 者 必 须 使 用 接 收 者 的 公 共 密 钥 对 数 据 进 行 加 密 ,一 旦 加 密 , 只 有 接 收 方 用 其 私 人 密 钥 才 能 加 以 解 密 。 相 反 地 , 用 户 也 能 用 自 己 私 人 密 钥 对 数 据 加 以 处理 。 换 句 话 说 , 密 钥 对 的 工 作 是 可 以 任 选 方 向
16、的 。 这 提 供 了 “数 字 签 名 “的 基 础 , 如 果 要 一 个 用 户 用 自己 的 私 人 密 钥 对 数 据 进 行 了 处 理 , 别 人 可 以 用 他 提 供 的 公 共 密 钥 对 数 据 加 以 处 理 。 由 于 仅 仅 拥 有 者 本人 知 道 私 人 密 钥 , 这 种 被 处 理 过 的 报 文 就 形 成 了 一 种 电 子 签 名 -一 种 别 人 无 法 产 生 的 文 件 。 数 字 证书 中 包 含 了 公 共 密 钥 信 息 , 从 而 确 认 了 拥 有 密 钥 对 的 用 户 的 身 份 。简 单 的 公 共 密 钥 例 子 可 以 用 素 数 表 示 , 将 素 数 相 乘 的 算 法 作 为 公 钥 , 将 所 得 的 乘 积 分 解 成 原 来 的素 数 的 算 法 就 是 私 钥 , 加 密 就 是 将 想 要 传 递 的 信 息 在 编 码 时 加 入 素 数 , 编 码 之 后 传 送 给 收 信 人 , 任 何人 收 到 此 信 息 后 , 若 没 有 此 收 信 人 所 拥 有 的 私 钥 , 则 解 密 的 过 程 中 ( 实 为 寻 找 素 数 的 过 程 ) , 将 会 因为 找 素 数 的 过 程 ( 分 解 质 因 数 ) 过 久 而 无 法 解 读 信 息 。