数字签名

1. 数字签名

  数字签名相当于现实世界中的盖章、签名的功能在计算机世界中进行的技术实现。使用数字签名可以识别篡改和伪装,还可以防止否认。

  生成消息签名的行为称为签名,验证消息签名的行为称为验签。

 

2. 从消息认证码到数字签名

  消息认证码双方共享密钥,消息可能是任何一方发送,对于第三方不能证明消息的来源。

  数字签名通信双方使用的密钥不同,签名和验签的密钥不同,可以判断消息来源是否是签名密钥产生,防止抵赖。

 

3. 公钥密码与数字签名

  数字签名技术对签名密钥和验证密钥进行了区分,使用验证密钥无法生成签名。

  签名密钥只能由签名的人持有,验签密钥是任何需要验证签名的人持有。

  以上数字签名的特性与公钥密码类似,数字签名就是把公钥证书“反过来使用”而实现的。

  公钥证书:公钥用于加密,私钥用于解密。

  数字签名:私钥用于签名,公钥用于验签。

 

4. 数字签名的实现方法

  直接对消息签名。比较容易理解,但一般不这样使用。

    ① Alice用自己的私钥对消息进行加密。

    ② Alice将消息和签名发送给Bob。

    ③ Bob用Alice的公钥将收到的签名解密。

    ④ Bob将签名解密后的消息与Alice发送过来的消息进行对比,完成验签。

  对消息的散列值进行签名。较为复杂,但实际场景中都这样使用。

    ① Alice用单向散列函数计算消息的散列值。

    ② Alice用自己的私钥对散列值进行加密。

    ③ Alice将消息和签名发送给Bob。

    ④ Bob用Alice的公钥对收到的签名解密。

    ⑤ Bob将签名解密后的散列值与Alice直接发送过来的消息散列值进行对比。

 

5. 数字证书的应用实例

  安全信息公告:发布漏洞信息等,没必要对消息进行加密,防止恶意修改,对明文消息签名,叫做明文签名。

  软件下载:防止软件被篡改,Android中无法安装没有签名的软件。

  公钥证书:把公钥当做消息,对它加上数字证书。得到公钥证书。

  SSL/TLS:SSL/TLS认证服务器身份是否是合法时,会使用服务器证书,即加上了数字签名的服务器公钥。

 

6. RSA实现数字签名

  单向散列函数与RSA结合起来进行数字签名的详细说明,见RFC3447。

  用RSA生成签名:签名 = 消息^D mod N        D和N是签名者的私钥

  用RSA验证签名:签名后的消息 = 签名^E mod N    E和N是签名者的公钥

 

7. 其他的数字签名

  ElGamal、DSA、ECDSA、Rabin

 

8. 对数字签名的攻击

  ① 中间人攻击:

    攻击者介于发送者和接受者之间,无需破解数字签名算法前提下完成攻击。

    解决方案是公钥证书,即证书。

  ② 单向散列函数的攻击:

    使用的单向散列函数必须抗碰撞性。

  ③ 利用数字签名攻击公钥密码:

    把“请将消息签名”理解为“请解密消息”,即利用数字签名解密。

    解决:首先不要直接对消息进行签名,对散列值签名比较安全。

       其次公钥密码和数字签名最好使用不同的密钥对;

          人为地:不对消息不清楚的消息进行签名。

  ④ 潜在伪造:

    用RSA来解密消息的数字签名算法中,潜在伪造是可能的。

    RSA公钥是可以获得的,因此对数字签名进行潜在的伪造也就可以实现。

   ⑤ 其他攻击

    被用于公钥密码的攻击,大部分都能被用于攻击数字签名。

 

9. 密码技术对比

  ① 消息认证码和数字签名

  ② 混合密码系统与对散列值签名:对称密码的密钥是机密性的精华,单向散列函数的散列值是完整性的精华。

  ③ 数字签名无法解决的问题:数字签名既能识别出篡改和伪装,还可以防止否认。问题是用于验证签名的公钥属于真正的发送者。需要数字证书技术。

 

10. 数字签名的疑问

  • 密文并非被用于保证机密性,而是被用于代表一种只有持有该密钥的人才能够生成的信息,这样的信息被称为认证符号,消息认证码、数字签名都是认证符号。
  • 数字签名不能保证机密性,数字签名的作用本来就不是保证机密性。
  • 签名可以被复制,签名是不是原件并不重要,真正重要的是特定密码的签名者与特定的消息都绑在了一起。
  • 签名之后也可以对消息和签名进行修改,但是这样修改后,验证签名就会失败。数字签名所要实现的并不是防止修改,而是识别修改。
  • 不能修改消息和签名,使验签可以成功。只要有一比特被修改,重新计算的散列值就会有很大的改变,不知道私钥,就无法产生改私钥对应的密文。
  • 防止否认,数字签名可以防止否认,能够生成签名的密钥,只有发送者才持有。
posted @ 2021-06-27 17:09  NiGuard  阅读(1095)  评论(0)    收藏  举报