我只是开始学习RSA如何工作以及整体密码学,我有一个问题。假设我只有RSA模数和公钥的公共指数:
n = AA18ABA43B50DEEF38598FAF87D2AB634E4571C130A9BCA7B878267414FAAB8B471BD8965F5C9FC3818485EAF529C26246F3055064A8DE19C8C338BE5496CBAEB059DC0B358143B44A35449EB264113121A455BD7FDE3FAC919E94B56FB9BB4F651CDB23EAD439D6CD523EB08191E75B35FD13A7419B3090F24787BD4F4E1967
e = 65537
我正在尝试按照本指南生成公钥和私钥:https://warrenguy.me/blog/regenerating-rsa-private-key-python
我的问题是,我怎样才能真正得到private key
和public key
?如果您将n
转换为整数形式,则会得到:
119445732379544598056145200053932732877863846799652384989588303737527328743970559883211146487286317168142202446955508902936035124709397221178664495721428029984726868375359168203283442617134197706515425366188396513684446494070223079865755643116690165578452542158755074958452695530623055205290232290667934914919
并且它与指南中指定的整数位大小不匹配。
编辑:
或者,有没有办法为文件生成签名?只给出n
和e
?这是我的主要目标,尽管我得出的结论是,我可能需要沿着这条线的私钥和公钥,这些密钥导致我询问主要问题。
非常感谢,
YATO
答案 0 :(得分:2)
在RSA中,公钥为(n, e)
,您已经拥有。从模数中导出私钥是RSA想要的困难。这被称为factoring problem。如果这是计算上易处理的问题,那么RSA将不是一个有用的密码系统。实际上,随着计算机变得更快并且分解算法得到改进(参见:GNFS),RSA密钥的建议位长度已经变得越来越长。如果1024曾经被认为是可接受的,那么2048是最低建议。
您不能在没有私钥的情况下签名,因为签名表明拥有私钥并且您使用公钥(您以某种方式向需要验证签名的各方分发) )确认签名是真实的。通常,这与X.509结合使用可提供一些身份绑定,但并不是必需的。