数字签名的作用就是确保 A 发送给 B 的信息就是 A 本人发送的,并且没有改动。
数字签名的基本过程:
(1)A 使用“摘要”算法(SHA-1,MD5等)对发送信息进行摘要。
(2)使用 A 的私钥对信息摘要进行加密运算,将加密摘要和原文一并发送给 B 。
验证签名的基本过程:
(1)B 接收到加密摘要和原文后,使用和 A 一样的“摘要”算法对原文再次摘要,生成新摘要。
(2)使用 A 公钥对加密摘要解密,还原成原摘要。
(3)两个摘要对比,一致说明由A发出且没有经过任何篡改。
由此可见。数字签名功能有信息身份认证、信息完整性检查、信息发送不可否认性,但不提供原文信息加密,不能保证对方能收到消息,也不对接收方身份进行验证。
场景:A 声明自己是某银行办事员向客户索要账号和密码,客户验证了 A 的签名,确认索要密码的信息是 A 发过来的,那么客户就愿意告诉 A 用户名和密码吗?
显然不会。因为客户仅仅证明信息确实是A发过来的没有经过篡改的信息,但不能确认 A 就是银行职员、做的事情是否合法。
这时需要有一个权威中间部门(如政府、银监会等),该部门向 A 颁发了一份证书,确认其银行职员身份。
这份证书里有这个权威机构的数字签名,以保证这份证书确实是权威机构所发。
数字证书采用公钥体制进行加密和解密。每个用户有一个私钥来解密和签名;同时每个用户还有一个公钥来加密和验证。
【例】说明了数字证书、CA 签名、证书公钥的作用。
某网站向证书颁发机构(Certification Authority,CA)申请了数字证书,用户通过 CA 的签名来验证网站的真伪。在用户与网站进行安全通信时,用户可以通过证书中的公钥进行加密和验证,该网站通过网站的私钥进行解密和签名。
目前数字证书的格式大多是 X.509 格式,X.509是由国际电信联盟(ITU-T)制定的数字证书标准。
在X.509标准中,包含在数字证书中的数据域有证书、版本号、序列号(唯一标识每一个 CA 下发的证书)、算法标识、颁发者、有效期、有效起始日期、有效终止日期、使用者、使用者公钥信息、公钥算法、公钥、颁发者唯一标识、使用者唯一标识、扩展、证书签名算法、证书签名(发证机构,即 CA 对用户证书的签名)。
证书由 CA 中心发放,无需特别措施。
由于网络存在多个 CA 中心,因此提出了证书链。证书链服务是一个 CA 扩展其信任范围的机制,实现不同认证中心发放的证书的信息交换。
如果用户 UA 从 A 地的发证机构取得了证书,用户 UB 从 B 地的发证机构取得了证书,那么 UA 通过证书链交换了证书信息,则可以与UB进行安全通信。
当用户个人身份信息发生变化或私钥丢失、泄露、疑似泄露时,证书用户应及时地向 CA 提出证书的撤销请求,CA 也应及时地把此证书放入公开发布的证书撤销列表(Certification Revocation List, CRL)。
证书撤销的流程如下:
1)用户或其上级单位向注册机构(Registration Authority,RA)提出撤销请求。
2)RA 审查撤销请求。
3)审查通过后,RA 将撤销请求发送给 CA 或 CRL 签发机构。
4)CA 或 CRL 签发机构修改证书状态并签发新的CRL。
当该数字证书被放入 CRL 后,数字证书则被认为失效,而失效并不意味着无法被使用。如果窃取到甲的私钥的乙,用甲的私钥签名了一份文件发送给丙,并附上甲的证书,而丙忽视了对 CRL 的查看,丙就依然会用甲的证书成功验证这份非法的签名,并会认为甲对这份文件签过名而接收该文件。