【发布时间】:2014-09-21 00:50:50
【问题描述】:
我有消息 (m),我想在以不安全的方式发送后存储一些数据以验证其完整性..
我可以创建数字签名 (DSA / RSA)。
- S(m) = m 的数字签名。
或者我可以计算一个摘要(哈希)并加密它。
- H(m) = m 的摘要
- C( H(m) ) = H(m) 的加密数据
无论如何,当接收者收到消息时,应该验证它的完整性。
S(m)和C(H(m))哪种方法更安全?
更新
假设 Alice 想给 Bob 发送一条消息
使用数字签名:
爱丽丝的部分:
- 使用她的私钥计算 S(m)
- 将 m、S(m) 和她的公钥发送给 Bob
鲍勃的部分:
- Bob 收到 S(m)、m 和 Alice 的公钥
- Bob 使用 m 和 Alice 的密钥验证 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
【问题讨论】:
-
加密不提供身份验证——实际上加密的消息通常也经过身份验证。所以你必须去签名。
-
我用更多细节更新了我的问题。
-
这个问题似乎离题了,因为它与编程无关。询问crypto.stackexchange.com
标签: security hash cryptography digital-signature digest