公钥基础设施——Public Key Infrastructure,PKI。
公钥证书——Pubilc-Key Certificate,PKC,也称为证书——certificate。
由认证机构(Certification Authority 、Certifying Authority——CA)施加数字签名。
认证机构就是能够认定【公钥确实属于此人】并能够生成数字签名的个人或组织。
认证机构必须是可信的。
Bob生成密钥对
密钥对可以由Bob自己生成,也可以由认证机构代为生成。私钥需要妥善保管。
Bob在认证机构Trent注册自己的公钥
Bob将公钥发送给认证机构Trent,Trent收到Bob的公钥后,会确认所收到的公钥是否是Bob本人所有。
专栏:身份确认和认证业务准则
认证机构确认【本人】身份的方法和认证机构的 认证业务准则 (Certification Practice Statement,CPS)的内容有关。如果认证机构提供的是测试用的服务,可能完全不会进行任何身份确认。如果是政府部门运营的认证机构,可能就需要根据法律规定来进行身份确认。如果是企业面向内部设立的认证机构,可能会给部门负责人打电话进行确认。
认证机构Trent用自己的私钥对Bob的公钥施加数字签名并生成证书
Trent对Bob的公钥加上数字签名。Trent事先已经生成了密钥对。
Alice得到带有认证机构Trent的数字签名的Bob的公钥(证书)
Alice从Trent获取证书。证书中包含了Bob的公钥,并带有Trent对该公钥签署的数字签名。
Alice使用认证机构Trent的公钥验证数字签名,确认Bob的公钥的合法性
Alice使用认证机构Trent的公钥对证书中的数字签名进行验证。如果验证成功,就相当于确认了证书中所包含的公钥的确属于Bob。
至此,Alice就得到了合法的Bob的公钥。
Alice用Bob的公钥加密消息并发送给Bob
Alice用Bob的公钥加密要发送的消息,然后将消息发送给Bob。
Bob用自己的私钥解密密文得到Alice的消息
Bob收到Alice发送的密文,然后用自己的私钥解密,这样就能够看到Alice的消息了。
以上步骤中,1到3步仅在注册新公钥时才会进行,并不是每次通信都需要。步骤4仅在Alice第一次用公钥密码向Bob发送消息时才需要进行,只要Alice将Bob的公钥保存到电脑中,在以后的通信中就可以直接使用了。
最广泛使用的是有ITU和ISO制定的X.509规范(RFC3280)。
ITU——International Telecommunication Union——国际电信联盟
ISO——International Organization for Standardization——国际标准化组织
X.509证书包含以下构成要素:
要素 | 示例 |
---|---|
证书序列号 | S/N: 23F1FD364C08... |
证书颁发者 | Issuer:CN=Symantec Class 1 Individual SubScriber CA - G4, ... |
公钥所有者 | Subject: ... aka; bobby@example.com |
SHA-1 指纹 | sha1_fpr: 39:28:FE:1B... |
MD5 指纹 | md5_fpr: 95:2B:83:B5... |
证书ID | certid: 2BE81DBC... |
有效期(起始时间) | notBefore: 2015-06-12 00:00:00 |
有效期(结束时间) | notAfter: 2015-07-07 23:59:59 |
散列算法 | hashAlgo:1.2.840.113549.1.1.5(sha1WithRSAEncryption) |
密钥类型 | keyType: 2048 bit RSA |
密钥ID | subjKeyId: EAD8D26.... |
密钥用途 | keyUsage: digitalSignature keyEncipherment |
Public-Key Infrastructure——公钥基础设施,是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。
用户——使用PKI的人
【注册公钥的用户所进行的操作】
【使用已注册公钥的用户所进行的操作】
认证机构——颁发证书的人
CA——Certification Authority,是对证书进行管理的人。
认证机构具体所进行的操作如下:
公钥注册和本人身份认证可以由 注册机构 (Registration Authority,RA)来分担。
仓库——保存证书的数据库
repository,也叫 证书目录 。
用户和认证机构不仅限于人,统称为 实体 (entitiy)。
实体就是进行证书和密钥相关处理的行为主体。
密钥对有两种生成方式,一种是由PKI用户自行生成,一种是由认证机构生成。
如果认证机构生成用户密钥对,需要将私钥发送给用户,具体方法在RFC7292(PKCS#12:Personal Information Exchange Syntax V1.1)中进行了规定。
申请证书时使用的规范是RFC2986(PKCS#10:Certification Request Syntax Specification Version 1.7)等定义的。
认证机构根据其认证业务准则(Certification Practice Statement,CPS)对用户的身份进行认证,并生成证书。
在生成证书时,需要使用认证机构的私钥来进行数字签名。
生成的证书格式是由X.509定义的。
当用户的私钥丢失、被盗时,认证机构需要对证书进行 作废 (revoke)。其他情况也会需要作废证书,比如保管证书的人离职、名称变更导致和证书中记载的内容不一致等情况。
要作废证书,认证机构需要制作一张 证书作废清单 (Certificate Revocation List,CRL)。
CRL是认证机构宣布作废的证书一览表,具体来说,是一张已作废的证书序列号的清单,并由认证机构加上数字签名。证书序列号是认证机构在颁发证书时所赋予的编号,在证书中都有记载。
PKI用户需要从认证机构获取最新的CRL,并查询自己要用于验证签名(或用于加密)的公钥证书是否已经作废。此步骤非常重要。
检查证书是否有效,一般是由处理该证书的软件完成的,但有很多软件并没有及时更新CRL。
对于认证机构的公钥,可以由其他的认证机构施加数字签名,从而对认证机构的公钥进行验证,即,生成一张 认证机构的公钥证书。
一个认证机构来验证另一个认证机构的公钥,这样的关系可以迭代数层。最顶端的机构一般称为 根CA (Root CA)。
根CA给自己颁发证书,这种对自己的公钥进行数字签名的行为称为 自签名 (self-signature)。
在公钥注册之前进行攻击
攻击者替换掉待签名的公钥。
注册相似人名进行攻击
窃取认证机构的私钥进行攻击
需要入侵认证机构的计算机,或收买有权访问认证机构私钥的人。
认证机构必须花费大量的精力来防止自己的私钥被窃取。
如果认证机构的私钥被窃取(泄露),认证机构就需要将私钥泄露一事通过CRL通知用户。
伪装成认证机构进行攻击
如果认证机构本身不可信,即便证书合法,其中的公钥也不能使用。
必须要确认自己得到的证书是哪个认证机构颁发的,这个机构是否可信。
利用CRL发布的时间差发动攻击
OCSP协议可快速确认证书是否已经失效。
RFC2560(X.509 Internet Public Key Infrastructure Online Certificate Status Protocol)
Superfish
2015年联想公司销售的计算机中预装的广告软件Superfish可能会带来安全问题。
Superfish是一款广告软件,为了能够通过监听和收集用户通信中的个人信息,它在系统中安装根证书,并劫持浏览器与服务器之间的通信,将网站的证书替换成自己的证书。典型的通过中间人攻击的方式来监听通信内容。
Superfish内置了用于生成数字签名的私钥,该电脑便成了一个不可信的认证机构,而且生成签名所需的口令只是一个简单的单词。恶意软件可以利用Superfish随意生成伪造的网站证书,使得钓鱼网站在用户的浏览器上看起来像正常网站一样。