数字签名VS。信息摘要

Ale*_*ITC 4 security hash cryptography digest digital-signature

我有消息(m),我想通过不安全的方式发送数据后存储一些数据以验证其完整性。

我可以创建一个数字签名(DSA / RSA)。

  • S(m)= m的数字签名。

或者,我可以计算摘要(哈希)并将其加密。

  • H(m)= m的摘要
  • C(H(m))= H(m)的加密数据

无论如何,当接收方收到消息时,应验证其完整性。

哪种方法更安全S(m)或C(H(m))?

更新

假设爱丽丝想向鲍勃发送一条消息

使用数字签名:

爱丽丝的部分:

  • 使用她的私钥计算S(m)
  • 将m,S(m)和她的公钥发送给Bob

鲍勃的部分:

  • 鲍勃收到S(m),m和爱丽丝的公钥
  • 鲍勃使用m和爱丽丝的密钥验证S(m)。

使用摘要:

爱丽丝的部分:

  • 使用Bob的公钥计算C(H(m))
  • 将C(H(m))和m发送给Bob

鲍勃的部分:

  • 使用他的私钥(d)解密C(H(m))
  • 计算H(m)
  • 验证m(H(m)= d)的完整性

我看到了使用发布的第二种方法的软件,但是我认为第一种更安全,对吗?

更新2

总之,最好的方法是使用第一种方法通过安全方式与Bob共享Alice的公钥。

第二种方法根本不提供安全性。

感谢@Perseids

Per*_*ids 5

它们都不起作用。

第一次攻击:夏娃在中间攻击中坐上一名男子,并拦截了爱丽丝发送的所有消息。m她没有转发,而是转发n。而不是m使用Alice的私钥进行签名,而是转发n使用她的私钥进行的签名。她不是向Alice公开密钥,而是向Bob发送她的公开密钥。鲍勃永远不会看到区别,因为他事先不知道爱丽丝的公钥。

攻击第二个:拦截来自Alice的所有消息(并丢弃它们),并创建与Alice相同的消息,但使用n代替m。别忘了假装自己是爱丽丝。

问题的根源是,Bob需要有某种默契爱丽丝真的是。如果您对“比尔·盖茨”一无所知,那我就很容易冒充他。数字签名的标准假设是,鲍勃(Bob)从安全来源知道爱丽丝(Alice)的公钥,或者他们以前已经通过安全通道交换了它。然后Bob可以对照Alice的公钥(已知是好的)来检查Alice的签名。