説明

素数生成装置、プログラム及び方法

【課題】セーフプライム形の素数に限定されず、第1素数の多項式の形をもつ第2素数を高速に生成する。
【解決手段】第1素数pと、この第1素数pから算出可能で定数項(a0)が0ではない多項式f(p)(=an・pn + an-1・pn-1 + … + a2・p2 + a1・p + a0)の形をもつ第2素数f(p)とを生成する構成により、セーフプライム形の素数(2p+1)に限定されず、第1素数pの多項式の形をもつ第2素数f(p)を生成できる。これに加え、高速に計算可能な試行割算を先に行った後に、フェルマーの小定理を含む本格的な素数判定法を行う構成により、時間のかかる本格的な素数判定法の実行割合を減少できるので、前述した第1及び第2素数p,f(p)を高速に生成できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、素数を生成するための素数生成装置、プログラム及び方法に係り、例えば、セーフプライム形の素数に限定されず、第1素数の多項式の形をもつ第2素数を高速に生成し得る素数生成装置、プログラム及び方法に関する。
【背景技術】
【0002】
暗号分野においては、pを素数としたとき、2p+1という形の素数が、暗号の安全性を高めるために用いられている。この形の素数はセーフプライム(safe prime)と呼ばれる。セーフプライムは、ディフィー−へルマン(Diffie-Hellman)鍵交換を始めとして、多くの暗号通信プロトコルで用いられている。
【0003】
このセーフプライムを生成するための効率的な方法は、今のところ知られていない。一般的な素数生成方法においては、素数候補の乱数pを素数判定し、素数であれば、さらにセーフプライム候補の数2p+1を素数判定することにより、セーフプライム形の素数2p+1を生成している。
【0004】
図8は一般的な素数生成方法を説明するためのフローチャートである。この素数生成方法は、素数候補pの簡易素数判定(ST1〜ST4)、素数候補pの本格的素数判定(ST5)、セーフプライム候補2p+1の簡易素数判定(ST6〜ST9)、セーフプライム候補2p+1の本格的素数判定(ST10)から構成されている。具体的には、この素数判定方法は、例えばコンピュータからなる素数生成装置に実行される。
【0005】
始めに、素数生成装置は、除数識別情報iをi=0として初期化する(ST1)。続いて、素数生成装置は、素数候補としての乱数pを生成する(ST2)。なお、ステップST1,ST2の順序は逆でもよい。
【0006】
次に、素数生成装置は、素数候補pに対し、予め保持しておいた除数テーブルを用い、除数識別情報i=1から順次、試行割算を行う(ST3)。
【0007】
ここで、除数識別情報iは、除数テーブルから除数primes[i]を読み出すために用いられる。なお、除数テーブルは、除数識別情報i及び除数primes[i]が互いに関連付けて記述されている。除数識別情報iは、1,2,…,PRIMES_NUM−1,PRIMES_NUM、のように、自然数としている。
【0008】
素数生成装置は、素数候補pを除数primes[i]で割り算した剰余が0のとき(p÷primes[i]=0)、又は除数識別情報iが最大値PRIMES_NUMの場合の割り算を終えたとき(i=PRIMES_NUM)、ステップST3の試行割算を終了する。
【0009】
素数生成装置は、ステップST3の試行割算を終了したときの除数識別情報iが最大値PRIMES_NUMであるか否かを判定し(ST4)、否の場合(試行割算に失敗した場合)にはステップST1に戻る。
【0010】
一方、ステップST4の判定の結果、除数識別情報iが最大値PRIMES_NUMの場合(試行割算に成功した場合)、素数生成装置は、素数候補pに対し、フェルマー(Fermat)法、ミラー−ラビン(Miller-Rabin)法などの、本格的な素数判定を行う(ST5)。
【0011】
ステップST5の素数判定の結果、素数候補pが素数ではない場合(NGの場合)には、ステップST1に戻る。
【0012】
ステップST5の素数判定の結果、素数候補pが素数である場合(OKの場合)には、素数生成装置は、除数識別情報iをi=0として初期化する(ST6)。続いて、素数生成装置は、セーフプライム候補としての数2p+1を計算する(ST7)。なお、ステップST6,ST7の順序は逆でもよい。
【0013】
次に、素数生成装置は、セーフプライム候補2p+1に対し、前述同様に、除数テーブルを用いて試行割算を行う(ST8)。素数生成装置は、セーフプライム候補2p+1を除数primes[i]で割り算した剰余が0のとき((2p+1)÷primes[i]=0)、又は除数識別情報iが最大値PRIMES_NUMの場合の割り算を終えたとき(i=PRIMES_NUM)、ステップST8の試行割算を終了する。
【0014】
素数生成装置は、ステップST8の試行割算を終了したときの除数識別情報iが最大値PRIMES_NUMであるか否かを判定し(ST9)、否の場合(試行割算に失敗した場合)にはステップST1に戻る。
【0015】
一方、ステップST9の判定の結果、除数識別情報iが最大値PRIMES_NUMの場合(試行割算に成功した場合)、素数生成装置は、セーフプライム候補2p+1に対し、フェルマー(Fermat)法、ミラー−ラビン(Miller-Rabin)法などの、本格的な素数判定を行う(ST10)。
【0016】
ステップST10の素数判定の結果、セーフプライム候補2p+1が素数ではない場合(NGの場合)には、ステップST1へ戻る。
【0017】
ステップST10の素数判定の結果、セーフプライム候補2p+1が素数である場合(OKの場合)には、素数生成装置は、セーフプライム形の素数2p+1と、素数pとを出力する。
【0018】
なお、以上のような一般的な素数生成方法に限らず、セーフプライムを生成する方法には種々の方式がある(例えば非特許文献1,2参照)。ここで、非特許文献1には、セーフプライムqを生成するために、(q−1)/2を乱数として生成し、この乱数を素数判定し、素数判定に合格したら、qを素数判定する方式が開示されている。
【0019】
非特許文献2には、セーフプライムqを生成するために、(q−1)/2を乱数として生成し、ある定数以下の小さな奇素数rに対して、(q−1)/2≡(r−1)/2 (mod r)なる乱数(q−1)/2を除去し、残った乱数(q−1)/2を素数判定し、素数判定に合格したら、qを素数判定する方式が開示されている。
【非特許文献1】“Handbook of applied cryptography p.164” http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf
【非特許文献2】“Safe Prime Generation with a Combined Sieve” http://eprint.iacr.org/2003/186.pdf
【発明の開示】
【発明が解決しようとする課題】
【0020】
しかしながら、以上のような素数生成方法では、次のような問題がある。
例えば、図8に示した方法では、乱数pの値が大きくなるにつれ、セーフプライム形の素数2p+1を生成するための時間が、非常に増大するという問題がある。このため、素数生成装置を備えた情報機器や、このような情報機器を複数台備えた情報システム(以下、情報機器等という)においては、素数生成装置の計算負荷を増大させ、システム稼働率を低下させる問題がある。
【0021】
このような問題を解決する観点から、情報機器等では、セーフプライムを予め生成して保持する方式や、セーフプライムではない、一般的な素数を用いた暗号通信を行う方式が知られている。しかしながら、これらの方式は、情報機器等のセキュリティレベルを低下させる場合があるので、上記問題を実際に解決したとは言えない。なお、非特許文献1に記載の方法は、前述した図8に示した方法と同様の問題があると考えられる。
【0022】
一方、非特許文献2に記載の方法は、予め奇素数rを法として、(r−1)/2に合同な乱数をセーフプライム候補から除去した後に、残ったセーフプライム候補を素数判定するので、素数生成装置の計算負荷を減少できる。
【0023】
補足すると、素数生成装置の計算負荷は、試行割算よりも本格的素数判定の方がはるかに大きい。そこで、非特許文献2に記載の方法は、本格的素数判定の前に簡単な合成数を除去するので、素数生成装置の計算負荷を減少できる。この非特許文献2に記載の方法によれば、上記問題を解決することができる。
【0024】
但し、非特許文献2に記載の方法は、特に問題は無いものの、本発明者の検討によれば、セーフプライム形の素数2p+1に限定されている不都合があると考えられる。
【0025】
本発明は上記実情を考慮してなされたもので、セーフプライム形の素数に限定されず、第1素数の多項式の形をもつ第2素数を高速に生成し得る素数生成装置、プログラム及び方法を提供することを目的とする。
【課題を解決するための手段】
【0026】
第1の発明は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置であって、予め除数識別情報毎に除数が記憶された除数記憶手段と、前記第1素数の候補pとして乱数を生成する乱数生成手段と、前記第1素数の候補pに基づいて、前記第2素数の候補f(p)を算出する第2素数候補算出手段と、前記各素数の候補p,f(p)に対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する試行割算実行手段と、前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記各素数の候補p,f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段とを備えた素数生成装置である。
【0027】
第2の発明は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置であって、予め除数識別情報毎に除数が記憶されており、試行割算結果の剰余が前記除数識別情報に関連付けて記憶される除数記憶手段と、前記第1素数の候補pとして乱数を生成する乱数生成手段と、前記第1素数の候補pに対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する第1割算実行手段と、前記第1割算実行手段による試行割算の結果が剰余kを持つとき、当該剰余kを前記除数記憶手段に書き込む剰余書込手段と、前記剰余書込手段により書き込まれた剰余kに基づいて、前記多項式f(k)を計算する多項式計算手段と、前記多項式f(k)に対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する第2割算実行手段と、前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記第1素数の候補p及び前記第2素数の候補f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段とを備えた素数生成装置である。
【0028】
(作用)
第1の発明によれば、第1素数pと、この第1素数pから算出可能で定数項が0ではない多項式の形をもつ第2素数f(p)とを生成する構成により、セーフプライム形の素数に限定されず、第1素数の多項式の形をもつ第2素数を生成することができる。
【0029】
これに加え、第1の発明によれば、高速に計算可能な試行割算を先に行った後に、本格的な素数判定法(フェルマーの小定理を含む素数判定法)を行う構成により、時間のかかる本格的な素数判定法の実行割合を減少できるので、前述した第1及び第2素数p,f(p)を高速に生成することができる。
【0030】
第2の発明によれば、第1の発明の作用効果に加え、第2素数の候補f(p)に関する試行割算を、剰余kの多項式f(k)に関する試行割算により行う構成により、従来とは異なり、試行割算をワードサイズで実行できるので、第1及び第2素数p,f(p)をより一層高速に生成することができる。
【0031】
なお、第1及び第2の各発明は「装置」として表現したが、これに限らず、「プログラム」、「方法」又は「コンピュータ読み取り可能な記憶媒体」として表現してもよい。
【発明の効果】
【0032】
以上説明したように本発明によれば、セーフプライム形の素数に限定されず、第1素数の多項式の形をもつ第2素数を高速に生成できる。
【発明を実施するための最良の形態】
【0033】
以下、本発明の各実施形態を図面を用いて説明する。なお、以下の説明中、乱数、素数、素数候補、定数項、整数係数、多項式、除数、剰余などの語を用いるが、これらは、乱数データ、素数データ、素数候補データ、定数項データ、整数係数データ、多項式データ、除数データ、剰余データ等のように、「データ」の語を追記して読み替えてもよい。
【0034】
(第1の実施形態)
図1は本発明の第1の実施形態に係る素数生成装置の構成を示す模式図である。この素数生成装置10は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、Zは整数Xを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成するものである。ここで、第2素数f(p)は、例えば多項式の次数をnとし、次数毎の整数係数をan,an-1,…,a2,a1とし、定数項をa0としたとき、次式に示すように計算される。
【0035】
f(p)=an・pn + an-1・pn-1 + … + a2・p2 + a1・p + a0
このような第2素数f(p)は、次数n=1、整数係数a1=2、定数項a0=1の場合、セーフプライム2p+1となる。但し、第2素数f(p)は、セーフプライム2p+1に限定されない。
【0036】
この素数生成装置10は、具体的には携帯電話又はスマートカードなどの演算機の素数生成部として構成され、ハードウェア及びソフトウェアの組合せにより素数生成処理を行うものである。
【0037】
例えば素数生成装置10においては、プログラム記憶部11、テーブル記憶部12、RAM13、入出力I/F14、CPU(中央処理装置)15、乱数生成部16及び演算部17が互いにバスを介して接続されている。
【0038】
プログラム記憶部11は、CPU15に実行されるプログラムが記憶されるハードウェア資源としてのメモリであり、例えばROM(リードオンリーメモリ)が使用可能となっている。ここで、プログラムは、例えば図3又は図4に示す素数生成機能を実現させるためのものである。この素数生成機能としては、例えば以下の機能(f11-1)〜(f11-5)を含んでいる。
【0039】
(f11-1) 除数識別情報毎に除数が記憶された除数テーブルTをテーブル記憶部12に予め記憶させる機能。
(f11-2) 乱数生成部16の制御により、第1素数の候補pとして乱数を生成する機能。
(f11-3) 演算部17の制御により、第1素数の候補pに基づいて、第2素数の候補f(p)を算出する第2素数候補算出機能。
(f11-4) 演算部17の制御により、各素数の候補p,f(p)に対し、除数テーブルT内の除数識別情報毎の除数により個別に試行割算を実行する試行割算実行機能。
(f11-5) 演算部17の制御により、除数テーブルT内の全ての除数による全ての試行割算の結果が剰余を持つとき、各素数の候補p,f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定機能。
【0040】
係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部11にインストールされてもよい。
【0041】
テーブル記憶部12は、CPU15から読出/書込可能なハードウェア資源としてのRAM(ランダムアクセスメモリ)である。テーブル記憶部12は、予め除数テーブルTが記憶されており、さらにCPU15により、演算に必要なデータや演算途中のデータ等が記憶される。除数テーブルTは、図2に示すように、予め除数識別情報i毎に除数primes[i]が記述されたものである。
【0042】
除数識別情報iは、前述同様に、1,2,…,PRIMES_NUM−1,PRIMES_NUM、のように、自然数としている。なお、ここでは、除数識別情報iの最大値PRIMES_NUMを6542としている。
【0043】
除数primes[i]は、小さい順に数えてi番目の素数である。このような除数の数列に関する説明は、文献(D. E. Knuth 著(中川圭介訳),“KNUTH 第4分冊 準数値算法/算術演算”,サイエンス社,p.205, 1986.)に記載されている。なお、ここでは、除数テーブルTにおける除数の最大値を“65521”としている。また、除数テーブルTは、予めプログラム記憶部11内のプログラムに含まれていてもよい。
【0044】
不揮発性メモリ13は、例えば生成された素数p,f(p)などがCPU15から読出/書込可能に記憶されるハードウェア資源としてのメモリであり、例えば、EEPROM(Electric Erasable Programmable ROM)が使用可能となっている。但し、不揮発性メモリ13は、必須ではなく省略してもよい。
【0045】
入出力I/F14は、素数生成装置10と、この素数生成装置10を保持する情報機器との間のインターフェイス機器であり、例えば、素数生成指令を入力し、得られた素数p,f(p)を出力する際に用いられる。
【0046】
ここでいう情報機器としては、何らかの暗号処理を実行するものであれば任意のデバイスが適用可能である。何らかの暗号処理とは、例えば公開鍵暗号方式における暗号処理、復号処理、署名生成処理又は署名検証処理などである。情報機器の例としては、スマートカード又は携帯電話等の如き、ユーザ毎に携帯可能なデバイスが挙げられる。情報機器の用途は任意であり、例えば、非匿名又は匿名のユーザ認証などが挙げられる。
【0047】
CPU15は、プログラム記憶部11内のプログラムを実行することにより、例えば図3に示す手順で各部12〜17を制御し、素数生成処理を実行する機能を有するものである。
【0048】
乱数生成部16は、CPU15により制御されて乱数pを生成し、この乱数pをバスに送出するハードウェア資源としての乱数生成回路である。ここで、乱数生成部16により生成される乱数pは、真の乱数又は疑似乱数のいずれでもよい。
【0049】
なお、乱数生成部16は、独立のハードウェア資源で実現する場合に限らず、CPU15とプログラムで実現してもよい。また、乱数生成部16を省略し、乱数pを外部から入力させる構成としてもよい。
【0050】
演算部17は、CPU15により制御され、例えばCPU15から入力されたデータに基づいて演算を実行し、演算結果をバスに出力するハードウェア資源としての演算回路である。なお、演算部17は、処理速度を向上させる観点から独立のハードウェア回路として設けられており、例えばコプロセッサ等の如き、多倍長の演算が可能なものであるが、ハードウェア回路に限らず、CPU15とプログラムで実現してもよい。
【0051】
なお、このような素数生成装置10は、ハードウェア及びソフトウェアの組合せに限らず、ハードウェア又はソフトウェアのいずれか一方により構成されてもよい。
【0052】
次に、以上のように構成された素数生成装置による素数生成方法を図3及び図4のフローチャートを用いて述べる。始めに、図3により従来との大きな違いを簡単に述べ、しかる後、図4により素数生成方法を説明する。なお、図4による説明は、多項式f(p)を2p+1の形に規定すると、図3による説明に読み替えることができる。
【0053】
従来との違いは、図3に示すように、第1素数候補pの本格的素数判定ステップST5を、第1及び第2素数候補p,f(p)の簡易素数判定ステップ(ST1〜ST4及びST6〜ST9)の後に実行することである。これに加え、図4に示すように、従来の第2素数2p+1に代えて第2素数f(p)を生成するため、第2素数f(p)に関連するステップST7’,ST8’,ST10’にはダッシュ記号’を付している。以下、図4を参照しながら順次説明する。
【0054】
始めに、図示しない情報機器では、何らかの暗号処理中に、第1素数p及び第2素数f(p)を生成する必要が生じたとする。ここで、情報機器においては、保持する素数生成装置10に入出力I/F14を介して素数生成指令を入力する。
【0055】
素数生成装置10においては、素数生成指令を受けると、CPU15が除数識別情報iをi=0として初期化する(ST1)。
【0056】
続いて、素数生成装置10においては、CPU15が乱数生成部16を制御し、乱数生成部16が、第1素数候補としての乱数pを生成する(ST2)。なお、ステップST1,ST2の順序は逆でもよい。
【0057】
次に、素数生成装置10においては、第1素数候補pに対し、予め保持しておいた除数テーブルTを用い、除数識別情報i=1から順次、試行割算を行う(ST3)。
【0058】
具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数識別情報i毎の除数primes[i]とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数primes[i]で割り算し、得られた剰余をバスに出力する。
【0059】
CPU15は、第1素数候補pを除数primes[i]で割り算した剰余が0のとき(p÷primes[i]=0)、又は除数識別情報iが最大値PRIMES_NUMの場合の割り算を終えたとき(i=PRIMES_NUM)、ステップST3の試行割算を終了する。
【0060】
CPU15は、ステップST3の試行割算を終了したときの除数識別情報iが最大値PRIMES_NUMであるか否かを判定し(ST4)、否の場合(試行割算に失敗した場合)にはステップST1に戻る。
【0061】
一方、ステップST4の判定の結果、除数識別情報iが最大値PRIMES_NUMの場合(試行割算に成功した場合)には、CPU15は、除数識別情報iをi=0として初期化する(ST6)。
【0062】
続いて、素数生成装置10においては、CPU15が演算部17を制御し、演算部17が第2素数候補としての多項式f(p)を計算する(ST7’)。具体的には、CPU15は、第1素数候補pと、所定の多項式f(X)の形とに基づいて、次数n,n-1,…,2,1及び次数毎の整数係数an,an-1,…,a2,a1を順次、バスを介して演算部17に入力する。演算部17は、第1素数候補pと、多項式f(X)の次数及び次数毎の整数係数とに基づいて、第1素数候補pに対する次数のベキ乗を計算し、得られたベキ乗結果と整数係数とを乗算し、得られた多項式の変数項をバスを介してRAM(テーブル記憶部12)に書き込む。また、CPU15は、n次から1次までの変数項an・pn,an-1・pn-1,…,a2・p2,a1・pと、定数項a0とをバスを介して演算部17に入力する。演算部17は、これら変数項と、定数項とを加算し、得られた多項式f(p)をバスを介してRAM(テーブル記憶部12)に書き込む。なお、ステップST6,ST7’の順序は逆でもよい。
【0063】
次に、素数生成装置10においては、この多項式f(p)からなる第2素数候補f(p)に対し、前述同様に、除数テーブルTを用いて試行割算を行う(ST8’)。
【0064】
素数生成装置10のCPU15は、第2素数候補f(p)を除数primes[i]で割り算した剰余が0のとき(f(p)÷primes[i]=0)、又は除数識別情報iが最大値PRIMES_NUMの場合の割り算を終えたとき(i=PRIMES_NUM)、ステップST8’の試行割算を終了する。
【0065】
CPU15は、ステップST8’の試行割算を終了したときの除数識別情報iが最大値PRIMES_NUMであるか否かを判定し(ST9)、否の場合(試行割算に失敗した場合)にはステップST1に戻る。
【0066】
一方、ステップST9の判定の結果、除数識別情報iが最大値PRIMES_NUMの場合(試行割算に成功した場合)、CPU15は、p,f(p)の簡易素数判定(ST1〜ST4,ST6〜ST9)を終了する。換言すると、CPU15は、除数テーブルT内の全ての除数による全ての試行割算の結果が剰余を持つとき、p,f(p)の簡易素数判定(ST1〜ST4,ST6〜ST9)を終了する。
【0067】
次に、素数生成装置10は、第1素数候補pに対し、フェルマー法などのように、フェルマーの小定理を含む本格的な素数判定法を実行する(ST5)。具体的には、CPU15が所定の素数判定法のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する。
【0068】
ここで、所定の素数判定法としては、高速な判定の観点から、フェルマー(Fermat)の小定理を利用した素数判定法を改良して、あるところまで調べれば、素数候補が素数であることを確率的又は確定的に判定できるようにしたものを用いている。このような素数判定法のうち、確率的な素数判定法の例としては、フェルマー法、ソロベイ(Solovay)ーストラッセン(Strassen)法、ラビン法などが挙げられる。確定的な素数判定法の例としては、ミラー法、アドルマン(Adleman)−ルメリ(Rumely)法、コーエン(Cohen)−レンストラ(Lenstra)法などが挙げられる。ここで述べた素数判定法に関する説明は、文献(池野信一、小山謙二共著、“現代暗号理論”、(社)電子情報通信学会、コロナ社、p240−241、1986)に記載されている。
【0069】
さてステップST5の素数判定の結果、第1素数候補pが素数ではない場合(NGの場合)には、素数生成装置10はステップST1に戻る。
【0070】
ステップST5の素数判定の結果、第1素数候補pが素数である場合(OKの場合)には、素数生成装置10は、第2素数候補f(p)に対し、前述同様に、フェルマー法又はミラー−ラビン法などの、本格的な素数判定を行う(ST10’)。
【0071】
ステップST10’の素数判定の結果、第2素数候補f(p)が素数ではない場合(NGの場合)には、素数生成装置10はステップST1へ戻る。
【0072】
ステップST10’の素数判定の結果、第2素数候補f(p)が素数である場合(OKの場合)には、素数生成装置10は、第2素数f(p)と、第1素数pとを入出力I/F14から出力する。
【0073】
上述したように本実施形態によれば、第1素数pと、この第1素数pから算出可能で定数項(a0)が0ではない多項式f(p)(=an・pn + an-1・pn-1 + … + a2・p2 + a1・p + a0)の形をもつ第2素数f(p)とを生成する構成により、セーフプライム形の素数(2p+1)に限定されず、第1素数pの多項式の形をもつ第2素数f(p)を生成することができる。
【0074】
これに加え、本実施形態によれば、高速に計算可能な試行割算を先に行った後に、本格的な素数判定法(フェルマーの小定理を含む素数判定法)を行う構成により、時間のかかる本格的な素数判定法の実行割合を減少できるので、前述した第1及び第2素数p,f(p)を高速に生成することができる。
【0075】
(第2の実施形態)
次に、本発明の第2の実施形態について前述した図1を参照しながら説明する。すなわち、本実施形態は、第1の実施形態の変形例であり、試行割算のサイズを低減して素数生成の高速化を図る観点から、第2素数の候補f(p)に関する試行割算を、剰余kの多項式f(k)に関する試行割算により行うものである。
【0076】
これに伴い、除数テーブルTは、図5に示すように、予め除数識別情報i毎に除数primes[i]が記憶されており、試行割算結果の剰余k[i]が除数識別情報iに関連付けて記憶されるものとなっている。
【0077】
また、プログラム記憶部11内のプログラムとしては、以下の機能(f11-1’)〜(f11-5)を含むものとなっている。
(f11-1’) 予め除数識別情報毎に除数が記憶されており、試行割算結果の剰余が除数識別情報に関連付けて記憶される除数テーブルTをテーブル記憶部12に書込む機能。
(f11-2) 乱数生成部16の制御により、第1素数の候補pとして乱数を生成する機能。
(f11-6) 演算部17の制御により、第1素数の候補pに対し、除数テーブルT内の除数識別情報毎の除数により個別に試行割算を実行する第1割算実行機能。
(f11-7) 演算部17の制御により、第1割算実行機能による試行割算の結果が剰余kを持つとき、当該剰余kを除数テーブルTに書き込む剰余書込機能。
(f11-8) 演算部17の制御により、剰余書込機能により書き込まれた剰余kに基づいて、多項式f(k)を計算する多項式計算機能。
(f11-9) 演算部17の制御により、多項式f(k)に対し、除数テーブルT内の除数識別情報毎の除数により個別に試行割算を実行する第2割算実行機能。
(f11-5) 演算部17の制御により、除数テーブルT内の全ての除数による全ての試行割算の結果が剰余を持つとき、第1素数の候補p及び第2素数の候補f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定機能。
【0078】
次に、以上のように構成された素数生成装置による素数生成方法を図6及び図7のフローチャートを用いて述べる。始めに、図6により従来との大きな違いを簡単に述べ、しかる後、図7により素数生成方法を説明する。なお、図7による説明は、前述同様に多項式f(p)を2p+1の形に規定すると、図6による説明に読み替えることができる。
【0079】
従来との違いは、図6に示すように、第1素数候補pの本格的素数判定ステップST5を、第2素数候補f(p)の本格的素数判定ステップST10の直前に実行することと、多倍長精度(素数候補pの2倍)の簡易素数判定ステップ(ST1〜ST4及びST6〜ST9)に代えて、ワードサイズ(剰余kの2倍、除数primes[i])の簡易素数判定ステップ(ST20)を実行することとである。これに加え、図7に示すように、従来の第2素数2p+1に代えて多項式f(p)又はf(k)を生成するため、多項式f(p),f(k)に関連するステップST10’,ST23’及びST24’にはダッシュ記号’を付している。以下、図7を参照しながら順次説明する。
【0080】
今、前述同様に、素数生成装置10においては、除数識別情報iをi=0として初期化し(ST1)、第1素数候補としての乱数pを生成したとする(ST2)。なお、前述同様に、ステップST1,ST2の順序は逆でもよい。
【0081】
次に、素数生成装置10においては、以下のステップST21〜ST25からなる試行割算を実行する(ST20’)。
【0082】
すなわち、素数生成装置10においては、第1素数候補pに対し、予め保持しておいた除数テーブルTを用い、除数識別情報i=1から順次、試行割算を行って剰余kを求める(ST21)。具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数識別情報i毎の除数primes[i]とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数primes[i]で割り算し、得られた剰余k(=p÷primes[i])をバスに出力する。
【0083】
CPU15は、この剰余kが零でない(k≠0)か否かを判定し(ST22)、否の場合(k=0の場合)、ステップST1に戻る。
【0084】
一方、ステップST22の判定の結果、剰余kが零でない場合(k≠0の場合)には、CPU15は、剰余kを対応する除数識別情報iに関連付けて除数テーブルTに書き込む。
【0085】
しかる後、素数生成装置10においては、CPU15が演算部17を制御し、演算部17が剰余kに基づいて多項式f(k)を計算する(ST23’)。具体的には、CPU15は、剰余kと、所定の多項式f(X)の形とに基づいて、次数n,n-1,…,2,1及び次数毎の整数係数an,an-1,…,a2,a1を順次、バスを介して演算部17に入力する。演算部17は、剰余kと、多項式f(X)の次数及び次数毎の整数係数とに基づいて、剰余kに対する次数のベキ乗を計算し、得られたベキ乗結果と整数係数とを乗算し、得られた多項式の変数項をバスを介してRAM(テーブル記憶部12)に書き込む。また、CPU15は、n次から1次までの変数項an・kn,an-1・kn-1,…,a2・k2,a1・kと、定数項a0とをバスを介して演算部17に入力する。演算部17は、これら変数項と、定数項とを加算し、得られた多項式f(k)をバスを介してRAM(テーブル記憶部12)に書き込む。
【0086】
次に、素数生成装置10においては、この多項式f(k)に対し、前述同様に、除数テーブルTを用いて試行割算を行う。なお、この多項式f(k)を試行割算して得られる剰余は、前述した多項式f(p)を試行割算して得られる剰余と同じ値になる。このため、本実施形態の試行割算の方が演算サイズを低減できる利点がある。
【0087】
試行割算の後、素数生成装置10のCPU15は、多項式f(k)を除数primes[i]で割り算した剰余が零でない(f(k)÷primes[i]≠0)か否かを判定する(ST24’)。
【0088】
ステップST24’の判定の結果、否の場合(f(k)÷primes[i]=0の場合)、ステップST1に戻る。
【0089】
一方、ステップST24’の判定の結果、零でない場合(f(k)÷primes[i]≠0の場合)には、CPU15は、除数識別情報iを+1だけ更新し(ST25)、ステップST21に戻って処理を継続する。
【0090】
このステップST21〜ST25までの処理(ST20’)は、除数識別情報iが最大値PRIMES_NUMである場合のST24’の処理を終了するまで継続される。
【0091】
CPU15は、ステップST24’の処理を終了したときの除数識別情報iが最大値PRIMES_NUMである場合には、ステップST20’の処理を終了する。換言すると、CPU15は、除数テーブルT内の全ての除数による全ての試行割算の結果が剰余を持つとき、p,f(p)の簡易素数判定(ST20’)を終了する。
【0092】
続いて、素数生成装置10は、第1素数候補pに対し、フェルマー法などのように、フェルマーの小定理を含む本格的な素数判定法を実行する(ST5)。具体的には、CPU15が、前述した所定の素数判定法のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する。
【0093】
さてステップST5の素数判定の結果、第1素数候補pが素数ではない場合(NGの場合)には、素数生成装置10はステップST1に戻る。
【0094】
ステップST5の素数判定の結果、第1素数候補pが素数である場合(OKの場合)には、素数生成装置10は、第2素数候補f(p)を計算する。しかる後、素数生成装置10は、この第2素数候補f(p)に対し、前述同様に、フェルマー法又はミラー−ラビン法などの、本格的な素数判定法を実行する(ST10’)。
【0095】
ステップST10’の素数判定の結果、第2素数候補f(p)が素数ではない場合(NGの場合)には、素数生成装置10はステップST1へ戻る。
【0096】
ステップST10’の素数判定の結果、第2素数候補f(p)が素数である場合(OKの場合)には、素数生成装置10は、第2素数f(p)と、第1素数pとを入出力I/F14から出力する。
【0097】
上述したように本実施形態によれば、第1の実施形態の効果に加え、第2素数の候補f(p)に関する試行割算を、剰余kの多項式f(k)に関する試行割算により行う構成により、従来の多倍長精度の試行割算とは異なり、ワードサイズの試行割算を実行できるので、第1及び第2素数p,f(p)をより一層高速に生成することができる。
【0098】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0099】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0100】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0101】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0102】
また、記憶媒体は1つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0103】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0104】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0105】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【0106】
【図1】本発明の第1の実施形態に係る素数生成装置の構成を示す模式図である。
【図2】同実施形態における除数テーブルの構成を説明するための模式図である。
【図3】同実施形態における素数生成方法を説明するためのフローチャートである。
【図4】同実施形態における素数生成方法を説明するためのフローチャートである。
【図5】本発明の第2の実施形態における除数テーブルの構成を説明するための模式図である。
【図6】同実施形態における素数生成方法を説明するためのフローチャートである。
【図7】同実施形態における素数生成方法を説明するためのフローチャートである。
【図8】一般的な素数生成方法を説明するためのフローチャートである。
【符号の説明】
【0107】
10…素数生成装置、11…プログラム記憶部、12…テーブル記憶部、13…不揮発性メモリ、14…入出力I/F、15…CPU、16…乱数生成部、17…演算部、T…除算テーブル。

【特許請求の範囲】
【請求項1】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置であって、
予め除数識別情報毎に除数が記憶された除数記憶手段と、
前記第1素数の候補pとして乱数を生成する乱数生成手段と、
前記第1素数の候補pに基づいて、前記第2素数の候補f(p)を算出する第2素数候補算出手段と、
前記各素数の候補p,f(p)に対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する試行割算実行手段と、
前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記各素数の候補p,f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段と、
を備えたことを特徴とする素数生成装置。
【請求項2】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置であって、
予め除数識別情報毎に除数が記憶されており、試行割算結果の剰余が前記除数識別情報に関連付けて記憶される除数記憶手段と、
前記第1素数の候補pとして乱数を生成する乱数生成手段と、
前記第1素数の候補pに対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する第1割算実行手段と、
前記第1割算実行手段による試行割算の結果が剰余kを持つとき、当該剰余kを前記除数記憶手段に書き込む剰余書込手段と、
前記剰余書込手段により書き込まれた剰余kに基づいて、前記多項式f(k)を計算する多項式計算手段と、
前記多項式f(k)に対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する第2割算実行手段と、
前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記第1素数の候補p及び前記第2素数の候補f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段と、
を備えたことを特徴とする素数生成装置。
【請求項3】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置のプログラムであって、
前記素数生成装置のコンピュータを、
予め除数識別情報毎に除数が記憶された除数記憶手段、
前記第1素数の候補pとして乱数を生成する乱数生成手段、
前記第1素数の候補pに基づいて、前記第2素数の候補f(p)を算出する第2素数候補算出手段、
前記各素数の候補p,f(p)に対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する試行割算実行手段、
前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記各素数の候補p,f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段、
として機能させるためのプログラム。
【請求項4】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置のプログラムであって、
前記素数生成装置のコンピュータを、
予め除数識別情報毎に除数が記憶されており、試行割算結果の剰余が前記除数識別情報に関連付けて記憶される除数記憶手段、
前記第1素数の候補pとして乱数を生成する乱数生成手段、
前記第1素数の候補pに対し、前記除数記憶手段内の除数識別情報毎の除数により個別に試行割算を実行する第1割算実行手段、
前記第1割算実行手段による試行割算の結果が剰余kを持つとき、当該剰余kを前記除数記憶手段に書き込む剰余書込手段、
前記剰余書込手段により書き込まれた剰余kに基づいて、前記多項式f(k)を計算する多項式計算手段、
前記多項式f(k)に対し、前記除数記憶手段内の除数により個別に試行割算を実行する第2割算実行手段、
前記除数記憶手段内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記第1素数の候補p及び前記第2素数の候補f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定手段、
として機能させるためのプログラム。
【請求項5】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置が実行する素数生成方法であって、
予め除数識別情報毎に除数をメモリに記憶する除数記憶工程と、
前記第1素数の候補pとして乱数を生成する乱数生成工程と、
前記第1素数の候補pに基づいて、前記第2素数の候補f(p)を算出する第2素数候補算出工程と、
前記各素数の候補p,f(p)に対し、前記メモリ内の除数識別情報毎の除数により個別に試行割算を実行する試行割算実行工程と、
前記メモリ内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記各素数の候補p,f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定工程と、
を備えたことを特徴とする素数生成方法。
【請求項6】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成する素数生成装置が実行する素数生成方法であって、
予め除数識別情報毎に除数をメモリに記憶する除数記憶工程と、
前記第1素数の候補pとして乱数を生成する乱数生成工程と、
前記第1素数の候補pに対し、前記メモリ内の除数識別情報毎の除数により個別に試行割算を実行する第1割算実行工程と、
前記第1割算実行工程による試行割算の結果が剰余kを持つとき、当該剰余kを前記除数識別情報に関連付けて前記メモリに書き込む剰余書込工程と、
前記メモリに書き込まれた剰余kに基づいて、前記多項式f(k)を計算する多項式計算工程と、
前記多項式f(k)に対し、前記メモリ内の除数識別情報毎の除数により個別に試行割算を実行する第2割算実行工程と、
前記メモリ内の全ての除数による全ての試行割算の結果が剰余を持つとき、前記第1素数の候補p及び前記第2素数の候補f(p)に対し、フェルマーの小定理を含む素数判定法を実行する素数判定工程と、
を備えたことを特徴とする素数生成方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2007−218997(P2007−218997A)
【公開日】平成19年8月30日(2007.8.30)
【国際特許分類】
【出願番号】特願2006−36779(P2006−36779)
【出願日】平成18年2月14日(2006.2.14)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】