当前位置: 代码迷 >> 综合 >> 【密码学原理】数字签名
  详细解决方案

【密码学原理】数字签名

热度:83   发布时间:2024-02-25 18:11:16.0

数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示

消息认证可以保护消息交换双方不受第三方的攻击,但是不能处理通信双方自身发生的攻击。例如对下图中的某种方式进行攻击,考虑两种情况:

  • Bob可以伪造一条消息并称该消息来自Alice。用他们的共享密钥产生认证码,并将认证码附加在消息后面。
  • Alice可以否认曾经发送过某天消息。Bob可以伪造消息,所以无法证明Alice确实发过该消息。

数字签名的特征:

  • 必须能验证签名者、签名日期和时间
  • 必须能认证被签的消息内容
  • 签名应该由第三方仲裁,以解决争执

下面给出一些攻击类型,危害程度从高到低:

  • 唯密文攻击
  • 已知消息攻击
  • 一般选择消息攻击
  • 定向选择消息攻击
  • 适应性选项消息攻击
  • 完全破译
  • 通用伪造
  • 选择伪造
  • 存在性伪造

 数字签名应该满足的条件:

  • 签名必须是与消息相关的二进制位串
  • 签名必须使用发送方某些独有的信息,以防止伪造和否认
  • 产生数字签名比较容易
  • 识别和验证签名比较容易
  • 伪造数字签名在计算上是不可行的。无论是从给定的数字签名伪造消息,还是从给定的消息伪造数字签名,在计算上是不可行的
  • 保存数字签名的副本是可行的

安全Hash函数可用于满足上述条件的数字签名设计,简单的设计方案如图所示

 直接数字签名是指:只涉及通信双方的数字签名。这里先进行签名,然后才执行外层的加密,发生争执的时候第三方可以查看消息及签名。如果对消息先加密,然后对消息的密文签名,那么第三方必须知道解密密钥才能读取原始消息。签名如果在内层进行,接收方可以存储明文的消息及签名,以备解决争执。

直接签名有个弱点,它依赖于发送方的私钥安全性。发送方可以抵赖私钥丢失或者被盗。被广泛接受的解决方案是使用数字证书的证书管理中心(CA)。

ElGamal数字签名方案

ElGamal签名方案使用私钥进行加密,使用公钥进行解密。

签名包括两部分,一部分是对公共参数\alpha的加密,一部分是对私钥和前一部分签名的加密。验证签名的方式为

m是明文的Hash值,然后对A的公钥和前一部分签名分别用签名求指数,得到的结果进行比较即可。

Schnorr数字签名方案

同ELGama数字签名一样,Schnorr数字签名也是基于离散对数,将生成签名所需的消息计算量最小化,生成签名的主要工作不依赖于消息,可以在处理器空闲时执行。生成签名过程与消息相关的部分需要进行2n位长度的整数与n位长度的整数相乘。

在签名之前可以生成x,这个x是关于随机数r的值,与M无关,最后签名只是与M的绑定,不依赖于M

验证过程为

数字签名标准(DSS)

DSS使用的是只提供数字签名功能的算法,与RSA不同,DSS虽然是一种公钥密码方案,但是不能用于加密或密钥交换。

数字签名算法(DSA)如图所示

DSA中的签名和验证函数如图所示

  相关解决方案