有没有一个概念可以将预先计算的表用于素数分解?计算机是否有可能生成数百万个素数,将其存储,然后有效地确定因数?
素数的彩虹表概念
这不太可能。所涉及的素数很大,因此键空间很大。大小取决于您的密钥大小,但让我们选择 512 位素数作为下限示例。
素数计数函数让我们估计有多少素数低于给定数。难以精确计算,但近似估计定义为π(x) = x / ln(x)
,其中ln
是自然对数。因此,我们可以通过计算来计算一个n
比特数中低于最高值的预期素数的估计值π(2^n)
。如果我们想排除所有不完全是n
位的数字,我们计算π(2^n) - π(2^(n-1))
. 这在技术上不是必需的,但它为我们提供了一个很好的下限,即该密钥大小有多少大素数。
因为n = 512
详尽列表所需的素数是 1.885×10 151。如果我们可以将每个素数存储在一个 512 位的条目中,那就是 1.207×10 153字节,这比我们世界上的磁盘存储容量高出 132 个数量级。
所以不,不是真的可行。
彩虹表:每个“颜色”接受一个随机输入(最后一次迭代的输出哈希或原始哈希)并返回一个映射到您想要的任何模式的输出(例如,所有字母)。然后将其散列并反馈给输入。
因为我们还可以指定一个归约函数,它接受任何随机字符串并将其确定性地映射到我们想要的任何输出模式,这适用于密码。但是,没有可定义的函数来获取输入值并输出已知为素数的数字。
由于您已经测试过它而不知道是素数的每个数字都需要进行素数测试。因此,除非将数字存储为已知的素值,否则无需进行时间/内存折衷。
你在这里说的不可行。Crypto 不简单地计算大素数,您需要考虑两个素数的乘积。
您需要做的是计算数百万个素数并将它们输入到一个非常大的数组中。然后你需要复制那个数组,这样你就有了二维数组。然后,您需要将第一维中的每个条目与第二维中的每个条目相乘,并将两个素数和结果存储在第二个数组中。这第二个数组将是巨大的,我所说的巨大是指完全无法以任何容量存储,但它会保存你的答案。
当然不容易,但是...“有志者事竟成”如果您想要表格中的数字 2-> 512bit 中的所有素数,那么所有可能的产品那么是的,这将是不可行的大。但是让我们回过头来推测一下为什么有人可能想要它。假设某人有一个场景,他们使用一对相似的位长素数来生成一个大数字,其他人很难将其分解为一对素数(听起来很熟悉......?)并非所有可能的组合将需要素数,因为只会使用相似的位长。这大大减少了表的大小。无论如何要迂腐,这将是一个彩虹立方体不是表格,因为这需要几个维度。确定这些大素数的因子的能力当然是困难的,因为立方体的内存驻留大小(当保存在 RAM 中以进行有效分析时)对于廉价 PC 来说太大了,但是肯定有一些大型组织拥有巨大的多维结构这些比例(例如谷歌的搜索)。似乎非常不可能没有资源丰富的组织已经计算并使用了这样的素数立方体。分解素数对的难度是例如 RSA 的“标题”难度,但不要低估生成私钥的步骤所产生的额外难度,因为它具有模块化计算。