In computational number theory, the index calculus algorithm is a probabilisticalgorithm for computing discrete logarithms. Dedicated to the discrete logarithm in where is a prime, index calculus leads to a family of algorithms adapted to finite fields and to some families of elliptic curves. The algorithm collects relations among the discrete logarithms of small primes, computes them by a linear algebra procedure and finally expresses the desired discrete logarithm with respect to the discrete logarithms of small primes.
Roughly speaking, the discrete log problem asks us to find an x such that , where g, h, and the modulus n are given.
The algorithm (described in detail below) applies to the group where q is prime. It requires a factor base as input. This factor base is usually chosen to be the number −1 and the first r primes starting with 2. From the point of view of efficiency, we want this factor base to be small, but in order to solve the discrete log for a large group we require the factor base to be (relatively) large. In practical implementations of the algorithm, those conflicting objectives are compromised one way or another.
The algorithm is performed in three stages. The first two stages depend only on the generator g and prime modulus q, and find the discrete logarithms of a factor base of r small primes. The third stage finds the discrete log of the desired number h in terms of the discrete logs of the factor base.
The first stage consists of searching for a set of rlinearly independentrelations between the factor base and power of the generatorg. Each relation contributes one equation to a system of linear equations in r unknowns, namely the discrete logarithms of the r primes in the factor base. This stage is embarrassingly parallel and easy to divide among many computers.
The second stage solves the system of linear equations to compute the discrete logs of the factor base. A system of hundreds of thousands or millions of equations is a significant computation requiring large amounts of memory, and it is not embarrassingly parallel, so a supercomputer is typically used. This was considered a minor step compared to the others for smaller discrete log computations. However, larger discrete logarithm records[1][2] were made possible only by shifting the work away from the linear algebra and onto the sieve (i.e., increasing the number of equations while reducing the number of variables).
The third stage searches for a power s of the generator g which, when multiplied by the argument h, may be factored in terms of the factor base gsh = (−1)f0 2f1 3f2···prfr.
Finally, in an operation too simple to really be called a fourth stage, the results of the second and third stages can be rearranged by simple algebraic manipulation to work out the desired discrete logarithm x = f0logg(−1) + f1logg2 + f2logg3 + ··· + frloggpr − s.
The first and third stages are both embarrassingly parallel, and in fact the third stage does not depend on the results of the first two stages, so it may be done in parallel with them.
The choice of the factor base size r is critical, and the details are too intricate to explain here. The larger the factor base, the easier it is to find relations in stage 1, and the easier it is to complete stage 3, but the more relations you need before you can proceed to stage 2, and the more difficult stage 2 is. The relative availability of computers suitable for the different types of computation required for stages 1 and 2 is also important.
楕円曲線上の点群には素元の概念がないため、ここで提示したようなインデックス計算法をこれらの群で実行するための効率的な因子基底を見つけることが不可能です。したがって、このアルゴリズムは楕円曲線群で離散対数を効率的に解くことができません。ただし、特殊な種類の曲線(いわゆる超特異楕円曲線)については、一般的な方法よりも問題を高速に解くための専用アルゴリズムが存在します。これらの特殊な曲線の使用は容易に回避できますが、2009年に、特定の体については、これらの体上の一般楕円曲線上の点群における離散対数問題を一般的な方法よりも高速に解くことができることが証明されました。これらのアルゴリズムは、実際にはインデックス計算法の応用です。[ 3 ]
同様に、整数を効率的に目的のサブグループの要素に分解する既知のアルゴリズムはありません。そのため、ポラードのρやポラードのカンガルーとは異なり、離散対数解が存在するグループの位数の一部を効率的にターゲットにすることは不可能です。
入力:離散対数発生器、モジュラスそして議論要素ベース長さ出力: そのため。
因子基底の最適な選択を仮定すると、インデックス計算アルゴリズムの 期待実行時間(L記法を使用)は次のように表すことができます。。
アルゴリズムの基本アイデアは Western と Miller (1968) [ 4 ]によるもので、これは最終的には Kraitchik (1922) のアイデアに基づいています。[ 5 ] 最初の実用的な実装は、離散対数に基づくDiffie-Hellman暗号システムの 1976 年の導入に続きました。Merkle のスタンフォード大学の博士論文 (1979 年) は Pohlig (1977 年) と Hellman と Reyneri (1983 年) によって評価され、彼らは実装の改良も行いました。[ 6 ] [ 7 ] Adleman はアルゴリズムを最適化し、現在の形で発表しました。[ 8 ]
指数計算は、多くのアルゴリズムを生み出した。有限体ではと一部のプライム最先端のアルゴリズムは離散対数に対する数体篩法であり、、 いつに比べて大きい[ 9 ]関数フィールド篩、[ 9 ]およびJoux 、[ 10 ]のために、 いつに比べて小さいそして高次の数体篩、のためにいつ中辺です。楕円曲線のいくつかの族における離散対数は時間で解くことができますのためにしかし、一般的には指数関数的な増加が見られる。