公钥私钥与数字签名数字证书
公钥加密,私钥解密;私钥签名,公钥验签。
私钥对摘要(某明文的hash值)进行加密,加密后产生数字签名。
Bob 有两把钥匙。Bob 的密钥之一称为公钥,另一个称为私钥。
Bob 的公钥可供任何需要它的人使用,但他将私钥留给自己。密钥用于加密信息。Bob 的两个密钥中的任何一个都可以加密数据,另一个密钥可以解密该数据。
Susan可以使用 Bob 的公钥加密消息。Bob 使用他的私钥来解密消息。Bob 的任何同事都可以访问 Susan 加密的消息,但没有 Bob 的私钥,数据就毫无价值。
现在Bob决定给Pat写一份信,信件的内容不用加密,但是要保证Pat收到信件后,能够确认信件的确是Bob发出的。Bob将信件hash计算一下,得到一串消息摘要,也叫hash值。
然后对消息摘要使用自己的私钥进行加密,加密后的结果,就是“数字签名”。
现在,Bob把数字签名附在文档之后一起发给Pat。
数字签名:私钥对某公开内容的hash值进行加密。
Pat 收到消息后使用 Bob 的公钥,将数字签名将其改回消息摘要。如果这有效,则证明 Bob 签署了该文件,因为只有 Bob 拥有他的私钥。Pat 之后将文档数据进行hash计算,如果消息摘要与解密签名时创建的消息摘要相同,则 Pat 知道数据没有更改。
既然Bob的公钥是公开的,Doug可以冒充Bob,将他自己的公钥发给Pat,让Pat误认为收到的公钥就是Bob的,然后就可以冒充Bob给Pat发消息了。所以出现新的问题,如何确保公钥不被冒充?
使用权威机构(CA)认证的公钥数字证书可以确保公钥不被冒充。通过查看数字证书,可以知道该证书是由哪家权威机构签发的,证书使用人的信息,使用人的公钥等信息。现在 Bob 的同事可以检查 Bob 的可信证书,以确保他的公钥真正属于他。事实上,Bob 公司的任何人都不会接受不存在 CA机构生成的证书的签名。 CA机构有权在私钥被泄露或不再需要时撤销签名。
证书生成过程:先生成一个文件D,文件大概是:
-
公钥内容
-
签发者ID----谁签发的证书
-
Subject----也就是这个证书签发给谁。这里subject和签发者ID相同。
-
有效期
-
其他信息
然后使用hash算法,对以上内容D进行hash计算,得到一个摘要H(hash值)。然后使用签发机构的私钥对摘要H进行RSA加密,得到数字签名S。然后将文件D和数字签名S连成一个文件,这个文件就是数字证书。所以数字证书里,包括证书持有者的身份信息,证书信息,证书持有人的公钥,以及签名信息。
CA的公钥已经添加到操作系统中了。Bob将公钥以及身份信息发送给CA机构。机构对Bob的身份进行验证,确保公钥和Bob的信息准确无误。CA机构使用自己私钥对持有人公钥与持有人信息进行数字签名,生成数字证书。使用自己的私钥对摘要进行数字签名,放到数字证书中。Susan收到证书之后,利用CA机构公钥对数字签名解析,得到摘要,然后对Bob公钥与Bob信息进行hash计算,查看计算得到的hash值是否与摘要一致,一致则说明公钥未被篡改,不一致则说明已被篡改。