是否有可能获得RSA私钥知道公钥和"原始数据=>加密数据"条目集?

Riz*_*Riz 5 security rsa

我处理apllication,它允许插件访问不同的功能集,每个插件都提供"初始化字符串",用于设置对不同功能的访问级别.开发人员向我发送此字符串,并使用我的1024位RSA私钥对其进行加密,然后将编码数据发回.启动时,我的应用程序使用内置公钥解码编码数据(编码初始化字符串),如果"解码数据!=初始化字符串"则无法启动.

那么,是否可以使用"初始化字符串"=>"编码初始化字符串"(从其他插件中提取)的数据库来破解我的私钥,或者可以在合理的时间内强制它?

Tho*_*nin 6

当您说"使用RSA私钥加密"时,您实际上并没有对事物进行加密.这是一个历史性的混乱.你正在做的是一个数字签名,插件使用相应的公钥进行验证.令人困惑的是,在适当的光线下,RSA签名可被视为一种"反向加密",其中私钥首先起作用.但是,它在一些细节上有所不同(例如填充和散列函数的参与),这使得它在实现时完全不同.

如果您正在使用正确的 RSA数字签名方案(例如,PKCS#1,第8节"带附录的签名方案"中描述的方案之一),则通过正确实现的密钥生成生成足够大的RSA密钥(1024位或更多)算法,然后没有已知的,计算上可行的方法让攻击者利用您生成的签名来伪造新签名(更重要的是,破解RSA私钥).没有证据证明你的签名不能帮助攻击者,但是30年来对这个问题的公开研究还没有提出这样的漏洞.

但请注意,使用细节,特别是填充(初始部分,将待签名数据转换为RSA数学核心可以处理的大数字)已被证明是微妙的; 很多提议的填充方法都被成功攻击了.PKCS#1填充已经被审查了相当长的一段时间("v1.5"填充二十年)并且抵制了迄今为止所有这些尝试."ISO 9796"系列填充物的表现并不好,许多变体已被破坏.

如果您没有按照完善的标准(即PKCS#1)计算您的签名,那么您正在寻找麻烦.不要那样做.幸运的是,大多数RSA实现(在加密库和编程语言/环境中)遵循PKCS#1.


Jac*_*ack 5

这种密码分析攻击被称为已知的明文攻击,它应该很难应用于RSA1024.

或者至少,尝试使用已知的明文来破解RSA密钥将与没有它们的情况一样难以实现,与您的问题相关的唯一已知类型的攻击是时间攻击,但它需要很好地了解具体实现您的RSA,因为它通过测量解密所需的时间来工作.

事实上,RSA的安全性是由两个复杂的数学问题给出的,并且知道纯文本和相关的密文并没有给你很多帮助.

在任何情况下,已知的明文攻击通常需要执行大量的样本(如数百万或数十亿的DES),因此对于较弱的算法也不是那么容易.