21 数字签名与证书

Posted by CodingWithAlice on April 28, 2021

21 数字签名与证书

  • 总结

    1、摘要算法 用来实现完整性,能够为数据生成独一无二的指纹,常用的算法是 SHA-2

    2、数字签名私钥对摘要的加密,可以由公钥解密后验证,实现身份认证和不可否认

    3、公钥的分发需要使用 数字证书,必须由 CA 的信任链来验证,否则就是不可信的

    4、作为信任链的源头 CA 有时也会不可信,解决办法有 CRL、OCSP,还有终止信任

摘要算法 - 为了保证完整性

  • 定义

    把任意长度的数据压缩成固定长度、而且独一无二的摘要字符串;只有算法,没有密钥,加密后的 数据无法解密

  • 常见算法

    MD5(Message-Digest 5)、SHA-1(Secure Hash Algorithm 1),它们就是最常用的两个摘要算法,能够生成 16 字节和 20 字节长度的数字摘要。但这两个算法的安全强度比较低,不够安全,在 TLS 里已经被禁止使用了

    目前 TLS 推荐使用的是 SHA-1 的后继者:SHA-2,SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要

  • 使用方式

    网站收到报文后计算一下消息的摘要,把这两份指纹做个对比,如果一致,就说明消息是完整可信的,没有被修改

  • 存在问题

    摘要算法不具有机密性,如果明文传输,那么黑客可以修改消息后把摘要也一起改了,网站还是鉴别不出完整性 –> 所以,真正的完整性必须要建立在 机密性 之上,在混合加密系统里 用会话密钥加密消息和摘要,这样黑客无法得知明文,也就没有办法动手脚了

哈希消息认证码(HMAC)

image-20210428101046189

数字签名

  • 作用

    使用私钥再加上摘要算法,就能够实现数字签名,同时实现 身份认证和不可否认

  • 签名

    把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是 私钥加密、公钥解密,但又因为非对称加密效率太低,所以私钥只 加密原文的摘要

  • 验签

    签名和公钥一样完全公开,任何人都可以获取。但这个签名 只有用私钥对应的公钥 才能解开,拿到摘要后,再比对原文验证完整性

    img

    image-20210428101137650

公钥的信任 - 数字证书

找一个公认的可信第三方CA(Certificate Authority,证书认证机构),让它作为信任的起点,递归的终点,构建起公钥的信任链

  • 证书体系的弱点

    CA 失误或者被欺骗

  • 解决方案

    CRL(证书吊销列表,Certificate revocation list)和 OCSP(在线证书状态协议,Online Certificate Status Protocol),及时废止有问题的证书