説明

鍵生成プログラム

【課題】基づく問題が安全であることが示され(つまりNP完全であることが示され)、かつ、安全性の証明がつく公開鍵暗号系を構成できるように思われる鍵生成プログラムを提供することとする。
【解決手段】コンピュータに、乱数生成部により作成される乱数を用いてm行n列(m、nは0より大きい整数)の格子基底Vを生成する格子基底生成部と、乱数生成部により作成される乱数を用いてn列の係数ベクトルxを生成する係数ベクトル生成部と、係数ベクトル生成部が生成した係数ベクトルxを秘密鍵として記録媒体に格納させる秘密鍵生成部と、格子基底生成部が生成した格子基底V、及び、格子基底Vと前記係数ベクトル生成部が生成した係数ベクトルxとに基づいて得られるlノルムKの組を公開鍵として記録媒体に格納させる公開鍵生成部として機能させるための鍵生成プログラムとする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、鍵生成プログラムに関する。
【背景技術】
【0002】
近年、社会の情報化が進むにつれて、様々な機能を電子化する試みが行われている。特に、電子投票、電子契約や電子現金などの実現が試みられているが、これらのために公開鍵暗号方式、公開鍵認証方式、電子署名方式など(これらを公開鍵暗号系と総称する)が基盤技術として非常に重要な役割を果たしている。
【0003】
公開鍵暗号系では公開鍵と秘密鍵という2つの異なる、しかし互いに数学的な関係を有する鍵の組を用いる。ここで、公開鍵はネットワーク上で公開されるので、公開鍵から秘密鍵を計算することが困難となるような数学的関係を利用しなければならない。通常は、数学的な関係として片方向の計算は容易であるが、逆方向の計算は困難であるという計算問題を用いる。システムで用いる鍵の安全性はシステム全体の安全性に多大な影響を与えるので、安全な鍵を生成する鍵生成方式を構成することは非常に重要な課題である。
【0004】
逆方向の計算が困難な問題として、現在は素因数分解問題や離散対数問題などが用いられている。しかし、これらの問題については、難しいという予測はされているが、そのような証明は与えられていない。さらに、これらの問題を計算するアルゴリズムが長年研究されており、アルゴリズムを有効に機能させないためには鍵長を長くする必要があり、そのため公開鍵暗号系の効率が非常に悪くなってしまっている。また、量子計算機が実用化されるとこれらの問題は効率的に解くことができることが知られている。そのため、量子計算機を用いても効率的に解くことができないような問題を用いる必要がある。このような問題の候補として、NP完全と呼ばれるクラスに属する問題がある。
【0005】
NP完全問題の中でも近年盛んに研究がなされている問題として、格子を利用した問題がある。ここで、格子とはv,v,…,vをm次元整数ベクトル空間に属するn本の線形独立なベクトルとしたときに、これらの整数一次結合によって構成される空間である。ベクトルv,v,…,vを格子基底と呼び行列形式でVと略記する。また、格子ベクトルvをv=a+a+…+aのようにv,v,…,vの一次結合として表わしたとき、それぞれの係数aをベクトル形式(a,a,…,a)で表わし、それを係数ベクトルと呼ぶことにする。格子問題の中でも特に重要な問題として最短ベクトル問題や最近接ベクトル問題が挙げられる。また、それらの問題の近似版として近似最短ベクトル問題や近似最近接ベクトル問題がある。しかし、これらの問題は鍵生成方式が基づく問題としては扱いづらい、また、構成された公開鍵暗号系の安全性が証明できないなどの課題がある。
【0006】
そして従来の鍵生成方式に関する技術として、例えば下記非特許文献1には、RSA鍵生成方式が記載されており、また、例えば下記非特許文献2にはGGH鍵生成方式が記載されている。
【0007】
ここで、RSA鍵生成方式の例について説明する。この鍵生成方式は素因数分解問題の難しさに基づいて構成される。鍵生成者は2つの素数p,q(pとqは同じビット長)を選び、nをn=p×qとして計算する。整数eを区間[1,φ(n)]上にて、φ(n)との最大公約数が1となるようにランダムに選ぶ。ここで、φ(n)=(p−1)(q−1)である。そして、整数dを区間[1,φ(n)]に属する方程式d×e≡1(mod φ(n))の解として計算する。公開鍵は組(n,e)、秘密鍵はdとなる。この方式においては、nから素因数p,qを計算することが困難であるならば、同じく公開鍵から秘密鍵を計算することも困難である。
【0008】
ここで、GGH鍵生成方式の例についても説明する。この鍵生成方式は双対直交性欠陥率(dual orthogonality defect)と呼ばれる値が小さいような格子基底を計算することの難しさに基づいて構成される。この方式での秘密鍵は格子基底Rであり、公開鍵はRと同じ格子を生成する格子基底Bと正の実数σである。Rは双対直交性欠陥率が小さくなるように構成し、Bは双対直交性欠陥率が大きくなるように構成する。このような基底を生成する方法の1つとして、有限の範囲から格子基底Rをランダムに選び(つまり、それぞれの基底成分を有限の区間からランダムに選び)、その基底ベクトルを混ぜ合わせる(つまり、基底行列に基本変形を加える)ことで格子基底Bを生成することができる。双対直交性欠陥率が大きい格子基底Bから小さい格子基底Rを計算することが困難であるならば、同じく公開鍵から秘密鍵を計算することも困難となる。
【0009】
【非特許文献1】R.Rivestら,“A method for obtaining digital signatures and public−key cryptosystems”,Communications of the ACM,vol.21,no.2,pp.120−126,1978.
【非特許文献2】O.Goldreichら,“Public−Key Cryptosystems from Lattice Reduction Problems”,Proceedings of Crypto ‘97,LNCS 1294,Springer−Verlag,1997.
【発明の開示】
【発明が解決しようとする課題】
【0010】
しかしながら、上記非特許文献1に記載の技術では素因数分解問題の難しさが数学的に証明されていない(NP完全性の証明がされない)。また、素因数分解問題に基づく公開鍵暗号系では、鍵の長さを大きくしなければならないので、計算効率が悪いという点においても課題を有している。
【0011】
また、上記非特許文献2に記載の技術においても、双対直交性欠陥率が小さいような格子基底を計算することの困難性(NP困難性)が証明されていないという点において課題を有している。
【0012】
そこで、本発明は、上記課題を解決し、基づく問題が安全であることが示され(つまりNP完全であることが示され)、かつ、計算の効率が良い公開鍵暗号系を構成できる鍵生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明者らは、上記課題について鋭意検討を行ったところ、格子を利用した新たな問題であるBinary Exact Length Vector Problem(BELVP)を定義し、そのNP完全性を証明することによって、BELVPの困難性に基づく鍵生成方式を構成できることに想到し、本発明を完成させるに至った。BELVPとは入力として格子基底Vと格子ベクトルのノルムKが与えられたときに、格子基底Vが張る格子においてノルムKをもち、かつ、係数ベクトルがバイナリベクトルであるような格子ベクトルを計算する問題である。そして、BELVPはNP完全であることが証明される。また、係数ベクトルをバイナリベクトルに制限せず、整数ベクトルとして計算問題を構成することも可能である。この場合はNP完全であることは証明されていないが、BELVPと同様に難しい計算問題であることが予想される。BELVPにおいて、格子基底Vの各成分を非負整数、用いるノルムをlノルムに制限した場合は効率的な公開鍵暗号系を構成する際に特に有用であると考えられる。lノルムに関しては、2つの正成分を持つベクトルx,yとスカラーα≧0に対して、|x+y|=|x|+|y|,|αx|=α|x|が成立する。lノルムの計算では高々m回の加算のみが行われるので、lノルムの計算は非常に効率的に行われる。従って、lノルムを用いた公開鍵暗号系は効率的な計算が可能になる。
【0014】
即ち、本発明に係る鍵生成プログラムは、基づく問題が安全であることが示され、かつ、効率的な公開鍵暗号系を構成できる。
【0015】
より具体的に、本鍵生成プログラムは、コンピュータに、乱数生成部により作成される乱数を用いてm行n列(m、nは0より大きい整数)の格子基底Vを生成する格子基底生成部と、乱数生成部により作成される乱数を用いてn列の係数ベクトルxを生成する係数ベクトル生成部と、係数ベクトル生成部が生成した係数ベクトルxを秘密鍵として記録媒体に格納させる秘密鍵生成部と、格子基底生成部が生成した格子基底V、及び、格子基底Vと係数ベクトル生成部が生成した係数ベクトルxとに基づいて得られるlノルムKの組を公開鍵として記録媒体に格納させる公開鍵生成部と、して機能させる。
【0016】
また、本鍵生成プログラムにおいて、係数ベクトルxは、0又は1を成分とするバイナリベクトルであることも望ましく、格子基底Vにより得られる基底ベクトルは、互いに線形独立であり、成分は非負整数とすることも望ましく、lノルムのpは1であることも望ましい。また、本鍵生成プログラムは、電子署名方式プログラム、公開鍵暗号方式プログラム、公開鍵認証方式プログラムなどに代表される全ての公開鍵暗号系に用いることができる。
【0017】
ここで、lノルムとはxをm次元整数ベクトルとするときに、m個の成分の絶対値それぞれをp乗し、その総和をとり、さらにその総和に対してp乗根をとった値である。問題YがNP完全問題であるとは、YがNPに属し、かつ、NPに属する任意の問題がYに多項式時間多対一帰着するときにいう。多項式時間多対一帰着するとは、ある2つの問題XとYに対して、xがXに属するときのみf(x)がYに属するような多項式時間計算可能関数fが存在するときにいう。問題XがNPに属するとは、xがXに属するかどうかを判定する非決定性多項式時間チューリング機械が存在するときにいう。
【発明の効果】
【0018】
以上により、鍵生成方式が基づく問題の困難性の証明が与えられ、かつ、格子上での算術演算が定義されたため、基づく問題が安全であることが示され、効率的な公開鍵暗号系を構成できる鍵生成プログラムを提供することができる。
【0019】
更には、基づく問題を破る効率的なアルゴリズムが存在しないため、鍵長を短くすることが可能となり、また、公開鍵暗号系を構成する際に用いる計算も効率的であるため、本鍵生成方式を利用した公開鍵暗号系は効率的な計算が可能になると予測される。
【発明を実施するための最良の形態】
【0020】
以下、本発明の実施形態について図面を参照しつつ詳細に説明する。ただし、本発明は多くの異なる態様による実施が可能であり、本実施形態に限定されるものではない。
【0021】
(実施形態1)
図1は、本実施形態に係る鍵生成プログラムを電子署名方式に用いる場合の処理を表す図である。本鍵生成プログラム11は、電子署名方式プログラム1に組み込まれて機能する。本電子署名方式プログラム1は、作成された文書データに対し、文書データ及び鍵生成プログラム11により生成される秘密鍵に基づき、署名された文書データを作成する。この署名された文書データは他者に送付が可能であり、その送付された他者は公開鍵を参照することでこの署名された文書データが改変等されていないこと等の検証作業を行うことができる。
【0022】
図2は、本電子署名方式プログラムの機能ブロックを示す図である。本電子署名方式プログラムは、鍵生成プログラム11と、署名作成プログラム12とを少なくとも有して構成されている。また鍵生成プログラム11は更に、乱数生成部111と、格子基底生成部112、公開鍵生成部113、係数ベクトル生成部114、秘密鍵生成部115と、を有して構成されている。なお署名作成プログラム12は、上記鍵生成プログラムが生成する秘密鍵と、文書データとに基づき署名された文書データを作成する。なお、本電子署名方式プログラムは、例えばパーソナルコンピュータにおけるハードディスク等の記憶媒体に格納され、ユーザーのニーズに応じて実行される。
【0023】
ここで鍵生成プログラム11における処理について具体的に説明する。まず、鍵生成プログラム11は、格子基底生成部112においてm行n列の格子基底Vを作成する(m、nは0より大きい整数であり、mは格子の次元、nは格子のランク(セキュリティパラメータ)である。)。なおここで格子基底Vのそれぞれの成分はある程度のビット長を有する乱数として乱数生成部111により選ばれる。なおこの格子基底生成部112により作成される格子基底Vは、公開鍵生成部113が生成する公開鍵の一部となり、データとして記憶媒体に格納される。また、格子基底生成部112は、この作成された格子基底Vから得られる基底ベクトルが互いに線形独立であるか否かを判定する。なお基底ベクトルとは、格子基底Vをm行1列の列ベクトルに分解した場合における各列ベクトルをいう。基底ベクトルが互いに線形独立であるか否かの判断は周知な手法により計算することができ、特段に限定されるわけではないが、格子基底Vの行列式を計算することにより確認できる。なお、本実施形態においては、計算の簡略化のため基底行列の成分はいずれも非負整数であることが極めて望ましいが、計算の困難さを伴う場合を許容するのであれば、整数でない場合も可能ではある。
【0024】
一方、係数ベクトル作成部114は、n次元バイナリベクトルの係数ベクトルxを作成する。この成分は、乱数生成部111によりランダムに選択され、各成分は0又は1である。なお、この係数ベクトル作成部114により作成された係数ベクトルは、秘密鍵となり、秘密鍵生成部115においてデータとして記憶媒体に格納される。なおここで、係数ベクトルxの成分は0又は1のバイナリデータであることが鍵の長さの観点から極めて望ましいが、これを許容できるのであれば整数も任意に選択できる。
【0025】
次に、公開鍵生成部113は、上記作成された格子基底Vと係数ベクトルxに基づいて格子ベクトルVxを求め、この格子ベクトルVxのlノルムKを計算し、データとして記憶媒体に格納する。ここでlノルムKとは、以下の式で与えられる。なおpは、1以上の整数であれば特段に限定されるものではないが、本実施形態では計算の容易性の観点から1の場合を採用する。
【数1】

【0026】
この結果、公開鍵生成部113は、格子基底V及び求めたlノルムKの組を鍵(V,K)として記憶媒体に格納する。これにより、本鍵生成プログラムは秘密鍵及び公開鍵を生成することができる。
【0027】
格子基底の成分が非負整数であり、係数ベクトルがバイナリベクトルであり、lノルムのpが1である場合の署名生成は以下のようにして行われる。まず、署名生成者はランダムな係数ベクトルrを選択する。これは署名者の乱数生成部により空間[0,N]からランダムに選択される。ここで、Nはある程度の大きさを持つ正の定数である。そして上記で作成された係数ベクトルrと署名者の公開鍵記憶部に記憶されている格子基底Vに基づいて格子ベクトルVrを生成し、この格子ベクトルのlノルムcを計算する。そして署名者は署名を付したい文書mと、lノルムcのハッシュ値e=h(m,c)を計算する。ここで、用いるハッシュ関数hは暗号学的に安全であることが示されているものであれば、任意のハッシュ関数を用いることができる。そして、最後に署名成分yをy=r+exとして計算する。ここで、xは署名者の秘密鍵記憶部に保存されている署名者の秘密鍵である。最後に署名者は(e,y)を文書mに対する署名として出力する。
【0028】
署名検証に関しては、検証者は入力として受け取った文書mと文書mに関する署名(e,y)に対して、署名者の公開鍵(V,K)を用いて以下のような計算を行う。ここで、署名者の公開鍵は公開されて配布されており、検証者はその公開鍵を得て自身のコンピュータの公開鍵記憶部に記憶してあるとする。まず、ベクトルyを係数ベクトルとする格子ベクトルVyを計算し、そのlノルムdを計算する。そして、dからeKを減算し、その値と文書mとに基づいて計算されるハッシュ値h(m,d−eK)とeが等しくなるかを検証する。等しいならば署名(e,y)は署名者によって正しく作成された署名である。等しくないならば、検証者は署名が偽造されている、又は、文書が改変されているとして、署名を拒否する。なおこの署名検証はプログラムとして、電子署名方式プログラムの一部として組み込むことが可能であるし、単独のプログラムとして実行させることも可能である。
【0029】
ここで、上記の署名方式の安全性について説明する。電子署名方式の安全性を厳密に証明するためには、選択文書攻撃を行う偽造者に対して、どのような文書の偽造も不可能であることを示さなければならない。上記の署名方式の安全性を証明するためには、上記の署名方式に対応する認証方式(下記の認証方式)にゼロ知識性と呼ばれる性質が必要である。ここで、ゼロ知識性とは認証方式において、証明者と検証者が通信をした際に、証明者の保持する秘密情報に関して、一切の部分情報も検証者は分からないという性質である。対応する認証方式がゼロ知識性を有することが示されれば、後はID Reduction補題、Heavy
Row補題を用いて上記の署名方式の安全性の証明をすることが可能である。現在のところは、この性質は示されていないため上記のような安全性の証明も構成できていない。しかし、現実的な攻撃を考えた場合、ハッシュ関数がランダムであるならば、検証式を満たすような署名を構成することは難しいと考えられる。
【0030】
以上、本実施形態に係る鍵生成プログラムにより、基づく問題が安全であることが示され、かつ、効率的な公開鍵暗号系を構成できる鍵生成プログラムを提供することができる。
【0031】
(実施形態2、3)
実施形態1では、電子署名方式プログラムに鍵生成プログラムを用いる例を示したが、本鍵生成プログラムは、公開鍵暗号方式、公開鍵認証方式にも応用が可能である。図3に本鍵生成プログラムを公開鍵暗号方式プログラムに組み込んだ例を、図4に公開鍵認証方式プログラムに組み込んだ例を示す。
【0032】
図3に記載の公開鍵暗号方式プログラムは、作成された文書データを公開暗号化方式プログラムにより暗号文データとする。なおこの場合において、公開鍵暗号化方式プログラム2は、鍵生成プログラム21、暗号化プログラム22、とを有して構成され、鍵生成プログラム21は実施形態1とほぼ同様の構成を採用することができる。なおこの場合において、作成された秘密鍵は、暗号文データの復号に用いられ、作成された公開鍵は、文書データの暗号化に利用され、公開鍵暗号方式を実現できる。なお暗号化プログラム22は、鍵生成プログラム21により作成された公開鍵を利用し、暗号化された文書データを作成することができる。
【0033】
図4に記載の公開鍵認証方式プログラムは、ユーザ(証明者)の自己正当性を証明する。なおこの場合において、公開鍵認証方式プログラム3は、鍵生成プログラム31と、証明者プログラム32、検証者プログラム33を用いて構成され、鍵生成プログラム31は実施形態1とほぼ同様の構成を採用することができる。なおこの場合において作成された秘密鍵は証明者の自己正当性の証明に用いられ、公開鍵は、検証者が証明者の正当性を検証する際に用いられ、証明者プログラムと検証者プログラムが互いに通信することにより、認証作業を行うことができる。
【0034】
格子基底の成分が非負整数であり、係数ベクトルがバイナリベクトルであり、lノルムのpが1である場合の公開鍵認証方式は以下のようにして行われる。まず、証明者はランダムな係数ベクトルrを選択する。これは証明者の乱数生成部により空間[0,N]からランダムに選択される。ここで、Nはある程度の大きさを持つ正の定数である。そして上記で作成された係数ベクトルrと証明者の公開鍵記憶部に記憶されている格子基底Vに基づいて格子ベクトルVrを生成し、この格子ベクトルのlノルムcを計算する。そして証明者はlノルムcを検証者に送信する。検証者はcを受け取った後に、整数eをランダムに選ぶ。ここで、eは検証者の乱数生成部により区間[0,L]からランダムに選ばれる。検証者は証明者にeを送信する。証明者はeを受け取った後、係数ベクトルyをy=r+exとして計算する。ここで、xは証明者の秘密鍵記憶部に保存されている証明者の秘密鍵である。証明者は係数ベクトルyを検証者に送信する。
【0035】
検証者はyを受信した後、証明者の公開鍵(V,K)を用いて以下のような計算を行う。ここで、証明者の公開鍵は公開されて配布されており、検証者はその公開鍵を得て自身のコンピュータの公開鍵記憶部に記憶してあるとする。まず、ベクトルyを係数ベクトルとする格子ベクトルVyを計算し、そのlノルムdを計算する。そして、dからeKを減算し、その値が証明者によって送信されたcと等しくなるかを検証する。等しいならば検証者は証明者を正当なユーザーであると認識することができる。
【0036】
ここで、上記の認証方式の安全性について説明をする。上記の認証方式がゼロ知識性を有しているかは分かっていない。しかし、健全性と呼ばれる性質を有していることは示される。健全性とは、証明者の秘密情報を持たない攻撃者が、証明者に成りすまして検証者と対話したならば、検証者は高い確率で攻撃者を正当なユーザーであると認識しないという性質である。
以上述べたとおり、本鍵生成プログラムは様々な方式に応用でき、基づく問題が安全であることが示され、かつ、効率的な公開鍵暗号系を構成できる。
【図面の簡単な説明】
【0037】
【図1】実施形態に係る電子署名方式プログラムにおける処理を示す図。
【図2】実施形態に係る鍵生成プログラムの機能ブロックを示す図。
【図3】他の実施形態に係る公開鍵暗号方式プログラムにおける処理を示す図。
【図4】他の実施形態に係る公開鍵認証方式プログラムにおける処理を示す図。
【符号の説明】
【0038】
1…電子署名方式プログラム、11…鍵生成プログラム、12…署名作成プログラム、21…鍵生成プログラム、111…乱数生成部、112…格子基底生成部、113…公開鍵生成部、114…係数ベクトル生成部、115…秘密鍵生成部、

【特許請求の範囲】
【請求項1】
コンピュータに、
乱数生成部により作成される乱数を用いてm行n列(m、nは0より大きい整数)の格子基底Vを生成する格子基底生成部と、
前記乱数生成部により作成される乱数を用いてn列の係数ベクトルxを生成する係数ベクトル生成部と、
前記係数ベクトル生成部が生成した係数ベクトルxを秘密鍵として記録媒体に格納させる秘密鍵生成部と、
前記格子基底生成部が生成した前記格子基底V、及び、前記格子基底Vと前記係数ベクトル生成部が生成した係数ベクトルxとに基づいて得られるlノルムKの組を公開鍵として記録媒体に格納させる公開鍵生成部として機能させるための鍵生成プログラム。
【請求項2】
前記係数ベクトルxは、0又は1を成分とするバイナリベクトルであることを特徴とする請求項1記載の鍵生成プログラム。
【請求項3】
前記格子基底Vにより得られる基底ベクトルは、互いに線形独立であることを特徴とする請求項1記載の鍵生成プログラム。
【請求項4】
前記lノルムのpは1であることを特徴とする請求項1記載の鍵生成プログラム。
【請求項5】
前記格子基底Vの成分は全て非負整数であることを特徴とする請求項1記載の鍵生成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate