ソリナス素数

提供: testwiki
ナビゲーションに移動 検索に移動

数学において、ソリナス素数(ソリナスそすう、Solinas prime)または一般化メルセンヌ素数(いっぱんかメルセンヌそすう、Generalized Mersenne prime)とは、素数f(2m)の形を持つものである。(f(x)は小さい整数係数を伴う低次の多項式とする[1][2]。)ソリナス素数は高速なモジュラー簡約(詳細は後述)に使えるため、暗号によく用いられる。

ソリナス素数はジェローム・ソリナスにちなんで名付けられた。

この素数は、以下の素数のカテゴリーの上位集合となっている。

モジュラー簡約

f(t)=tdcd1td1...c0をすべての係数が(整数)のd次方程式とし、p=f(2m)はソナリス素数とする。この条件で、最大2mdビットの数(n<p2)が与えられるとき、npで割ったあまりと合同でかつpと同じビット数となる数を求める操作について考える。

最初にn2m進数で表すと以下のようになる

n=j=02d1Aj2mj

次に、多項式f(t)によって、(整数)上に定義された線形帰還シフトレジスタd回繰り返すことによって、d×d行列であるX=(Xi,j)を導き出す。[0|0|...|0|1]というd個の整数レジスタから開始し、右に1ずつシフトして左に0を代入。各ステップで出力値に[c0,...,cd1]を加算する。ここで、Xi,jはi番目のステップにおけるj番目のレジスタの整数値となるので、Xの最初の行は(X0,j)=[c0,...,cd1]となることに着目し、式B=(Bi)を以下のように定義する。

(B0...Bd1)=(A0...Ad1)+(Ad...A2d1)X,

これらの式より、以下のような式が導出できる。

j=0d1Bj2mjj=02d1Aj2mjmodp.

したがって、Bnと合同なmdビットの整数だとわかる。

fを適切に調整することによって、このモジュラー簡約のアルゴリズムは加算・減算のみとなり元の式np(n/p)よりもはるかに効率的になる(除算がないため)。

参考文献

テンプレート:素数の分類