数字签名
下图是一个制作以及使用数字签名过程的通用模型。
假设Bob发送一条消息给Alice,尽管消息并不重要,也不需要保密,但他想让Alice知道消息确实是他本人发的。出于这个目的,Bob利用一个安全的散列函数,比如SHA-512,产生消息的散列值然后将这个散列值用他的私钥加密,从而创建了数字签名。当Alice接收到带有签名的消息后,她要做的是:
- 计算该消息的散列值
- 利用Bob的公钥对签名解密
- 将计算出的散列值和解密出的散列值做比较
如果这两个散列值相等,Alice就能确认所收到的消息是由Bob签名过的。因为其他人没有Bob的私钥,所以他们不能创建能用Bob的公钥解密的密文。另外,没有Bob的私钥也不可能对消息做修改。
数字签名并不提供机密性,发送消息不会被篡改但有可能被窃听。
公钥证书
公钥证书由公钥加上公钥所有者的用户ID以及可信第三方签名的整个数据块组成。
- 用户软件(客户端)创建一对密钥:一个公钥和一个私钥
- 客户端准备一个包含用户ID和公钥的未签名的证书。
- 用户通过某种安全手段将未签名的证书提交给Certificate Authority - CA(认证中心)。这种手段可能是面对面的会谈,也可能是使用已注册的电子邮件,或提交一个电子邮件认证的Web表单。
- CA以如下方式产生一个签名:(1) CA利用某个散列函数计算出未签名证书的散列码。该散列函数比如SHA,将一个可变长度的数据分组或消息映射到一个固定长度散列码。
- CA将签名附属在未签名的证书后,以此创建一个签名证书。
- CA将签名证书交还给客户端。
- 客户端可以将该签名证书提交给其他用户。
- 该签名证书的任何接收者可以通过(1)接收者计算证书的散列码(不包括签名),(2)接收者使用CA的公钥和签名认证算法来证实数字签名。这个算法返回值显示签名是否有效。
X.509标准已经被广泛接受,用来格式化公钥证书。
X.509
X.509 ITU-T标准在RFC 5280有详细的描述,是最为广泛接受的公钥证书格式。
RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile (rfc-editor.org)
X.509证书被用于大多数网络安全应用,包括IP安全、SSL、TLS、SET、S/MINE,以及电子商务应用。
X.509证书主要元素包括具有X.500主体名称的密钥和公钥信息、有效期、CA发放者名称,以及将这些信息绑定在一起的这些信息的签名。
X.509标准定义了一个证书吊销列表(CRL),是由颁发者签名的。 每一个被吊销的证书都包含了证书的序列号和证书吊销日期。CA颁发的证书序列号是唯一的,足以识别证书。当一个应用接收了一个证书,X.509标准声明应用应该在签发证书的CA的当前的CRL中确认证书是否已经被吊销。