Digital signature

公钥密码与数字签名

用公钥进行加密(公钥密码) 公钥密码 用私钥进行加密(数字签名) 数字签名 用私钥加密相当于生成签名,用公钥解密则相当于验证签名

数字签名的方法

  • 直接对消息签名
  • 对消息的散列值签名 对消息的散列值签名

数字签名应用实例

  • 安全信息公告
  • 软件下载
  • 公钥证书
  • SSL/TLS

通过RSA实现数字签名

RSA的签名生成和验证: RSA的签名生成和验证

对数字签名的攻击

1. 中间人攻击
2. 对单向散列函数的攻击:数字签名中所使用的单向散列函数必须具有抗碰撞性,否则攻击者就可以生成另外一条不同的消息是其与签名所绑定的消息具有相同的散列值。
3. 利用数字签名攻击公钥密码
防止这样的攻击:

  • 不要直接对消息进行签名,对散列值进行签名比较安全
  • 公钥密码和数字签名最好分别分别使用不同的密钥对
  • 不要对意思不清楚的消息进行签名

数字签名注意点

  1. 数字签名是利用了“没有私钥的人事实上无法生成使用该私钥生成的密文”这一性质来实现的。这里所生成的密文并非被用于保证机密性,而是被用于代表一种只有持有该密钥的人才能够生成的信息。
  2. 特定的签名者与特定的消息绑定在一起,无论将签名复制多少份,“是谁对这条消息进行了签名”这一事实是不会发生任何改变的。签名可以被复制,但这并不代表签名会失去意义。
  3. 数字签名所要实现的并不是防止修改而是识别修改
  4. 不能将签名提取出来重复使用,因为签名和消息之间是有对应关系的,消息不同签名内容也会不同,如果提取出来附加到别的消息后面验证签名会失败。
  5. 作废带有数字签名的借据,可以重新创建一份相当于收据的文书并让对方在这份文书上加上数字签名。

数字签名无法解决的问题

数字签名可以确认消息的完整性、进行认证以及防止否认。但要正确使用数字签名有一个大前提就是用于验证签名的公钥必须属于真正的发送者,如果公钥是伪造的,那么数字签名也会完全失效。
为了能够确认自己得到的公钥是否合法,需要使用证书,所谓证书,就是将公钥当作一条消息由一个可信的第三方对其签名后所得到的公钥。

各种密码技术的对比

各种密码技术的对比

混合密码系统与对散列值签名:对称密码的密钥是机密性的精华单向散列函数的散列值是完整性的精华