密码学初级教程(六)数字签名 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可以被用于公钥密码和数字签名。
上一篇:[OpenNebula]中间件訪问驱动程序


下一篇:Ubuntu16.04运行VoxelNetRos