数字签名


数字签名

1. 基本概念

一个数字签名方案包括如下3个算法:

  • 密钥生成:产生用户的公私钥
  • 签名算法:产生消息的签名
  • 验证算法:验收消息的签名是否是合法

数字签名方案为了实现安全认证,需要满足如下条件:

  • 必须相对容易生成该数字签名
  • 必须相对容易识别和验证该数字签名
  • 伪造该数字签名在计算上不可行,既包括对一个已 有的数字签名构造新的消息,也包括对一个消息伪 造一个数字签名

2. RSA签名算法

2.1 密钥生成算法

1、选两个保密的大素数 p 和 q ,计算 n = p × q , φ ( n )=( p -1)( q -1);

2、选一整数 e ,满足1< e < φ ( n ),且 gcd ( φ ( n ), e )=1;

3、计算 d ,满足 d · e ≡1 mod φ ( n );

4、以{ e , n }为公钥, { d,n }为私钥。

2.2 签名算法

JSCPtx.png

2.3 验证算法

JSPmxU.png

2.4 正确性

JSPMqJ.png

2.5 缺点

JSPDII.png

3. ElGamal签名算法

1. 密钥生成

1、选取大素数 p , g, Z * p 是一个本原元。 p 和 g 公开;

2、随机选取整数 x ,1≤ x ≤ p - 2,计算 y = g^x mod p 。

3、公钥为 y ,私钥为 x

2. 签名算法

对于消息 m,首先随机选取整数 k, 1≤ k≤ p-2 ,然后计算:

JSk6Rx.png

则 m的签名为( r, s),其中 h为Hash函数。

3. 验证算法

接收方在收到消息 m和签名 ( r,s)后,验证

JSZ2hd.png

如果等式成立,则 ( r,s)是消息 m的有效签名;反之,则是无效签名 。