Bob有两把钥匙,一把叫做public key,另外一把叫做private key。
任何需要的人都可以获得Bob的public key,但是Bob的private key只有他自己有。这些密钥用于加密信息,加密的信息只能由恰当的密钥解密后才能恢复可读,Bob的两把钥匙中要么其中一把用于加密数据,另外一把用于解密数据。
Susan可以使用Bob的public key来解密一条信息,然后Bob用他的private key来解密这条信息,Bob任何一个同事都可以获得Susan加密后的信息,但是如果没有Bob的private key来解密,这些加密后的数据是无意义的。
Bob结合他的private key和一个正确的软件可以将一个数字签名添加到文档(document)和其他数据上面,这个数字签名相当于一张唯独Bob才有的邮票放在数据上面,并且数字签名是很难去伪造的。另外,这个数字签名确保了任何对签名的数据做出的修改都不会不被检测到。
为了给一份文档签名,Bob的软件会将这些数据浓缩成几行,这个过程称为“哈希”,这几行成为消息摘要(message digest),将消息摘要变回生成它的原始数据是不可能的。
Bob的软件之后使用它的private key加密这个消息摘要,加密的结果就是数字签名。
最后,Bob的软件将数字签名附加在文档上面,所有被哈希过的数据都被签名了。
Bob现在将这一份文档发送给Pat。
碰巧,Susan在公司的证书授权中心工作,Susan可以简单地为Bob创建一份数字证书,上面签有Bob的public key以及有关Bob的一些信息。
现在Bob的同事可以通过检查Bob受信任的证书来确信这把public key确实是属于Bob的,事实上,Bob公司里面的任何人都不会接受上面没有由Susan创建的证书(certificate)的签名(signatures),这也赋予了Susan这样的能力:对于那些private key被盗或者不再使用时Susan能够撤销签名(signatures)。这里还会有更加广泛认可的认证中心来证明Susan。
回到Bob发送了一份签名的文档给Pat,为了核实文档上面的签名,Pat的软件首先使用Susan(认证中心)的public key去检查Bob证书(这个证书是由Susan颁发给Bob)上面的签名(Susan),如果这个证书被成功译码,那就可以证明这个证书是Susan创建的,确保这个证书可以被解码后,Pat的软件可以检查Bob在数字证书认证机构是否有良好的声誉以及所有和Bob身份相关的证书信息没有被改变。
Pat的软件然后用Bob的public key(在证书上)去验证Bob的数字签名,如果Bob的public key成功译码了签名,那么Pat就可以肯定这个签名是用Bob的private key创建的,因为Susan已经证实了相配的public key。当然,如果签名是有效的,那么我们可以知道Doug没有修改被签名的内容。
尽管这些步骤听起来很复杂,但是这些工作都是由Pat用户友好的软件在幕后处理好的,Pat只需要点击一下就可以核实一个签名了。