Java 破解N位RSA模数
这与我的有关,我唯一的选择是使用RSA算法,它看起来相对较弱。假设我想用36位模(从0到34359738368到68719476735)编码一个35位数字(从0到34359738367) 我可以看到,我的n在34359738368到68719476735之间是一个随机ToClient(形式为p-1*q-1)。我随机选择一个d和e。我对一个数字进行编码,并将其显示在UI上 为了论证的目的,让我们假设一个用户最多可以看到1000个这样的输出。他能用一些算法,比如波拉算法或者类似的算法来破解我的d,e或者n,从而开始预测新的数字吗?如果是这样的话,会有多难?(只需知道1000组输入/输出) 例如(将6个输出作为输入/输出格式的示例)Java 破解N位RSA模数,java,security,encryption,cryptography,rsa,Java,Security,Encryption,Cryptography,Rsa,这与我的有关,我唯一的选择是使用RSA算法,它看起来相对较弱。假设我想用36位模(从0到34359738368到68719476735)编码一个35位数字(从0到34359738367) 我可以看到,我的n在34359738368到68719476735之间是一个随机ToClient(形式为p-1*q-1)。我随机选择一个d和e。我对一个数字进行编码,并将其显示在UI上 为了论证的目的,让我们假设一个用户最多可以看到1000个这样的输出。他能用一些算法,比如波拉算法或者类似的算法来破解我的d,e
我试图从db向用户提供一个连续的用户id。因为它是顺序的,我不想让一个用户通过做一些注册来猜测另一个用户的id。为了避免这种情况,我必须将其置乱为RSA易受选择密文攻击。也就是说,假设我们想要破解密文y,我们可以使用其中一个密文明文对来破解它 如何打破它: 选择x0和y0,其中x0和y0是已提供的明文密文对 y1=y0*y mod n y1是提供给用户的满足此标准的1000个密文中的另一个。 x1是y1的解密,也给出了,这意味着: x1=y1^d模n(这已经给了我们,我们已经知道x1) x1=(y0*y)^d模n x1=y0^d*y^d模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并不容易。RSA容易受到选定密文攻击的攻击。也就是说,假设我们想要破解密文y,我们可以使用其中一个密文明文对来破解它 如何打破它: 选择x0和y0,其中x0和y0是已提供的明文密文对 y1=y0*y mod n y1是提供给用户的满足此标准的1000个密文中的另一个。 x1是y1的解密,也给出了,这意味着: x1=y1^d模n(这已经给了我们,我们已经知道x1) x1=(y0*y)^d模n x1=y0^d*y^d模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。攻击者可以猜出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是二次剩余mod p,则密文必须是二次剩余mod p,反之亦然。因此,如果消息/密文对不满足此关系,他可以拒绝p的猜测。或者,攻击者可以计算消息和密文之间的离散对数。这为e mod(p-1)提供了一个更快的候选者 这将提供20-30位的安全级别,因此需要几秒钟才能中断。如果你将样本数量增加到20个,我可能会尝试一些基准测试 更新:因为你没有给我20个样本来进行实验,所以我必须自己生成它们。
m = 10001621865 c = 31116156015
m = 10001621866 c = 33031668326
m = 10001621867 c = 37351399313
m = 10001621868 c = 6071714212
m = 10001621869 c = 1188523761
m = 10001621870 c = 18341011998
m = 10001621871 c = 7620400191
m = 10001621872 c = 36106912203
m = 10001621873 c = 37615263725
m = 10001621874 c = 7795237418
m = 10001621875 c = 34774459868
m = 10001621876 c = 4555747045
m = 10001621877 c = 33123599635
m = 10001621878 c = 34836418207
m = 10001621879 c = 33962453633
m = 10001621880 c = 6258371439
m = 10001621881 c = 7500991556
m = 10001621882 c = 5071836635
m = 10001621883 c = 911495880
m = 10001621884 c = 39558568485