为什么整数分解是一个非多项式时间?

时间:2012-09-28 09:47:20

标签: performance cryptography rsa public-key-encryption factorization

我只是计算机科学的初学者。我学到了一些关于跑步的知识,但我无法确定我的理解是对的。所以请帮助我。

因此,整数分解当前不是多项式时间问题,而是素数测试。假设要检查的数字是n。如果我们运行一个程序只是为了决定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字。我觉得这个程序是多项式时间,不是吗?

我错误的一种可能方式是分解程序应找到所有素数,而不是发现的第一个素数。也许这就是原因。

但是,在公钥加密中,找到大数的主要因素对于攻击加密至关重要。由于通常大量(公钥)只是两个素数的乘积,找到一个素数就意味着找到另一个素数。这应该是多项式时间。那为什么攻击很难或不可能?

3 个答案:

答案 0 :(得分:15)

复杂性的随意描述,如“多项式因式分解算法”,通常是指输入的 size 的复杂性,而不是输入的解释。因此,当人们说“没有已知的多项式因式分解算法”时,它们意味着没有已知的算法来分解 N 位自然数,这些自然数以时间多项式运行,相对于 N 。数字本身不是多项式,最多可以是2 ^ N

答案 1 :(得分:6)

分解的难度是那些美观的数学问题之一,这些问题很容易理解并且会立即带到人类知识的边缘。总结(今天)关于这个主题的知识:我们不知道为什么它很难,没有任何程度的证明,以及我们在多项式时间内运行的最佳方法(但也明显少于指数时间)。 primality testing甚至在P中的结果是最近的结果;请参阅链接的维基百科页面。

我所知道的最好的启发式解释是素数是随机分布的。其中一个更容易理解的结果是Dirichlet's theorem。这个定理说每个算术级数包含无限多个素数,换句话说,你可以认为质数在进化方面是密集的,这意味着你不能避免遇到它们。这是这类结果中最简单的一个大集合;在所有这些中,素数的出现方式非常类似于随机数。

因此,分解的困难类似于不可能反转一次性垫。在一次性垫中,有一点我们不知道XOR与另一个我们没有。我们得知关于知道XOR结果的单个位的零信息。将“bit”替换为“prime”并将其与XOR相乘,您就会遇到因子分解问题。就好像你将两个随机数相乘,你从产品中获得的信息非常少(而不是零信息)。

答案 2 :(得分:1)

  

如果我们运行程序只是为了决定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,那么存储数字。

即使忽略了对于更大数字的可分性测试需要更长的时间,如果你只需要将一个(二进制)数字添加到n,这种方法几乎需要两倍的时间。 (实际上,如果添加两位数,则需要两倍的时间)

我认为这是指数运行时的定义:使n长一点,算法需要两倍的时间。

但请注意,此观察仅适用于您提出的算法。整数分解是否是多项式仍然是未知的。密码学家肯定希望它不是,但也有其他算法不依赖于素数因子化很难(例如椭圆曲线加密),以防万一......