数字证书
数字证书用来证明某个公钥是谁的,并且内容是正确的。
对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。一旦公钥被人替换(典型的如中间人攻击),则整个安全体系将被破坏掉。
怎么确保一个公钥确实是某个人的原始公钥?
这就需要数字证书机制。
顾名思义,数字证书就是像一个证书一样,证明信息和合法性。由证书认证机构(CertificationAuthority,CA)来签发,权威的CA包括verisign等。
数字证书内容可能包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA数字签名、其它信息等等,一般使用最广泛的标准为ITU和ISO联合制定的X.509规范。
其中,最重要的包括签发的公开密钥、CA数字签名两个信息。因此,只要通过这个证书就能证明某个公钥是合法的,因为带有CA的数字签名。
更进一步地,怎么证明CA的签名合法不合法呢?
类似的,CA的数字签名合法不合法也是通过CA的证书来证明的。主流操作系统和浏览器里面会提前预置一些CA的证书(承认这些是合法的证书),然后所有基于他们认证的签名都会自然被认为合法。
PKI体系提供了一套完整的证书管理的框架。
PKI体系
在非对称加密中,公钥则可以通过证书机制来进行保护,如何管理和分发证书则可以通过PKI(Public Key Infrastructure)来保障。
顾名思义,PKI体系在现代密码学应用领域处于十分基础的地位,解决了十分核心的证书管理问题。
PKI并不代表某个特定的密码学技术和流程,PKI是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架。实现了PKI的平台可以安全可靠地管理网络中用户的密钥和证书,包括多个实现和变种,知名的有RSA公司的PKCS(Public Key Cryptography Standards)标准和X.509规范等。
一般情况下,PKI 至少包括如下组件:
- CA(Certification Authority):负责证书的颁发和作废,接收来自 RA 的请求,是最核心的部分;
- RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA;
- 证书数据库:存放证书,一般采用 LDAP 目录服务,标准格式采用 X.500 系列。
CA 是最核心的组件,主要完成对证书的管理。
常见的流程为,用户通过 RA 登记申请证书,CA 完成证书的制造,颁发给用户。用户需要撤销证书则向 CA 发出申请。
之前章节内容介绍过,密钥有两种类型:用于签名和用于加解密,对应称为签名密钥对
和加密密钥对
。
用户证书可以有两种方式。一般可以由 CA 来生成证书和私钥;也可以自己生成公钥和私钥,然后由 CA 来对公钥进行签发。后者情况下,当用户私钥丢失后,CA 无法完成恢复。