我试图在Python中找到d
,这样
(2 ** d) mod n = s2
n =
132177882185373774813945506243321607011510930684897434818595314234725602493934515403833460241072842788085178405842019124354553719616350676051289956113618487539608319422698056216887276531560386229271076862408823338669795520077783060068491144890490733649000321192437210365603856143989888494731654785043992278251
和s2 =
18269259493999292542402899855086766469838750310113238685472900147571691729574239379292239589580462883199555239659513821547589498977376834615709314449943085101697266417531578751311966354219681199183298006299399765358783274424349074040973733214578342738572625956971005052398172213596798751992841512724116639637
我不是在寻找解决方案,而是以一种相当快的方式来做到这一点。我已经尝试使用pow
并插入不同的值,但这很慢并且永远无法获得解决方案。我怎样才能找到d
?
答案 0 :(得分:5)
没有已知的算法可以解决您的问题。它被称为discrete logarithm problem,一些密码系统依赖于它的复杂性(除非你知道n的分解,否则你无法快速找到它的解决方案)
答案 1 :(得分:2)
查看Is it possible to get RSA private key knowing public key and set of "original data=>encrypted data" entries?的第二个答案。已知的明文攻击并不比已知的密文更容易。
答案 2 :(得分:1)
唯一已知的离散对数解算器是围绕知道因子而建立的。如果您没有这些因素,则需要生成它们。
最合理的时间算法是Shor's algorithm。问题是你需要一台具有足够量子比特的量子计算机,并且没有人为你的样本数据构建一个足够大的量子计算机。它看起来像任何人做的还要好几年;目前人们仍然对如15和21这样的数字进行分解感到兴奋。
如果你想使用经典计算,那么最着名的算法就不会“合理地快”。我相信有人最近表明,2 ^ 1039-1的波恩结果应该可以在4个月内用现代PC重现。再过5年,也许它会长到一个月。
没有任何已知合理的快速算法,你不应该感到惊讶,因为如果有的话,大多数私钥加密都是可以破解的,因此毫无价值。如果有人给你你正在寻找的答案,这将是一个重大新闻。 (是否有“是P = NP?”的问题。)