(57)【要約】【課題】量子計算機に対して安全であり、認証方式の繰り返しが必要ない公開鍵認証プログラム、更には、量子計算機に対して安全であり、認証方式の並列合成を必要としない電子署名プログラムを提供すること。【解決手段】コンピュータに、ｍ行ｎ列（ｍ，ｎは０より大きい整数）の格子基底Ｂを生成する格子基底生成部と、ｎ列の第一及び第二の係数ベクトルｗ１，ｗ２を生成する係数ベクトル生成部と、前記格子基底Ｂ及び前記第一及び第二の係数ベクトルｗ１，ｗ２に基づきｌ１ノルムＫ１，Ｋ２を生成し、前記格子基底Ｂ及びｌ１ノルムＫ１，Ｋ２を公開鍵として記録する公開鍵生成部と、前記第一及び第二の係数ベクトルｗ１，ｗ２の一方を秘密鍵として記録する秘密鍵生成部と、して機能させるための公開鍵認証プログラムとする。【選択図】図１
2007329889.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ｍ行ｎ列（ｍ，ｎは０より大きい整数）の格子基底Ｂを生成する格子基底生成部と、
ｎ列の第一及び第二の係数ベクトルｗ１，ｗ２を生成する係数ベクトル生成部と、
前記格子基底Ｂ及び前記第一及び第二の係数ベクトルｗ１，ｗ２に基づきｌ１ノルムＫ１，Ｋ２を生成し、前記格子基底Ｂ及びｌ１ノルムＫ１，Ｋ２を公開鍵として記録する公開鍵生成部と、
前記第一及び第二の係数ベクトルｗ１，ｗ２の一方を秘密鍵として記録する秘密鍵生成部と、して機能させるための公開鍵認証プログラム。
【請求項２】
ｎ列の第三の係数ベクトルｒを生成し、前記係数ベクトルｒと前記格子基底Ｂとに基づいてｌ１ノルムｘを作成する第一の演算部と、しても機能させるための請求項１記載の公開鍵認証プログラム。
【請求項３】
正整数ｅの入力を受け付け、前記第三の係数ベクトルｒ、前記正整数ｅ、前記秘密鍵、前記第一及び第二の係数ベクトルのうち秘密鍵ではない係数ベクトルと前記格子基底Ｂにより得られるｌ１ノルムに基づいてｎ列の第四の係数ベクトルｙを作成する第二の演算部と、しても機能させるための請求項２記載の公開鍵認証プログラム。
【請求項４】
正整数ｅを作成する第三の演算部と、
前記係数ベクトルｙ及び前記公開鍵に基づいて前記係数ベクトルｙの正当性を確認する検証部と、しても機能させるための請求項３記載の公開鍵認証プログラム。
【請求項５】
前記第一及び第二の係数ベクトルｗ１，ｗ２は、０又は１を成分とするバイナリベクトルであることを特徴とする請求項１記載の公開鍵認証プログラム。
【請求項６】
前記格子基底Ｂにより得られる基底ベクトルは、非負整数を成分とすることを特徴とする請求項１記載の公開鍵認証プログラム。  
【請求項７】
前記格子基底Ｂにより得られる基底ベクトルは、互いに線形独立であることを特徴とする請求項１記載の公開鍵認証プログラム。
【請求項８】
前記第三の係数ベクトルｒは、非負整数を成分とすることを特徴とする請求項１記載の公開鍵認証プログラム。
【請求項９】
コンピュータに、
ｍ行ｎ列（ｍ，ｎは０より大きい整数）の格子基底Ｂを生成する格子基底生成部と、
ｎ列の第一及び第二の係数ベクトルｗ１，ｗ２を生成する係数ベクトル生成部と、
前記格子基底Ｂ及び前記第一及び第二の係数ベクトルｗ１，ｗ２に基づきｌ１ノルムＫ１，Ｋ２を生成し、前記格子基底Ｂ及びｌ１ノルムＫ１，Ｋ２を公開鍵として記録する公開鍵生成部と、
前記第一及び第二の係数ベクトルｗ１，ｗ２の一方を秘密鍵として記録する秘密鍵生成部と、して機能させるための電子署名プログラム。
【請求項１０】
ｎ列の第三の係数ベクトルｒを生成し、前記係数ベクトルｒと前記格子基底Ｂとに基づいてｌ１ノルムｘを作成し、メッセージｍと前記ｌ１ノルムｘに基づいてハッシュ値ｅを作成する第一の演算部と、しても機能させるための請求項９記載の電子署名プログラム。
【請求項１１】
前記第三の係数ベクトルｒ、前記ハッシュ値ｅ、前記秘密鍵、前記第一及び第二の係数ベクトルのうち秘密鍵ではない係数ベクトルと前記格子基底Ｂにより得られるｌ１ノルムに基づいてｎ列の第四の係数ベクトルｙを作成する第二の演算部と、しても機能させるための請求項１０記載の電子署名プログラム。
【請求項１２】
前記メッセージｍ、前記ハッシュ値ｅ、前記係数ベクトルｙ及び前記公開鍵に基づいて、前記メッセージｍに対する前記ハッシュ値ｅ及び前記係数ベクトルｙの正当性を確認する検証部と、しても機能させるための請求項１１記載の電子署名プログラム。
【請求項１３】
前記第一及び第二の係数ベクトルｗ１，ｗ２は、０又は１を成分とするバイナリベクトルであることを特徴とする請求項９記載の電子署名プログラム。
【請求項１４】
前記格子基底Ｂにより得られる基底ベクトルは、非負整数を成分とすることを特徴とする請求項９記載の電子署名プログラム。
【請求項１５】
前記格子基底Ｂにより得られる基底ベクトルは、互いに線形独立であることを特徴とする請求項９記載の電子署名プログラム。
【請求項１６】
前記第三の係数ベクトルｒは、非負整数を成分とすることを特徴とする請求項９記載の電子署名プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、公開鍵認証プログラム及び電子署名プログラムに関する。
【背景技術】
【０００２】
近年、社会の情報化が進むにつれて、様々な機能を電子化する試みが行われている。特に、電子投票、電子契約や電子現金などの実現が試みられているが、これらのために公開鍵暗号方式、公開鍵認証方式、電子署名方式など（これらを「公開鍵暗号系」と総称する）が基盤技術として非常に重要な役割を果たしている。
【０００３】
公開鍵暗号系では公開鍵と秘密鍵という２つの異なる、しかし互いに数学的な関係を有する鍵の組を用いる。ここで、公開鍵はネットワーク上で公開されるので、公開鍵から秘密鍵を計算することが困難となるような数学的関係を利用しなければならない。通常は、数学的な関係として片方向の計算は容易であるが、逆方向の計算は困難であるという計算問題を用いる。
【０００４】
逆方向の計算が困難な問題として、現在は素因数分解問題や離散対数問題などが用いられている。しかし、これらの問題については、解の計算が困難であるという予測はされているが、そのような証明は与えられていない。また、量子計算機が実用化されるとこれらの問題は効率的に解くことができることが知られている。そのため、量子計算機を用いても効率的に解くことができないような問題を用いる必要がある。このような問題の候補として、ＮＰ完全と呼ばれるクラスに属する問題がある。
【０００５】
ＮＰ完全問題の中でも近年盛んに研究がなされている問題として、格子を利用した問題（格子問題）がある。ここで、「格子」とはｂ１，ｂ２，…，ｂｎをｍ次元整数ベクトル空間に属するｎ本の線形独立なベクトルとしたときに、これらの整数一次結合によって構成される空間であり、ベクトルｂ１，ｂ２，…，ｂｎを格子基底と呼び行列形式でＢと略記する。また、格子ベクトルｂをｂ＝ｘ１ｂ１＋ｘ２ｂ２＋…＋ｘｎｂｎのようにｂ１，ｂ２，…，ｂｎの一次結合として表わしたとき、それぞれの係数ｘｉをベクトル形式（ｘ１，ｘ２，…，ｘｎ）で表わし、それを係数ベクトルと呼ぶことにする。格子問題の中でも特に重要な問題として最短ベクトル問題や最近接ベクトル問題が挙げられる。また、それらの問題の近似解を考える問題として近似最短ベクトル問題や近似最近接ベクトル問題がある。
【０００６】
公開鍵認証方式とは、身元を検証するプログラムＶ（検証者Ｖとも呼ぶ）が身元を証明しようとするプログラムＰ（証明者Ｐとも呼ぶ）を認証する技術である。証明者Ｐは自身の秘密鍵を保持し、自身の公開鍵を外部に公開する。検証者Ｖは公開されている証明者Ｐの公開鍵を保持している。証明者Ｐは自身の秘密鍵を用いて自身の身元を証明することができるが、偽者の証明者Ｐ＊（攻撃者と呼ばれる）は証明者Ｐの秘密鍵を保持しておらず、また、証明者Ｐの公開鍵から証明者Ｐの秘密鍵を計算することは困難であるため、自身を証明者Ｐであると偽ることはできない。また、認証段階において検証者Ｖに証明者Ｐの秘密鍵が漏れることもないので、認証の後に検証者Ｖは自身が証明者Ｐであると偽ることもできない。
【０００７】
公開鍵認証方式としては現在までに様々な技術が提案されている。しかし、それらの技術は、量子計算機に対して安全ではない、攻撃者の成りすましを防ぐために認証方式を複数回繰り返さなければならないなどの問題点が存在する。そのため、量子計算機に対しても安全で、認証方式を繰り返す必要がない公開鍵認証方式を構成する必要がある。
【０００８】
従来の公開鍵認証方式に関する技術として、例えば下記非特許文献１には、Ｓｃｈｎｏｒｒ公開鍵認証方式が記載されている。
【０００９】
ここで、Ｓｃｈｎｏｒｒ公開鍵認証方式について説明する。この公開鍵認証方式は離散対数問題の難しさに基づいて構成される。パラメータ生成者は２つの素数ｐとｑ（ｑはｐ−１を割り切る）、ｐを法とする乗法群（Ｚ／ｐＺ）＊における位数ｑの生成元ｇを選択し、ｐ、ｑ、ｇを公開パラメータとする。まず、公開鍵と秘密鍵を作成するために証明者は整数ｓを区間［１，ｑ−１］から選択し、値ｖをｇ−ｓ（ｍｏｄ  ｐ）として計算する。このとき、証明者の公開鍵はｖ、秘密鍵はｓとなる。認証を行う際には、証明者はまず乱数ｘを区間［１，ｑ−１］からランダムに選択し、値ｔをｇｘ（ｍｏｄ  ｐ）として計算し、値ｔを検証者に送信する。値ｔを受け取った後、検証者は値ｅを区間［０，Ｅ−１］からランダムに選択し（Ｅはある程度大きい正整数）、値ｅを証明者に送信する。値ｅを受け取った後、証明者は値ｙをｘ＋ｓｅ（ｍｏｄ  ｑ）として計算し、値ｙを検証者に送信する。検証者は証明者から受け取った値ｙに対して、ｇｙｖｅ（ｍｏｄ  ｐ）が値ｔと一致するかどうか調べる。値が一致したならば、検証者は証明者を正当であると認識し、値が一致しなければ、検証者は証明者を拒否する。
【００１０】
また電子署名方式とは、メッセージｍ（電子ファイル等）に対し、電子的に署名を作成する技術をいう。署名者Ｓは自身の秘密鍵を保持する一方、自身の公開鍵を外部に公開する。検証者Ｖは公開されている署名者Ｓの公開鍵を保持している。署名者Ｓは自身の秘密鍵を用いてメッセージｍの電子署名を作成することができるが、偽者の署名者Ｓ＊は署名者Ｓの秘密鍵を保持しておらず、また、署名者Ｓの公開鍵から署名者Ｓの秘密鍵を計算することは困難であるため、メッセージｍの署名者Ｓによる電子署名を作成することはできない。
【００１１】
電子署名方式としては現在までに様々な技術が提案されている。しかし、それらの技術は、量子計算機に対して安全ではない、認証方式を複数回並列合成しなければならないなどの問題点が存在する。そのため、量子計算機に対して安全であり、認証方式の並列合成を必要としない電子署名方式を構成する必要がある。
【００１２】
従来の電子署名方式に関する技術として、例えば下記非特許文献１には、Ｓｃｈｎｏｒｒ電子署名方式も記載されている。
【００１３】
ここで、Ｓｃｈｎｏｒｒ電子署名方式について説明する。この電子署名方式は離散対数問題の難しさに基づいて構成される。パラメータ生成者は２つの素数ｐとｑ（ｑはｐ−１を割り切る）、ｐを法とする乗法群（Ｚ／ｐＺ）＊における位数ｑの生成元ｇを選択し、ｐ、ｑ、ｇを公開パラメータとする。まず、公開鍵と秘密鍵を作成するために署名者は整数ｓを区間［１，ｑ−１］から選択し、値ｖをｇ−ｓ（ｍｏｄ  ｐ）として計算する。このとき、署名者の公開鍵はｖ、秘密鍵はｓとなる。署名を作成する際には、署名者はまず乱数ｘを区間［１，ｑ−１］からランダムに選択し、値ｔをｇｘ（ｍｏｄ  ｐ）として計算する。そして、署名を作成するメッセージｍと値ｔに基づいてハッシュ値ｅを計算する。そして、署名者は値ｙをｘ＋ｓｅ（ｍｏｄ  ｑ）として計算し、メッセージｍ、ハッシュ値ｅ、値ｙを検証者に送信する。検証者は署名者から受け取ったハッシュ値ｅと値ｙを利用し、ｇｙｖｅ（ｍｏｄ  ｐ）を計算する。そして、メッセージｍと値ｇｙｖｅ（ｍｏｄ  ｐ）に基づくハッシュ値がｅと一致するかどうかを調べる。値が一致したならば、検証者は署名を正当であると認識し、値が一致しなければ、署名を不正であるとみなす。
【００１４】
【非特許文献１】Ｃ．Ｐ．Ｓｃｈｎｏｒｒ，“Ｅｆｆｉｃｉｅｎｔ  ｉｄｅｎｔｉｆｉｃａｔｉｏｎ  ａｎｄ  ｓｉｇｎａｔｕｒｅｓ  ｆｏｒ  ｓｍａｒｔ  ｃａｒｄｓ，”  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＣＲＹＰＴＯ  ‘８９，ＬＮＣＳ  ４３５，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，１９９０．
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、上記非特許文献１に記載の技術では認証方式の繰り返しは必要としていないが、量子計算機に対して安全ではないという点において課題を有している。
【００１６】
また、上記非特許文献１に記載の技術では、認証方式の並列合成は必要としていないが、量子計算機に対して安全でないという点において課題を有している。
【００１７】
そこで、本発明は、上記課題を解決し、量子計算機に対して安全であり、認証方式の繰り返しが必要ない公開鍵認証プログラム、更には、量子計算機に対して安全であり、認証方式の並列合成を必要としない電子署名プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明者らは、上記課題について鋭意検討を行ったところ、格子を利用した新たな問題であるＮｏｎｎｅｇａｔｉｖｅ  Ｅｘａｃｔ  Ｌｅｎｇｔｈ  Ｖｅｃｔｏｒ  Ｐｒｏｂｌｅｍ（ＮＥＬＶＰ）を定義し、そのＮＰ完全性を証明し、ＮＥＬＶＰの困難性に基づく公開鍵認証方式を構成した。ＮＥＬＶＰとは入力として非負整数を成分に持つ格子基底Ｂと格子ベクトルのｌ１ノルムＫが与えられたときに、格子基底Ｂが張る格子においてｌ１ノルムＫをもち、かつ、係数ベクトルが非負整数を成分に持つベクトルであるような格子ベクトルを計算する問題である。そして、ＮＥＬＶＰはＮＰ完全であることが証明される。特に、係数ベクトルをバイナリベクトルに制限した場合でもＮＰ完全であることが証明される。我々の認証方式では、Ｓｃｈｎｏｒｒ公開鍵認証方式と同様に、検証者の返す値ｅの範囲の上限を十分に大きな値とすることで、成りすましの成功確率を小さく抑えることができ、繰り返しは不要である。また、同様の理由により、我々の電子署名方式は認証方式の並列合成を必要としない。
【００１９】
即ち、本発明に係る公開鍵認証プログラムは、量子計算機に対して安全であり、認証方式の繰り返しを必要としない。
【００２０】
また、本発明に係る電子署名プログラムは、量子計算機に対して安全であり、認証方式の並列合成を必要としない。
【００２１】
より具体的に説明すると、ＮＥＬＶＰに基づく公開鍵認証プログラムは、コンピュータに、鍵生成プログラムの乱数生成部により作成される乱数を用いてｍ行ｎ列（ｍ，ｎは０より大きい整数）の格子基底Ｂを生成する鍵生成プログラムの格子基底生成部と、鍵生成プログラムの乱数生成部により作成される乱数を用いて２つのｎ列の係数ベクトルｗ１，ｗ２を生成する鍵生成プログラムの係数ベクトル生成部と、鍵生成プログラムの格子基底生成部が生成した格子基底Ｂ、及び、格子基底Ｂと鍵生成プログラムの係数ベクトル生成部が生成した係数ベクトルｗ１，ｗ２とに基づいて得られるｌ１ノルムＫ１，Ｋ２の３つ組を公開鍵として記録媒体に格納させる鍵生成プログラムの公開鍵生成部と、鍵生成プログラムの係数ベクトル生成部が生成した係数ベクトルｗ１，ｗ２、及び、鍵生成プログラムの乱数生成部により作成される１又は２を値とする乱数ｉを用いて決定される係数ベクトルｗｉを秘密鍵として記録媒体に格納させる鍵生成プログラムの秘密鍵生成部と、証明者プログラムの乱数生成部により作成される乱数を用いて生成されるｎ列の係数ベクトルｒ、及び、格子基底Ｂとに基づいて得られるｌ１ノルムｘを作成する証明者プログラムの演算部１と、検証者プログラムの乱数生成部により作成される乱数を用いて正整数ｅを作成する検証者の演算部と、証明者プログラムの演算部１が生成した係数ベクトルｒ、検証者プログラムの演算部が生成した正整数ｅ、鍵生成プログラムの秘密鍵生成部が作成した秘密鍵ｗｉ、及び、鍵生成プログラムの公開鍵生成部が作成したｌ１ノルムＫ３−ｉとに基づいて得られるｎ列の係数ベクトルｙを作成する証明者プログラムの演算部２と、証明者プログラムの演算部２が作成した係数ベクトルｙ、及び、鍵生成プログラムの公開鍵生成部が作成した公開鍵とに基づいて係数ベクトルｙの正当性を確認する検証者プログラムの検証部と、検証者プログラムと通信するための証明者プログラムの通信部と、証明者プログラムと通信するための検証者プログラムの通信部と、して機能させる。
【００２２】
また、ＮＥＬＶＰに基づく公開鍵認証プログラムにおいて、係数ベクトルｗ１，ｗ２は、０又は１を成分とするバイナリベクトルであることも望ましく、格子基底Ｂにより得られる基底ベクトルは、互いに線形独立であることも望ましく、全ての成分が非負整数であることも望ましく、係数ベクトルｒは、非負整数を成分に持つことも望ましい。
【００２３】
また、より具体的に、ＮＥＬＶＰに基づく電子署名プログラムは、コンピュータに、鍵生成プログラムの乱数生成部により作成される乱数を用いてｍ行ｎ列（ｍ，ｎは０より大きい整数）の格子基底Ｂを生成する鍵生成プログラムの格子基底生成部と、鍵生成プログラムの乱数生成部により作成される乱数を用いて２つのｎ列の係数ベクトルｗ１，ｗ２を生成する鍵生成プログラムの係数ベクトル生成部と、鍵生成プログラムの格子基底生成部が生成した格子基底Ｂ、及び、格子基底Ｂと鍵生成プログラムの係数ベクトル生成部が生成した係数ベクトルｗ１，ｗ２とに基づいて得られるｌ１ノルムＫ１，Ｋ２の３つ組を公開鍵として記録媒体に格納させる鍵生成プログラムの公開鍵生成部と、鍵生成プログラムの係数ベクトル生成部が生成した係数ベクトルｗ１，ｗ２、及び、鍵生成プログラムの乱数生成部により作成される１又は２を値とする乱数ｉを用いて決定される係数ベクトルｗｉを秘密鍵として記録媒体に格納させる鍵生成プログラムの秘密鍵生成部と、署名者プログラムの乱数生成部により作成される乱数を用いて生成されるｎ列の係数ベクトルｒ、及び、格子基底Ｂとに基づいて得られるｌ１ノルムｘを作成し、署名を作成するメッセージｍとｌ１ノルムｘとに基づいて得られるハッシュ値ｅを作成する署名者プログラムの演算部１と、証明者プログラムの演算部１が生成した係数ベクトルｒ及びハッシュ値ｅ、鍵生成プログラムの秘密鍵生成部が作成した秘密鍵ｗｉ、及び、鍵生成プログラムの公開鍵生成部が作成したｌ１ノルムＫ３−ｉとに基づいて得られるｎ列の係数ベクトルｙを作成する署名者プログラムの演算部２と、署名者プログラムの演算部１が作成したハッシュ値ｅ、署名者プログラムの演算部２が作成した係数ベクトルｙ、及び、鍵生成プログラムの公開鍵生成部が作成した公開鍵とに基づいてメッセージｍに対する署名（ハッシュ値ｅと係数ベクトルｙの組）の正当性を確認する検証者プログラムの検証部と、検証者プログラムと通信するための証明者プログラムの通信部と、証明者プログラムと通信するための検証者プログラムの通信部と、して機能させる。
【００２４】
また、ＮＥＬＶＰに基づく電子署名プログラムにおいて、係数ベクトルｗ１，ｗ２は、０又は１を成分とするバイナリベクトルであることも望ましく、格子基底Ｂにより得られる基底ベクトルは、互いに線形独立であることも望ましく、全ての成分が非負整数であることも望ましく、係数ベクトルｒは、非負整数を成分に持つことも望ましい。
【００２５】
ここで、ｌ１ノルムとは、ｘをｍ次元ベクトルとするときに、ｘのそれぞれの成分について絶対値をとり、それらの総和をとった値である。
【発明の効果】
【００２６】
以上により、量子計算機に対して安全であり、認証方式の繰り返しを必要としない公開鍵認証方式を提供することができる。また、量子計算機に対して安全であり、認証方式の並列合成を必要としない電子署名方式を提供することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施形態について図面を参照しつつ詳細に説明する。ただし、本発明は多くの異なる態様による実施が可能であり、本実施形態や実施例に限定されるものではない。
【００２８】
（実施形態１）
図１は、ＮＥＬＶＰに基づく公開鍵認証プログラムの機能ブロックを示す図である。本公開鍵認証プログラムは例えばパーソナルコンピュータや小型端末等の情報処理装置におけるハードディスク等の記録媒体に格納され、ユーザーのニーズに応じて実行される。また本公開鍵認証プログラムのうち証明者プログラム１２と検証者プログラム１３は互いに通信を行うことができる状態で別々の情報処理装置の記録媒体に格納されている。なお本公開鍵認証プログラムは、鍵生成プログラム１１と、証明者プログラム１２と、検証者プログラム１３とを有して構成されている。なお、鍵生成プログラム１１は、実行されることにより乱数生成部１１１と、格子基底生成部１１２、係数ベクトル生成部１１３、秘密鍵生成部１１４、公開鍵生成部１１５と、として機能することができる。また証明者プログラム１２は、実行されることにより乱数生成部１２１、第一の演算部１２２、第二の演算部１２３、通信部１２４と、して機能することができる。また検証者プログラム１３は、実行されることにより乱数生成部１３１、第三の演算部１３２、検証部１３３、通信部１３４と、して機能することができる。なお証明者プログラム１２と検証者プログラム１３は、通信部１２４と通信部１３４を介して互いに通信を行うことができる。
【００２９】
ここで鍵生成プログラム１１における処理について具体的に説明する。まず、鍵生成プログラム１１は、格子基底生成部１１２においてｎ次正方行列の格子基底Ｂ（ｎは０より大きい整数であり、ｎは限定されないが、安全性の観点から例えば２００以上あることが好ましい。）を作成する。なおここで格子基底Ｂのそれぞれの成分は乱数生成部１１１により選ばれる（各成分のビット長は限定されるわけではないが、安全性の観点から例えば８０ビット以上あることが好ましい。）。この格子基底生成部１１２により作成される格子基底Ｂは、公開鍵生成部１１５が生成する公開鍵の一部となる。また、格子基底生成部１１２は、この作成された格子基底Ｂから得られる基底ベクトルが互いに線形独立であるか否かも判定する。なおここで「基底ベクトル」とは、格子基底Ｂをｎ行１列の列ベクトルに分解した場合における各列ベクトルを意味する。基底ベクトルが互いに線形独立であるか否かの判断は周知な手法により計算することができ、特段に限定されるわけではないが、格子基底Ｂの行列式を計算することにより確認できる。なお、本実施形態においては、計算の簡略化のため基底行列の成分はいずれも非負整数であることが極めて望ましいが、計算の困難さを伴う場合を許容するのであれば、整数でない場合も可能ではある。
【００３０】
一方、係数ベクトル生成部１１３は、ｎ次係数ベクトルｗ１，ｗ２を作成する。この成分は、乱数生成部１１１によりランダムに選択され、その値は０又は１である。なお、この係数ベクトル生成部１１３により作成された係数ベクトルのどちらか一方は、秘密鍵となり、秘密鍵生成部１１４により記憶媒体に格納される。なおここで、係数ベクトルｗ１，ｗ２の成分は０又は１であることが鍵の長さの観点から望ましいが、鍵サイズの増加を許容できるのであれば正整数を選択することも可能である。
【００３１】
次に、秘密鍵生成部１１４は、上記作成された係数ベクトルｗ１，ｗ２と乱数生成部１１１によって作成される１又は２を値としてもつ乱数ｉに基づいて秘密鍵ｗｉを決定し、記憶媒体に格納する。
【００３２】
そして、公開鍵生成部１１５は、上記作成された格子基底Ｂと係数ベクトルｗ１，ｗ２に基づいて格子ベクトルＢｗ１，Ｂｗ２を計算し、この格子ベクトルＢｗ１，Ｂｗ２のｌ１ノルムＫ１，Ｋ２を計算し、記憶媒体に格納する。ここでｌ１ノルムＫとは、以下の式で与えられる。
【数１】
2007329889.tif 000003
【００３３】
この結果、公開鍵生成部１１５は、格子基底Ｂ及び求めたｌ１ノルムＫ１，Ｋ２の組を公開鍵（Ｂ，Ｋ１，Ｋ２）として記憶装置に格納する。これにより、本鍵生成プログラムは秘密鍵及び公開鍵を生成することができる。
【００３４】
次に、証明者プログラム１２における処理について具体的に説明する。まず証明者プログラム１２は第一の演算部１２２においてｎ列の係数ベクトルｒを作成し、格子ベクトルＢｒを計算し、この格子ベクトルＢｒのｌ１ノルムｘを計算し、通信部１２４によって検証者プログラム１３に送信する。なおここで係数ベクトルｒのそれぞれの成分は０以上Ｒより小さい整数（Ｒは例えば２５０ビット程度を有する正整数）として乱数生成部１１１により選ばれる。
【００３５】
第二の演算部１２３においては、検証者プログラム１３から正整数ｅが送られてきた後に、上記作成された係数ベクトルｒ、秘密鍵ｗｉ、ｌ１ノルムＫ３−ｉと、検証者プログラム１３から送られてくる正整数ｅに基づいて係数ベクトルｙを計算し、通信部１２４によって検証者プログラム１３にｙを送信する。ここでｙはｒ＋ｅＫ３−ｉｗｉとして計算される。
【００３６】
次に、検証者プログラム１３における処理を具体的に説明する。まず検証者プログラム１３は証明者プログラム１２からｘが送られてきた後に、演算部１３２において正整数ｅを作成し、この正整数ｅを通信部１３４を介して証明者プログラム１２に送信する。なおここで正整数ｅは０以上Ｅより小さい整数（Ｅは正整数であり、Ｅは限定されるわけではないが例えば８０ビット以上有することの好ましい。）として乱数生成部１３１により選ばれる。
【００３７】
検証部１３３では、証明者プログラム１２から係数ベクトルｙを受信した後に、上記作成された公開鍵（Ｂ，Ｋ１，Ｋ２）、証明者プログラム１２から受信したｌ１ノルムｘ、検証者プログラムの演算部１３２が作成した正整数ｅに基づいて係数ベクトルｙの正当性を検証する。具体的には、係数ベクトルｙの各成分が（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝以上、Ｒ＋（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝より小さいかを確認する。ここで、ｍａｘ｛Ｋ１，Ｋ２｝はＫ１とＫ２の大きいほうを表す。更に、格子ベクトルＢｙを計算し、その格子ベクトルＢｙのｌ１ノルムを計算し、そのｌ１ノルムと値ｘ＋ｅＫ１Ｋ２が等しくなるときのみ、検証者プログラム１３は係数ベクトルｙを正当であると認識する。
【００３８】
これにより、本証明者プログラム１２と検証者プログラム１３は、それぞれの役割を実行し、お互いに通信することにより、検証者プログラム１３による証明者プログラム１２の認証を行うことができる。
【００３９】
次に、上記の公開鍵認証方式の安全性について説明する。上記の公開鍵認証方式が安全であることを示すためには、上記の公開鍵認証方式が完全性、健全性、証拠秘匿性という性質を有していることを示さなければならない。ここで「完全性」とは、秘密鍵を保持する証明者が対応する公開鍵を持つ検証者と認証を行った場合、証明者は圧倒的に高い確率で正当であると認識されるという性質である。また、「健全性」とは秘密鍵を保持していない攻撃者が検証者と認証を行った場合、攻撃者は高い確率で拒否されるという性質である。また、「証拠秘匿性」とは秘密鍵を保持している証明者が検証者と認証を行った後に、検証者は証明者の公開鍵に対応する任意の秘密鍵を計算することができないという性質である。以上の性質を示すことにより、本公開鍵認証方式において成りすまし攻撃、及び、検証者による証明者の秘密鍵の奪取が不可能であることが示される。
【００４０】
まず、完全性については、係数ベクトルｒの取り得る範囲を決定する定数であるＲ、及び、正整数ｅの取り得る範囲を決定する定数であるＥを適切に定めることにより、秘密鍵を保持する証明者が検証者に正当であると認識される確率を圧倒的に高くすることができる。
【００４１】
次に、健全性について説明する。健全性を示すためには、時間ｔ、確率εで成りすましに成功する秘密鍵を保持していない攻撃者の存在を仮定し、そのような攻撃者が存在するならば、時間ｔ＊、確率ε＊でＮＥＬＶＰのインスタンス（Ｂ，Ｋ）の解ｗを計算することができることを示せばよい。上記の命題の対偶をとると、時間ｔ＊、確率ε＊でＮＥＬＶＰの解を計算することが不可能ならば、時間ｔ、確率εで成りすましに成功する攻撃者は存在しないということになり、従って、ＮＥＬＶＰの解を計算することは困難であるという仮定より、成りすましに成功する攻撃者は存在しないということが示される。ここで、εとε＊、ｔとｔ＊には次式のような関係がある。
【数２】
2007329889.tif 000004
【００４２】
ここで、Φ１は検証に要する時間、Φ２はＮＥＬＶＰの解の計算時間、ｆ（ｋ）はセキュリティパラメータがｋであるときに、空間［０，Ｒ＋（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝］ｎに属するＮＥＬＶＰの解の個数の上限を表す関数である。
ｆ（ｋ）は格子基底Ｂ、Ｒ＋（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝、ｋに依存する関数である。この関数がｋについての多項式関数になるような格子基底Ｂを選べば、ε＊は無視できない関数となる。また、攻撃者はｙを出力する際に、検証式を満たすｙの集合からランダムに出力するという仮定も必要である。
【００４３】
次に、証拠秘匿性について説明する。証拠秘匿性を示すためには、我々の公開鍵認証方式が証拠識別不可能性という性質を保持していることを示せばよい。ここで、「証拠識別不可能性」とは、証明者が１つの公開鍵に対応する２つの異なる秘密鍵を用いてそれぞれ認証を行ったとき、対応する公開鍵を持つ検証者はどちらの秘密鍵を用いて認証を行ったかを識別できないという性質である。
【００４４】
証拠識別不可能性は認証を実行後に検証者が知ることができる情報である係数ベクトルｒ、正整数ｅ、係数ベクトルｙからどの秘密鍵を用いたかに関する情報を得ることができないことを示せばよい。つまり、異なる秘密鍵を用いても認証を実行後に検証者が知ることができる情報である係数ベクトルｒ、正整数ｅ、係数ベクトルｙの出現確率にほとんど差異がないことを示せばよい。証明者プログラムと検証者プログラムから明らかなように、証明者がどの秘密鍵を用いたとしても係数ベクトルｒ、正整数ｅの出現確率に関して差はない。係数ベクトルｙに関しても、異なる秘密鍵を用いた場合の出現確率の差は、係数ベクトルｒの取り得る範囲を決定する定数であるＲ、及び、正整数ｅの取り得る範囲を決定する定数であるＥを適切に定めることにより、非常に小さくすることができる。従って、検証者が知ることができる情報である係数ベクトルｒ、正整数ｅ、係数ベクトルｙの出現確率にはほとんど差が出ないことが証明される。それゆえ、我々の公開鍵認証方式は証拠識別不可能性を有することが示される。
【００４５】
このように、我々の公開鍵認証方式には、完全性、健全性、証拠秘匿性が成立し、従って安全であることが示される。
【００４６】
以上、本実施形態に係る公開鍵認証プログラムにより、量子計算機に対して安全であり、認証方式の繰り返しを必要としない公開鍵認証プログラムを提供することができる。
【００４７】
（実施形態２）
図２は、ＮＥＬＶＰに基づく電子署名プログラムの機能ブロックを示す図である。本電子署名プログラムは、例えばパーソナルコンピュータや小型端末等の情報処理装置におけるハードディスク等の記録媒体に格納され、ユーザーのニーズに応じて実行される。また本電子署名プログラムのうち署名者プログラム２２と検証者プログラム２３は通信を行うことができる状態で別々の情報処理装置の記録媒体に格納されている。なお本電子署名プログラムは、鍵生成プログラム２１と、署名者プログラム２２と、検証者プログラム２３とを有して構成されている。なお鍵生成プログラム２１は、実行されることにより乱数生成部２１１と、格子基底生成部２１２と、係数ベクトル生成部２１３と、秘密鍵生成部２１４と、公開鍵生成部２１５と、して機能することができる。また署名者プログラム２２は、実行されることにより乱数生成部２２１と、第一の演算部２２２と、第二の演算部２２３と、通信部２２４と、して機能することができる。また検証者プログラム２３は、実行されることにより検証部２３１と、通信部１３２と、して機能することができる。なお証明者プログラム２２と検証者プログラム２３は、通信部２２４と通信部２３２を介して通信を行うことができる。
【００４８】
ここで鍵生成プログラム２１における処理については前記実施形態１における鍵生成プログラム１１の処理と同様であるため、説明は省略する。
【００４９】
次に、証明者プログラム２２における処理について具体的に説明する。まず証明者プログラム２２は第一の演算部２２２においてｎ列の係数ベクトルｒを作成し、格子ベクトルＢｒを計算し、この格子ベクトルＢｒのｌ１ノルムｘを計算する。なおここで係数ベクトルｒのそれぞれの成分は０以上Ｒより小さい整数（Ｒは例えば２５０ビット程度を有する正整数）として乱数生成部２１１により選ばれる。そして、署名を作成するメッセージｍとｌ１ノルムｘに基づいてハッシュ値ｅを計算する。ここで、ハッシュ関数は例えばＳＨＡ１などを用いることができる。
【００５０】
第二の演算部２２３においては、上記作成された係数ベクトルｒ、及び、ハッシュ値ｅ、秘密鍵ｗｉ、ｌ１ノルムＫ３−ｉに基づいて係数ベクトルｙを計算し、通信部２２４によって検証者プログラム２３にメッセージｍ、署名（ｅ、ｙ）を送信する。ここでｙはｒ＋ｅＫ３−ｉｗｉとして計算される。
【００５１】
次に、検証者プログラム２３における処理を具体的に説明する。検証部２３１では、証明者プログラム２２からメッセージｍと署名（ｅ、ｙ）を受信した後に、上記作成された公開鍵（Ｂ，Ｋ１，Ｋ２）に基づいてメッセージｍに対する署名（ｅ、ｙ）の正当性を検証する。具体的には、係数ベクトルｙの各成分が（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝以上、Ｒ＋（Ｅ−１）ｍａｘ｛Ｋ１，Ｋ２｝より小さいかを確認する。ここで、ｍａｘ｛Ｋ１，Ｋ２｝はＫ１とＫ２の大きいほうを表す。更に、格子ベクトルＢｙを計算し、その格子ベクトルＢｙのｌ１ノルムｔを計算し、値ｔ−ｅＫ１Ｋ２を計算し、メッセージｍと値ｔ−ｅＫ１Ｋ２に基づいて得られるハッシュ値がｅと等しくなるときのみ、検証者プログラム２３はメッセージｍに対する署名（ｅ、ｙ）を正当であると認識する。
【００５２】
これにより、本署名者プログラム２２と検証者プログラム２３は、それぞれの役割を実行し、お互いに通信することにより、検証者プログラム２３による署名者プログラム２２が生成する電子署名の正当性確認を行うことができる。
【００５３】
次に、上記の電子署名方式の安全性について説明をする。上記の電子署名方式は、上記の公開鍵認証方式の安全性を証明する際に必要とする仮定及び上記の電子署名方式で用いるハッシュ関数が無相関一方向性ハッシュ関数（Ｔ．Ｏｋａｍｏｔｏ，Ｃｒｙｐｔｏ‘９２）であることを仮定することにより、選択文書攻撃に対して存在的偽造不可であることが示される。ここで、選択文書攻撃とは署名偽造者が適応的に選んだ任意の文書に対して真の署名者に署名を作成させ、最後にそれまでに得られた情報を用いて今までに署名者に署名を作成させたメッセージとは異なるメッセージの署名を偽造する攻撃である。存在的偽造不可であるとはどのような文書に対しても署名の偽造ができないことである。
【００５４】
以上、本実施形態に係る電子署名プログラムにより、量子計算機に対して安全であり、認証方式の並列合成を必要としない電子署名プログラムを提供することができる。
【図面の簡単な説明】
【００５５】
【図１】実施形態１に係る公開鍵認証プログラムの機能ブロックを示す図である。
【図２】実施形態２に係る電子署名プログラムの機能ブロックを示す図である。
【符号の説明】
【００５６】
１…公開鍵認証プログラム、２…電子署名プログラム、１１、２１…鍵生成プログラム、１２，２２…証明者プログラム、１３、２３…検証者プログラム、１１１、２１１…乱数生成部、１１２、２１２…格子基底生成部、１１３、２１３…係数ベクトル生成部、１１４、２１４…秘密鍵生成部、１１５、２１５…公開鍵生成部、１２１、２２１…乱数生成部、１２２、２２２…第一の演算部、１２３、２２３…第二の演算部、１２４、１３４、２２４、２３２…通信部、１３１…乱数生成部、１３２…第三の演算部、１３３、２３１…検証部
【図１】
2007329889.tif 000005
【図２】
2007329889.tif 000006