以下の実施例1では、暗号鍵生成装置の一例を説明する。なお、暗号鍵生成装置は、少なくとも、格子縮約攻撃に対して安全性を有する秘密鍵と公開鍵との組を生成する装置である。
まず、暗号鍵生成装置が生成する公開鍵と秘密鍵とについて説明する。公開鍵とは、公開鍵暗号方式において、平文の暗号化を行う際に用いられ、平文の送信元に対して配布される暗号鍵であり、行列形式で表される。また、秘密鍵とは、公開鍵暗号方式において、平文の復号化を行う際に用いられ、平文の送信先が保持する暗号鍵であり、行列形式で表される。
なお、公開鍵は、秘密鍵となる行列のエルミート標準形となる行列である。なお、エルミート標準形とは、ある整数行列に対して整数乗の行基本変形を施すことで得られる下三角行列、または、上三角行列である。
次に、2つの情報処理装置が、公開鍵と暗号鍵とを用いて、公開鍵暗号方式による暗号文の送受信を行う例について説明する。なお、以下の説明においては、暗号文の送信先となる情報処理装置は、従来の方式を用いて秘密鍵Vおよび公開鍵Bを生成する暗号鍵生成装置を有するものとする。例えば、送信先の情報処理装置は、公開鍵Bと秘密鍵Vとを生成し、暗号文の送信元となる情報処理装置に公開鍵Bを送付する。
一方、送信元の情報処理装置は、各成分が「0」又は「1」となるn次元の乱数ベクトルu=(u0、u1、…、un−1)を選択する。次に、送信元の情報処理装置は、フレッシュ暗号文となるベクトルa=2u+be1を生成する。ここでe1は、e1=(1、0、…0)を満たすベクトルである。次に、送信元の情報処理装置は、以下の式(2)を用いて、暗号文cを生成し、生成した暗号文cを送信する。ここで、式(2)のB−1とは、公開鍵Bの逆行列である。また、式(2)中の[a×B−1]とは、a×B−1に最も近い整数値を示す関数である。
一方、送信先の情報処理装置は、暗号文cを取得した場合には、以下の式(3)を用いて、n次元ベクトルa’を生成する。そして、送信先の情報処理装置は、生成したn次元ベクトルa’の第1成分となるa0’を取得し、取得したa0’を2で除算した余りを暗号文cの復号結果として取得する。
次に、数値例を用いて、秘密鍵と公開鍵とを用いた暗号化および復号化の例を説明する。なお、以下の例では、送信先の情報処理装置が次元数n=4、ビット長t=7の秘密鍵および公開鍵を生成し、送信元の情報処理装置が平文b=1を送信する例について説明する。
例えば、送信先の情報処理装置は、秘密鍵および公開鍵を生成するためのパラメータとして、次元数n=4、ビット長t=7を選択する。このような場合には、送信元の情報処理装置は、絶対値が7ビット以下の整数となる4次元の乱数ベクトルvを生成する。詳細な数値例を挙げると、送信元の情報処理装置は、v=(112、99、−125、77)を生成する。このような場合には、送信元の情報処理装置は、以下の式(4)で示す秘密鍵Vを生成する。
次に、送信元の情報処理装置は、式(4)で示す秘密鍵Vのエルミート標準形を算出することで、以下の式(5)で示す公開鍵Bを生成する。その後、送信元の情報処理装置は、生成した公開鍵Bを送信元の情報処理装置に配布する。
一方、送信元の情報処理装置は、成分が「0」または「1」となる4次元の乱数ベクトルとしてu=(1、0、1、1)を選択し、フレッシュ暗号文a=2u+be1=(3、0、2、2)を計算する。そして、送信元の情報処理装置は、以下の式(6)に示すように、通知された公開鍵Bを用いて、平文b=1から暗号文c=(−199178684、0、0、0)を生成し、生成した暗号文cを送信元の情報処理装置へ送信する。
このような場合には、送信先の情報処理装置は、式(3)を用いて暗号文cからa’=(3、0、2、2)を算出する。さらに、送信先の情報処理装置は、a’=(3、0、2、2)の第1成分となる「3」を取得し、取得した「3」を2で割った余り「1」を復号結果として取得する。なお、上述した例については、フレッシュ暗号文aと式(3)を用いて暗号文cから算出されるa’とが一致するため、暗号化および復号化を適切に行える。
しかしながら、上述した例では、送信先の情報処理装置が選択する次元数nとビット長tとが適切ではない場合に、LLLアルゴリズムやBKZアルゴリズムを用いた格子縮約攻撃によって、暗号文と公開鍵Bから容易に平文bを取得できるという問題がある。また、秘密鍵Vと公開鍵Bとを生成するたびに、格子縮約攻撃を実行し、安全性を検証する手法は、計算資源や計算時間の観点から非現実的である。
一方、実施例1に開示する暗号鍵生成装置は、秘密鍵Vと公開鍵Bとを生成するたびに格子縮約攻撃を実行せずとも、格子縮約攻撃に対する安全性を有する秘密鍵Vと公開鍵Bとを生成できる。以下、このような暗号鍵生成装置について図1を用いて説明する。
図1は、暗号鍵生成装置の機能構成の一例を説明するための図である。図1に示すように、暗号鍵生成装置1は、暗号パラメータ生成部10、安全性判定部11、暗号鍵生成部12を有する。また、暗号鍵生成装置1は、入力装置2および出力装置3と接続する。
入力装置2は、暗号鍵生成装置1に生成させる秘密鍵の次元数nとビット長tと解読成功確率pとを利用者が入力するための装置であり、例えば、キーボードやマウス等の装置である。ここで、解読成功確率pとは、暗号鍵生成装置1に生成させる秘密鍵および公開鍵による暗号化に対して許容する格子縮約攻撃の成功確率を示す。
出力装置3は、暗号鍵生成装置1が生成した秘密鍵および公開鍵を出力するための装置である。なお、図1に示す例では、暗号鍵生成装置1は、生成した秘密鍵および公開鍵を出力装置3に出力するが、実施例は、これに限定されるものではない。例えば、暗号鍵生成装置1は、公開鍵のみを出力するとともに、出力した公開鍵によって暗号化された暗号文を復号する復号化装置に対して秘密鍵を出力することとしてもよい。
暗号パラメータ生成部10は、入力装置から次元数nとビット長tと解読成功確率pとを受信すると、受信した次元数nとビット長tと解読成功確率pとを安全性判定部11に通知する。また、安全性判定部11は、通知された次元数nとビット長tから生成される秘密鍵と公開鍵に対する格子縮約攻撃の成功率が通知された解読成功確率p以下となるか否かを判別し、判別結果を暗号パラメータ生成部10に通知する。
このため、暗号パラメータ生成部10は、安全性判定部11から格子縮約攻撃の成功率が解読成功確率p以下となる旨の通知として「Yes」を受付けると、安全性判定部11に通知した次元数nとビット長tとを暗号鍵生成部12に通知する。また、暗号鍵生成部12は、暗号パラメータ生成部10から次元数nとビット長tとの通知を受付けた場合には、通知された次元数nとビット長tとを用いて、秘密鍵Vと公開鍵Bとを生成し、生成した秘密鍵Vと公開鍵Bとを暗号パラメータ生成部10に出力する。その後、暗号パラメータ生成部10は、暗号鍵生成部12が出力した秘密鍵Vと公開鍵Bとを出力装置3に出力する。
一方、暗号パラメータ生成部10は、安全性判定部11から格子縮約攻撃の成功率が解読成功確率pよりも大きい旨の通知として「No」を受付けると、新たな次元数nとビット長tとを選択し、新たに選択した次元数nとビット長tと解読成功確率pとを安全性判定部11に通知する。例えば、暗号パラメータ生成部10は、前回通知したビット長tから1デクリメントした値を新たなビット長tとし、安全性判定部11に通知する。
安全性判定部11は、暗号パラメータ生成部10から次元数nとビット長tと解読成功確率pとを取得した場合には、次元数nとビット長tから格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出する。そして、安全性判定部11は、格子縮約攻撃の成功率がp以下となる次元数n0とビット長t0から算出される係数と算出したエルミートファクタとの積が、算出したキーパラメータよりも大きいか否かを判別する。
その後、安全性判定部11は、算出した係数とエルミートファクタとの積が、算出したキーパラメータよりも大きい場合には、格子縮約攻撃の成功率が解読成功確率p以下となる旨を示す通知として「Yes」を暗号パラメータ生成部10に通知する。一方、安全性判定部11は、算出した係数とエルミートファクタとの積が、算出したキーパラメータよりも小さい場合には、格子縮約攻撃の成功率が解読成功確率pよりも大きい旨を示す通知として「No」を暗号パラメータ生成部10に通知する。
以下、安全性判定部11が実行する処理を具体的に説明する。まず、安全性判定部11は、暗号パラメータ生成部10から次元数n、ビット長t、解読成功確率pを取得する。すると、安全性判定部11は、次元数nを用いて、格子縮約アルゴリズムのエルミートファクタを算出する。
ここで、エルミートファクタとは、次元数nの行列に対して格子縮約アルゴリズムを用いることにより縮小した基底を示す行列を算出し、算出した行列の各行、又は、各列から求められる最小のノルムを行列の判別式の1/n乗で除算した値である。ここで、ノルムとは、ベクトルの各成分の2乗の和の2乗根となる値である。このようなエルミートファクタは、格子縮約アルゴリズムによりそれぞれ異なる値を有しており、LLLアルゴリズムのエルミートファクタはδ(n)=1.018n、BKZアルゴリズムのエルミートファクタは、δ(n)=1.01nとなることが知られている。
また、安全性判定部11は、次元数nとビット長tとを用いて、以下の式(7)に示すキーパラメータδ(n,t)を算出する。なお、式(7)中のπとは円周率を示し、eとは、自然対数の値である。
また、安全性判定部11は、解読成功確率がp以下となる秘密鍵Vと公開鍵Bとを生成するための次元数n0とビット長t0とを抽出する。次に、安全性判定部11は、抽出した次元数n0とビット長t0とを用いて、エルミートファクタδ(n0)とキーパラメータδ(n0、t0)を算出する。また、安全性判定部11は、算出したエルミートファクタδ(n0)とキーパラメータδ(n0、t0)とから、係数c=δ(n0、t0)/δ(n0)を導出する。そして、安全性判定部11は、次元数nとビット長tとから算出したエルミートファクタとキーパラメータとが、以下の式(8)を満たすか否かを判別する。
すなわち、安全性判定部11は、格子縮約攻撃の成功率がp以下となる次元数n0とビット長t0から算出される係数と、暗号パラメータ生成部10から取得した次元数nから算出されるエルミートファクタとの積を算出する。そして、安全性判定部11は、係数とエルミートファクタとの積が、暗号パラメータ生成部10から取得した次元数nとビット長tとから算出されるキーパラメータよりも大きいか否かを判別する。
そして、安全性判定部11は、次元数nとビット長tとから算出したエルミートファクタとキーパラメータとが、以下の式(8)を満たす場合には、解読成功確率がp以下となる旨を示す通知として「Yes」を暗号パラメータ生成部10に通知する。一方、安全性判定部11は、次元数nとビット長tとから算出したエルミートファクタとキーパラメータとが、以下の式(8)を満たさない場合には、解読成功確率がpよりも大きい旨を示す通知として「No」を暗号パラメータ生成部10に通知する。
ここで、安全性判定部11は、解読成功確率がp以下となる秘密鍵Vと公開鍵Bとを生成するための次元数n0とビット長t0とを任意の方法で抽出し、係数cを算出してよい。例えば、安全性判定部11は、実際に格子縮約攻撃を行うことで、解読成功確率がp以下となる次元数n0とビット長t0とを抽出してもよい。
すなわち、安全性判定部11は、次元数の候補となるn’およびビット長の候補となるt’をランダムに選択し、選択した次元数の候補n’およびビット長の候補t’を暗号パラメータ生成部10に送信する。すると、暗号パラメータ生成部10は、次元数の候補n’およびビット長の候補t’を暗号鍵生成部12に通知し、次元数の候補n’およびビット長の候補t’から1/p個のランダムな暗号鍵を生成させる。
また、暗号パラメータ生成部10は、次元数の候補n’およびビット長の候補t’から生成させた1/p個の暗号鍵を安全性判定部11に送信する。そして、安全性判定部11は、暗号パラメータ生成部10から受信した暗号鍵に対して格子縮約攻撃を実施し、解読成功確率p’を算出する。
安全性判定部11は、ビット長の候補t’から1をデクリメントした次元数の候補n’および新たなビット長の候補t’−1を暗号パラメータ生成部10に通知し、暗号鍵生成部12に生成させた暗号鍵に対して、再度格子縮約攻撃を実行する。このような処理を繰り返すことで、安全性判定部11は、解読成功確率がp以下となる次元数n0とビット長t0とを抽出してもよい。
なお、安全性判定部11は、上述した処理を1度だけ行い、処理結果を記憶してもよい。例えば、安全性判定部11は、上述した処理を格子縮約アルゴリズムおよび解読成功確率pごとにあらかじめ行い、格子縮約アルゴリズムごとに、解読成功確率pと、係数cとを対応付けて記憶する。そして、安全性判定部11は、暗号パラメータ生成部10から通知された解読成功確率pと対応付けられた係数cを用いて式(8)を満たすか否かを判別してもよい。
このような場合には、安全性判定部11は、次元数nおよびビット長tから生成する暗号鍵が格子縮約攻撃に対して安全性を有するか否かを、計算資源を浪費することなく、迅速におこなうことができる。なお、例えば、安全性判定部11は、格子縮約攻撃として、LLLアルゴリズムを用いた格子縮約攻撃、または、BKZアルゴリズムを用いた格子縮約攻撃を採用できるが、これ以外にも、任意のアルゴリズムを用いた格子縮約攻撃を採用できる。
ここで、解読成功確率がp以下となる次元数n0とビット長t0とから算出した係数とエルミートファクタとの積が、キーパラメータよりも大きいか否かを安全性判定部11が判定することで、解読成功確率がp以下か否かを判定できる点について説明する。まず、格子縮約アルゴリズムを用いて格子縮約攻撃を行う情報処理装置が実行する処理について説明する。例えば、情報処理装置は、暗号文cと公開鍵Bとを用いて、式(9)に示す(n+1)×(n+1)行列Cを生成する。
ここで、行列Cの行ベクトルを(b0、b1、…、bn)とし、(b0、b1、…、bn)を係数とする線形結合の元a0b0+a1b1+…+anbnのなす集合Sを考える。ここで、a0〜anおよびb0〜bnは、整数であるものとする。また、(b0、b1、…、bn)は行列Cの基底ベクトルであり、集合Sを基底ベクトル(b0、b1、…、bn)が生成する格子と呼ぶ。
ここで、公開鍵暗号方式で通信を行う情報処理装置は、暗号文cを秘密鍵Vを用いて復号する際には、式(3)中のベクトルa’を算出する。このとき、(n+1)次元ベクトルである(a’、1)は、集合Sに元として含まれ、集合Sに含まれるベクトルの中で最小のノルムを持つ。
一方、行列Cに対して格子縮約アルゴリズムを適用することで算出される縮小した基底を示す行列を行列Dとすると、行列Dの行ベクトルは、ベクトル(a’、1)と同じ集合Sに含まれることとなる。また、格子縮約アルゴリズムによって算出される行列Dの第1行ベクトルは、最も少ないノルムを有する傾向がある。このため、行列Dの第1行ベクトルをd0としたとき、d0=(a’、1)となる可能性が高い。
すると、d0=(a’、1)を従属するような状態において、公開鍵Bと暗号文cから算出することができる行列Cに格子縮約アルゴリズムを適用した行列Dから、式(3)に示すベクトルa’を算出することができる。ここで、ベクトルa’の第1成分を2で割った余りを算出すると、暗号文cの復号結果となるので、情報処理装置は、暗号文cと公開鍵Bから復号結果を得ることができる。
上述したように、行列Cに格子縮約アルゴリズムを適用して得られる行列Dの第1ベクトルであるd0のノルムが集合Sの中で最小となる場合には、格子縮約攻撃が成功することとなる。ここで、非特許文献5によると、δ(n、t)>cδ(n)が成り立つ場合には、d0のノルムが集合Sの中で最小となり、格子縮約攻撃が成功する点が示されている。
ここで、係数cは、解読成功確率pの値と格子縮約アルゴリズムの種類のみに依存する値である。また、δ(nb、tb)=cδ(nb)を満たす(nb、tb)を安全な入力パラメータ(n、t)の境界値とすると、次元数nを固定した際に、t≦tbを満たすビット長を用いて生成される暗号鍵の解読成功確率が同じ傾向を有する。また、次元数tを固定した際に、n≧nbを満たす次元数を用いて生成される暗号鍵の解読成功確率が同じ傾向を有する。
このため、安全性判定部11は、次元数nとビット長tとが、解読成功確率pと格子縮約アルゴリズムとに係る係数cを用いて、δ(n、t)<cδ(n)を満たすか否かを判別することにより、解読成功確率がp以下となるか否かを判別することができる。
次に、図を用いて、次元数nを固定した際に、t≦tbを満たすビット長で暗号鍵の解読成功確率が同じ傾向を有する点、および、次元数tを固定した際に、n≧nbを満たす次元数で生成される暗号鍵の解読成功確率が同じ傾向を有する点について説明する。なお、以下の説明では、図2〜図4を用いて、格子縮約攻撃による解読成功確率の平均について説明し、その後、図5、図6を用いて、係数c=δ(n0、t0)/δ(n0)から求められる安全な次元数nとビット長tとの関係について説明する。
図2は、n=256の際にLLLアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図2に示す例では、次元数nを256に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、LLLアルゴリズムによる格子縮約攻撃の成功確率の平均を示した。また、図2に示す例では、横軸をビット長とし、縦軸を成功確率とした。
例えば、図2に示す例では、秘密鍵のビット長が4である際に、格子縮約攻撃の成功確率の平均が0パーセントとなり、秘密鍵のビット長が5である際に、格子縮約攻撃の成功確率の平均が4.62パーセントとなった。また、秘密鍵のビット長が6である際には格子縮約攻撃の成功確率の平均が79.65パーセントとなり、秘密鍵のビット長が7である際に、格子縮約攻撃の成功確率の平均が99.9パーセントとなった。また、秘密鍵のビット長が8である際に、格子縮約攻撃の成功確率が100パーセントとなった。
また、図3は、n=512の際にLLLアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図3に示す例では、次元数nを512に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、LLLアルゴリズムによる格子縮約攻撃の成功確率を示した。また、図3に示す例では、図2と同様に横軸をビット長とし、縦軸を成功確率とした。
例えば、図3に示す例では、秘密鍵のビット長が11、12である際に、格子縮約攻撃の成功確率が0パーセントとなり、秘密鍵のビット長が13である際に、格子縮約攻撃の成功確率の平均が31.8パーセントとなった。また、秘密鍵のビット長が14である際には格子縮約攻撃の成功確率の平均が98.8パーセントとなり、秘密鍵のビット長が15である際に、格子縮約攻撃の成功確率が100パーセントとなった。
また、図4は、n=512の際にBKZアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図4に示す例では、次元数nを512に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、BKZアルゴリズムによる格子縮約攻撃の成功確率を示した。また、図3に示す例では、図2と同様に横軸をビット長とし、縦軸を成功確率とした。
例えば、図4に示す例では、秘密鍵のビット長が6以下の際に、格子縮約攻撃の成功確率が0パーセントとなり、秘密鍵のビット長が7である際に、格子縮約攻撃の成功確率の平均が0.5パーセントとなった。また、秘密鍵のビット長が8である際には格子縮約攻撃の成功確率の平均が97.3パーセントとなり、秘密鍵のビット長が9である際に、格子縮約攻撃の成功確率が100パーセントとなった。
ここで、p=0.1、n=256とし、LLLアルゴリズムのエルミートファクタを用いて係数cを算出した場合には、c=0.08となる。ここで、横軸を次元数n、縦軸をビット長tとし、c=0.08の際に式(8)を満たす境界値をプロットすると、図5のようになる。図5は、LLLアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ(n、t)の範囲を説明するための図である。なお、図5に示す例では、次元数nとビット長tとの組み合わせが、図5に示す折れ線グラフよりも下の範囲に含まれる場合には、解読成功確率が0.1パーセント以下となる。
例えば、図5に示す例では、次元数n=256の際、ビット長tの境界値t’が、4.99以下の際に、解読成功確率が0.1パーセント以下となる。一方、図2を参照すると、ビット長tが4以下の場合には、解読成功確率が0.1以下となることが確認できる。また、図5に示す例では、次元数n=512の際、ビット長tの境界値t’が、11.08以下の際に、解読成功確率が0.1パーセント以下となる。一方、図3を参照すると、ビット長tが12以下の場合には、解読成功確率が0.1以下となることが確認できる。
一方、図6は、BKZアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ(n、t)の範囲を説明するための図である。なお、図6に示す例では、図5と同様に、BKZアルゴリズムのエルミートファクタを用いて算出した係数cを用いた際に、式(8)を満たす境界値をプロットした。
例えば、図6に示す例では、次元数n=512の際、ビット長tの境界値t’が、6.99以下の際に、解読成功確率が0.1パーセント以下となる。一方、図4を参照すると、ビット長tが6以下の場合には、解読成功確率が0.1以下となることが確認できる。
このように、次元数nが変化しても、式(8)を用いることで、同一の係数cによって定まる安全な次元数nおよびビット長tの組み合わせを適切に求めることができる。よって、nが大きい値になった場合であっても、式(8)を用いることで、解読成功確率がp未満となるか否かを正しく判別することができる。
なお、図5および図6に示すように、格子縮約アルゴリズムが変化した場合には、係数cの値が変化するため、安全な次元数nおよびビット長tの組み合わせが変化する。しかしながら、図3および図4を比較することで明らかな通り、異なる格子縮約アルゴリズムが適用された場合にも、係数cから求められる安全な次元数nおよびビット長tの組み合わせの傾向が類似する。このため、格子縮約アルゴリズムが異なる場合であっても、対応する係数cを算出することで、式(8)を用いた判定を行うことができる。
以上のように、安全性判定部11は、格子縮約アルゴリズムに応じたエルミートファクタとキーパラメータと用いて、解読成功確率がp以下となる次元数n0およびビット長t0を抽出し、抽出した次元数n0およびビット長t0を用いて係数cを算出する。そして、安全性判定部11は、算出した係数cと式(8)を用いることにより、暗号パラメータ生成部10から通知された次元数nおよびビット長tから生成される暗号鍵の解読成功確率がp未満か否かを判別することができる。
図1に戻って、暗号鍵生成部12は、安全性判定部11が、次元数nとビット長tとから生成される暗号鍵の解読成功確率がp以下となる場合には、暗号鍵を生成する。具体的には、暗号鍵生成部12は、安全性判定部11が次元数nとビット長tとから生成される暗号鍵の解読成功確率がp以下となると判別した場合には、暗号パラメータ生成部10から次元数nとビット長tとを取得する。
このような場合には、暗号鍵生成部12は、次元数nの乱数ベクトルvを選択し、式(1)に示す行列Vを生成する。また、暗号鍵生成部12は、生成した行列Vのエルミート標準形となる行列Bを算出する。この際、暗号鍵生成部12は、行列Bの第1行に含まれる要素のうち第1列目の要素が判別式として抽出する。そして、暗号鍵生成部12は、抽出した判別式を2で除算した余りが1である場合には、算出した行列Vを秘密鍵Vとし、行列Bを公開鍵Bとして暗号パラメータ生成部10に出力する。一方、暗号鍵生成部12は、抽出した判別式を2で除算した余りが1ではない場合には、再度、次元数nの乱数ベクトルvを選択し、行列Vの生成を行う。
次に、数値例を用いて、暗号鍵生成装置1が格子縮約攻撃に対して安全な秘密鍵Vおよび公開鍵Bを出力する処理について説明する。例えば、暗号鍵生成装置1は、入力装置から、要求される次元数n、ビット長t、解読成功確率pとして(n、t、p)=(512、20、0.1)を取得する。
このような場合には、安全性判定部11は、n=256の際に解読成功確率が0.1以下となる(n0,t0)を抽出する。例えば、安全性判定部11は、ランダムに選択した(n’、t’)=(256、4)を用いて暗号鍵の候補を生成し、生成した候補に対して格子縮約攻撃を行う処理を、1/p=1000回実行し、何回解読に成功したかを記録する。次に、安全性判定部11は、(n’、t’)=(256、3)として同様の格子縮約攻撃を行い、攻撃成功確率がp=0.1以下となるt0が得られるまで繰り返す。
この結果、安全性判定部11は、n’=256の際に解読成功確率pが0.1以下となるt’がt’<5であると判別する。この結果、安全性判定部11は、n0=256、t0=5を抽出する。次に、安全性判定部11は、式(7)に(n0、t0)を代入してキーパラメータδ(n0、t0)=7.758を算出する。また、安全性判定部11は、n0=256を用いて、LLLアルゴリズムのエルミートファクタδ(n0)=96.257を算出する。この結果、安全性判定部11は、係数c=δ(n0、t0)/δ(n0)=0.08を算出する。
次に、安全性判定部11は、暗号パラメータ生成部10から通知された次元数n=512とビット長t=20からエルミートファクタδ(n)およびキーパラメータδ(n、t)を算出し、式(8)を満たすか否かを判別する。ここで、n=512、t=20の場合には、δ(n、t)=216×(513/(2×3.14×2.72))1/2=359148となり、cδ(n)−δ(n、t)=−358407となる。この結果、安全性判定部11は、n=512、t=20の場合は、式(8)を満たさないと判別する。
このような場合には、暗号パラメータ生成部10は、tの値を1デクリメントし、n=512、t=19を通知することとなる。このような処理を継続すると、安全性判定部11は、n=512、t=10となった際に、cδ(n)−δ(n、t)=390.498と算出し、式(8)を満たすと判別する。この結果、暗号パラメータ生成部10は、n=512、t=10を暗号鍵生成部12に通知し、秘密鍵Vおよび公開鍵Bを生成させる。その後、暗号パラメータ生成部10は、暗号鍵生成部12が生成した秘密鍵Vおよび公開鍵Bを出力装置3に送信する。
このように、暗号鍵生成装置1は、次元数nとビット長tとを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出する。また、暗号鍵生成装置1は、解読成功確率がp以下となる次元数n0とビット長t0から算出する係数と、次元数nから算出するエルミートファクタとの積が、次元数nとビット長tとから算出するキーパラメータより大きいか否かを判別する。そして、暗号鍵生成装置1は、次元数n0とビット長t0から算出する係数と、次元数nから算出するエルミートファクタとの積が、次元数nとビット長tとから算出するキーパラメータより大きい場合には、次元数nとビット長tから秘密鍵Vと公開鍵Bを生成する。
このため、暗号鍵生成装置1は、秘密鍵Vおよび公開鍵Bを生成するたびに、格子縮約攻撃を行う事で安全性を判別せずとも、格子縮約攻撃に対して安全性を有する秘密鍵Vおよび公開鍵Bを算出することができる。また、暗号鍵生成装置1は、格子縮約アルゴリズムごとの係数cを予め記憶する場合は、格子縮約攻撃に対して安全性を有する暗号鍵を迅速に生成し、出力することができる。
例えば、暗号パラメータ生成部10、安全性判定部11、暗号鍵生成部12とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
次に、図を用いて、暗号鍵生成装置1が有する暗号パラメータ生成部10、安全性判定部11、暗号鍵生成部12が実行する処理の流れについて説明する。まず、図7を用いて、暗号パラメータ生成部10が実行する処理の流れについて説明する。
図7は、暗号パラメータ生成部が実行する処理の流れを説明するためのフローチャートである。図7に示す例では、暗号パラメータ生成部10は、入力装置2から、次元数n、ビット長t、解読成功確率pを取得する(ステップS101)。次に、暗号パラメータ生成部10は、取得した次元数n、ビット長t、解読成功確率pを安全性判定部11に出力する(ステップS102)。
そして、暗号パラメータ生成部10は、安全性判定部11の出力が「Yes」であるか否かを判別し(ステップS103)、Yesである場合には(ステップS103肯定)、次元数nとビット長tを暗号鍵生成部12に出力する(ステップS104)。その後、暗号パラメータ生成部10は、暗号鍵生成部12が生成した秘密鍵Vと暗号鍵Bを出力し(ステップS105)、処理を終了する。
一方、暗号パラメータ生成部10は、安全性判定部11の出力が「No」である場合には(ステップS103否定)、異なる次元数n、または、ビット長tを選択する(ステップS106)。そして、暗号パラメータ生成部10は、ステップS102の処理を実行する。
次に、図8を用いて、安全性判定部11が実行する処理の流れについて説明する。図8は、安全性判定部が実行する処理の流れを説明するためのフローチャートである。例えば、図8に示す例では、安全性判定部11は、暗号パラメータ生成部10から次元数n、ビット長t、解読成功確率pを取得する(ステップS201)。次に、安全性判定部11は、解読成功確率がp以下となるδ(n0、t0)を導出する(ステップS202)。
また、安全性判定部11は、係数c=δ(n0、t0)/δ(n0)を算出する(ステップS203)。また、安全性判定部11は、ステップS201で取得した次元数nとビット長tとを用いて、エルミートファクタδ(n)とキーパラメータδ(n、t)を算出する(ステップS204)。そして、安全性判定部11は、cδ(n)−δ(n、t)>0を満たすか否かを判別する(ステップS205)。
その後、安全性判定部11は、ステップS201で取得した次元数nとビット長tとがcδ(n)−δ(n、t)>0を満たす場合は(ステップS205肯定)、「Yes」を暗号パラメータ生成部10に出力し(ステップS206)、処理を終了する。一方、安全性判定部11は、、ステップS201で取得した次元数nとビット長tとがcδ(n)−δ(n、t)>0を満たさない場合は(ステップS205否定)、「No」を暗号パラメータ生成部10に出力し(ステップS207)、処理を終了する。
次に、図9を用いて、暗号鍵生成部12が実行する処理の流れについて説明する。図9は、暗号鍵生成部が実行する処理の流れを説明するためのフローチャートである。図9に示す例では、暗号鍵生成部12は、暗号パラメータ生成部10から、次元数nとビット長tとを取得する(ステップS301)。すると、暗号鍵生成部12は、n次元の乱数ベクトルvを生成し、生成した乱数ベクトルvから式(1)を用いて行列Vを生成する(ステップS302)。次に、暗号鍵生成部12は、行列Vのエルミート標準形となる行列Bを生成する(ステップS303)。
そして、暗号鍵生成部12は、行列Bの(1、1)成分、すなわち、行列Bの1行目に含まれる各要素のうち、1列目に位置する要素の値を2で割った余りが1であるか否かを判別する(ステップS304)。その後、暗号鍵生成部12は、行列Bの(1、1)成分の値を2で割った余りが1である場合には(ステップS304肯定)、行列Vを秘密鍵とし、行列Bを公開鍵として、暗号パラメータ生成部10に出力し(ステップS305)、処理を終了する。一方、暗号鍵生成部12は、行列Bの(1、1)成分の値を2で割った余りが0となる場合には(ステップS304否定)、新たなn次元の乱数ベクトルvを生成し、生成した乱数ベクトルvから行列Vを生成する(ステップS302)。
上述したように、暗号鍵生成装置1は、選択した次元数nとビット長tとを用いて、格子縮約アルゴリズムのエルミートファクタδ(n)とキーパラメータδ(n、t)を算出する。また、暗号鍵生成装置1は、解読成功確率がp以下となる次元数n0とビット長t0から係数cを算出し、cδ(n)−δ(n、t)>0を満たすか否かを判別する。
そして、暗号鍵生成装置1は、cδ(n)−δ(n、t)>0を満たす場合には、次元数nとビット長tとを用いて、秘密鍵Vと公開鍵Bを生成する。このため、暗号鍵生成装置1は、秘密鍵Vと公開鍵Bを生成する度に格子縮約攻撃を行わずとも、格子縮約攻撃に対して安全性を有する秘密鍵Vと公開鍵Bを生成することができる。
また、暗号鍵生成装置1は、cδ(n)−δ(n、t)>0を満たさない場合には、ビット長tから1をデクリメントしたビット長を新たに選択し、次元数nと新たに選択したtとがcδ(n)−δ(n、t)>0を満たすか否かを判別する。このため、暗号鍵生成装置1は、入力された次元数nに対して安全性を有するビット長tを用いた秘密鍵Vと公開鍵Bを生成することができる。
また、暗号鍵生成装置1は、解読成功確率がp以下となる次元数n0とビット長t0から係数c=δ(n0、t0)/δ(n0)を算出し、cδ(n)−δ(n、t)>0を満たすか否かを判別する。このため、暗号鍵生成装置1は、次元数nとビット長tとから生成させる秘密鍵Vと公開鍵Bが安全性を有するか否かを正しく判別することができる。
また、暗号鍵生成装置1は、ランダムに選択した次元数n’とビット長t’とを用いて、解読成功確率pの逆数と同数の暗号鍵候補を生成する。そして、暗号鍵生成装置1は、生成した暗号鍵候補に対する格子縮約攻撃を行うことで、解読成功確率がp以下となる次元数n0とビット長t0とを算出する。
このため、暗号鍵生成装置1は、格子縮約アルゴリズムの種別と、解読成功確率pとの組み合わせによって定まる係数cを保持していない場合にも、解読成功確率がp以下となる次元数n0とビット長t0とを算出することで、係数cを取得することができる。この結果、暗号鍵生成装置1は、任意の格子縮約アルゴリズムと、解読成功確率pとの組み合わせを満たす秘密鍵Vと公開鍵Bとを出力することができる。
また、暗号鍵生成装置1は、LLLアルゴリズム、または、BKZアルゴリズムを用いた格子縮約攻撃に対して、解読成功確率がp以下となる次元数n0とビット長t0とを算出する。このため、暗号鍵生成装置1は、LLLアルゴリズム、または、BKZアルゴリズムに対して、解読成功確率がp以下となる秘密鍵Vと公開鍵Bとを出力することができる。
なお、暗号鍵生成装置1は、実際にランダムに生成した暗号鍵に対する格子縮約攻撃を行うとしても、一般に用いられる次元数nやビット長tよりも小さい値の次元数n’およびビット長t’を生成する。そして、暗号鍵生成装置1は、生成した次元数n’およびビット長t’に基づいて、次元数n0およびビット長t0を算出し、算出した次元数n0およびビット長t0から係数cを算出する。
このため、暗号鍵生成装置1は、実際に格子縮約攻撃を行う場合にも、計算量を削減し、現実的な時間内で係数cを算出することができる。ここで、係数cは、次元数nやビット長tの値によらない値である。このため、暗号鍵生成装置1は、一般に用いられる次元数nやビット長tと比較して小さな次元数n0およびビット長t0から係数cを算出した場合にも、次元数nやビット長tが安全性を有するか否かを適切に判別することができる。
また、暗号鍵生成装置1は、格子縮約アルゴリズムの種類ごとに、あらかじめ、解読成功確率がp以下となる次元数n0とビット長t0から係数cを導出して保持する。そして、暗号鍵生成装置1は、入力された解読成功確率pに応じた係数cを用いて、入力された次元数nとビット長tとがcδ(n)−δ(n、t)>0を満たすか否かを判別する。このため、暗号鍵生成装置1は、計算資源をさらに削減することができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)次元数n、ビット長tの入力について
上述した暗号鍵生成装置1は、入力装置2を介して、次元数n、ビット長t、解読成功確率pを取得し、取得した次元数n、ビット長tから算出される秘密鍵Vおよび公開鍵Bが解読成功確率pを満たすか否かを判別した。しかし実施例は、これに限定されるものではない。
例えば、暗号鍵生成装置1は、次元数n、ビット長tの入力を行わずとも、解読成功確率がp以下となる秘密鍵Vおよび公開鍵Bを自動的に出力しても良い。例えば、暗号パラメータ生成部10は、次元数nとビット長tとをランダムに生成する。そして、暗号パラメータ生成部10は、ランダムに生成した次元数n、ビット長t、解読成功確率pを安全性判定部11に出力する。
そして、暗号パラメータ生成部10は、ランダムに生成した次元数nおよびビット長tから生成される暗号鍵の解読成功確率がp以上となる場合、すなわち、安全性判定部11から「No」を受信した場合には、ビット長tから1をデクリメントする。そして、暗号パラメータ生成部10は、次元数nとビット長(t−1)を安全性判定部11に出力する。以上の処理を繰り返すことで、暗号鍵生成装置1は、次元数nおよびビット長tの指定を取得せずとも、解読成功確率がp以下となる秘密鍵Vと公開鍵Bとを生成することができる。
また、暗号鍵生成装置1は、次元数nのみの指定を受付けることとしてもよい。このような場合には、暗号パラメータ生成部10は、ランダムに生成したビット長t’と指定された次元数nと、固定の解読成功確率pとを安全性判定部11に出力する。そして、暗号パラメータ生成部10は、安全性判定部11が「Yes」を出力するまで、ビット長t’をデクリメントすることとしてもよい。
以下、数値を用いた具体例を説明する。例えば、暗号鍵生成装置1は、入力装置2から、要求される次元数n、解読成功確率pとして(n、p)=(1024、0.1)を取得する。このような場合には、安全性判定部11は、解読成功確率が0.1以下となる(n0,t0)を抽出する。
例えば、安全性判定部11は、ランダムに選択した(n’、t’)=(256、4)を用いて暗号鍵の候補を生成し、生成した候補に対して格子縮約攻撃を行う処理を、1/p=1000回実行し、何回解読に成功したかを記録する。次に、安全性判定部11は、(n’、t’)=(256、3)として同様の格子縮約攻撃を行い、攻撃成功確率がp=0.1以下となるt0が得られるまで繰り返す。
この結果、安全性判定部11は、n’=256の際に解読成功確率pが0.1以下となるt’がt’<5であると判別する。この結果、安全性判定部11は、n0=256、t0=5を抽出する。次に、安全性判定部11は、式(7)に(n0、t0)を代入してキーパラメータδ(n0、t0)=7.758を算出する。また、安全性判定部11は、n0=256を用いて、LLLアルゴリズムのエルミートファクタδ(n0)=96.257を算出する。この結果、安全性判定部11は、係数c=δ(n0、t0)/δ(n0)=0.08を算出する。
次に、暗号パラメータ生成部10は、ランダムに選択したビット長として、t=25と次元数n=1024と、解読成功確率p=0.1とを安全性判定部11に通知する。すると、安全性判定部11は、暗号パラメータ生成部10から通知された次元数n=1024とビット長t=25からエルミートファクタδ(n)およびキーパラメータδ(n、t)を算出し、式(8)を満たすか否かを判別する。ここで、n=1024、t=25の場合には、cδ(n)−δ(n、t)=−9377540となる。この結果、安全性判定部11は、n=1024、t=25の場合は、式(8)を満たさないと判別する。
このような場合には、暗号パラメータ生成部10は、tの値を1デクリメントし、n=1024、t=24を通知することとなる。このような処理を継続すると、安全性判定部11は、n=1024、t=24となった際に、cδ(n)−δ(n、t)=−1254893となるので、式(8)を満たさないと判別する。
このため、暗号パラメータ生成部10は、n=1024、t=23を安全性判定部11に通知する。すると、安全性判定部11は、cδ(n)−δ(n、t)=2806429となるので、式(8)を満たすと判別し、暗号パラメータ生成部10に「Yes」を出力する。この結果、暗号パラメータ生成部10は、n=1024、t=23を暗号鍵生成部12に出力し、秘密鍵Vと公開鍵Bを生成させる。
さらに、暗号鍵生成装置1は、安全なビット長のうち、最も大きい値のビット長を用いて秘密鍵Vと暗号鍵Bとを生成することとしてもよい。例えば、暗号パラメータ生成部10は、安全性判定部11が「Yes」を出力した場合には、ビット長tをインクリメントし、インクリメントしたビット長(t+1)を安全性判定部11に入力する処理を実行する。その後、暗号パラメータ生成部10は、安全性判定部11が「No」を出力した場合には、前回入力したビット長を暗号鍵生成部12に出力することとしてもよい。
一方、暗号鍵生成装置1は、指定されたビット長tから、解読成功確率がp以下となる次元数nと出力することとしてもよい。例えば、暗号パラメータ生成部10は、次元数n’をランダムに選択し、安全性判定部11に次元数n’、ビット長t、解読成功確率pとを出力する。そして、暗号パラメータ生成部10は、安全性判定部11が「No」を出力した場合には、次元数n’を1インクリメントし、新たな次元数n’+1、ビット長t、解読成功確率pを安全性判定部11に入力する。
以上の処理を繰り返し、安全性判定部11が「Yes」を出力した場合には、暗号パラメータ生成部10は、安全性判定部11に入力した次元数とビット長tと解読成功確率pとを暗号鍵生成部12に入力することとしてもよい。また、暗号パラメータ生成部10は、cδ(n)がδ(n、t)よりも小さい場合には、前回選択した次元数nを2倍にした値を新たな次元数nとして選択しても良い。
以下、数値を用いた具体例を説明する。なお、以下の説明においては、安全性判定部11が係数c=0.08をすでに算出し、保持しているものとする。例えば、暗号パラメータ生成部10は、ビット長t=28、解読成功確率p=0.1を取得する。このような場合には、暗号パラメータ生成部10は、2のべき乗となる次元数n’をランダムに選択する。例えば、暗号パラメータ生成部10は、次元数n’=512を選択する。そして、暗号パラメータ生成部10は、次元数n’=512、ビット長t=28、解読成功確率p=0.1を安全性判定部11に通知する。
すると、安全性判定部11は、cδ(n)−δ(n、t)=−96408254051576となるため、「No」を出力する。このような場合には、暗号パラメータ生成部10は、次元数n’を2倍し、n’=1024として、安全性判定部11に入力する。すると、安全性判定部11は、cδ(n)−δ(n、t)=−136275393938182となるため、「No」を出力する。
この結果、暗号パラメータ生成部10は、新たな次元数として、n’=1024×2=2048を安全性判定部11に入力する。すると、安全性判定部11は、cδ(n)−δ(n、t)=396899861581922となるため、式(8)を満たすと判別し、「Yes」を出力する。このため、暗号パラメータ生成部10は、次元数n=2048、ビット長t=28を暗号鍵生成部12に入力し、秘密鍵Vと公開鍵Bとを生成させる。
このように、暗号鍵生成装置1は、cδ(n)がδ(n、t)よりも小さい場合には、前回選択した次元数nに1インクリメントする等して、新たな次元数nを選択しなおす。そして、暗号鍵生成装置1は、cδ(n)がδ(n、t)よりも大きくなるまで、安全性を判別する。このため、暗号鍵生成装置1は、任意のビット数tに対して安全な次元数nを短時間で算出し、算出した次元数nを用いて、安全性を有する秘密鍵Vと公開鍵Bとを生成することができる。
(2)係数cを用いた処理について
上述した暗号鍵生成装置1は、指定された解読成功確率pを満たす次元数n0とビット長t0から係数cを算出し、算出した係数cを用いて、次元数nとビット長tから生成される秘密鍵Vと公開鍵Bが安全性を有するか判別した。しかし、実施例は、これに限定されるものではない。
すなわち、暗号鍵生成装置1は、図5および図6に示すように、係数cを保持する場合には、任意の次元数nにおいて解読成功確率がp以下となるビット長tを識別することができる。このため、暗号鍵生成装置1は、保持する係数cを用いて、任意の次元数nにおいて解読成功確率がp以下となるビット長tを識別し、識別したビット長を用いて秘密鍵Vと公開鍵Bとを算出することとしてもよい。同様に、暗号鍵生成装置1は、保持する係数cを用いて、任意のビット長tにおいて解読成功確率がp以下となる次元数nを識別し、識別した次元数nを用いて、秘密鍵Vと公開鍵Bとを算出することとしてもよい。
(3)秘密鍵Vと公開鍵Bについて
上述した暗号鍵生成装置1は、各要素がビット長t以下となるランダムな整数であるn次元の乱数ベクトルvと式(1)とを用いて、秘密鍵Vを生成した。しかし、実施例はこれに限定されるものではない。
例えば、暗号鍵生成装置1は、終結式res(xn+1、v)の解が、ビット長t以下の十分に小さい整数sと任意の素数pとの積となるように乱数ベクトルvを生成する。そして、暗号鍵生成装置1は、生成した乱数ベクトルvと式(1)とを用いて、秘密鍵Vを生成することとしてもよい。
(4)プログラム
ところで、実施例1に係る暗号鍵生成装置1は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムを構成情報管理装置、又は、補完装置が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図10を用いて、実施例1に示した暗号鍵生成装置1と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図10は、暗号鍵生成プログラムを実行するコンピュータの一例を説明するための図である。
図10に例示されたコンピュータ100は、ROM(Read Only Memory)110、HDD(Hard Disk Drive)120、RAM(Random Access Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、コンピュータ100は、他のコンピュータと通信を行うためのI/O(Input Output)150がバス160で接続される。
RAM130には、暗号鍵生成プログラム131が記憶されており、CPU140が読み出して実行することによって、図10に示す例では、暗号鍵生成プロセス141として機能するようになる。なお、暗号鍵生成プロセス141は、図1に示す暗号鍵生成装置1が有する暗号パラメータ生成部10、安全性判定部11、暗号鍵生成部12と同様の機能を発揮する。
なお、本実施例で説明した暗号鍵生成プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。