如果我理解正确的话,数字签名意味着将消息连同使用私钥加密的消息散列一起发送。
消息的接收者计算散列,使用公钥解密收到的散列,然后比较两个散列是否匹配。
这有多安全?我的意思是,您可以轻松获取消息的哈希值,并且您还拥有加密的哈希值。找到用于创建 Encrypted_hash 的私钥有多容易?
例子:
Message Hash Encrypted_hash
-----------------------------------------
Hello world! 1234 abcd
Hi there 5678 xyzt
Bla bla 0987 gsdj
...
给定 Hash 和 Encrypted_hash 值,以及足够多的这些消息,找出私钥的难易程度如何?
最佳答案
由于用于生成 key 的算法(RSA 是典型的算法),假设 key 具有足够的位长,答案基本上是“在任何合理的时间内不可能”。只要私钥没有被盗或泄露,您将无法仅使用公钥和使用私钥散列的消息对其进行解密。
正如@Henk Holterman 的回答中所链接的那样,RSA 算法建立在以下事实之上:解密私钥所需的计算 - 素数分解就是其中之一 - 是难题,无法在任何合理的时间内解决(我们目前知道)。换句话说,底层问题(质因数分解)是一个 NP 问题,这意味着它不能在多项式时间内解决(破解私钥),但可以在多项式时间内验证(使用公钥解密)。
关于algorithm - 数字签名有多安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3443515/