【发布时间】:2011-09-13 01:45:18
【问题描述】:
我的问题是关于 RSA 签名的。
如果是 RSA 签名:
加密 -> y = x^d mod n, 解密 -> x = y^e mod n
- x -> 原始消息
- y -> 加密消息
- n -> 模数(1024 位)
- e -> 公共指数
- d -> 私有指数
我知道 x、y、n 和 e。知道这些我可以确定d吗?
【问题讨论】:
标签: cryptography rsa public-key-encryption
我的问题是关于 RSA 签名的。
如果是 RSA 签名:
加密 -> y = x^d mod n, 解密 -> x = y^e mod n
我知道 x、y、n 和 e。知道这些我可以确定d吗?
【问题讨论】:
标签: cryptography rsa public-key-encryption
如果你可以分解 n = p*q,那么 d*e ≡ 1 (mod m) 其中 m = φ(n) = (p-1)*(q-1), (φ(m) 是 @ 987654321@) 在这种情况下,您可以使用extended Euclidean algorithm 从 e 中确定 d。 (对于某些 k,d*e - k*m = 1)
所有这些都非常容易计算,除了因式分解,它被设计为非常困难,因此公钥加密是一种有用的技术,除非您知道私钥,否则无法解密。
因此,从实际意义上回答您的问题,不,您不能从公钥中导出私钥,除非您可以等待数百或数千个 CPU 年来分解 n。
公钥加解密是逆运算:
x = ye mod n = (xd)e mod n = xde mod n = xkφ(n)+1 mod n = x * (xφ(n))k mod n = x mod n
其中 (xφ(n))k = 1 mod n 因为Euler's theorem。
【讨论】:
在两种情况下答案是肯定的。一,有人因素n。第二,有人把算法当作米奇,说服签名者使用几个可能的 x 特殊值之一。
Applied Cryptography 第 472 和 473 页描述了两种这样的方案。我不完全了解它们在实践中的工作方式。但解决方案是使用无法完全由想要确定 d 的人(也就是攻击者)控制的 x。
有几种方法可以做到这一点,它们都涉及散列 x,以可预测的方式调整散列值以删除一些不需要的属性,然后对该值进行签名。执行此操作的推荐技术称为“填充”,尽管有一种非常出色的技术不能算作填充方法,可在 Practical Cryptography 中找到。
【讨论】:
没有。否则私钥就没有用了。
【讨论】: