(57)【要約】【課題】ＲＳＡ暗号／署名において与えられた公開鍵ｅに対し、復号／署名生成の計算量ｖを最小とする秘密鍵ｄの生成を可能とする。【解決手段】素数ｐ，ｑ、（ｐ−１）と（ｑ−１）の最小公倍数λ（ｎ）とｅによりｄ＝ｅ−１  ｍｏｄλ（ｎ）を求め（Ｓ５）、ｄをｄ′としてｄ″＝ｄ′＋λ（ｎ）を求め（Ｓ６−３）、ｄ″のビットサイズ｜ｄ″｜−１よりｄを用いた場合の計算量ｖが大であれば、ｄ″を用いた場合の計算量ｖ′に対し、ｖ′＜ｖでなければｄ″をｄ′としてステップＳ６−３に戻り、ｖ′＜ｖであればｄ″をｄとし、ｖ′をｖとしてステップＳ６−８を介してステップＳ６−３に戻る（Ｓ６−９）、｜ｄ″｜−１＜ｖであればその時のｄを秘密鍵とする。【選択図】      図４
2004334126.tif 000002
【特許請求の範囲】
【請求項１】
予め固定された公開鍵ｅに対し、鍵生成装置によりＲＳＡ用鍵を生成する方法であって、
素数ｐ，ｑを生成し、記憶し、
上記素数ｐとｑを乗算し、乗算結果をｎとして記憶し、
上記素数ｐ及びｑに対し、ｐ−１とｑ−１の最小公倍数を演算し、その結果をλ（ｎ）として記憶し、
上記公開鍵ｅ及び上記最小公倍数λ（ｎ）を記憶部から取り出し、
複数の秘密鍵候補を生成し、
これら複数の秘密鍵候補について、その秘密鍵候補を秘密鍵とした時のＲＳＡ暗号の復号処理又はＲＳＡ署名の署名生成処理における計算量を求め、
これら複数の計算量中の最小のものを求め、その最小のものと対応する秘密鍵候補を秘密鍵として出力することを特徴とするＲＳＡ用鍵生成方法。
【請求項２】
上記複数の秘密鍵候補の生成は、
ｄｉ  ＝（ｅ−１  ｍｏｄλ（ｎ））＋ｉλ（ｎ）
ｉ＝０，１，２，…
であることを特徴とする請求項１記載のＲＳＡ用鍵生成方法。
【請求項３】
上記計算量を求める過程、および上記計算量の最小のものと対応する秘密鍵候補ｄｉ  を秘密鍵として出力する過程は、
λ（ｎ）を法とするｅの逆数を演算し、その結果を秘密鍵候補ｄとして記憶し、
そのｄをｄ′とし、これに上記λ（ｎ）を加算する補正演算を行いその結果をｄ″とし、
上記ｄを秘密鍵として用いればＲＳＡ暗号の復号又はＲＳＡ署名の署名生成時の計算量が最小となるか否かを、上記ｄ′とｄ″を用いて判定し、
その判定が最小でなければ、秘密鍵候補ｄをそのまま又はｄ″とし、かつ上記ｄ″をｄ′として上記補正演算以後の過程を繰り返し、判定最小であれば上記ｄ′を秘密鍵として出力する
ことを特徴とする請求項２記載のＲＳＡ用鍵生成方法。
【請求項４】
上記計算量が最小であるか否かの判定は、
上記ｄ，ｄ″を２進表現した際の各ビットサイズ｜ｄ｜，｜ｄ″｜とし、各ビット１の個数＃１  ｄ，＃１  ｄ″とし、
上記計算量としてｖ＝（｜ｄ｜−１）＋（＃ｄ−１）を演算し、
その計算量ｖが（｜ｄ″｜−１）より大であるかを先ず判定し、大でなければ、計算量が最小と判定して上記秘密鍵候補ｄを秘密鍵として出力する過程に移り、
計算量ｖが（｜ｄ″｜−１）より大であれば、（｜ｄ′｜−１）＋（＃１  ｄ′−１）＝ｖ′を演算し、
ｖがｖ′より大であるかを判定し、大であればｄをｄ″で更新し、かつｖ′をｖで更新し、大でなければｄはそのままとしｄ′をｄ″で更新して上記補正演算過程に移ることを特徴とする請求項３記載のＲＳＡ用鍵生成方法。
【請求項５】
公開鍵ｅが格納されたメモリと、
素数ｐ，ｑを生成する素数生成部と、
上記素数ｐ，ｑが入力され、ｐとｑを乗算してその結果ｎを出力する乗算部と、
上記素数ｐ，ｑが入力され、（ｐ−１）と（ｑ−１）の最小公倍数λ（ｎ）を演算してλ（ｎ）を出力する最小公倍数演算部と、
上記公開鍵ｅと上記最小公倍数λ（ｎ）が入力され、λ（ｎ）を法とするｅの逆数を演算してその結果ｄを秘密鍵候補として出力する逆数剰余演算部と、
上記最小公倍数λ（ｎ）と秘密鍵候補ｄが入力され、λ（ｎ）とｄｉ（ｉ＝０，１，２，…）を加算してｄ′として出力する補正部と、そのｄ′と上記秘密鍵候補ｄが入力され、これらより秘密鍵候補ｄｉ（ｉ＝０，１，２，…）を秘密鍵として用いた場合のＲＳＡ暗号の復号又はＲＳＡ署名の署名生成時の計算量ｖｉとｖｉ＋１を演算する計算量演算部と、その演算した計算量ｖｉが最小値であるか否かを判定する判定部を備え、その判定部の判定が最小値でないと判定すれば上記ｄ′を新たな秘密鍵候補として又は秘密鍵候補をそのままとし、ｄ′をｄとして上記補正部に入力して、最小となる判定結果を出力するまで上記補正部と計算量演算部と判定部を繰り返し動作させる補正判定部と、
上記最小となる判定結果が入力され、その時の秘密鍵候補を秘密鍵として出力する出力部と
を具備するＲＳＡ用鍵生成装置。
【請求項６】
請求項１乃至４のいずれかに記載のＲＳＡ用鍵生成方法の各過程をコンピュータに実行させるためのプログラム。
【請求項７】
請求項６に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は情報セキュリティ分野において、ＲＳＡ暗号／署名において、公開鍵ｅが予め決定された状態において、ＲＳＡ暗号における復号またはＲＳＡ署名における署名生成処理を、より高速に計算可能なようにする秘密鍵ｄを決定することが可能な、鍵生成の方法、それを実現する装置、そのプログラムおよびそのプログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
従来のＲＳＡ鍵生成の方法は一般的に広く知られており次のように行われる。まず、素数ｐ，ｑに対して、ｎ＝ｐ×ｑ，λ（ｎ）＝ＬＣＭ（ｐ−１，ｑ−１）を求めるＬＣＭ（Ａ，Ｂ）はＡとＢの最小公倍数を表わす。次にｅｄ≡１（ｍｏｄ  λ（ｎ））となるような公開鍵ｅと秘密鍵ｄを定める。実際には公開鍵ｅを、０以上λ（ｎ）未満の整数の集合であり、かつλ（ｎ）と互いに素な整数の集合から適当に選び、ｄ＝ｅ−１  ｍｏｄλ（ｎ）となるようなｄを計算して秘密鍵ｄを定める（例えば非特許文献１参照）。
【０００３】
【非特許文献１】
岡本、山本「現代暗号」ｐ．１１０、産業図書、１９９７年６月３０日発行。
【０００４】
【発明が解決しようとする課題】
従来技術の問題点は、高速化を狙った秘密鍵ｄの生成ができていなかった点である。つまり公開鍵ｅは先に自由に決定できるため、ＲＳＡ暗号の暗号化、ＲＳＡ署名の署名検証に対し高速化に適した値を選択することができる。実際、市販の署名装置ではｅ＝６５５３７というｂｉｎａｒｙ  ｍｅｔｈｏｄ（例えばＤｏｎａｌｄ  Ｅ．Ｋｎｕｔｈ著，“Ｔｈｅ  Ａｒｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍｍｉｎｇ−ＶＯＬＵＭＥ２  Ｓｅｍｉｎｕｍｅｒｉｃａｌ  Ａｌｇｏｒｉｔｈｍｓ”，Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ出版  ４６１頁参照）と呼ばれる演算方法に都合の良い値が固定で与えられていることが多く、ＲＳＡ暗号の暗号化、ＲＳＡ署名の署名検証を高速化することが考えられている。しかし前述の通り公開鍵ｅを固定すると秘密鍵ｄはｄ＝ｅ−１  ｍｏｄλ（ｎ）と一方的に決定されてしまい、ＲＳＡ暗号の復号又はＲＳＡ署名の署名生成については高速化を計る余地がなかった。
【０００５】
この発明の目的は公開鍵ｅはこれまで通り、暗号化又は署名検証処理には高速化に適した値を利用しつつ、その中で秘密鍵ｄとして、復号化又は署名生成処理のより高速化に適した値を出力するＲＳＡ暗号／署名用鍵生成方法、その装置、そのプログラム及びその記録媒体を提供することにある。
【０００６】
【課題を解決するための手段】
この発明によれば、（ｐ−１）と（ｑ−１）の最小公倍数λ（ｎ）と公開鍵ｅを用いて、
複数の秘密鍵候補を生成し、これら複数の秘密鍵候補について、その秘密鍵候補を秘密鍵とした時のＲＳＡ暗号の復号処理又はＲＳＡ署名の署名生成処理における計算量を求め、これら複数の計算量を最小化する秘密鍵候補を秘密鍵として出力する。
具体的には秘密鍵候補として、
ｄｉ  ＝（ｅ−１  ｍｏｄλ（ｎ））＋ｉλ（ｎ）
ｉ＝０，１，２，…
を演算し、ｄｉ  を秘密鍵とした場合のＲＳＡ暗号の復号処理又はＲＳＡ署名の署名生成処理における計算量が最小となるｄｉ  を秘密鍵ｄとして出力する。
つまり例えばＲＳＡ暗号における復号処理は、暗号文をＣとするとＣに対し秘密鍵ｄを用いてＣｄ  ｍｏｄｎを演算することになる。このべき乗演算Ｃｄ  を一般的なｂｉｎａｒｙ  ｍｅｔｈｏｄで計算すると、その計算量は２乗算が（｜ｄ｜−１）回、乗算が（＃１  ｄ−１）回、の合計（｜ｄ｜−１）＋（＃１  ｄ−１）回となる。ここで｜ｄ｜はｄのビットサイズ（最上位ビット＝１）、＃１  ｄはｄを２進表記した際のビット１の個数である。
【０００７】
この発明によれば公開鍵と最小公倍数λ（ｎ）を用いて以下の秘密鍵候補を算出する。
ｄ０  ＝ｅ−１  ｍｏｄλ（ｎ）
ｄ１  ＝ｄ０  ＋λ（ｎ）＝（ｅ−１  ｍｏｄλ（ｎ））＋λ（ｎ）
ｄ２  ＝ｄ１  ＋λ（ｎ）＝（ｅ−１  ｍｏｄλ（ｎ））＋２λ（ｎ）
：
ｄｉ  （ｉ＝０，１，２，…）を秘密鍵ｄとして利用した際のＲＳＡ暗号の復号／ＲＳＡ署名の署名生成時の計算量ｖｉ  ＝（｜ｄｉ  ｜−１）＋（＃１  ｄｉ  −１）において、ｍｉｎ｛ｖｉ  ｝を与える秘密鍵候補ｄｉ  を秘密鍵ｄとして出力する。ｅが固定で与えられた際に、最良のｄを探索して出力する点が従来技術と異なる。
【０００８】
【発明の実施の形態】
図１にこの発明装置の実施形態の機能構成例を、図２にその処理手順の例を示し、以下その機能構成を説明しながら、処理、つまり鍵生成方法を説明する。
素数生成部１０は素数ｐ及びｑを生成し、記憶部１１に記憶する（ステップＳ１）。これら生成された素数ｐとｑとが乗算部２０に入力して、互いに乗算し、その乗算結果をｎとして記憶部２１に記憶する（ステップＳ２）。また素数ｐとｑを最小公倍数演算部３０に入力して、（ｐ−１）と（ｑ−１）の最小公倍数λ（ｎ）を演算し、記憶部３１に記憶する（ステップＳ３）。ステップＳ２のｐとｑの乗算、ステップＳ３の最小公倍数λ（ｎ）の演算は何れを先に行ってもよい。
公開鍵ｅが予めこの鍵生成装置に入力され、記憶部４０に記憶されている。この公開鍵ｅと、最小公倍数λ（ｎ）が秘密鍵候補生成部５０に入力され、複数の秘密鍵候補が生成され（Ｓ５）、これら秘密鍵候補について、それらをそれぞれＲＳＡ暗号の復号処理又はＲＳＡ署名の署名生成処理に用いた場合の計算量を計算量演算部６０で演算し（Ｓ６）、最小値検出・出力部７０でこれら演算した計算量中の最小値を検出し、その最小値が得られた演算に用いた秘密鍵候補を求め、その秘密鍵候補を秘密鍵として出力する（Ｓ７）。
【０００９】
前記公開鍵ｅがＲＳＡ暗号の暗号処理又はＲＳＡ署名の署名検証処理を高速化するためのｂｉｎａｒｙ  ｍｅｔｈｏｄに都合がよい値である場合は、秘密鍵候補生成部５０において秘密鍵候補として、
ｄｉ＝（ｅ−１  ｍｏｄλ（ｎ））＋ｉλ（ｎ）
ｉ＝０，１，２，…
が生成され、計算量演算部６０では各秘密鍵候補ｄｉについて、ｄｉのビットサイズ｜ｄｉ｜と、ビット１の数＃１ｄｉを求め、計算量ｖｉとして
ｖｉ＝（｜ｄｉ｜−１）＋（＃１ｄｉ−１）
をそれぞれ演算する。
これら計算量ｖｉ（ｉ＝０，１，２，…）中の最小値のｖｉを検出し、その最小値のｖｉ  ，ｍｉｎの演算に用いた秘密鍵候補ｄｉ，ｍｉｎを秘密鍵ｄとして出力する。
【００１０】
計算量ｖｉの最小値の秘密鍵候補ｄｉ，ｍｉｎを求めるには秘密鍵候補を１個づつ生成し、これが計算量最小のものか否かを逐次判定するようにしてもよい。この実施形態の機能構成を図３に、処理手順を図４にそれぞれ図１、図２と対応する部分に同一参照記号を付けて示し、図１、図２と異なる部分について以下に説明する。つまり鍵生成装置においては秘密鍵候補生成部５０、計算量演算部６０及び最小値検出・出力部７０の全体の機能構成として、逆数余剰演算部１５０、補正判定部１６０、出力部１７０が設けられ、鍵生成方法としては、図２中のステップＳ４以降のステップが変更される。
最小公倍数λ（ｎ）と記憶部４０内の公開鍵ｅを逆数剰余演算部１５０に取り込み（ステップＳ４）、λ（ｎ）を法とするｅの逆数を演算し、その結果ｄを記憶部５１に記憶する（ステップＳ５）。
補正判定部１６０に、秘密鍵候補ｄと最小公倍数λ（ｎ）を入力して、その補正部６１でｄｉ  とｉλ（ｎ）（ｉ＝０，１，２，…）を加算し、その加算結果ｄ′とｄとを用いて判定部６２で、ｄｉ  を秘密鍵として用いた場合のＲＳＡ暗号の復号処理およびＲＳＡ署名の署名生成処理における計算量ｖｉ  が最小となるｄｉ  を判定する（ステップＳ６）。
【００１１】
補正判定部６０からの計算量が最小になると判定したｄｉを出力部７０へ供給して、その時のｄｉ  を秘密鍵とし、これと、必要に応じて素数ｐ，ｑ、乗算値ｎ、最小公倍数λ（ｎ）、公開鍵ｅを記憶部から取り出して出力する（ステップＳ７）。
補正判定処理Ｓ６の具体的処理例を、計算を２進数表現により行う場合について説明する。まず計算量演算部６０で秘密鍵候補ｄを秘密鍵とした場合のＲＳＡ暗号の復号処理又はＲＳＡ署名の署名生成処理における計算量ｖを計算する（ステップＳ６−１）。つまりｄのビットサイズ｜ｄ｜，ビット１の数＃１ｄを求め、計算量ｖ
ｖ＝（｜ｄ｜−１）＋（＃１ｄ−１）
を演算する。その後、秘密鍵候補ｄをｄ´として（ステップＳ６−２）補正部６１に入力し、補正部６１はこのｄ′と、最小公倍数λ（ｎ）を加算して加算結果ｄ″＝ｄ′＋λ（ｎ）を求める（ステップＳ６−３）。次に判定部６２でｄ″のビットサイズ｜ｄ″｜を求め（ステップＳ６−４）、第１判定部６２ａで、（｜ｄ″｜−１）より計算量ｖ＝（｜ｄ｜−１）＋（＃１  ｄ−１）が大きいかの第１判定を行う（ステップＳ６−５）。この第１判定の結果が（｜ｄ′｜−１）＜ｖであれば、第２判定部６２ｂでｄ″を秘密鍵とした場合の計算量ｖ′（＝（｜ｄ″｜−１）＋（＃１  ｄ″−１））を求め（ステップＳ６−６）、ｖがｖ′より大きいかの第２判定を行う（ステップＳ６−７）。
【００１２】
第２判定の結果がｖ′＜ｖでなければｄ″をｄ′としてステップＳ６−３に戻る（ステップＳ６−８）。つまり秘密鍵候補ｄはそのままとして、ステップＳ６−８でｄ′とされたｄ′に、ステップＳ６−３でλ（ｎ）が加算される。ステップＳ６−７でｖ′＜ｖであれば記憶部５１の秘密鍵候補ｄをｄ″で更新し、かつ計算量ｖをｖ′で更新して（ステップＳ６−９）ステップＳ６−８に移り、更にステップＳ６−３に戻る。つまり秘密鍵候補ｄを更新すると共に比較するための鍵ｄ″も更新する。このようにしてｄｉ（ｉ＝０，１，２，…）に対しλ（ｎ）が順次加算され、その都度ｄｉ  を秘密鍵とした場合の計算量が最小であるかの判定がなされる。ステップＳ６−５の第１判定の結果が（｜ｄ″｜−１）＜ｖであれば、その時の記憶部６１の秘密鍵候補ｄが、計算量ｖを最小とするものとする判定結果を出力してステップＳ７に移る。
【００１３】
図１に示した鍵生成装置には、制御部８０が設けられ、各記憶部に対する読み出し、書き込み、他の各部を順次動作させるなどの制御を行う。図１では記憶部２１，３１，４０，５１はレジスタを想定したが、これらのいくつか又は全部を、ＲＡＭなどの記憶部で兼用するようにしてもよい。この鍵生成装置はコンピュータにより機能させてもよい。この場合は、例えば図２に示した鍵生成方法の各ステップをコンピュータに実行させるためのプログラムをＣＤ−ＲＯＭ、磁気ディスクなど記録媒体から、あるいは通信回線を介してコンピュータにダウンロードして、コンピュータにそのプログラムを実行させればよい。
【００１４】
【発明の効果】
以上述べたようにこの発明によれば前記計算量ｖが最小となる秘密鍵ｄを生成しているから、本来遅いとされていたＲＳＡ暗号の復号およびＲＳＡ署名の署名生成を高速化することができる。しかも、この発明ではＲＳＡ公開鍵ｅは従来通り固定でよいことから、市販の署名装置などに適用できる。
具体的な数値例でどの程度計算量が低減するかを見てみると、
ｐ＝１００３９，ｑ＝１０１３９
ｎ＝ｐ×ｑ＝１０１７８５４２１
λ（ｎ）＝ＬＣＭ（ｐ−１，ｑ−１）＝５０８８２６２２
ｅ＝６５５３７
とすると、従来方式によるｄをｄｆｏｒｍとすると、
ｄｆｏｒｍ＝ｅ−１  ｍｏｄλ（ｎ）＝５０８４９２３７
となる。この発明によるｄをｄｐｒｏｐとすると、
ｄｐｒｏｐ＝（ｅ−１  ｍｏｄλ（ｎ））＋λ（ｎ）＝１０１７３１８５９
が選ばれる。各々を２進表記すると、
ｄｆｏｒｍ＝  １１０００００１１１１１１００１０１１１０１０１０１
ｄｐｒｏｐ＝１１００００１０００００１００１１１００００１００１１
となり、
｜ｄｆｏｒｍ｜＝２６
＃１  ｄｆｏｒｍ  ＝１５
｜ｄｐｒｏｐ｜＝２７
＃１  ｄｐｒｏｐ  ＝１０
であるため、ｄｆｏｒｍ，ｄｐｒｏｐを利用し、ＲＳＡ暗号の復号／ＲＳＡ署名の署名生成をｂｉｎａｒｙ  ｍｅｔｈｏｄにより計算した際の乗算／２乗算の回数は
ｄｆｏｒｍ利用：（２６−１）＋（１５−１）＝３９
ｄｐｒｏｐ利用：（２７−１）＋（１０−１）＝３５
となり、この発明を適用すると、計算回数を４回分低減させることができる。
【図面の簡単な説明】
【図１】この発明の装置の機能構成例を示すブロック図。
【図２】この発明の方法の手順の例を示す流れ図。
【図３】この発明の装置のより好ましい機能構成例を示すブロック図。
【図４】この発明の方法のより好ましい手順の例を示す流れ図。
【図１】
2004334126.tif 000003
【図２】
2004334126.tif 000004
【図３】
2004334126.tif 000005
【図４】
2004334126.tif 000006