应满足的条件
- 签名与文件不可分割。
对消息进行某种变换完成签名;使签名是待签名文件的函数。
- 签名者时候不可否认自己的签名。
签名使用发方独有的秘密信息完成,只对应唯一的公开验证信息。
- 接收者能验证签名,而其他人都无法伪造签名。
签名与唯一的公开信息对应,能够验证;签名与发方独有秘密信息相关,无法伪造。
- 双方对于签名真伪发生争执时,有可信第三方能解决双方争执。
签名对应的验证密钥由可信第三方确认并发布。靠法律解决争执。
数字签名方法
- 可交换公钥加密算法
必须是满足 的公钥密码算法。
就是将私钥 作为签名密钥,公钥 作为签名识别密钥。
- 专用数字签名算法
RSA 数字签名算法
记用户 A 的参数为 ,用户 B 的参数为 , 为加密 为脱密。显然每方的 都要不相同。
以 A 发送给 B 为例,签名
验证
发送时,将 作为一个整体。
这个算法也可以实现带签名的保密通信,但是要使逆变换唯一,需要保证模数的顺序。
当 时,先签名,后加密。即用户 A 先用自己私钥 对消息 签名,得到 ,再用对方公钥 对签名信息 加密得到 ,最后把签名和加密完成的信息 发送给对方 B。
反之亦然。哪个模数小就先进行哪一方的操作。
若后签名,攻击方可以通过公开信息解出中间信息重新签名,扰乱通信。针对这种情况,采用两个模数,保证所有用户签名模数均小于其他用户加密模数,即可保证一定先签名后加密,无法进行重签名攻击。
缺陷
-
任何人都可以利用 A 的签名密钥 ,给定任意 ,任何人都可以计算出 ,从而伪造对消息 的签名 (对 签名是 ,而公私钥相乘为 ,正好就是 )。
-
如果 A 对两份文件 签名分别为 ,故任何第三方知道 都可以伪造 的签名 。
但是伪造出签名的源文件攻击者都无法控制。
- 长文件签名时非常慢。ECB 加密模式容易遭受替换攻击。
所以一般对文件摘要签名。
DSA 数字签名算法
基于有限域离散对数问题。
参数选取
-
大素数 至少为 512 bit 且为 64 的倍数,推荐 1024 bit。
-
选取素数 : ( 是 的一个 160 bit 的素数因子)。
-
选取整数 ,(, )
-
随机选取整数
-
计算
公开参数 ,保密
签名
设用户 A 对消息 签名,则:
-
A 秘密选取一个小于 的随机数
-
A 计算
验证
- B 计算
如果 ,则 B 确认 是 A 对 m 的签名,否则无效。
为什么?
因为
从而
ECDSA 密钥数字签名算法
实际还是把有限域上的运算转换成椭圆曲线群上运算。
参数选取
-
构造有限域 。
-
生成域 上的椭圆曲线 。
-
取椭圆曲线中的一个点 ,要求 有大素数阶 。
-
选取一个整数 ,计算
公开 ,保密
签名
-
A 秘密选取一个小于 的随机数
-
A 计算
则其签名为 (r,s)
验证
和 DSA 完全一样没有任何区别
- B 计算
,则 B 确认 是 A 对 m 的签名,否则无效。