2005年,作为公共研究一部分的有663个二进制数位之长的RSA-200已经被一种一般用途的方法所分解。
如果一个大的,有
n个
二进制数位长度的数是两个差不多大小相等的素数的乘积,现在还没有很好的
算法来以多项式时间复杂度分解它。
这就意味着没有已知算法可以在O(
n)(
k为常数)的时间内分解它。但是现在的算法也是比
Θ(e)快的。换句话说,现在我们已知最好的算法比指数数量级时间要快,比多项式数量级时间要慢。已知最好的渐近线运行时间是
普通数域筛选法(GNFS)。时间是:
对于平常的计算机,GNFS是我们已知最好的对付
n个二进制数位大素数的方法。不过,对于
量子计算机, 彼得·肖 在
1994年发现了一种可以用
多项式时间来解决这个问题的算法。如果大的量子计算机建立起来,这将对密码学有很重要的意义。这个算法在时间上只需要O(
n),空间只要O(
n)就可以了。 构造出这样一个算法只需要2
n量子位。
2001年,第一个7量子位的量子计算机第一个运行这个算法,它分解的数是15。
难度与复杂度
现在还不确切知道整数分解属于那个复杂性等级。
我们知道这个问题的
判定问题形式(“请问
N是否有一个比
M小的因子?”)是在NP与co-NP之中。因为不管是答案为是或不是,我们都可以用一个质因子以及该质因子的质数证明来验证这个答案。由 肖 的算法,我们得知这个问题在BQP中。大部份的人则怀疑这个问题不在P、
NP-Complete、以及co-NP-Complete这三个复杂性类别中。如果这个问题可以被证明为NP-Complete或co-NP-Complete,则我们便可推得NP=co-NP。这将会是个很震撼的结果,也因此大多数人猜想整数分解这个问题不在上述的复杂性类别中。也有许多人尝试去找出多项式时间的算法来解决这个问题,但是都尚未成功,因此这个问题也被多数人怀疑不在P中。
有趣的是,当判定问题为“
N是否为一合数?”则比要找出
N的因子这个问题要简单的许多。有文章[1]指出前者这个问题可以在多项式时间中解决(其中
n为
N的位数)。若允许微小的失误,更有许多的
随机化算法可以非常快速的测试出一个数是否为质数。测试一个数是否质数不难,这是RSA算法中非常重要的一环,因为它在一开始的时后需要找很大的质数。(参见
素性测试)。