Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 破解N位RSA模数_Java_Security_Encryption_Cryptography_Rsa - Fatal编程技术网

Java 破解N位RSA模数

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

这与我的有关,我唯一的选择是使用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个输出作为输入/输出格式的示例)

  • 1000162186531116156015
  • 1000162186633031668326
  • 1000162186737351399313
  • 1000162186806071714212
  • 1000162186901188523761
  • 1000162187018341011998
  • 有人能告诉我我的n,d,e是什么吗?(N介于34359738368和68719476735之间)

    我只是想知道它有多容易破解,所以如果你能给我任何关于多长时间,多快,有多少输出,可以使用什么算法等的信息,那就太好了

    PS:用户没有看到像标准RSA算法那样的“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