(57)【特許請求の範囲】
【請求項１】
暗号鍵と公開鍵とを生成する暗号鍵生成装置が実行する暗号鍵生成方法において、
前記暗号鍵生成装置が有する安全性判別部が、暗号鍵として用いられる行列の次元数と当該行列の各要素のビット長とを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出し、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長から算出される係数と当該算出したエルミートファクタとの積が、当該算出したキーパラメータよりも大きいか否かを判別し、
前記安全性判定部が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも大きいと判別した場合には、前記暗号鍵生成装置が有する暗号鍵生成部が、前記次元数とビット長とを用いて、暗号鍵を生成する
処理を前記暗号鍵生成装置が実行することを特徴とする暗号鍵生成方法。 
【請求項２】
前記安全性判定部が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも小さいと判別した場合には、前記暗号鍵生成装置が有する暗号パラメータ生成部が、前回選択したビット長から１デクリメントしたビット長を新たに選択しなおす処理をさらに実行することを特徴とする請求項１に記載の暗号鍵生成方法。 
【請求項３】
前記安全性判定部が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも小さいと判別した場合には、前記暗号鍵生成装置が有する暗号パラメータ生成部が、前回選択した次元数から１インクリメントした次元数を新たに選択しなおす処理をさらに実行することを特徴とする請求項１に記載の暗号鍵生成方法。 
【請求項４】
前記安全性判定部が、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出し、当該算出したキーパラメータを当該算出したエルミートファクタで除算することで、前記係数を導出する処理を実行し、前記次元数とビット長とを用いて、前記エルミートファクタとキーパラメータとを算出し、前記導出した係数と当該算出したエルミートファクタとの積が、当該算出したキーパラメータよりも大きいか否かを判別することを特徴とする請求項１〜３のいずれか１つに記載の暗号鍵生成方法。 
【請求項５】
前記安全性判定部が、ランダムに選択した次元数とビット長とを用いて、前記所定の値の逆数と同数の暗号鍵候補を生成し、当該生成した暗号鍵候補に対する格子縮約攻撃を行うことで、前記格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを算出する処理をさらに実行し、前記算出した前記格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを用いて、前記係数を導出することを特徴とする請求項４に記載の暗号鍵生成方法。 
【請求項６】
前記安全性判定部が、前記格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを算出する際に、ＬＬＬアルゴリズムを用いた格子縮約攻撃を行うことを特徴とする請求項５に記載の暗号鍵生成方法。 
【請求項７】
前記安全性判定部が、前記格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを算出する際に、ＢＫＺアルゴリズムを用いた格子縮約攻撃を行うことを特徴とする請求項５に記載の暗号鍵生成方法。 
【請求項８】
前記安全性判定部が、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長とを用いてあらかじめ導出された前記係数を保持する処理をさらに実行し、前記保持した係数と前記算出したエルミートファクタとの積が、前記算出したキーパラメータよりも大きいか否かを判別することを特徴とする請求項１〜３のいずれか１つに記載の暗号鍵生成方法。 
【請求項９】
前記安全性判定部が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも大きいと判別した場合には、前記次元数の乱数ベクトルであって、前記ビット長以下の整数と、任意の素数との積を終結式の解とする乱数ベクトルを算出し、当該算出した乱数ベクトルを用いて、暗号鍵を生成する処理を実行することを特徴とする請求項１〜８のいずれか１つに記載の暗号鍵生成方法。 
【請求項１０】
暗号鍵として用いられる行列の次元数と当該行列の各要素のビット長とを選択する選択部と、
前記選択部が選択した次元数とビット長とを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出し、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長から算出される係数と前記算出したエルミートファクタとの積が、当該算出したキーパラメータよりも大きいか否かを判別する判別部と、
前記判別部が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも大きいと判別した場合には、前記選択部が選択した次元数とビット長とを用いて、暗号鍵を生成する生成部と
を有することを特徴とする暗号鍵生成装置。 
【請求項１１】
暗号鍵と公開鍵とを生成するコンピュータに処理を実行させるための暗号鍵生成プログラムであって、
前記コンピュータに、
暗号鍵として用いられる行列の次元数と当該行列の各要素のビット長とを選択する選択機能、
前記選択機能が選択した次元数とビット長とを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出し、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長から算出される係数と前記算出したエルミートファクタとの積が、当該算出したキーパラメータよりも大きいか否かを判別する判別機能、
前記判別機能が、前記エルミートファクタと前記係数との積が前記キーパラメータよりも大きいと判別した場合には、前記選択機能が選択した次元数とビット長とを用いて、暗号鍵を生成する生成機能
を実現させるための暗号鍵生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号鍵生成方法、暗号鍵生成装置および暗号鍵生成プログラムに関する。
【背景技術】
【０００２】
従来、暗号化したままで平文に対するデータ操作を行える準同型暗号の技術が知られている。例えば、平文同士を加算した後に暗号化した結果と、各平文の暗号文同士を加算した結果とが一致する準同型暗号の一例として、Ａｄｄｉｔｉｖｅ  ＥｌＧａｍａｌ暗号方式が知られている。また、平文同士を積算した後に暗号化した結果と、各平文の暗号文同士を積算した結果とが一致する準同型暗号の一例として、ＲＳＡ暗号方式が知られている。
【０００３】
以下、準同型暗号に用いる秘密鍵および公開鍵を生成する暗号鍵生成装置の一例について説明する。例えば、暗号鍵生成装置は、秘密鍵として用いる行列の次元の数ｎと、各要素のビット長ｔとを選択する。そして、暗号鍵生成装置は、各成分の絶対値がｔビット以下の整数となるｎ次元の乱数ベクトルｖ＝（ｖ０、ｖ１、…ｖｎ−１）を生成する。その後、暗号鍵生成装置は、生成した乱数ベクトルｖから以下の式（１）に示す行列Ｖを生成し、生成した行列Ｖを秘密鍵とする。
【０００４】
【数１】
0005768732.tif 000002
【０００５】
また、暗号鍵生成装置は、行列Ｖに対して行基本変形を施し、エルミート標準形である行列Ｂを生成する。そして、暗号鍵生成装置は、生成した行列Ｂを公開鍵とする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１４５５１２号公報
【非特許文献】
【０００７】
【非特許文献１】C.  Gentry,  “Fully  Homomorphic  encryption  using  ideal  lattices”,  STOC  2009,  pp.  169-178,  2009.
【非特許文献２】C.  Gentry  and  S.  Halevi,  “Implementing  Gentry’s  Fully  Homomorphic  Encryption  Scheme”,  EUROCRYPT  2011,  LNCS  6632,  pp.  129-148,  2011.
【非特許文献３】矢嶋純、安田雅哉、下山武司、小暮淳、「Gentry準同型暗号に対するLLL攻撃実験について」、コンピュータセキュリティシンポジウム2011論文集、3号、pp.  576  581,  2011.
【非特許文献４】矢嶋純、安田雅哉、下山武司、小暮淳、「Gentry準同型暗号に対するLLL攻撃実験（II）」信学技報,  vol.  111,  no.  285,  ISEC2011-36,  pp.  13-17,  2011.
【非特許文献５】安田雅哉、矢嶋純、下山武司、小暮淳、「格子版完全準同型暗号の安全性について」信学技報,  vol.  111,  no.  204,  ISEC2011-33,  pp.  43-50,  2011.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した準同型暗号の技術では、次元の数ｎと各要素のビット長ｔとが適切に選択されなかった場合は、公開鍵と暗号文とに格子縮約アルゴリズムを適用して平文を求める格子縮約攻撃により、暗号文が容易に解読されてしまうという問題がある。
【０００９】
ここで、生成した暗号鍵と公開鍵とが格子縮約攻撃に対して安全性を有するか判別するため、実際に格子縮約攻撃を行うことで、暗号の解読が可能か否かを検証する手法も考えられる。しかし、暗号鍵と公開鍵を生成する度に、格子縮約攻撃を行う場合は、膨大な計算量が必要となるため、計算資源や計算時間の観点から非現実的である。
【００１０】
本願に開示の技術は、１つの側面では、格子縮約攻撃に対して安全性を有する暗号鍵を生成する。
【課題を解決するための手段】
【００１１】
１つの側面では、暗号鍵生成装置は、暗号鍵として用いられる行列の次元数と当該行列の各要素のビット長とを選択する。また、暗号鍵生成装置は、選択した次元数とビット長とを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出し、格子縮約攻撃の成功率が所定の値以下となる次元数とビット長から算出される係数と算出したエルミートファクタとの積が、算出したキーパラメータよりも大きいか否かを判別する。そして、暗号鍵生成装置は、エルミートファクタと係数との積がキーパラメータよりも大きいと判別した場合には、選択した次元数とビット長とを用いて、暗号鍵を生成する
。
【発明の効果】
【００１２】
１つの側面では、格子縮約攻撃に対して安全性を有する暗号鍵を生成する。
【図面の簡単な説明】
【００１３】
【図１】図１は、暗号鍵生成装置の機能構成の一例を説明するための図である。
【図２】図２は、ｎ＝２５６の際にＬＬＬアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。
【図３】図３は、ｎ＝５１２の際にＬＬＬアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。
【図４】図４は、ｎ＝５１２の際にＢＫＺアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。
【図５】図５は、ＬＬＬアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ（ｎ、ｔ）の範囲を説明するための図である。
【図６】図６は、ＢＫＺアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ（ｎ、ｔ）の範囲を説明するための図である。
【図７】図７は、暗号パラメータ生成部が実行する処理の流れを説明するためのフローチャートである。
【図８】図８は、安全性判定部が実行する処理の流れを説明するためのフローチャートである。
【図９】図９は、暗号鍵生成部が実行する処理の流れを説明するためのフローチャートである。
【図１０】図１０は、暗号鍵生成プログラムを実行するコンピュータの一例を説明するための図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して本願に係る暗号鍵生成方法、暗号鍵生成装置および暗号鍵生成プログラムについて説明する。
【実施例１】
【００１５】
以下の実施例１では、暗号鍵生成装置の一例を説明する。なお、暗号鍵生成装置は、少なくとも、格子縮約攻撃に対して安全性を有する秘密鍵と公開鍵との組を生成する装置である。
【００１６】
まず、暗号鍵生成装置が生成する公開鍵と秘密鍵とについて説明する。公開鍵とは、公開鍵暗号方式において、平文の暗号化を行う際に用いられ、平文の送信元に対して配布される暗号鍵であり、行列形式で表される。また、秘密鍵とは、公開鍵暗号方式において、平文の復号化を行う際に用いられ、平文の送信先が保持する暗号鍵であり、行列形式で表される。
【００１７】
なお、公開鍵は、秘密鍵となる行列のエルミート標準形となる行列である。なお、エルミート標準形とは、ある整数行列に対して整数乗の行基本変形を施すことで得られる下三角行列、または、上三角行列である。
【００１８】
次に、２つの情報処理装置が、公開鍵と暗号鍵とを用いて、公開鍵暗号方式による暗号文の送受信を行う例について説明する。なお、以下の説明においては、暗号文の送信先となる情報処理装置は、従来の方式を用いて秘密鍵Ｖおよび公開鍵Ｂを生成する暗号鍵生成装置を有するものとする。例えば、送信先の情報処理装置は、公開鍵Ｂと秘密鍵Ｖとを生成し、暗号文の送信元となる情報処理装置に公開鍵Ｂを送付する。
【００１９】
一方、送信元の情報処理装置は、各成分が「０」又は「１」となるｎ次元の乱数ベクトルｕ＝（ｕ０、ｕ１、…、ｕｎ−１）を選択する。次に、送信元の情報処理装置は、フレッシュ暗号文となるベクトルａ＝２ｕ＋ｂｅ１を生成する。ここでｅ１は、ｅ１＝（１、０、…０）を満たすベクトルである。次に、送信元の情報処理装置は、以下の式（２）を用いて、暗号文ｃを生成し、生成した暗号文ｃを送信する。ここで、式（２）のＢ−１とは、公開鍵Ｂの逆行列である。また、式（２）中の［ａ×Ｂ−１］とは、ａ×Ｂ−１に最も近い整数値を示す関数である。
【００２０】
【数２】
0005768732.tif 000003
【００２１】
一方、送信先の情報処理装置は、暗号文ｃを取得した場合には、以下の式（３）を用いて、ｎ次元ベクトルａ’を生成する。そして、送信先の情報処理装置は、生成したｎ次元ベクトルａ’の第１成分となるａ０’を取得し、取得したａ０’を２で除算した余りを暗号文ｃの復号結果として取得する。
【００２２】
【数３】
0005768732.tif 000004
【００２３】
次に、数値例を用いて、秘密鍵と公開鍵とを用いた暗号化および復号化の例を説明する。なお、以下の例では、送信先の情報処理装置が次元数ｎ＝４、ビット長ｔ＝７の秘密鍵および公開鍵を生成し、送信元の情報処理装置が平文ｂ＝１を送信する例について説明する。
【００２４】
例えば、送信先の情報処理装置は、秘密鍵および公開鍵を生成するためのパラメータとして、次元数ｎ＝４、ビット長ｔ＝７を選択する。このような場合には、送信元の情報処理装置は、絶対値が７ビット以下の整数となる４次元の乱数ベクトルｖを生成する。詳細な数値例を挙げると、送信元の情報処理装置は、ｖ＝（１１２、９９、−１２５、７７）を生成する。このような場合には、送信元の情報処理装置は、以下の式（４）で示す秘密鍵Ｖを生成する。
【００２５】
【数４】
0005768732.tif 000005
【００２６】
次に、送信元の情報処理装置は、式（４）で示す秘密鍵Ｖのエルミート標準形を算出することで、以下の式（５）で示す公開鍵Ｂを生成する。その後、送信元の情報処理装置は、生成した公開鍵Ｂを送信元の情報処理装置に配布する。
【００２７】
【数５】
0005768732.tif 000006
【００２８】
一方、送信元の情報処理装置は、成分が「０」または「１」となる４次元の乱数ベクトルとしてｕ＝（１、０、１、１）を選択し、フレッシュ暗号文ａ＝２ｕ＋ｂｅ１＝（３、０、２、２）を計算する。そして、送信元の情報処理装置は、以下の式（６）に示すように、通知された公開鍵Ｂを用いて、平文ｂ＝１から暗号文ｃ＝（−１９９１７８６８４、０、０、０）を生成し、生成した暗号文ｃを送信元の情報処理装置へ送信する。
【００２９】
【数６】
0005768732.tif 000007
【００３０】
このような場合には、送信先の情報処理装置は、式（３）を用いて暗号文ｃからａ’＝（３、０、２、２）を算出する。さらに、送信先の情報処理装置は、ａ’＝（３、０、２、２）の第１成分となる「３」を取得し、取得した「３」を２で割った余り「１」を復号結果として取得する。なお、上述した例については、フレッシュ暗号文ａと式（３）を用いて暗号文ｃから算出されるａ’とが一致するため、暗号化および復号化を適切に行える。
【００３１】
しかしながら、上述した例では、送信先の情報処理装置が選択する次元数ｎとビット長ｔとが適切ではない場合に、ＬＬＬアルゴリズムやＢＫＺアルゴリズムを用いた格子縮約攻撃によって、暗号文と公開鍵Ｂから容易に平文ｂを取得できるという問題がある。また、秘密鍵Ｖと公開鍵Ｂとを生成するたびに、格子縮約攻撃を実行し、安全性を検証する手法は、計算資源や計算時間の観点から非現実的である。
【００３２】
一方、実施例１に開示する暗号鍵生成装置は、秘密鍵Ｖと公開鍵Ｂとを生成するたびに格子縮約攻撃を実行せずとも、格子縮約攻撃に対する安全性を有する秘密鍵Ｖと公開鍵Ｂとを生成できる。以下、このような暗号鍵生成装置について図１を用いて説明する。
【００３３】
図１は、暗号鍵生成装置の機能構成の一例を説明するための図である。図１に示すように、暗号鍵生成装置１は、暗号パラメータ生成部１０、安全性判定部１１、暗号鍵生成部１２を有する。また、暗号鍵生成装置１は、入力装置２および出力装置３と接続する。
【００３４】
入力装置２は、暗号鍵生成装置１に生成させる秘密鍵の次元数ｎとビット長ｔと解読成功確率ｐとを利用者が入力するための装置であり、例えば、キーボードやマウス等の装置である。ここで、解読成功確率ｐとは、暗号鍵生成装置１に生成させる秘密鍵および公開鍵による暗号化に対して許容する格子縮約攻撃の成功確率を示す。
【００３５】
出力装置３は、暗号鍵生成装置１が生成した秘密鍵および公開鍵を出力するための装置である。なお、図１に示す例では、暗号鍵生成装置１は、生成した秘密鍵および公開鍵を出力装置３に出力するが、実施例は、これに限定されるものではない。例えば、暗号鍵生成装置１は、公開鍵のみを出力するとともに、出力した公開鍵によって暗号化された暗号文を復号する復号化装置に対して秘密鍵を出力することとしてもよい。
【００３６】
暗号パラメータ生成部１０は、入力装置から次元数ｎとビット長ｔと解読成功確率ｐとを受信すると、受信した次元数ｎとビット長ｔと解読成功確率ｐとを安全性判定部１１に通知する。また、安全性判定部１１は、通知された次元数ｎとビット長ｔから生成される秘密鍵と公開鍵に対する格子縮約攻撃の成功率が通知された解読成功確率ｐ以下となるか否かを判別し、判別結果を暗号パラメータ生成部１０に通知する。
【００３７】
このため、暗号パラメータ生成部１０は、安全性判定部１１から格子縮約攻撃の成功率が解読成功確率ｐ以下となる旨の通知として「Ｙｅｓ」を受付けると、安全性判定部１１に通知した次元数ｎとビット長ｔとを暗号鍵生成部１２に通知する。また、暗号鍵生成部１２は、暗号パラメータ生成部１０から次元数ｎとビット長ｔとの通知を受付けた場合には、通知された次元数ｎとビット長ｔとを用いて、秘密鍵Ｖと公開鍵Ｂとを生成し、生成した秘密鍵Ｖと公開鍵Ｂとを暗号パラメータ生成部１０に出力する。その後、暗号パラメータ生成部１０は、暗号鍵生成部１２が出力した秘密鍵Ｖと公開鍵Ｂとを出力装置３に出力する。
【００３８】
一方、暗号パラメータ生成部１０は、安全性判定部１１から格子縮約攻撃の成功率が解読成功確率ｐよりも大きい旨の通知として「Ｎｏ」を受付けると、新たな次元数ｎとビット長ｔとを選択し、新たに選択した次元数ｎとビット長ｔと解読成功確率ｐとを安全性判定部１１に通知する。例えば、暗号パラメータ生成部１０は、前回通知したビット長ｔから１デクリメントした値を新たなビット長ｔとし、安全性判定部１１に通知する。
【００３９】
安全性判定部１１は、暗号パラメータ生成部１０から次元数ｎとビット長ｔと解読成功確率ｐとを取得した場合には、次元数ｎとビット長ｔから格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出する。そして、安全性判定部１１は、格子縮約攻撃の成功率がｐ以下となる次元数ｎ０とビット長ｔ０から算出される係数と算出したエルミートファクタとの積が、算出したキーパラメータよりも大きいか否かを判別する。
【００４０】
その後、安全性判定部１１は、算出した係数とエルミートファクタとの積が、算出したキーパラメータよりも大きい場合には、格子縮約攻撃の成功率が解読成功確率ｐ以下となる旨を示す通知として「Ｙｅｓ」を暗号パラメータ生成部１０に通知する。一方、安全性判定部１１は、算出した係数とエルミートファクタとの積が、算出したキーパラメータよりも小さい場合には、格子縮約攻撃の成功率が解読成功確率ｐよりも大きい旨を示す通知として「Ｎｏ」を暗号パラメータ生成部１０に通知する。
【００４１】
以下、安全性判定部１１が実行する処理を具体的に説明する。まず、安全性判定部１１は、暗号パラメータ生成部１０から次元数ｎ、ビット長ｔ、解読成功確率ｐを取得する。すると、安全性判定部１１は、次元数ｎを用いて、格子縮約アルゴリズムのエルミートファクタを算出する。
【００４２】
ここで、エルミートファクタとは、次元数ｎの行列に対して格子縮約アルゴリズムを用いることにより縮小した基底を示す行列を算出し、算出した行列の各行、又は、各列から求められる最小のノルムを行列の判別式の１／ｎ乗で除算した値である。ここで、ノルムとは、ベクトルの各成分の２乗の和の２乗根となる値である。このようなエルミートファクタは、格子縮約アルゴリズムによりそれぞれ異なる値を有しており、ＬＬＬアルゴリズムのエルミートファクタはδ（ｎ）＝１．０１８ｎ、ＢＫＺアルゴリズムのエルミートファクタは、δ（ｎ）＝１．０１ｎとなることが知られている。
【００４３】
また、安全性判定部１１は、次元数ｎとビット長ｔとを用いて、以下の式（７）に示すキーパラメータδ（ｎ，ｔ）を算出する。なお、式（７）中のπとは円周率を示し、ｅとは、自然対数の値である。
【００４４】
【数７】
0005768732.tif 000008
【００４５】
また、安全性判定部１１は、解読成功確率がｐ以下となる秘密鍵Ｖと公開鍵Ｂとを生成するための次元数ｎ０とビット長ｔ０とを抽出する。次に、安全性判定部１１は、抽出した次元数ｎ０とビット長ｔ０とを用いて、エルミートファクタδ（ｎ０）とキーパラメータδ（ｎ０、ｔ０）を算出する。また、安全性判定部１１は、算出したエルミートファクタδ（ｎ０）とキーパラメータδ（ｎ０、ｔ０）とから、係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）を導出する。そして、安全性判定部１１は、次元数ｎとビット長ｔとから算出したエルミートファクタとキーパラメータとが、以下の式（８）を満たすか否かを判別する。
【００４６】
【数８】
0005768732.tif 000009
【００４７】
すなわち、安全性判定部１１は、格子縮約攻撃の成功率がｐ以下となる次元数ｎ０とビット長ｔ０から算出される係数と、暗号パラメータ生成部１０から取得した次元数ｎから算出されるエルミートファクタとの積を算出する。そして、安全性判定部１１は、係数とエルミートファクタとの積が、暗号パラメータ生成部１０から取得した次元数ｎとビット長ｔとから算出されるキーパラメータよりも大きいか否かを判別する。
【００４８】
そして、安全性判定部１１は、次元数ｎとビット長ｔとから算出したエルミートファクタとキーパラメータとが、以下の式（８）を満たす場合には、解読成功確率がｐ以下となる旨を示す通知として「Ｙｅｓ」を暗号パラメータ生成部１０に通知する。一方、安全性判定部１１は、次元数ｎとビット長ｔとから算出したエルミートファクタとキーパラメータとが、以下の式（８）を満たさない場合には、解読成功確率がｐよりも大きい旨を示す通知として「Ｎｏ」を暗号パラメータ生成部１０に通知する。
【００４９】
ここで、安全性判定部１１は、解読成功確率がｐ以下となる秘密鍵Ｖと公開鍵Ｂとを生成するための次元数ｎ０とビット長ｔ０とを任意の方法で抽出し、係数ｃを算出してよい。例えば、安全性判定部１１は、実際に格子縮約攻撃を行うことで、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とを抽出してもよい。
【００５０】
すなわち、安全性判定部１１は、次元数の候補となるｎ’およびビット長の候補となるｔ’をランダムに選択し、選択した次元数の候補ｎ’およびビット長の候補ｔ’を暗号パラメータ生成部１０に送信する。すると、暗号パラメータ生成部１０は、次元数の候補ｎ’およびビット長の候補ｔ’を暗号鍵生成部１２に通知し、次元数の候補ｎ’およびビット長の候補ｔ’から１／ｐ個のランダムな暗号鍵を生成させる。
【００５１】
また、暗号パラメータ生成部１０は、次元数の候補ｎ’およびビット長の候補ｔ’から生成させた１／ｐ個の暗号鍵を安全性判定部１１に送信する。そして、安全性判定部１１は、暗号パラメータ生成部１０から受信した暗号鍵に対して格子縮約攻撃を実施し、解読成功確率ｐ’を算出する。
【００５２】
安全性判定部１１は、ビット長の候補ｔ’から１をデクリメントした次元数の候補ｎ’および新たなビット長の候補ｔ’−１を暗号パラメータ生成部１０に通知し、暗号鍵生成部１２に生成させた暗号鍵に対して、再度格子縮約攻撃を実行する。このような処理を繰り返すことで、安全性判定部１１は、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とを抽出してもよい。
【００５３】
なお、安全性判定部１１は、上述した処理を１度だけ行い、処理結果を記憶してもよい。例えば、安全性判定部１１は、上述した処理を格子縮約アルゴリズムおよび解読成功確率ｐごとにあらかじめ行い、格子縮約アルゴリズムごとに、解読成功確率ｐと、係数ｃとを対応付けて記憶する。そして、安全性判定部１１は、暗号パラメータ生成部１０から通知された解読成功確率ｐと対応付けられた係数ｃを用いて式（８）を満たすか否かを判別してもよい。
【００５４】
このような場合には、安全性判定部１１は、次元数ｎおよびビット長ｔから生成する暗号鍵が格子縮約攻撃に対して安全性を有するか否かを、計算資源を浪費することなく、迅速におこなうことができる。なお、例えば、安全性判定部１１は、格子縮約攻撃として、ＬＬＬアルゴリズムを用いた格子縮約攻撃、または、ＢＫＺアルゴリズムを用いた格子縮約攻撃を採用できるが、これ以外にも、任意のアルゴリズムを用いた格子縮約攻撃を採用できる。
【００５５】
ここで、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とから算出した係数とエルミートファクタとの積が、キーパラメータよりも大きいか否かを安全性判定部１１が判定することで、解読成功確率がｐ以下か否かを判定できる点について説明する。まず、格子縮約アルゴリズムを用いて格子縮約攻撃を行う情報処理装置が実行する処理について説明する。例えば、情報処理装置は、暗号文ｃと公開鍵Ｂとを用いて、式（９）に示す（ｎ＋１）×（ｎ＋１）行列Ｃを生成する。
【００５６】
【数９】
0005768732.tif 000010
【００５７】
ここで、行列Ｃの行ベクトルを（ｂ０、ｂ１、…、ｂｎ）とし、（ｂ０、ｂ１、…、ｂｎ）を係数とする線形結合の元ａ０ｂ０＋ａ１ｂ１＋…＋ａｎｂｎのなす集合Ｓを考える。ここで、ａ０〜ａｎおよびｂ０〜ｂｎは、整数であるものとする。また、（ｂ０、ｂ１、…、ｂｎ）は行列Ｃの基底ベクトルであり、集合Ｓを基底ベクトル（ｂ０、ｂ１、…、ｂｎ）が生成する格子と呼ぶ。
【００５８】
ここで、公開鍵暗号方式で通信を行う情報処理装置は、暗号文ｃを秘密鍵Ｖを用いて復号する際には、式（３）中のベクトルａ’を算出する。このとき、（ｎ＋１）次元ベクトルである（ａ’、１）は、集合Ｓに元として含まれ、集合Ｓに含まれるベクトルの中で最小のノルムを持つ。
【００５９】
一方、行列Ｃに対して格子縮約アルゴリズムを適用することで算出される縮小した基底を示す行列を行列Ｄとすると、行列Ｄの行ベクトルは、ベクトル（ａ’、１）と同じ集合Ｓに含まれることとなる。また、格子縮約アルゴリズムによって算出される行列Ｄの第１行ベクトルは、最も少ないノルムを有する傾向がある。このため、行列Ｄの第１行ベクトルをｄ０としたとき、ｄ０＝（ａ’、１）となる可能性が高い。
【００６０】
すると、ｄ０＝（ａ’、１）を従属するような状態において、公開鍵Ｂと暗号文ｃから算出することができる行列Ｃに格子縮約アルゴリズムを適用した行列Ｄから、式（３）に示すベクトルａ’を算出することができる。ここで、ベクトルａ’の第１成分を２で割った余りを算出すると、暗号文ｃの復号結果となるので、情報処理装置は、暗号文ｃと公開鍵Ｂから復号結果を得ることができる。
【００６１】
上述したように、行列Ｃに格子縮約アルゴリズムを適用して得られる行列Ｄの第１ベクトルであるｄ０のノルムが集合Ｓの中で最小となる場合には、格子縮約攻撃が成功することとなる。ここで、非特許文献５によると、δ（ｎ、ｔ）＞ｃδ（ｎ）が成り立つ場合には、ｄ０のノルムが集合Ｓの中で最小となり、格子縮約攻撃が成功する点が示されている。
【００６２】
ここで、係数ｃは、解読成功確率ｐの値と格子縮約アルゴリズムの種類のみに依存する値である。また、δ（ｎｂ、ｔｂ）＝ｃδ（ｎｂ）を満たす（ｎｂ、ｔｂ）を安全な入力パラメータ（ｎ、ｔ）の境界値とすると、次元数ｎを固定した際に、ｔ≦ｔｂを満たすビット長を用いて生成される暗号鍵の解読成功確率が同じ傾向を有する。また、次元数ｔを固定した際に、ｎ≧ｎｂを満たす次元数を用いて生成される暗号鍵の解読成功確率が同じ傾向を有する。
【００６３】
このため、安全性判定部１１は、次元数ｎとビット長ｔとが、解読成功確率ｐと格子縮約アルゴリズムとに係る係数ｃを用いて、δ（ｎ、ｔ）＜ｃδ（ｎ）を満たすか否かを判別することにより、解読成功確率がｐ以下となるか否かを判別することができる。
【００６４】
次に、図を用いて、次元数ｎを固定した際に、ｔ≦ｔｂを満たすビット長で暗号鍵の解読成功確率が同じ傾向を有する点、および、次元数ｔを固定した際に、ｎ≧ｎｂを満たす次元数で生成される暗号鍵の解読成功確率が同じ傾向を有する点について説明する。なお、以下の説明では、図２〜図４を用いて、格子縮約攻撃による解読成功確率の平均について説明し、その後、図５、図６を用いて、係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）から求められる安全な次元数ｎとビット長ｔとの関係について説明する。
【００６５】
図２は、ｎ＝２５６の際にＬＬＬアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図２に示す例では、次元数ｎを２５６に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、ＬＬＬアルゴリズムによる格子縮約攻撃の成功確率の平均を示した。また、図２に示す例では、横軸をビット長とし、縦軸を成功確率とした。
【００６６】
例えば、図２に示す例では、秘密鍵のビット長が４である際に、格子縮約攻撃の成功確率の平均が０パーセントとなり、秘密鍵のビット長が５である際に、格子縮約攻撃の成功確率の平均が４．６２パーセントとなった。また、秘密鍵のビット長が６である際には格子縮約攻撃の成功確率の平均が７９．６５パーセントとなり、秘密鍵のビット長が７である際に、格子縮約攻撃の成功確率の平均が９９．９パーセントとなった。また、秘密鍵のビット長が８である際に、格子縮約攻撃の成功確率が１００パーセントとなった。
【００６７】
また、図３は、ｎ＝５１２の際にＬＬＬアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図３に示す例では、次元数ｎを５１２に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、ＬＬＬアルゴリズムによる格子縮約攻撃の成功確率を示した。また、図３に示す例では、図２と同様に横軸をビット長とし、縦軸を成功確率とした。
【００６８】
例えば、図３に示す例では、秘密鍵のビット長が１１、１２である際に、格子縮約攻撃の成功確率が０パーセントとなり、秘密鍵のビット長が１３である際に、格子縮約攻撃の成功確率の平均が３１．８パーセントとなった。また、秘密鍵のビット長が１４である際には格子縮約攻撃の成功確率の平均が９８．８パーセントとなり、秘密鍵のビット長が１５である際に、格子縮約攻撃の成功確率が１００パーセントとなった。
【００６９】
また、図４は、ｎ＝５１２の際にＢＫＺアルゴリズムを用いた格子縮約攻撃の実験結果を説明するための図である。図４に示す例では、次元数ｎを５１２に固定し、秘密鍵のビット長を変化させながら生成した暗号鍵に対し、ＢＫＺアルゴリズムによる格子縮約攻撃の成功確率を示した。また、図３に示す例では、図２と同様に横軸をビット長とし、縦軸を成功確率とした。
【００７０】
例えば、図４に示す例では、秘密鍵のビット長が６以下の際に、格子縮約攻撃の成功確率が０パーセントとなり、秘密鍵のビット長が７である際に、格子縮約攻撃の成功確率の平均が０．５パーセントとなった。また、秘密鍵のビット長が８である際には格子縮約攻撃の成功確率の平均が９７．３パーセントとなり、秘密鍵のビット長が９である際に、格子縮約攻撃の成功確率が１００パーセントとなった。
【００７１】
ここで、ｐ＝０．１、ｎ＝２５６とし、ＬＬＬアルゴリズムのエルミートファクタを用いて係数ｃを算出した場合には、ｃ＝０．０８となる。ここで、横軸を次元数ｎ、縦軸をビット長ｔとし、ｃ＝０．０８の際に式（８）を満たす境界値をプロットすると、図５のようになる。図５は、ＬＬＬアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ（ｎ、ｔ）の範囲を説明するための図である。なお、図５に示す例では、次元数ｎとビット長ｔとの組み合わせが、図５に示す折れ線グラフよりも下の範囲に含まれる場合には、解読成功確率が０．１パーセント以下となる。
【００７２】
例えば、図５に示す例では、次元数ｎ＝２５６の際、ビット長ｔの境界値ｔ’が、４．９９以下の際に、解読成功確率が０．１パーセント以下となる。一方、図２を参照すると、ビット長ｔが４以下の場合には、解読成功確率が０．１以下となることが確認できる。また、図５に示す例では、次元数ｎ＝５１２の際、ビット長ｔの境界値ｔ’が、１１．０８以下の際に、解読成功確率が０．１パーセント以下となる。一方、図３を参照すると、ビット長ｔが１２以下の場合には、解読成功確率が０．１以下となることが確認できる。
【００７３】
一方、図６は、ＢＫＺアルゴリズムを用いた格子縮約攻撃に対する安全な入力パラメータ（ｎ、ｔ）の範囲を説明するための図である。なお、図６に示す例では、図５と同様に、ＢＫＺアルゴリズムのエルミートファクタを用いて算出した係数ｃを用いた際に、式（８）を満たす境界値をプロットした。
【００７４】
例えば、図６に示す例では、次元数ｎ＝５１２の際、ビット長ｔの境界値ｔ’が、６．９９以下の際に、解読成功確率が０．１パーセント以下となる。一方、図４を参照すると、ビット長ｔが６以下の場合には、解読成功確率が０．１以下となることが確認できる。
【００７５】
このように、次元数ｎが変化しても、式（８）を用いることで、同一の係数ｃによって定まる安全な次元数ｎおよびビット長ｔの組み合わせを適切に求めることができる。よって、ｎが大きい値になった場合であっても、式（８）を用いることで、解読成功確率がｐ未満となるか否かを正しく判別することができる。
【００７６】
なお、図５および図６に示すように、格子縮約アルゴリズムが変化した場合には、係数ｃの値が変化するため、安全な次元数ｎおよびビット長ｔの組み合わせが変化する。しかしながら、図３および図４を比較することで明らかな通り、異なる格子縮約アルゴリズムが適用された場合にも、係数ｃから求められる安全な次元数ｎおよびビット長ｔの組み合わせの傾向が類似する。このため、格子縮約アルゴリズムが異なる場合であっても、対応する係数ｃを算出することで、式（８）を用いた判定を行うことができる。
【００７７】
以上のように、安全性判定部１１は、格子縮約アルゴリズムに応じたエルミートファクタとキーパラメータと用いて、解読成功確率がｐ以下となる次元数ｎ０およびビット長ｔ０を抽出し、抽出した次元数ｎ０およびビット長ｔ０を用いて係数ｃを算出する。そして、安全性判定部１１は、算出した係数ｃと式（８）を用いることにより、暗号パラメータ生成部１０から通知された次元数ｎおよびビット長ｔから生成される暗号鍵の解読成功確率がｐ未満か否かを判別することができる。
【００７８】
図１に戻って、暗号鍵生成部１２は、安全性判定部１１が、次元数ｎとビット長ｔとから生成される暗号鍵の解読成功確率がｐ以下となる場合には、暗号鍵を生成する。具体的には、暗号鍵生成部１２は、安全性判定部１１が次元数ｎとビット長ｔとから生成される暗号鍵の解読成功確率がｐ以下となると判別した場合には、暗号パラメータ生成部１０から次元数ｎとビット長ｔとを取得する。
【００７９】
このような場合には、暗号鍵生成部１２は、次元数ｎの乱数ベクトルｖを選択し、式（１）に示す行列Ｖを生成する。また、暗号鍵生成部１２は、生成した行列Ｖのエルミート標準形となる行列Ｂを算出する。この際、暗号鍵生成部１２は、行列Ｂの第１行に含まれる要素のうち第１列目の要素が判別式として抽出する。そして、暗号鍵生成部１２は、抽出した判別式を２で除算した余りが１である場合には、算出した行列Ｖを秘密鍵Ｖとし、行列Ｂを公開鍵Ｂとして暗号パラメータ生成部１０に出力する。一方、暗号鍵生成部１２は、抽出した判別式を２で除算した余りが１ではない場合には、再度、次元数ｎの乱数ベクトルｖを選択し、行列Ｖの生成を行う。
【００８０】
次に、数値例を用いて、暗号鍵生成装置１が格子縮約攻撃に対して安全な秘密鍵Ｖおよび公開鍵Ｂを出力する処理について説明する。例えば、暗号鍵生成装置１は、入力装置から、要求される次元数ｎ、ビット長ｔ、解読成功確率ｐとして（ｎ、ｔ、ｐ）＝（５１２、２０、０．１）を取得する。
【００８１】
このような場合には、安全性判定部１１は、ｎ＝２５６の際に解読成功確率が０．１以下となる（ｎ０，ｔ０）を抽出する。例えば、安全性判定部１１は、ランダムに選択した（ｎ’、ｔ’）＝（２５６、４）を用いて暗号鍵の候補を生成し、生成した候補に対して格子縮約攻撃を行う処理を、１／ｐ＝１０００回実行し、何回解読に成功したかを記録する。次に、安全性判定部１１は、（ｎ’、ｔ’）＝（２５６、３）として同様の格子縮約攻撃を行い、攻撃成功確率がｐ＝０．１以下となるｔ０が得られるまで繰り返す。
【００８２】
この結果、安全性判定部１１は、ｎ’＝２５６の際に解読成功確率ｐが０．１以下となるｔ’がｔ’＜５であると判別する。この結果、安全性判定部１１は、ｎ０＝２５６、ｔ０＝５を抽出する。次に、安全性判定部１１は、式（７）に（ｎ０、ｔ０）を代入してキーパラメータδ（ｎ０、ｔ０）＝７．７５８を算出する。また、安全性判定部１１は、ｎ０＝２５６を用いて、ＬＬＬアルゴリズムのエルミートファクタδ（ｎ０）＝９６．２５７を算出する。この結果、安全性判定部１１は、係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）＝０．０８を算出する。
【００８３】
次に、安全性判定部１１は、暗号パラメータ生成部１０から通知された次元数ｎ＝５１２とビット長ｔ＝２０からエルミートファクタδ（ｎ）およびキーパラメータδ（ｎ、ｔ）を算出し、式（８）を満たすか否かを判別する。ここで、ｎ＝５１２、ｔ＝２０の場合には、δ（ｎ、ｔ）＝２１６×（５１３／（２×３．１４×２．７２））１／２＝３５９１４８となり、ｃδ（ｎ）−δ（ｎ、ｔ）＝−３５８４０７となる。この結果、安全性判定部１１は、ｎ＝５１２、ｔ＝２０の場合は、式（８）を満たさないと判別する。
【００８４】
このような場合には、暗号パラメータ生成部１０は、ｔの値を１デクリメントし、ｎ＝５１２、ｔ＝１９を通知することとなる。このような処理を継続すると、安全性判定部１１は、ｎ＝５１２、ｔ＝１０となった際に、ｃδ（ｎ）−δ（ｎ、ｔ）＝３９０．４９８と算出し、式（８）を満たすと判別する。この結果、暗号パラメータ生成部１０は、ｎ＝５１２、ｔ＝１０を暗号鍵生成部１２に通知し、秘密鍵Ｖおよび公開鍵Ｂを生成させる。その後、暗号パラメータ生成部１０は、暗号鍵生成部１２が生成した秘密鍵Ｖおよび公開鍵Ｂを出力装置３に送信する。
【００８５】
このように、暗号鍵生成装置１は、次元数ｎとビット長ｔとを用いて、格子縮約アルゴリズムのエルミートファクタとキーパラメータとを算出する。また、暗号鍵生成装置１は、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０から算出する係数と、次元数ｎから算出するエルミートファクタとの積が、次元数ｎとビット長ｔとから算出するキーパラメータより大きいか否かを判別する。そして、暗号鍵生成装置１は、次元数ｎ０とビット長ｔ０から算出する係数と、次元数ｎから算出するエルミートファクタとの積が、次元数ｎとビット長ｔとから算出するキーパラメータより大きい場合には、次元数ｎとビット長ｔから秘密鍵Ｖと公開鍵Ｂを生成する。
【００８６】
このため、暗号鍵生成装置１は、秘密鍵Ｖおよび公開鍵Ｂを生成するたびに、格子縮約攻撃を行う事で安全性を判別せずとも、格子縮約攻撃に対して安全性を有する秘密鍵Ｖおよび公開鍵Ｂを算出することができる。また、暗号鍵生成装置１は、格子縮約アルゴリズムごとの係数ｃを予め記憶する場合は、格子縮約攻撃に対して安全性を有する暗号鍵を迅速に生成し、出力することができる。
【００８７】
例えば、暗号パラメータ生成部１０、安全性判定部１１、暗号鍵生成部１２とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【００８８】
次に、図を用いて、暗号鍵生成装置１が有する暗号パラメータ生成部１０、安全性判定部１１、暗号鍵生成部１２が実行する処理の流れについて説明する。まず、図７を用いて、暗号パラメータ生成部１０が実行する処理の流れについて説明する。
【００８９】
図７は、暗号パラメータ生成部が実行する処理の流れを説明するためのフローチャートである。図７に示す例では、暗号パラメータ生成部１０は、入力装置２から、次元数ｎ、ビット長ｔ、解読成功確率ｐを取得する（ステップＳ１０１）。次に、暗号パラメータ生成部１０は、取得した次元数ｎ、ビット長ｔ、解読成功確率ｐを安全性判定部１１に出力する（ステップＳ１０２）。
【００９０】
そして、暗号パラメータ生成部１０は、安全性判定部１１の出力が「Ｙｅｓ」であるか否かを判別し（ステップＳ１０３）、Ｙｅｓである場合には（ステップＳ１０３肯定）、次元数ｎとビット長ｔを暗号鍵生成部１２に出力する（ステップＳ１０４）。その後、暗号パラメータ生成部１０は、暗号鍵生成部１２が生成した秘密鍵Ｖと暗号鍵Ｂを出力し（ステップＳ１０５）、処理を終了する。
【００９１】
一方、暗号パラメータ生成部１０は、安全性判定部１１の出力が「Ｎｏ」である場合には（ステップＳ１０３否定）、異なる次元数ｎ、または、ビット長ｔを選択する（ステップＳ１０６）。そして、暗号パラメータ生成部１０は、ステップＳ１０２の処理を実行する。
【００９２】
次に、図８を用いて、安全性判定部１１が実行する処理の流れについて説明する。図８は、安全性判定部が実行する処理の流れを説明するためのフローチャートである。例えば、図８に示す例では、安全性判定部１１は、暗号パラメータ生成部１０から次元数ｎ、ビット長ｔ、解読成功確率ｐを取得する（ステップＳ２０１）。次に、安全性判定部１１は、解読成功確率がｐ以下となるδ（ｎ０、ｔ０）を導出する（ステップＳ２０２）。
【００９３】
また、安全性判定部１１は、係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）を算出する（ステップＳ２０３）。また、安全性判定部１１は、ステップＳ２０１で取得した次元数ｎとビット長ｔとを用いて、エルミートファクタδ（ｎ）とキーパラメータδ（ｎ、ｔ）を算出する（ステップＳ２０４）。そして、安全性判定部１１は、ｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たすか否かを判別する（ステップＳ２０５）。
【００９４】
その後、安全性判定部１１は、ステップＳ２０１で取得した次元数ｎとビット長ｔとがｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たす場合は（ステップＳ２０５肯定）、「Ｙｅｓ」を暗号パラメータ生成部１０に出力し（ステップＳ２０６）、処理を終了する。一方、安全性判定部１１は、、ステップＳ２０１で取得した次元数ｎとビット長ｔとがｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たさない場合は（ステップＳ２０５否定）、「Ｎｏ」を暗号パラメータ生成部１０に出力し（ステップＳ２０７）、処理を終了する。
【００９５】
次に、図９を用いて、暗号鍵生成部１２が実行する処理の流れについて説明する。図９は、暗号鍵生成部が実行する処理の流れを説明するためのフローチャートである。図９に示す例では、暗号鍵生成部１２は、暗号パラメータ生成部１０から、次元数ｎとビット長ｔとを取得する（ステップＳ３０１）。すると、暗号鍵生成部１２は、ｎ次元の乱数ベクトルｖを生成し、生成した乱数ベクトルｖから式（１）を用いて行列Ｖを生成する（ステップＳ３０２）。次に、暗号鍵生成部１２は、行列Ｖのエルミート標準形となる行列Ｂを生成する（ステップＳ３０３）。
【００９６】
そして、暗号鍵生成部１２は、行列Ｂの（１、１）成分、すなわち、行列Ｂの１行目に含まれる各要素のうち、１列目に位置する要素の値を２で割った余りが１であるか否かを判別する（ステップＳ３０４）。その後、暗号鍵生成部１２は、行列Ｂの（１、１）成分の値を２で割った余りが１である場合には（ステップＳ３０４肯定）、行列Ｖを秘密鍵とし、行列Ｂを公開鍵として、暗号パラメータ生成部１０に出力し（ステップＳ３０５）、処理を終了する。一方、暗号鍵生成部１２は、行列Ｂの（１、１）成分の値を２で割った余りが０となる場合には（ステップＳ３０４否定）、新たなｎ次元の乱数ベクトルｖを生成し、生成した乱数ベクトルｖから行列Ｖを生成する（ステップＳ３０２）。
【００９７】
上述したように、暗号鍵生成装置１は、選択した次元数ｎとビット長ｔとを用いて、格子縮約アルゴリズムのエルミートファクタδ（ｎ）とキーパラメータδ（ｎ、ｔ）を算出する。また、暗号鍵生成装置１は、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０から係数ｃを算出し、ｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たすか否かを判別する。
【００９８】
そして、暗号鍵生成装置１は、ｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たす場合には、次元数ｎとビット長ｔとを用いて、秘密鍵Ｖと公開鍵Ｂを生成する。このため、暗号鍵生成装置１は、秘密鍵Ｖと公開鍵Ｂを生成する度に格子縮約攻撃を行わずとも、格子縮約攻撃に対して安全性を有する秘密鍵Ｖと公開鍵Ｂを生成することができる。
【００９９】
また、暗号鍵生成装置１は、ｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たさない場合には、ビット長ｔから１をデクリメントしたビット長を新たに選択し、次元数ｎと新たに選択したｔとがｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たすか否かを判別する。このため、暗号鍵生成装置１は、入力された次元数ｎに対して安全性を有するビット長ｔを用いた秘密鍵Ｖと公開鍵Ｂを生成することができる。
【０１００】
また、暗号鍵生成装置１は、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０から係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）を算出し、ｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たすか否かを判別する。このため、暗号鍵生成装置１は、次元数ｎとビット長ｔとから生成させる秘密鍵Ｖと公開鍵Ｂが安全性を有するか否かを正しく判別することができる。
【０１０１】
また、暗号鍵生成装置１は、ランダムに選択した次元数ｎ’とビット長ｔ’とを用いて、解読成功確率ｐの逆数と同数の暗号鍵候補を生成する。そして、暗号鍵生成装置１は、生成した暗号鍵候補に対する格子縮約攻撃を行うことで、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とを算出する。
【０１０２】
このため、暗号鍵生成装置１は、格子縮約アルゴリズムの種別と、解読成功確率ｐとの組み合わせによって定まる係数ｃを保持していない場合にも、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とを算出することで、係数ｃを取得することができる。この結果、暗号鍵生成装置１は、任意の格子縮約アルゴリズムと、解読成功確率ｐとの組み合わせを満たす秘密鍵Ｖと公開鍵Ｂとを出力することができる。
【０１０３】
また、暗号鍵生成装置１は、ＬＬＬアルゴリズム、または、ＢＫＺアルゴリズムを用いた格子縮約攻撃に対して、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０とを算出する。このため、暗号鍵生成装置１は、ＬＬＬアルゴリズム、または、ＢＫＺアルゴリズムに対して、解読成功確率がｐ以下となる秘密鍵Ｖと公開鍵Ｂとを出力することができる。
【０１０４】
なお、暗号鍵生成装置１は、実際にランダムに生成した暗号鍵に対する格子縮約攻撃を行うとしても、一般に用いられる次元数ｎやビット長ｔよりも小さい値の次元数ｎ’およびビット長ｔ’を生成する。そして、暗号鍵生成装置１は、生成した次元数ｎ’およびビット長ｔ’に基づいて、次元数ｎ０およびビット長ｔ０を算出し、算出した次元数ｎ０およびビット長ｔ０から係数ｃを算出する。
【０１０５】
このため、暗号鍵生成装置１は、実際に格子縮約攻撃を行う場合にも、計算量を削減し、現実的な時間内で係数ｃを算出することができる。ここで、係数ｃは、次元数ｎやビット長ｔの値によらない値である。このため、暗号鍵生成装置１は、一般に用いられる次元数ｎやビット長ｔと比較して小さな次元数ｎ０およびビット長ｔ０から係数ｃを算出した場合にも、次元数ｎやビット長ｔが安全性を有するか否かを適切に判別することができる。
【０１０６】
また、暗号鍵生成装置１は、格子縮約アルゴリズムの種類ごとに、あらかじめ、解読成功確率がｐ以下となる次元数ｎ０とビット長ｔ０から係数ｃを導出して保持する。そして、暗号鍵生成装置１は、入力された解読成功確率ｐに応じた係数ｃを用いて、入力された次元数ｎとビット長ｔとがｃδ（ｎ）−δ（ｎ、ｔ）＞０を満たすか否かを判別する。このため、暗号鍵生成装置１は、計算資源をさらに削減することができる。
【実施例２】
【０１０７】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１０８】
（１）次元数ｎ、ビット長ｔの入力について
上述した暗号鍵生成装置１は、入力装置２を介して、次元数ｎ、ビット長ｔ、解読成功確率ｐを取得し、取得した次元数ｎ、ビット長ｔから算出される秘密鍵Ｖおよび公開鍵Ｂが解読成功確率ｐを満たすか否かを判別した。しかし実施例は、これに限定されるものではない。
【０１０９】
例えば、暗号鍵生成装置１は、次元数ｎ、ビット長ｔの入力を行わずとも、解読成功確率がｐ以下となる秘密鍵Ｖおよび公開鍵Ｂを自動的に出力しても良い。例えば、暗号パラメータ生成部１０は、次元数ｎとビット長ｔとをランダムに生成する。そして、暗号パラメータ生成部１０は、ランダムに生成した次元数ｎ、ビット長ｔ、解読成功確率ｐを安全性判定部１１に出力する。
【０１１０】
そして、暗号パラメータ生成部１０は、ランダムに生成した次元数ｎおよびビット長ｔから生成される暗号鍵の解読成功確率がｐ以上となる場合、すなわち、安全性判定部１１から「Ｎｏ」を受信した場合には、ビット長ｔから１をデクリメントする。そして、暗号パラメータ生成部１０は、次元数ｎとビット長（ｔ−１）を安全性判定部１１に出力する。以上の処理を繰り返すことで、暗号鍵生成装置１は、次元数ｎおよびビット長ｔの指定を取得せずとも、解読成功確率がｐ以下となる秘密鍵Ｖと公開鍵Ｂとを生成することができる。
【０１１１】
また、暗号鍵生成装置１は、次元数ｎのみの指定を受付けることとしてもよい。このような場合には、暗号パラメータ生成部１０は、ランダムに生成したビット長ｔ’と指定された次元数ｎと、固定の解読成功確率ｐとを安全性判定部１１に出力する。そして、暗号パラメータ生成部１０は、安全性判定部１１が「Ｙｅｓ」を出力するまで、ビット長ｔ’をデクリメントすることとしてもよい。
【０１１２】
以下、数値を用いた具体例を説明する。例えば、暗号鍵生成装置１は、入力装置２から、要求される次元数ｎ、解読成功確率ｐとして（ｎ、ｐ）＝（１０２４、０．１）を取得する。このような場合には、安全性判定部１１は、解読成功確率が０．１以下となる（ｎ０，ｔ０）を抽出する。
【０１１３】
例えば、安全性判定部１１は、ランダムに選択した（ｎ’、ｔ’）＝（２５６、４）を用いて暗号鍵の候補を生成し、生成した候補に対して格子縮約攻撃を行う処理を、１／ｐ＝１０００回実行し、何回解読に成功したかを記録する。次に、安全性判定部１１は、（ｎ’、ｔ’）＝（２５６、３）として同様の格子縮約攻撃を行い、攻撃成功確率がｐ＝０．１以下となるｔ０が得られるまで繰り返す。
【０１１４】
この結果、安全性判定部１１は、ｎ’＝２５６の際に解読成功確率ｐが０．１以下となるｔ’がｔ’＜５であると判別する。この結果、安全性判定部１１は、ｎ０＝２５６、ｔ０＝５を抽出する。次に、安全性判定部１１は、式（７）に（ｎ０、ｔ０）を代入してキーパラメータδ（ｎ０、ｔ０）＝７．７５８を算出する。また、安全性判定部１１は、ｎ０＝２５６を用いて、ＬＬＬアルゴリズムのエルミートファクタδ（ｎ０）＝９６．２５７を算出する。この結果、安全性判定部１１は、係数ｃ＝δ（ｎ０、ｔ０）／δ（ｎ０）＝０．０８を算出する。
【０１１５】
次に、暗号パラメータ生成部１０は、ランダムに選択したビット長として、ｔ＝２５と次元数ｎ＝１０２４と、解読成功確率ｐ＝０．１とを安全性判定部１１に通知する。すると、安全性判定部１１は、暗号パラメータ生成部１０から通知された次元数ｎ＝１０２４とビット長ｔ＝２５からエルミートファクタδ（ｎ）およびキーパラメータδ（ｎ、ｔ）を算出し、式（８）を満たすか否かを判別する。ここで、ｎ＝１０２４、ｔ＝２５の場合には、ｃδ（ｎ）−δ（ｎ、ｔ）＝−９３７７５４０となる。この結果、安全性判定部１１は、ｎ＝１０２４、ｔ＝２５の場合は、式（８）を満たさないと判別する。
【０１１６】
このような場合には、暗号パラメータ生成部１０は、ｔの値を１デクリメントし、ｎ＝１０２４、ｔ＝２４を通知することとなる。このような処理を継続すると、安全性判定部１１は、ｎ＝１０２４、ｔ＝２４となった際に、ｃδ（ｎ）−δ（ｎ、ｔ）＝−１２５４８９３となるので、式（８）を満たさないと判別する。
【０１１７】
このため、暗号パラメータ生成部１０は、ｎ＝１０２４、ｔ＝２３を安全性判定部１１に通知する。すると、安全性判定部１１は、ｃδ（ｎ）−δ（ｎ、ｔ）＝２８０６４２９となるので、式（８）を満たすと判別し、暗号パラメータ生成部１０に「Ｙｅｓ」を出力する。この結果、暗号パラメータ生成部１０は、ｎ＝１０２４、ｔ＝２３を暗号鍵生成部１２に出力し、秘密鍵Ｖと公開鍵Ｂを生成させる。
【０１１８】
さらに、暗号鍵生成装置１は、安全なビット長のうち、最も大きい値のビット長を用いて秘密鍵Ｖと暗号鍵Ｂとを生成することとしてもよい。例えば、暗号パラメータ生成部１０は、安全性判定部１１が「Ｙｅｓ」を出力した場合には、ビット長ｔをインクリメントし、インクリメントしたビット長（ｔ＋１）を安全性判定部１１に入力する処理を実行する。その後、暗号パラメータ生成部１０は、安全性判定部１１が「Ｎｏ」を出力した場合には、前回入力したビット長を暗号鍵生成部１２に出力することとしてもよい。
【０１１９】
一方、暗号鍵生成装置１は、指定されたビット長ｔから、解読成功確率がｐ以下となる次元数ｎと出力することとしてもよい。例えば、暗号パラメータ生成部１０は、次元数ｎ’をランダムに選択し、安全性判定部１１に次元数ｎ’、ビット長ｔ、解読成功確率ｐとを出力する。そして、暗号パラメータ生成部１０は、安全性判定部１１が「Ｎｏ」を出力した場合には、次元数ｎ’を１インクリメントし、新たな次元数ｎ’＋１、ビット長ｔ、解読成功確率ｐを安全性判定部１１に入力する。
【０１２０】
以上の処理を繰り返し、安全性判定部１１が「Ｙｅｓ」を出力した場合には、暗号パラメータ生成部１０は、安全性判定部１１に入力した次元数とビット長ｔと解読成功確率ｐとを暗号鍵生成部１２に入力することとしてもよい。また、暗号パラメータ生成部１０は、ｃδ（ｎ）がδ（ｎ、ｔ）よりも小さい場合には、前回選択した次元数ｎを２倍にした値を新たな次元数ｎとして選択しても良い。
【０１２１】
以下、数値を用いた具体例を説明する。なお、以下の説明においては、安全性判定部１１が係数ｃ＝０．０８をすでに算出し、保持しているものとする。例えば、暗号パラメータ生成部１０は、ビット長ｔ＝２８、解読成功確率ｐ＝０．１を取得する。このような場合には、暗号パラメータ生成部１０は、２のべき乗となる次元数ｎ’をランダムに選択する。例えば、暗号パラメータ生成部１０は、次元数ｎ’＝５１２を選択する。そして、暗号パラメータ生成部１０は、次元数ｎ’＝５１２、ビット長ｔ＝２８、解読成功確率ｐ＝０．１を安全性判定部１１に通知する。
【０１２２】
すると、安全性判定部１１は、ｃδ（ｎ）−δ（ｎ、ｔ）＝−９６４０８２５４０５１５７６となるため、「Ｎｏ」を出力する。このような場合には、暗号パラメータ生成部１０は、次元数ｎ’を２倍し、ｎ’＝１０２４として、安全性判定部１１に入力する。すると、安全性判定部１１は、ｃδ（ｎ）−δ（ｎ、ｔ）＝−１３６２７５３９３９３８１８２となるため、「Ｎｏ」を出力する。
【０１２３】
この結果、暗号パラメータ生成部１０は、新たな次元数として、ｎ’＝１０２４×２＝２０４８を安全性判定部１１に入力する。すると、安全性判定部１１は、ｃδ（ｎ）−δ（ｎ、ｔ）＝３９６８９９８６１５８１９２２となるため、式（８）を満たすと判別し、「Ｙｅｓ」を出力する。このため、暗号パラメータ生成部１０は、次元数ｎ＝２０４８、ビット長ｔ＝２８を暗号鍵生成部１２に入力し、秘密鍵Ｖと公開鍵Ｂとを生成させる。
【０１２４】
このように、暗号鍵生成装置１は、ｃδ（ｎ）がδ（ｎ、ｔ）よりも小さい場合には、前回選択した次元数ｎに１インクリメントする等して、新たな次元数ｎを選択しなおす。そして、暗号鍵生成装置１は、ｃδ（ｎ）がδ（ｎ、ｔ）よりも大きくなるまで、安全性を判別する。このため、暗号鍵生成装置１は、任意のビット数ｔに対して安全な次元数ｎを短時間で算出し、算出した次元数ｎを用いて、安全性を有する秘密鍵Ｖと公開鍵Ｂとを生成することができる。
【０１２５】
（２）係数ｃを用いた処理について
上述した暗号鍵生成装置１は、指定された解読成功確率ｐを満たす次元数ｎ０とビット長ｔ０から係数ｃを算出し、算出した係数ｃを用いて、次元数ｎとビット長ｔから生成される秘密鍵Ｖと公開鍵Ｂが安全性を有するか判別した。しかし、実施例は、これに限定されるものではない。
【０１２６】
すなわち、暗号鍵生成装置１は、図５および図６に示すように、係数ｃを保持する場合には、任意の次元数ｎにおいて解読成功確率がｐ以下となるビット長ｔを識別することができる。このため、暗号鍵生成装置１は、保持する係数ｃを用いて、任意の次元数ｎにおいて解読成功確率がｐ以下となるビット長ｔを識別し、識別したビット長を用いて秘密鍵Ｖと公開鍵Ｂとを算出することとしてもよい。同様に、暗号鍵生成装置１は、保持する係数ｃを用いて、任意のビット長ｔにおいて解読成功確率がｐ以下となる次元数ｎを識別し、識別した次元数ｎを用いて、秘密鍵Ｖと公開鍵Ｂとを算出することとしてもよい。
【０１２７】
（３）秘密鍵Ｖと公開鍵Ｂについて
上述した暗号鍵生成装置１は、各要素がビット長ｔ以下となるランダムな整数であるｎ次元の乱数ベクトルｖと式（１）とを用いて、秘密鍵Ｖを生成した。しかし、実施例はこれに限定されるものではない。
【０１２８】
例えば、暗号鍵生成装置１は、終結式ｒｅｓ（ｘｎ＋１、ｖ）の解が、ビット長ｔ以下の十分に小さい整数ｓと任意の素数ｐとの積となるように乱数ベクトルｖを生成する。そして、暗号鍵生成装置１は、生成した乱数ベクトルｖと式（１）とを用いて、秘密鍵Ｖを生成することとしてもよい。
【０１２９】
（４）プログラム
ところで、実施例１に係る暗号鍵生成装置１は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムを構成情報管理装置、又は、補完装置が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図１０を用いて、実施例１に示した暗号鍵生成装置１と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１０は、暗号鍵生成プログラムを実行するコンピュータの一例を説明するための図である。
【０１３０】
図１０に例示されたコンピュータ１００は、ＲＯＭ（Read  Only  Memory）１１０、ＨＤＤ（Hard  Disk  Drive）１２０、ＲＡＭ（Random  Access  Memory）１３０、ＣＰＵ（Central  Processing  Unit）１４０がバス１６０で接続される。また、コンピュータ１００は、他のコンピュータと通信を行うためのＩ／Ｏ（Input  Output）１５０がバス１６０で接続される。
【０１３１】
ＲＡＭ１３０には、暗号鍵生成プログラム１３１が記憶されており、ＣＰＵ１４０が読み出して実行することによって、図１０に示す例では、暗号鍵生成プロセス１４１として機能するようになる。なお、暗号鍵生成プロセス１４１は、図１に示す暗号鍵生成装置１が有する暗号パラメータ生成部１０、安全性判定部１１、暗号鍵生成部１２と同様の機能を発揮する。
【０１３２】
なお、本実施例で説明した暗号鍵生成プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１３３】
１  暗号鍵生成装置
２  入力装置
３  出力装置
１０  暗号パラメータ生成部
１１  安全性判定部
１２  暗号鍵生成部
【図１】
0005768732.tif 000011
【図２】
0005768732.tif 000012
【図３】
0005768732.tif 000013
【図４】
0005768732.tif 000014
【図５】
0005768732.tif 000015
【図６】
0005768732.tif 000016
【図７】
0005768732.tif 000017
【図８】
0005768732.tif 000018
【図９】
0005768732.tif 000019
【図１０】
0005768732.tif 000020