【问题标题】:How does a digital signature guaranties a message has been sent by 'Alice'数字签名如何保证“爱丽丝”已发送消息
【发布时间】:2013-06-27 18:25:39
【问题描述】:

我相信我了解数字签名的工作原理,但我仍然不明白它如何保证消息已被已知发件人 (Alice) 加密。

让我们假设 Alice 想向 Bob 发送一条消息。爱丽丝和鲍勃上周见过面,鲍勃正在等待回复yesno。汤姆是中间黑客

1。没有数字签名的场景:

// 1) Alice get's Bob public key
var bobPubKey = GetBobsPubKey();

// 2) Alice encrypts yes with bob's public key
var encryptedMessage = AssymetricEncryption.Encrypt("YES", bobPubKey );

// 3) Send message to bob
sendMsgToBob(encryptedMessage);

这种方法的问题在于 Tom 可能截获了消息 encryptedMessage 并将该消息替换为 var newEncryptedMsg = AssymetricEncryption.Encrypt("NO!", bobPubKey ); 当 bob 收到消息时,他不知道它已被 Tom 修改!

2。使用数字签名的场景

// 1) Alice get's Bob's public key 
var bobPubKey = GetBobsPubKey();

// 2) Alice encrypts 'yes' with bob's public key
var encryptedMessage = AssymetricEncryption.Encrypt("YES", bobPubKey );

// 3) Alice creates a hash of the encrypted message
var hashOfEncMsg = Sha1(encryptedMessage);

// 4) Alice encryptes that hash with her priveate key
var digitalSignature = AssymetricEncryption.Encrypt(hashOfEncMsg , alicePrivKey);

// 5) Alice sends both the encryptedMsg plus the signature to Bob
var msgToSend = string.Format("someUrl.asp?encMsg={0}&digSignatrue={1}",encryptedMessage , digitalSignature );
sendBobAMsg(msgToSend ); // msg contains encryptedConted + digital Signature

这是 bob 必须做的,以确保消息来自 alice

// 0) Bob receives encrypted msg plus digital signatrue
var msg = RecieveMsg();
var digitalSignature = GetDigSgnatureFromMsg(msg);
var encryptedMessage = GetEncyptedMsgFromMsg(msg);

// 1) Decrypt the msg
var plainText = AssymetricEncryption.Decrypt(encryptedMessage , bobPrivateKey ); // = YES

/*  now cause bob also received a digital signature let's do more steps to guaranty that the message came from Alice */

// 2) get Alice public key
var alicePubKey = GetAlicePubKey();

// 2) Create the same hash that Alice created for the msg
var ciphertext = AssymetricEncryption.Encrypt(plainText , bobPubKey ); // here plainText = YES
var hashOfEncMsg = Sha1(ciphertext);

// 3) Decrypt DigitalSignature hash with Alice public key
var aliceHash = AssymetricEncryption.Decrypt(digitalSignature , alicePublicKey); 

// 4) Here alice Hash must equal hashOfEncMsg 
if( hashOfEncMsg != aliceHash ) { throw new exception("Message has been modified or it does not come from Alice!");

所以我的问题是关于 Alice 哈希必须等于 hashOfEncMsg 的最后一步 4。如果这个验证成功,为什么 Bob 可以保证消息来自 Alice?

我相信 Tom 仍然可以修改消息,方法如下:(我可能在某个地方错了;不可能是数字签名不是他们声称的那样)。

  1. Tom 截获 Alice 的消息

  2. Tom 知道该消息具有数字签名,因此他生成了一个密钥组合,其中他的公钥将与 Alice 的相同。 (不过,Tom 的私钥与 Alice 的不同)

  3. Tom 用 Bob 的公钥加密“否”

  4. Tom 像 Alice 一样创建数字签名,但使用他的私钥

  5. 当 bob 收到消息时,他用他的私钥很好地解密它,他看到“否”

  6. 然后,bob 将验证签名以查看消息是否来自 alice

  7. bob 用他的公钥加密“否”并计算哈希值。那就是=hash1

  8. bob 解密 get 的 alice 公钥,这与 tom 的相同。

  9. 然后 bob 使用该密钥解密 dig 签名。解密该挖掘签名应该等于hash1! .

  10. Bob 现在认为 Alice 发送了 NO!


编辑

根据我收到的回复,以下是问题的解决方案:

Bob 可以保证消息来自 Alice,因为 Tom 将无法生成与 Alice 公钥在数学上相关的私钥。换句话说,第 2 步(Tom 知道消息中有一个数字 ....)将需要很多时间。因此,如果 Alice 在合理的时间内回复,那么 Bob 可以保证消息来自 Alice。

【问题讨论】:

  • 您的解决方案是正确的。你的分析很好;如果 Tom 可以 (1) 从公钥中推断出 Alice 的私钥或 (2) 从公钥中推断出 any 私钥,那么 Tom 可以执行您描述的攻击。密码系统被认为是安全的,可以抵御这种攻击;做这两件事都非常困难。您可能会考虑的另一种攻击是:Tom 欺骗 Bob 认为 Tom 的公钥实际上与 Alice 相关联。密码系统的安全性依赖于 Alice 拥有一种安全机制,通过该机制告诉 Bob 她的公钥。
  • 但是,您关于 Alice 需要在“合理的时间内”回复的结论并不能完全理解什么是“合理的”。 如果密码系统实际上很强大,Tom 需要花费数千、数百万或数十亿年的时间才能根据 Alice 的公钥推断出她的私钥。请记住,只有 相信 RSA 是安全的,因为我们认为很难分解大数;我们没有确凿的证据证明这一说法。如果事实证明传统计算机或量子计算机可以快速分解大量数字,那么系统根本就不安全。

标签: c# cryptography digital-signature encryption-asymmetric


【解决方案1】:

Tom 必须加密“不!”用 Alice 的公钥可以解密的私钥,他不能使用自己的私钥。

这意味着 Tom 需要一对私钥/公钥,但他只知道公钥。从公钥计算私钥在计算上非常困难(在合理的时间内实际上是不可能的)。

【讨论】:

  • 意思是生成一个有公钥的私钥不容易?在其他作品中,需要很长时间才能生成公钥等于常数的组合键。
  • +1 哦,我明白了,所以不可能在合理的时间内生成相同的公钥。
【解决方案2】:

Tom 的第 2 步会出现问题。给定的公钥有一个 - 并且只有一个 - 对应的私钥。为了计算它,Tom 需要分解一个非常大的整数(它实际上是 2 个非常大的素数的乘积)。无法在合理的时间内解决该任务是 RSA 加密的基础。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多