(57)【特許請求の範囲】
【請求項１】
メモリを備える装置の処理手段がプログラム命令を実行することにより、前記装置が遂行する方法であって、前記方法は、公開鍵暗号方式において秘密鍵と公開鍵の対の生成に使用されるドメインパラメータｐおよびｑであって素数であるｐおよびｑを生成する方法であり、前記方法は：
前記装置が、前記秘密鍵および前記公開鍵の生成に使用するセキュリティパラメータであるk，および，前記ｑのビット長であるＮの少なくともいずれかの入力を受け取ることと；
前記装置が、前記ｐの所望のビット長であるＬの入力を受け取ることと；
前記装置が、前記ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａ、または、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａに基づいて生成し、前記生成されたｑのビット中の連続する値を別の表現にして前記メモリに保持する、ただし前記ａは０＜ａ＜２ｋである奇数である、ことと； 
前記装置が、前記ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａにより生成した場合は、素数であるか、前記ｑと同じ若しくは前記ｑより大きな素数の合成数であるｒを、式ｒ＝２Ｌ−２ｋ−１＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂ、または、式ｒ＝２Ｌ−２ｋ−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂにより生成し、前記生成されたｒのビット中の連続する値を別の表現にして前記メモリに保持し；前記ｑを、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａにより生成した場合は、前記ｒを、式ｒ＝２Ｌ−２ｋ−１−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂ、または、式ｒ＝２Ｌ−２ｋ−２＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂにより生成し、前記生成されたｒのビット中の連続する値を別の表現にして前記メモリに保持する、ただしｂは０＜ｂである奇数である、ことと；
前記装置が、前記生成されて前記メモリに保持されたｑおよびｒに基づいて前記ｐを式ｐ＝２ｑｒ＋１により生成し、前記生成されたｐのビット中の連続する値を別の表現にして前記メモリに保持することと；
を含む、方法。
【請求項２】
前記生成したｐがＬビットの素数でない場合は、前記ｒおよび前記ｑのいずれか又は両方を再生成し、前記再生成した値に基づいてｐを再生成する段階を有する、請求項１に記載の方法。
【請求項３】
前記生成したｐがＬビットの素数である場合は、前記生成したｐおよびｑを出力する段階を有する、請求項１または２に記載の方法。
【請求項４】
請求項３に記載の方法により出力されたｐおよびｑに基づいて、生成元ｇ，秘密鍵，公開鍵の少なくともいずれかを生成する段階を有する、方法。
【請求項５】
請求項４に記載の方法により生成された公開鍵を公開する段階を有する、方法。
【請求項６】
請求項４に記載の方法により生成された公開鍵によって暗号化されたデータを、請求項４に記載の方法により生成された秘密鍵により復号する段階を有する、方法。
【請求項７】
請求項４に記載の方法により生成された公開鍵によってデータを暗号化する段階を有する、方法。
【請求項８】
装置の処理手段に実行されることにより、前記装置に、請求項１から７のいずれかに記載の方法を実行させるように構成される命令を備える、プログラム。
【請求項９】
処理手段及び記憶手段を備える装置であって、前記記憶手段は、前記処理手段により実行されることにより前記装置に請求項１から７のいずれかに記載の方法を実行させるようにプログラム命令を格納する、装置。
【請求項１０】
メモリを備え、公開鍵暗号方式において秘密鍵と公開鍵の対の生成に使用されるドメインパラメータｐおよびｑであって素数であるｐおよびｑを生成する装置であって、
前記秘密鍵および前記公開鍵の生成に使用するセキュリティパラメータであるk，および，前記ｑのビット長であるＮの少なくともいずれかの入力を受け取る手段と；
前記ｐの所望のビット長であるＬの入力を受け取る手段と；
前記ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａ、または、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａに基づいて生成し、前記生成されたｑのビット中の連続する値を別の表現にして前記メモリに保持する手段、ただし前記ａは０＜ａ＜２ｋである奇数である、と； 
前記ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａにより生成した場合は、素数であるか、前記ｑと同じ若しくは前記ｑより大きな素数の合成数であるｒを、式ｒ＝２Ｌ−２ｋ−１＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂ、または、式ｒ＝２Ｌ−２ｋ−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂにより生成し、前記生成されたｒのビット中の連続する値を別の表現にして前記メモリに保持し；前記ｑを、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａにより生成した場合は、前記ｒを、式ｒ＝２Ｌ−２ｋ−１−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂ、または、式ｒ＝２Ｌ−２ｋ−２＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂにより生成し、前記生成されたｒのビット中の連続する値を別の表現にして前記メモリに保持する手段、ただしｂは０＜ｂである奇数である、と；
前記生成されて前記メモリに保持されたｑおよびｒに基づいて前記ｐを式ｐ＝２ｑｒ＋１により生成し、前記生成されたｐのビット中の連続する値を別の表現にして前記メモリに保存する手段と；
を有することを特徴とする、装置。
【請求項１１】
前記生成したｐがＬビットの素数でない場合は、前記ｒおよび前記ｑのいずれか又は両方を再生成し、該再生成した値に基づいてｐを再生成する手段を更に有する、請求項１０に記載の装置。
【請求項１２】
前記生成したｐがＬビットの素数である場合は、前記生成したｐおよびｑを出力する手段を更に有する、請求項１０または１１に記載の装置。
【請求項１３】
請求項１２に記載の装置により出力されたｐおよびｑに基づいて、生成元ｇ，秘密鍵，公開鍵の少なくともいずれかを生成する手段を有する、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、素体の素数位数部分群で定義され、離散対数問題を安全性の根拠とする公開鍵暗号方式（Diffie-Hellman鍵共有プロトコルやディジタル署名方式を含む）におけるドメインパラメータの生成およびその応用に関する。
【背景技術】
【０００２】
まず、本明細書で説明する公開鍵暗号方式の背景知識と記号について、簡単に説明する。
体とは四則演算が定義される数の集合であって、その数の集合が有限の場合は有限体と呼ぶ。有限体に含まれる数の個数が素数である体を素体と呼び、素体の要素の個数を決めている素数を票数と呼ぶ。また、乗法群とは乗算と除算が定義される数の集合であって、有限体の要素から０を除くと乗法群となる。また、群の要素の個数を位数と呼ぶ。
【０００３】
ｐ，ｑは素数であり、ｑ｜ｐ−１という関係がある。ｑ｜ｐ−１の表記は、ｑはｐ−１を割りきることのできる値であることを意味する。また、ｇは「ｍｏｄ  ｐ」有限体上の位数ｑの乗法群Ｇ＝｛ｇｊ  ｍｏｄ  ｐ：  ０≦ｊ＜ｑ｝の生成元である（楕円曲線上でも同じように群を構成できる）。ここで、「ｇｊ  ｍｏｄ  ｐ」は、べき乗剰余演算であり、ｇをｊ乗した値をｐで割った残り（Ｒｅｍａｉｎｄｅｒ）という意味である。また、ｇは（１＜ｇ＜ｐ−１，ｇｑ＝１  ｍｏｄ  ｐ，ｇｊ≠１  ｍｏｄ  ｐ（０＜ｊ＜ｑ））を満たす。つまり、ｐは素体の標数であり、ｑは乗法群Ｇの位数を示す。一般に、（ｐ，ｑ，ｇ）はドメインパラメータと呼ばれる。有限体上の離散対数問題を安全性の根拠とする公開鍵暗号方式（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵交換プロトコルやディジタル署名方式を含める）では、ドメインパラメータを用いて秘密鍵と公開鍵の対が生成される。例えば、「Ｘ＝ｇｘ  ｍｏｄ  ｐ（０＜ｘ＜ｑ）」で、ｘは秘密鍵であり、Ｘは秘密鍵ｘに対応する公開鍵である。公開鍵Ｘが与えられた時、秘密鍵ｘ＝ｌｏｇｇＸを求めるのは数学的に難しい問題（Ｘの生成元ｇに対する離散対数問題という）である。そして、十分な安全性を確保するためには、少なくとも１０２４ビットのｐと１６０ビットのｑを使う必要がある。
【０００４】
公開鍵暗号方式（鍵共有、ディジタル署名などを含む）は、様々な分野に応用されており、認証、電子商取引、ディジタル権利保護など、ＩＣＴ社会の安全性を支える上で不可欠になりつつある各種サービスやそれらを実行する各種端末（スマートカード、RFID、家電、携帯電話、PDAなど）などにおいて、幅広く利用されている。
【０００５】
公開鍵暗号方式におけるパラメータを生成する従来技術には、例えば、特開2010-49215（株式会社東芝）に開示されているような、拡大体上の代数的トーラスを用いる方法がある。
【０００６】
また、NIST FIPS PUB 186-3, "Digital Signature Standard (DSS)", June 2009には、素体の素数位数部分群を用いた公開鍵暗号方式におけるドメインパラメータとして、素体の票数pと有限体上で定義される乗法群の素数位数qを生成する方法が記載されている。
【０００７】
IEEE P1363, "IEEE P1363/D13 Standard Specifications for Public Key Cryptography", November 1999  には、素体の素数位数部分群を用いた公開鍵暗号方式におけるドメインパラメータとして、素体の票数pと有限体上で定義される乗法群の素数位数qを生成する方法が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2010-49215
【０００９】
【非特許文献１】NIST FIPS PUB 186-3, "Digital Signature Standard (DSS)", June 2009
【非特許文献２】IEEE P1363, "IEEE P1363/D13 Standard Specifications for Public Key Cryptography", November 1999
【発明の概要】
【発明が解決しようとする課題】
【００１０】
前述のように、素体の素数位数部分群で定義され、離散対数問題を安全性の根拠とする公開鍵暗号方式において、十分な安全性を確保するためには、少なくとも１０２４ビットのｐと１６０ビットのｑを使う必要があると言われている。今後、更なる安全性への要求やデバイスの計算能力の向上と共に、ｐの大きさは、２０４８ビット、３０７２ビットへと増していくことが予想される。すると、ｐやｑなどの変数を保持して処理するために多くの資源が必要となり、サイズやコストの増大を招く可能性がある。
【００１１】
また、既存の暗号プロトコルや公開鍵暗号方式では、不正な攻撃を回避するために、位数確認処理が必要である。しかし、この処理に係るオーバーヘッドは少なくはなく、スマートカードやＲＦＩＤ，家電，携帯電話，ＰＤＡなどの計算資源の少ないデバイスではもとより、高性能のコンピュータ装置であっても、大量のデータを処理しなければならないサーバなどの装置においては極めて負荷の高い処理となっている。この事情は、暗号プロトコルや公開鍵暗号方式を今後さらに普及させていく上で、足枷になる可能性がある。
【００１２】
さらに、前述のように、ドメインパラメータである素数ｐ，ｑは、ｑ｜ｐ−１の関係を満たすことが必要とされる。しかし、素数ｐに対してｐ−１を割りきる素数ｑを探索するという処理は、計算負荷の高い処理であった。
【００１３】
本発明は、これらの課題の少なくとも１つに対する解決策を提供し、暗号プロトコルや公開鍵暗号に係る処理において計算負荷を減少させることを課題とする。
【課題を解決するための手段】
【００１４】
本発明の一側面は、公開鍵暗号方式において秘密鍵と公開鍵の対の生成に使用されるドメインパラメータｐおよびｑを生成する方法に関する。ｐおよびｑは素数である。本発明は、素数ｒ、またはｑと同じ大きさかｑより大きな素数の合成数であるｒを用いることにより、ｐとして、式ｐ＝２ｑｒ＋１により計算される値を用いることを特徴の１つとする。かかるｐは、一般にセキュアー素数（secure prime）と呼ばれている。
【００１５】
ドメインパラメータｐとして、上式で与えられるセキュアー素数を用いることにより、既存の暗号プロトコルや公開鍵暗号方式で必要であった位数確認処理、あるいは安全性を確保するために新たに付け加えなければならない位数確認処理を不要とすることができる。これは、計算量の大幅な減少をもたらす。従って、本発明に係るドメインパラメータ生成方法は、大量のデータ処理を必要とするサーバなどの装置に実装するのに適しており、また、家庭や小規模オフィス用のセキュリティ装置などの計算資源の乏しい小型デバイスに実装するにも適している。
【００１６】
また、コンピュータで計算する上で、ｐをｑとｒの掛け算で計算するという処理は、従来のように素数ｐに対してｐ−１を割りきる素数ｑを探索するという処理よりも簡単である。従って、ｐをｑとｒの乗算で求めるという特徴も、計算資源の削減に大きく役立っている。特に、ｐのサイズが３０７２ビットともなると、現時点（２０１０年６月）において、従来方式でｐとｑを生成することは、普通に入手しうる計算機の計算能力では著しく長い計算時間が必要となり、事実上不可能である。しかし、本発明の実施形態においては、ｑとｒの乗算で求めるという構成を採るため、大きなサイズのｐの生成も可能となる。
【００１７】
好適な実施形態においては、ｑが次のような方法で生成される。すなわち、秘密鍵および公開鍵の生成に使用するセキュリティパラメータをk，ｑのビット長をＮ，ａを０＜ａ＜２ｋである奇数としたとき、ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａ、または、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａに基づいて生成する。Ｎは、ｋ≒Ｎ／２となるように選択することが好ましい。また、セキュリティパラメータkは、１／２ｋが無視できるほど小さくなるように選択される。
【００１８】
このようなｑの生成方法は、前掲の先行技術文献のいずれにも記載されていない。
【００１９】
ｑを２のべき乗±ａで計算することにより、ｑは、２進数で表すと、先頭および最後尾にいくつかのビットを除いた中間ビットは、全て０か１になる（２のべき乗＋ａでは０になり、２のべき乗−ａでは１になる）。そこで、これらの０や１の羅列を別の手法で表すことにより、ｑを本来の大きさよりずっと少ないビットで表現することが可能になる。このため、上の方法でｑを生成する前述の特徴によれば、ｑを保持するための記憶容量を削減することができるという利点が提供される。従って、本発明に係るドメインパラメータ生成技術を、記憶容量が限られたデバイスに搭載する上で有利となる。かかる効果は、前掲の先行技術文献のいずれにも記載されていない。
【００２０】
セキュアー素数ｐを用いることにより、ｑの生成において更なる利点が得られる。従来、安全性の制約から、ｑにおいてべき乗するためのビット列は、セキュリティパラメータｋの２倍（つまりｑのビット長Ｎ）より６４ビット程度長く取らなければならないとされていた。これに対して本発明においては、ｑが2のべき乗に限りなく近くなるセキュアー素数ｐを用いるため、べき乗するためのビット列が、セキュリティパラメータｋの２倍程度で済む。これは、計算量の削減に大きく貢献する。従って、本発明に係るドメインパラメータ生成技術を、計算資源に制約があるデバイスに搭載する上で、更に有利となる。かかる効果も、前掲の先行技術文献のいずれにも記載されていない。
【００２１】
好適な実施形態においては、ｒもｑと同じような式に基づいて生成される。まず、ｐの所望のビット長をＬ，ｂを０＜ｂである奇数とする。ここで、ｑを、式ｑ＝２２ｋ−ａもしくは式ｑ＝２Ｎ−ａにより生成した場合は、ｒを、式ｒ＝２Ｌ−２ｋ−１＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂ、または、式ｒ＝２Ｌ−２ｋ−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂにより生成し、ｑを、式ｑ＝２２ｋ＋ａもしくは式ｑ＝２Ｎ−１＋ａにより生成した場合は、ｒを、式ｒ＝２Ｌ−２ｋ−１−ｂもしくは式ｒ＝２Ｌ−Ｎ−ｂ、または、式ｒ＝２Ｌ−２ｋ−２＋ｂもしくは式ｒ＝２Ｌ−Ｎ−１＋ｂにより生成する。Ｌは、例えば１０２４，２０４８，３０７２などであることができる。
【００２２】
このようなｒの生成方法も、前掲の先行技術文献のいずれにも記載されていない。
【００２３】
前述のように、ｒは素数であることができ、またはｑと同じ大きさかｑより大きな素数の合成数であることができる（つまり、ｒ＝ｑ１ｑ２・・・ｑｎでｑｔ≧ｑ （１≦ｔ≦ｎ）である）。ｒを２のべき乗±ｂで計算することにより、前述のｑの場合と同様に、先頭および最後尾にいくつかのビットを除いた中間ビットが２進数表現で全て０か１になる（２のべき乗＋ｂでは０になり、２のべき乗−ｂでは１になる）。そこで、これらの０や１の羅列を別の手法で表すことにより、ｒを本来の大きさよりずっと少ないビットで表現することができる。このため、上の方法でｒを生成する前述の特徴によれば、ｒを保持するための記憶容量を削減することができるという利点が提供される。従って、本発明に係るドメインパラメータ生成技術を、記憶容量が限られたデバイスに搭載する上で有利となる。かかる効果も、前掲の先行技術文献のいずれにも記載されていない。
【００２４】
ｑ，ｒを前述のように２のべき乗に基づいて生成すると、ｑとｒの積に基づいて生成されるｐ（すなわちｐ＝２ｑｒ＋１）も、先頭と最後尾のいくつかのビットを除いた中間ビットが、２進数表現で全て０か１になる。そこで、ｑやｒと同様に、ｐを本来の大きさよりずっと少ないビットで表現することが可能になる。このため、ｐを保持するための記憶容量を削減することができるという利点が提供される。これは、ｐ（やｑ）を生成する要素にとって有利なだけではなく、そのｐ（やｑ）を受け取って、それに基づいて暗号鍵を生成する要素にとっても、要求される記憶容量や通信容量が小さくてすむという点で、有利である。
【００２５】
好適な実施形態においては、生成したｑおよび／またはｒに基づいてｐ計算した後、計算したｐがＬビットの素数であるか否かをチェックし、否である場合は、ｒおよびｑのいずれか又は両方を再生成し、再生成したｑおよび／またはｒに基づいてｐを再計算する。実施形態によっては、計算したｐがＬビットの素数である場合は、計算したｐおよびｑを外部へ出力するようにしてもよい。これらのｐやｑは、生成元ｇの生成に用いられることができ、また公開鍵や秘密鍵の生成に用いられてもよい。
【００２６】
本発明の様々な実施形態には、前述の処理の少なくとも一部を実行する装置や、装置に前述の処理の少なくとも一部を実行させるプログラム、前述の処理の少なくとも一部を含む、装置の動作方法が含まれる。本明細書において、「装置」との用語は、単体の製品だけでなく、複数の製品がインターフェースやネットワーク等で接続されたシステムや、単一又は複数の基板の一部又は全体に実装される回路要素、ならびに当該回路要素を含む基板やチップセットなどをも包含する概念を表す。前述の処理は、専用のハードウェア回路やプログラマブル回路、ソフトウェア処理、またはこれらの組み合わせなどによって実行されることができる。読者は、本発明に記載の用語を限定的な要素や構成として理解するのではなく、同様の機能を備える様々な要素や構成を包含する語句として、理解すべきであることに注意されたい。
【図面の簡単な説明】
【００２７】
【図１】実施例１として説明されるドメインパラメータ生成装置１００の処理要素および処理の流れを説明するためのブロック図である。
【図２】実施例２として説明されるドメインパラメータ生成装置２００の処理要素および処理の流れを説明するためのブロック図である。
【図３】実施例３として説明されるドメインパラメータ生成装置３００の処理要素および処理の流れを説明するためのブロック図である。
【図４】実施例４として説明されるドメインパラメータ生成装置４００の処理要素および処理の流れを説明するためのブロック図である。
【図５】ドメインパラメータ生成装置１００〜４００のいずれかを利用したシステムの例を説明するための図である。
【発明を実施するための形態】
【００２８】
以下、添付図面を参照しつつ、本発明の好適な実施例について、いくつか紹介する。ｐ，ｑなど、実施例の説明において使用される記号の意味は、これまでの説明と同じ意味を有する。すなわち、ｐ，ｑは、公開鍵暗号方式において、生成元ｇの生成や、秘密鍵と公開鍵の対の生成に使用されるドメインパラメータであり、ｐはｐ＝２ｑｒ＋１の関係式を満たしており、ｐとｑは共に素数であり、ｒは素数、またはｑと同じかそれ以上の大きさの素数の合成数（つまり、ｒ＝ｑ１ｑ２・・・ｑｎでｑｔ≧ｑ （１≦ｔ≦ｎ））であるとする。｜ｐ｜、｜ｑ｜は、それぞれｐ、ｑのビットの長さを表す。以下、｜ｐ｜＝Ｌ（つまり、２Ｌ−１≦ｐ＜２Ｌ）にし、｜ｑ｜＝Ｎ（つまり、２Ｎ−１≦ｑ＜２Ｎ）にする。また、ｋを暗号システムが安全性を保証するためのセキュリティパラメータとし、１／２ｋは無視できるほど小さくなければならない。ドメインパラメータサイズとセキュリティパラメータ（Ｌ，ｋ）は、例えば（１０２４，８０），（２０４８，１１２），（２０４８，１２８），（３０７２，１２８）である。
〔実施例１〕
【００２９】
ドメインパラメータ生成装置は、公開鍵暗号方式（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵交換プロトコルやディジタル署名方式を含める）に関する公開情報としてのドメインパラメータを生成する。ドメインパラメータとしては、暗号系が定義される群に関する情報として、素体の標数ｐと乗法群Ｇの位数ｑと生成元ｇの情報が含まれる。
【００３０】
図１は、実施例１として以下に説明する、ドメインパラメータ生成装置１００の処理要素および処理の流れを説明するためのブロック図である。ドメインパラメータ生成装置は、素数ｑ生成器１０２，ｒ生成器１０４，演算器１０６，素数判断部１０８，出力器１１０などを備える。このドメインパラメータ生成装置では、入力された｜ｐ｜とセキュリティパラメータｋの対（Ｌ，ｋ）、もしくはＬとｑのビットの長さの対（Ｌ，Ｎ）に基づいて、前述の特徴的な素数生成や演算を行い、素体の票数であるセキュアー素数ｐと乗法群Ｇの位数である素数ｑを出力する。出力された（ｐ，ｑ）は生成元ｇを生成するためにも使われる。
【００３１】
なお、図１においては、本発明の実施例の説明に必要な処理要素のみが記載されており、例えば基板など、実施例の理解に不要と思われる要素は図示が省略されていることに留意されたい。また、図に描かれる各処理要素は、専用のハードウェアによって実現されることもできるが、ＣＰＵとコンピュータ・プログラムを用いたソフトウェア処理によって実現されることができる場合がある。従って、以下の図において、例えば「素数生成器」のように「器」「装置」のような用語が用いられているとしても、その実現手段はハードウェアに限定されるものではなく、ソフトウェア処理による手段によっても実装可能であることに注意されたい。また、２つ以上の処理要素を１つのハードウェア回路にまとめたり、あるいは２つ以上の処理要素をそれぞれサブプログラムとして含んだ１つのプログラムにまとめて実装することも、無論可能である。例えば、以下の実施例で紹介されるドメインパラメータ生成装置の機能の全てを、プロセッサとメモリとプログラムコードを用いて実現することも可能である。さらに、各処理要素をＦＰＧＡのようなプログラマブルな回路を用いて実現することも可能である。当業者であれば、当然ながら、実施形態の具体的要求に応じて、適切な実装手段を選択することができるだろう。
【００３２】
図１に示すように、ドメインパラメータ生成装置１００の素数ｑ生成器１０２は、入力されたｋ、もしくはＮを入力として、素数ｑを「ｑ＝２２ｋ−ａ」もしくは「ｑ＝２Ｎ−ａ」により生成して出力する。ここで、Ｎは、ｋ≒Ｎ／２であるように選択される。また、ａは０＜ａ＜２ｋである奇数であり、従ってａ＝２ａ'＋１を満たすａ'を使って表すこともできる。安全性およびｑを少ないビット数で表現するためには、ａは小さい方がよい。
【００３３】
ｒ生成器１０４は、入力された（Ｌ，ｋ）、もしくは（Ｌ，Ｎ）を入力として、ｒを「ｒ＝２Ｌ−２ｋ−１＋ｂ」もしくは「ｒ＝２Ｌ−Ｎ−１＋ｂ」により生成して出力する。ここで、ｂは０＜ｂかつｐのビット数がＬを超えない範囲の奇数であり、従ってｂ＝２ｂ'＋１を満たすｂ'を使って表すこともできる。
【００３４】
演算器１０６は、素数ｑ生成器１０２により出力された素数ｑと、ｒ生成器１０４により出力されたｒとを入力として、値ｐを計算式「ｐ＝２ｑｒ＋１」により計算して出力する。
【００３５】
素数判断部１０８は、演算器１０６により出力された値ｐが素数であるか否かを確認する。素数判断部１０８の判断処理において、演算器１０６から入力された値ｐがＬビットの素数ではない場合、ｒやｑを新たに生成し直し、上記の処理を繰り返す。なお、図ではｒのみを再生成するように描かれているが、実施形態によってはｑのみを再生成したり、またｒとｑを両方生成したりするように構成してもよい。また、ｒを所定回数再生成する毎にｑを再生成する、またはその逆のように構成してもよい。
【００３６】
一方、素数判断部１０８の判断処理において、演算器１０６から入力された値ｐがＬビットの素数である場合は、値ｐがセキュアー素数であるとして、出力器１１０は、素数ｑ生成器１０２から出力された素数ｑと演算器１０６から出力されたセキュアー素数ｐを入力として、ドメインパラメータ（ｐ，ｑ）を出力する。
【００３７】
実施例１によるテストデータｐ，ｑ，ｒの１６進数表現を以下に示す。一見して判るように、ｑは最後尾部分のいくつかのデータを除いて全てＦであり、ｐ，ｒは、先頭部分および最後尾部分のいくつかのデータを除いて全て０である。これは、２進数表現を用いれば、ｑは最後尾部分のいくつかのビットを除いて全て１であり、ｐ，ｒは、先頭部分および最後尾部分のいくつかのビットを除いて全て０であることを示す。これら連続する０や１を適当な手法で表現することにより、ｐやｑを本来のビット数より大幅に少ないビット数で表現することが可能である。また、０以上２２ｋ未満の均一分布と０以上ｑ未満の均一分布を識別することは困難である。
ｑ＝ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＤ１，
ｒ＝８０００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００２ＤＢＦ，
ｐ＝ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＤ１００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００５Ｂ７ＤＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＥＦ３３ＤＦ 
〔実施例２〕
【００３８】
次に、実施例１とは若干異なる実施例を、実施例２として、図２を用いて説明する。実施例２に係るドメインパラメータ生成装置２００は、実施例１のドメインパラメータ生成装置１００と同様に、素数ｑ生成器１０２，演算器１０６，素数判断部１０８，出力器１１０などを備える。これらの要素の機能は実施例１の場合と同様であるので、同様の符号を付し、説明を省略する。実施例１との相違は、ｒ生成器１０４がｒ生成器２０４に置き換えられている点である。
【００３９】
ｒ生成器２０４は、入力された（Ｌ，ｋ）もしくは（Ｌ，Ｎ）を入力として、ｒを「ｒ＝２Ｌ−２ｋ−ｂ」もしくは「ｒ＝２Ｌ−Ｎ−ｂ」により生成して出力する。ここで、ｂは０＜ｂかつｐのビット数がＬを超えない範囲の奇数である。
【００４０】
実施例２によるテストデータｐ，ｑ，ｒの１６進数表現を以下に示す。
ｑ＝ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＣ７，
ｒ＝７ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ８１７９，
ｐ＝ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＣ６ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ０２Ｆ２００００００００００００００００００００００００００００００００００３８５８１Ｆ
【００４１】
実施例１の場合と同様に、ｐ，ｑには規則性が見られる。すなわち、ｑは最後尾部分のいくつかのデータを除いて全てＦであり、ｐ，ｒも、先頭部分および最後尾部分のいくつかのデータを除いて全てＦである。これは、２進数表現を用いれば、ｐ，ｑ，ｒのいずれも、中間ビットは全て１であることを示している。これは、本実施例においても、ｒを２のべき乗に基づいて生成しているからである。従って、連続する１を適当な手法で表現することにより、ｐやｑを本来のビット数より大幅に少ないビット数で表現することが可能である。
〔実施例３〕
【００４２】
次に、実施例１，２とは更に若干異なる実施例を、実施例３として、図３を用いて説明する。実施例３に係るドメインパラメータ生成装置３００は、実施例１や２のドメインパラメータ生成装置１００，２００と同様に、演算器１０６，素数判断部１０８，出力器１１０などを備える。これらの要素の機能は実施例１の場合と同様であるので、同様の符号を付し、説明を省略する。実施例３と実施例１との相違は、素数ｑ生成器１０２が素数ｑ生成器３０２に置き換えられ、ｒ生成器１０４がｒ生成器３０４に置き換えられている点である。
【００４３】
素数ｑ生成器３０２は、入力されたｋ、もしくはＮを入力として、素数ｑを「ｑ＝２２ｋ＋ａ」もしくは「ｑ＝２Ｎ−１＋ａ」により生成して出力する。ここで、Ｎ＝２ｋ＋１であり、ａは０＜ａ＜２ｋである奇数であり、ａ＝２ａ'＋１を満たすａ'を使って表すこともできる。なお、安全性およびｑを少ないビット数で表現するためにａは小さい方がよい。ｒ生成器３０４は、入力された（Ｌ，ｋ）もしくは（Ｌ，Ｎ）を入力として、ｒを「ｒ＝２Ｌ−２ｋ−１−ｂ」もしくは「ｒ＝２Ｌ−Ｎ−ｂ」により生成して出力する。ここで、ｂは０＜ｂかつｐのビット数がＬを超えない範囲の奇数であり、ｂ＝２ｂ'＋１を満たすｂ'を使って表すこともできる。
【００４４】
実施例３によるテストデータｐ，ｑ，ｒの１６進数表現を以下に示す。
ｑ＝１０００００００００００００００００００００００００００００００００００００００７，
ｒ＝３ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ１Ｆ９Ｆ，
ｐ＝８００００００００００００００００００００００００００００００００００００００３７ＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＥ３Ｆ３ＤＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦＦ３ＢＡＢ３ 
【００４５】
実施例１や２の場合と同様に、ｐ，ｑには規則性が見られる。これは、本実施例においても、ｑおよびｒを２のべき乗に基づいて生成しているからである。従って、連続する０や１を適当な手法で表現することにより、ｐやｑを本来のビット数より大幅に少ないビット数で表現することが可能である。
〔実施例４〕
【００４６】
次に、実施例３と若干異なる実施例を、実施例４として、図４を用いて説明する。実施例４に係るドメインパラメータ生成装置４００は、実施例３のドメインパラメータ生成装置３００と同様に、素数ｑ生成器３０２，演算器１０６，素数判断部１０８，出力器１１０などを備える。これらの要素の機能は実施例１〜３の場合と同様であるので、同様の符号を付し、説明を省略する。実施例３との相違は、ｒ生成器３０４がｒ生成器４０４に置き換えられている点である。
【００４７】
ｒ生成器４０４は、入力された（Ｌ，ｋ）もしくは（Ｌ，Ｎ）を入力として、ｒを「ｒ＝２Ｌ−２ｋ−２＋ｂ」もしくは「ｒ＝２Ｌ−Ｎ−１＋ｂ」により生成して出力する。ここで、ｂは０＜ｂかつｐのビット数がＬを超えない範囲の奇数であり、ｂ＝２ｂ'＋１を満たすｂ'を使って表すこともできる。
【００４８】
実施例４によるテストデータｐ，ｑ，ｒの１６進数表現を以下に示す。
ｑ＝１０００００００００００００００００００００００００００００００００００００００７，
ｒ＝４００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００２０８３Ｂ，
ｐ＝８００００００００００００００００００００００００００００００００００００００３８００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００００４１０７６００００００００００００００００００００００００００００００００００１Ｃ７３３Ｂ
【００４９】
実施例１〜３の場合と同様に、ｐ，ｑには規則性が見られる。これは、本実施例においても、ｑおよびｒを２のべき乗に基づいて生成しているからである。従って、連続する０や１を適当な手法で表現することにより、ｐやｑを本来のビット数より大幅に少ないビット数で表現することが可能である。
【００５０】
要素１０２，１０４，１０６，１０８，２０４，３０２，３０４，４０４は、単一の筐体内や単一の基板上に搭載される要素であってもよいし、それぞれプロセッサとプログラムによるソフトウェア処理によって実現される要素であってもよい。２つ以上の要素が同一のハードウェア回路によって実装されてもよい。また、それぞれ別個の筐体や基板に実装され、互いに既存のネットワーク技術やインターフェース技術によって接続される要素であってもよい。従って、ドメインパラメータ生成装置１００〜４００は、単一の筐体を有する単一の製品として実施されてもよいし、また単一のコンピュータ装置の一機能として実施されてもよいし、複数の製品からなるシステムとして実施されてもよい。
【００５１】
素数ｑ生成器１０２と３０２は、自動又は手動制御により、互いに移り変わることができるように構成されることができる。すなわち、単一の素数ｑ生成器が、実施例で説明された素数ｑ生成器１０２と３０２の両方の機能を発揮できるように構成されていてもよい。例えば、素数ｑ生成器１０２をソフトウェア処理により実装する場合、ｑの生成式をｑ＝２２ｋ−ａ（ｑ＝２Ｎ−ａ）からｑ＝２２ｋ＋ａ（ｑ＝２Ｎ−１＋ａ）に切り替えるだけで、簡単に素数ｑ生成器３０２として動作しうるようになることは明らかである。同様に、ｒ生成器１０４，２０４，３０４，４０４も、実際には、単一のｒ生成器が、実施例で説明されたｒ生成器１０４〜４０４全ての機能を発揮できるように構成されていてもよい。
【００５２】
ドメインパラメータ生成装置１００〜４００の上述の機能の一部又は全部をプロセッサとプログラムによるソフトウェア処理によって実現される要素として実施する場合、当該プログラムを、独立の製品として、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの光ディスクまたはＵＳＢメモリ等のメモリカードへ格納して販売したり、インターネットなどを利用したダウンロードなどの手法で販売したりすることも可能である。このような、ドメインパラメータ生成装置１００〜４００の上述の機能性をプロセッサに実行させるソフトウェアも、本願請求項に係る発明の実施形態に含まれるものである。
【００５３】
図５は、ドメインパラメータ生成装置１００〜４００のいずれかを利用したシステムの例を説明するための図である。システム５００は、ドメインパラメータ生成装置５０２を備えるが、この装置５０２は、前述のメインパラメータ生成装置１００〜４００のいずれかであることができる。システム５００は更に、鍵生成装置５０４を含む。鍵生成装置５０４は、ドメインパラメータ生成装置５０２から出力されたドメインパラメータｐ，ｑを用いて、公開鍵暗号技術を用いる通信に用いられる秘密鍵と公開鍵の対を生成するように構成される。鍵生成装置５０４は、ドメインパラメータｐ，ｑの他、これらｐ，ｑから既知の手法で導出された生成元ｇにも基づいて、秘密鍵と公開鍵の対を生成する。これらの鍵の生成方法は既によく知られている。
【００５４】
実施例によっては、システム５００は、サービス提供サーバ５０６を備えていてもよい。サービス提供サーバ５０６は、鍵生成装置５０４が生成した公開鍵をインターネットなどに公開すると共に、リモートの端末５２０が当該公開鍵を用いて暗号化したデータを、有線若しくは無線又はその組み合わせによる通信路５１０を介して受信しうるように構成される。暗号化されたデータを受信したサービス提供サーバ２０６は、鍵生成装置５０４が生成した秘密鍵を用いて、当該データを復号しうるように構成される。
【００５５】
要素５０２，５０４，５０６は、単一の筐体内や単一の基板上に搭載される要素であってもよいし、プロセッサとプログラムによるソフトウェア処理によって実現される要素であってもよい。また、それぞれ別個の筐体や基板に実装され、互いに既存のネットワーク技術やインターフェース技術によって接続される要素であってもよい。従って、システム５００は、単一の筐体を有する単一の製品として実施されてもよいし、また単一のコンピュータ装置の一機能として実施されてもよいし、複数の製品からなるシステムとして実施されてもよい。
【００５６】
システム５００の上述の機能の一部又は全部をプロセッサとプログラムによるソフトウェア処理によって実現される要素として実施する場合、当該プログラムを、独立の製品として、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの光ディスクまたはＵＳＢメモリ等のメモリカードへ格納して販売したり、インターネットなどを利用したダウンロードなどの手法で販売したりすることも可能である。このような、システム５００の上述の機能性をプロセッサに実行させるソフトウェアも、本願請求項に係る発明の実施形態に含まれるものである。
【００５７】
本願のドメインパラメータ生成技術は、離散対数問題を安全性の根拠とする公開鍵暗号方式を利用する様々な分野において利用されることができる。特に、本願のドメインパラメータ生成技術は、公開鍵暗号方式を利用する上で必要とされる計算資源が従来技術に比べて著しく減少させるため、種々多様なソフトウェアやハードウェアに搭載されることができる。例えば、従来では公開鍵暗号方式を実装するには不適当であったような、計算能力に乏しい小型のハードウェアや、多くの計算資源を割くことのできない共用サーバであっても、本明細書に開示された技術思想を用いて、ハードウェア的に、および／またはソフトウェア的に、公開鍵暗号方式を利用するための機能を実装することが可能となる。
【００５８】
以上、本発明の好適な実施形態の好適な例をいくつか説明してきたが、これらの実施例は本発明の範囲を限定する目的で紹介されたのではなく、本発明の理解に資するために紹介されたものであることは、理解されねばならない。添付の特許請求の範囲には、発明者が現在好適と考えるいくつかの実施形態が請求項毎に特定されているが、出願人は、現在は請求項に記載されていなくとも、本明細書および図面に明示的または暗示的に開示された全ての新規な特徴およびそれらの組み合わせについても、将来的に特許を請求する可能性があることを理解されたい。
【符号の説明】
【００５９】
１００，２００，３００，４００    ドメインパラメータ生成装置
１０２，３０２                    素数ｑ生成器
１０４，２０４，３０４，４０４    ｒ生成器
１０６                            演算器
１０８                            素数判断部
１１０                            出力器
５００                            システム
５０２                            ドメインパラメータ生成装置
５０４                            鍵生成装置
５０６                            サービス提供サーバ
５１０                            通信路
５２０                            端末
【図１】
0005578553.tif 000002
【図２】
0005578553.tif 000003
【図３】
0005578553.tif 000004
【図４】
0005578553.tif 000005
【図５】
0005578553.tif 000006