zoukankan      html  css  js  c++  java
  • 密码学初级教程(六)数字签名 Digital Signature

    密码学家工具箱中的6个重要的工具:

    • 对称密码
    • 公钥密码
    • 单向散列函数
    • 消息认证码
    • 数字签名
    • 伪随机数生成器

    提问:

    有了消息认证码为什么还要有数字签名?

    因为消息认证码无法防止否认。消息认证码可以识别消息是否被篡改或者发送者身份是否被伪装。(消息认证码保证完整性、可以进行认证)

    为什么消息认证码无法防止否认,数字签名就能够否认呢?

    消息认证码中,能够计算出MAC值的密钥(共享密钥)是由发送者和接受者双方共同持有的,因此发送者和接受者中的任何一方都能够计算MAC值,发送者也就可以声称“这个MAC值不是我计算的,而是接收者计算的”。

    相反的,在数字签名中,能够生成签名的密钥(私钥)是只有发送者才持有的,只有发送者才能够生成签名,因此发送者也就没办法说“这个签名不是我生成的”了。

    数字签名的方法

    • 直接对消息进行签名

    发送者用私钥对消息进行签名并把签名和消息发送给接收者,接收者用公钥解密得到消息原文并和收到的消息进行匹配。

    • 对消息的散列值进行签名

    对散列值签名就是多了一步,先计算消息的散列值,再计算签名。

    数字签名的应用实例

    • 安全信息公告
    • 软件下载

        (1)验证软件是否有被修改。

    (2)一种名为带签名的Applet的软件就是一个具体的例子。这种软件就是用Java编写的(一种浏览器进行下载并执行的软件),并加上了作者的签名,而浏览器会在下载之后对签名进行验证。

    • 公钥证书
    • SSL/TLS

     实现数字签名的方法

    • RSA
      •   
    • EIGamal
      •   由Taher EIGammal设计的公钥算法,利用了在mod N中求离散对数的困难度。可被用于公钥密码和数字签名。
    • DSA
      •   NIST于1991年制定的数字签名规范,DSA是Schnorr算法与EIGammal方式的变体,只能用于数字签名。
    • Rabin
      •   由M.O.Rabin设计的公钥算法,利用了在mod N中求平方根的困难度。Rabin可以被用于公钥密码和数字签名。
  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业02
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    C语言I博客作业08
  • 原文地址:https://www.cnblogs.com/yaochc/p/5176553.html
Copyright © 2011-2022 走看看