关于证书公钥私钥签名和PKI的几个基本概念

bitbit
最后编辑于 2018年12月15日 开发

Michael Malone是SmallStep.com的创始人,他最近写了一篇介绍certificate和PKI(public key infrastructure)的文章,作者强调的文章的核心,就一句话:

Certificates and PKI bind names to public keys. The rest is just details.

读完该篇之后,觉得Michael Malone对一些证书和密钥的基础概念,解释的还是很清晰的,这会有助于我们理解PKI相关的东西(其实还是很难理解,这些东西实在令人发懵又发指)。

文中涉及的术语和概念,按我的不专业的理解,总结如下。

entity:实体,实际的一个东西,可以是任何看得见的东西,比如叫做Bob的一个人、一个计算机,也可以是一个看不见的东西。

identity:身份,表示实体的一些属性,用于辨识实体、区别于其它实体,比如年龄、身高、性别、肤色、性格、特长等等。

identifier/name:表示实体的标识或名字,它不是身份。

entity's claim:实体的声明,比如Bob的一个声明:"Bob的公钥是1024"。其实证书中的公钥就是一个声明,声明这个公钥是我的。

certificate authority/issuer:CA,即证书颁发机构。

root certificate:根证书,即CA发给自己的证书。这个根证书别人也可以使用,用来验证CA发的别的证书是否正确。

subscriber/end entity/subject:请求CA颁发证书的实体,比如Bob。

authentication:验证,其实对CA发证书来说,翻译成认证更贴切些。在给Bob发证书时就需要验证,其实就是CA确认了Bob的身份正确,确认了"Bob的公钥是1024"的声明正确。

verify:验证,就是把数据经过处理后(或直接),和已知存在的正确的数据进行比较。

signature:签名,简单来说,就是CA在颁发证书时,用CA的私钥把实体的名字、实体的公钥(可以理解为声明)等一些信息用哈希(hash)加密,并把加密结果写在发给实体的证书上。这个加密结果就叫做签名。CA的私钥(private key)以及CA的公钥(public key)都对应于CA的根证书。

certificate:证书,或者叫实体的证书。其本质是CA验证并保证了实体(比如Bob)的身份和声明的正确,记载这个保证的文件(一堆字节),就叫做证书。里面有实体的名字、实体的公钥、CA的签名等信息。

relying party:信任方,就是证书使用方,区别于证书申请方(比如Bob)。信任方只需验证Bob发过来的证书,证书正确了即可信任Bob的身份和声明(因为Bob的身份和声明已经被CA验证过了)。那怎么验证呢?用CA的根证书里的公钥,那信任方是如何先得到CA的根证书的呢?操作系统是先预装好的,浏览器也是先预置到trust store里的。

Michael Malone的原文:
Everything you should know about certificates and PKI but are too afraid to ask

登录注册后才能评论。