![]() |
1
1
攻击者可以猜测n和e mod(p-1)的系数p。每个猜测都可以通过获取一条消息m,计算m^e mod p,然后与c mod p进行比较来检查,其中c是对应的密文。由于p和e mod(p-1)可能各为20位,这意味着方案的安全性不大于40位。 但40位只是一个非常粗糙的上界。 攻击者可以做得更好。例如,他可以猜测一个因素p,然后计算消息和密文的雅可比符号。如果消息m是二次剩余模p,则密文必须是二次剩余模p,反之亦然。因此,如果消息/密文对不满足此关系,则可以拒绝对p的猜测,或者攻击者可以计算消息和密文之间的离散对数。这为E mod(P-1)提供了更快的候选。 这将提供20-30位的安全级别,因此需要几秒钟才能中断。如果您将样本数量扩展到20个,我可能会尝试一些基准测试。 更新: 因为你没有给我20个样本来进行实验,所以我必须自己生成它们。用以下样品
作为输入,上述算法查找因子201821和206153 在20毫秒内。如前所述,这不需要知道e,尽管您选择e=65537很容易猜测,也可以利用。 RSA的优点在于它基于分解大整数的难度。在这里,您可以消除这个困难,剩下的就是RSA的所有弱点(即数学关系)。基于RSA构建块密码是一个可怕的想法。我真的不明白你为什么不想像我之前提议的那样使用鲁比·拉科夫的建筑。 |
![]() |
2
4
RSA很容易受到选定的密文攻击。也就是说,我们要破坏密文y,我们可以使用密文明文对中的一个来破坏它。 如何打破它: 选择X0和Y0,其中X0和Y0是已提供的明文密文对。 y1=y0*y mod n y1是提供给用户的满足此标准的1000个密文中的另一个。 x1是y1的解密,也给出了,这意味着: x1=y1^d mod n(这已经给我们了,我们已经知道x1) x1=(y0*y)^d mod n x1=y0^d*y^d mod n_x0*x x1*x0^ - 1=x x是y的解密。 当然,这取决于Y0*Y mod n是否产生了我们已经拥有的另一个密文,而且由于我们只有1000对这样的密文可供使用,所以不太可能但不可能破解。你只需要非常小心地选择你的鞋子。 我还想补充一点,您所使用的n的大小允许因子分解启发式快速找到n的主因子分解。另外,RSA很容易受到定时攻击,但这很容易被阻止。 添加信息: 在不知道n、d或e的情况下,完全没有提供任何信息,这意味着猜测n、d或e的组合与猜测明文本身一样好。要找到n和e,至少有43359738367个要猜测的n的组合,以及所有e的组合。即使有1000对密文明文对,也不容易破解N和E。 |
![]() |
3
0
这是个可怕的主意,36位RSA?为什么不简单地使用块或流密码呢?这样你就得到了1:1的映射,并且以一种更安全的方式。 我建议的另一种解决方案是使用sha散列作为uid,并将数据库中每个用户的序列号存储为单独的列。 |
![]() |
YungOne · 如何将RSA私钥转换为pem 2 年前 |
![]() |
Teodor Vecerdi · 仅使用n e和c的RSA解密 6 年前 |
![]() |
Questioner · JAVA中的签名验证与签名长度 6 年前 |
![]() |
Aravind S · 如何在Java中验证公钥和私钥对 6 年前 |
|
psy21d · RSA私钥加密QT C++[关闭] 7 年前 |
![]() |
jakzr · R中的RSA密钥和PKI包存储在哪里? 7 年前 |