
pkcs标准简介.pdf
9页公钥密码标准(Public-Key Cryptography Standards) Hanyil 整理编写 保留版权 由于公钥密码被广泛接受已成为事实, 如果要将其发展成为广泛应用的技术, 就必 须有支持互操作的标准 即便是所有的用户都认同公钥密码技术, 使各种不同的实现版 本相兼容也是必然的 互操作性要求严格按照一个获得认可的标准格式来传输数据, 这 里所描述的标准就为互操作性提供了基础这里描述的标准被称为公钥密码标准 (Public-Key Cryptography Standards, PKCS) 这个标准涵盖了 RSA 密码、 Diffie-Hellman 密钥交换、基于口令的加密、扩展证书语法、密码报文语法、私钥信息语法、认证请求 语法、选择性属性,密码令牌以及椭圆曲线密码等内容 公钥密码标准 PKCS 是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发 展而制订的一系列标准, 是最早的公钥密码标准, 也是公钥密码发展过程中最重要的标 准之一自 1991 年作为一份会议结果,由早期的公钥密码使用者公布以来,PKCS 文 档已经被广泛引用和实现许多正式和非正式工业标准部分内容的制订都参照了 PKCS,如 ANSI X9, PKIX, SET, S/MIME, 和 SSL 等。
RSA 实验室在标准制订过程中起 了很重要的作用:发布了认真撰写的标准描述文档;保持了标准制订过程的决策权威; 负责收集其它开发者所提出的修改和扩充意见; 适时发布标准的修订版; 提供了实现该 标准的参考资料和指导 PKCS 目前共发布过 15 个标准,每个标准都经过数次修订,部分文档还在不断的 修改和制订中15 个标准如下: • PKCS #1: RSA Cryptography Standard RSA 密码标准 • PKCS #2: 已合并入 1 • PKCS #3: Diffie-Hellman Key Agreement Standard DH 密钥交换标准 • PKCS #4: 已并入 1 • PKCS #5: Password-Based Cryptography Standard 基于口令的密码标准 • PKCS #6: Extended-Certificate Syntax Standard 证书扩展语法标准 • PKCS #7: Cryptographic Message Syntax Standard 密文信息语法标准 • PKCS #8: Private-Key Information Syntax Standard 私钥信息语法标准 • PKCS #9: Selected Attribute Types • PKCS #10: Certification Request Syntax Standard 认证请求语法标准 • PKCS #11: Cryptographic Token Interface Standard 密码令牌接口标准 • PKCS #12: Personal Information Exchange Syntax Standard 个人信息交换语 法标准 • PKCS #13: Elliptic Curve Cryptography Standard 椭圆曲线密码标准 • PKCS #14: Random Number Generation Standards (伪随机数生成标准) • PKCS #15: Cryptographic Token Information Format Standard 密码令牌信 息格式 PKCS # 标准标准 1 3 5678910111215 其它标准其它标准 自由算法语法: 数字签名信息 xx 数字信封加密信息 x 认证请求 xx 数字证书 X.509, RFC 1422 扩展证书 xx 证书撤销列表 X.509, RFC 1422 私钥加密信息 xx 密码令牌 x x 个人交换信息 x 密钥交换信息 [ISO90a], [ISO90b] 特定算法语法: RSA 公钥 x RSA 私钥 x 算法: 消息摘要:MD2, 5 RFCs 1319, 1321 私钥加密:DES RFC 1423, [NIST92a] 公钥加密:RSA x 签名: MD2,4,5w/RSA x 基于口令的加密 x D-H 密钥交换 x PKCS 与其它标准对比 PKCS#1 RSA 密码标准 PKCS#1 RSA 密码标准 1.0 – 1.3 版是为参加 RSA 数据安全公司 1991 年 2 月和 3 月的公开密钥密码标准会 议而发布的。
1.4 版是 1991 年 6 月 3 日首次公开发布的 PKCS 的一部分1.4 版作为 NIST/OSI 实现工作组的 SEC-SIG-91-18 标准文档发布1.5 版合并了几个版本的变化, 包括参考文献的更新和增加修订历史 1.5 版是作为 IETF RFC 2313 发布的 2.0 版编入 了在文档结构方面的主要变化,而且引入了 RSAES-OAEP 加密方案尽管由于这几年 来的密码发展不再允许使用 MD4,但这个版本继续支持 1.5 版中的加密和签名操作 2.0 版是作为 IETF RFC 2437 发布的 2.1 版引入了多素数 RSA 和 RSASSA-PSS 带附属 的签名方案这个版本同时支持 2.0 版中的方案 该文档介绍基于 RSA 公钥密码系统的实现方法,包括:密码原语、加密方案、带 附属的签名方案、密钥和方案的 ASN.1 描述是为计算机和通信系统的一般应用和具 有灵活性的系统的一般应用而编写的 第一部分是介绍 第二部分是对文档中使用到的 符号的定义第三部分详细说明了 RSA 公钥和私钥的类型第四部分和第五部分详细 说明了几个原语,或基本数学操作第四部分详细说明了数据转换原语,第五部分详细 说明了密码系统原语(加密—解密、签名—验证) 。
第六、七和八部分涉及加密和签名 方案 第六部分是概述 包括 PKCS #1 V1.5 中介绍的方法, 第七部分定义了基于 OAEP 的加密方案,第八部分定义了基于 PSS 的带附属的签名方案第九部分详细说明了在 第八部分中定义的签名方案的编码方法 PKCS#3D-H 密钥交换标准 PKCS#3D-H 密钥交换标准 1.0–1.2 版是为参加 1991 年 2 月和 3 月在 RSA 数据安全公司的公钥密码标准会议 而发布的标准1.3 版是 1991 年 6 月 3 日发布的 PKCS 标准的一部分1.3 版同时被 NIST/OSI 实现工作组作为 SEC-SIG-91-19 标准文档1.4 版合并了一些修改,更新了参 考文献,加入了版本更新历史 该标准描述了实现 Diffie-Hellman 密钥交换的一种方式,双方不经过事先勾通,就 能够产生一个只有他们才知道的密钥(尤其是窃听者无法得知该密钥)这个密钥可被双 方用于以后的秘密通信该标准的主要应用是建立秘密通信的协议,如 OSI 模型的传 输层和网络层通信协议的建议[ISO90a][ISO90b] PKCS#5 基于口令的密码标准 PKCS#5 基于口令的密码标准 本文对基于口令的密码技术的实现提出了相关建议, 涵盖了以下几个方面: 密钥生 成函数、加密方案、消息鉴别方案、用 ASN.1 语法对技术进行标识。
这些有着一定伸 缩性的建议是针对计算机和通信系统中的普通应用软件提出的, 特别针对了敏感信息的 保护,例如:对 PKCS#8 中私钥的保护并且希望基于这些建议的应用标准标准和实 现框架可以包含附加的约束本文不涉及其它的基于口令的密码技术,例如:基于口令 的密钥实体鉴别和密钥制定协议;并且也不涉及口令的选择本文代替了 PKCS#5 1.5 版,但包含了相应的兼容技术 在很多公钥密码应用软件中, 用户的安全最终依赖于一个或多个秘密文本或口令 虽然在一个常规的密码系统中并不直接把口令用作密钥, 但在用口令进行密码操作时仍 需对口令进行处理此外, 由于口令通常从一个相对较小的空间中选取, 在对其进行处 理时要特别注意抵抗搜索攻击 基于口令的密码术的一种通常的方法是将口令与 salt 相结合以生成密钥,例如: Morris and Thompson 对口令表的保护用口令可生成一个巨大的密钥集,可以把 salt 看作是对这个密钥集的一个索引, 不需要对 salt 进行保密虽然一个攻击者可能会构 建一个包含所有可能口令的表(一种所谓的“字典攻击” ) ,但构建一个包含所有可能 密钥的表是十分困难的,因为对每一个口令都存在非常多的可能密钥。
因而,攻击者只 能对每个 salt 来搜索所有的口令 基于口令的密码术的另一种方法是建立一种代价相对较高的密钥生成技术, 从而增 加穷举搜索代价这种方法的一种途径就是,在密钥生成技术中引入一个迭代次数,用 来表示对某个生成密钥的基础函数的迭代次数一个合适的迭代次数是 1000,它对于 合法者来说并不形成一种负担,但对攻击者却是一种严重的负担 在 PKCS #5 v1.5 中,Salt 和迭代次数构成了基于口令密码术的基础, 并且也被用 在本文中的多种密码操作中 因而, 本文定义的基于口令的密钥生成技术是一个关于口 令、salt 和迭代次数的函数,其中后两个量不需保密 从一个基于口令的密钥生成函数能很容易的得到基于口令的加密和消息鉴别方案 在 PKCS #5 v1.5 中, 基于口令的加密方案是建立在一种基础的、常规的加密方案的基 础上的,其中的密钥就是用口令来生成的 类似的,基于口令的消息鉴别方案也是建 立在一种基础的、 常规的消息鉴别方案的基础上的 这种分为两层的方案使得基于口令 的技术可以利用基础的技术模块化实现 除了这里提到的加密和消息鉴别方案, 人们还希望从基于口令的密钥生成函数得到 其它的应用。
例如,我们可以仅用一个密钥生成函数来生成一个密钥集,而不必逐个的 生成密钥 密钥集中的密钥可以就是密钥生成函数的输出串的各个子串 这种方法可以 用在一个面向会话的协议中,作为构建密钥系统的一部分另一种应用是口令检查,其 中:密钥生成函数的输出和 salt 以及迭代次数都被保存起来,以用于对口令的验证 在本文中, 认为口令是一个任意长度的字节串, 并不特别要求它被解释为一个文本 串 但为了提高的互用性, 仍然希望应用软件能遵循通用的文本编码规则, 例如: ASCII 和 UTF-8 错误!未找到引用源错误!未找到引用源 (ASCII 是 UTF-8 的一个子集) PKCS#6 证书扩展语法标准 PKCS#6 证书扩展语法标准 本标准描述了证书扩展语法 一个扩展证书由 X.509 公钥证书和一系列被证书发行 者签名的属性组成 于是属性和内附的 X.509 公钥证书能够被单独的一个公钥密码操作 验证, 当需要时还能提取出普通的 X.509 公钥证书 包含一系列属性的目的是使认证操 作得到扩充,能够通过公钥操作验证给定实体其它信息,如电子邮件地址PKCS #9 中给出比较详细的属性列表 本标准最初应用在 PKCS #7 的密码报文中,其它的应用正在开发之中。
PKCS#7 密文信息语法标准 PKCS#7 密文信息语法标准 1.0–1.3 版是 1991 的 2 月和 3 月在 RSA 数据安全公司的公钥密码标准化会议上发 布的最早版本1.4 版是 1991 年 6 月 3 日发布的 PKCS 初始版本的一部分1.4 版同时 被 NIST/OSI 的实现工作组作为 SEC-SIG-91-22 标准发布1.5 版合并了几处编辑上的 改动,包括对参考文献的更新和修订历史的添加 本标准描述了用于加密数据的一般语法, 如数字签。












