(57)【要約】  ＮＴＲＵＳｉｇｎ方式において、複数の署名文（メッセージデータと署名の対）を解析することにより秘密鍵を求める転写攻撃（ｔａｎｓｃｒｉｐｔ  ａｔｔａｃｋ）に対抗することができる署名生成装置及び署名検証装置を提供する。署名生成装置は、メッセージデータのハッシュ値ベクトルＨを算出し、メッセージデータのハッシュ値ベクトルＨに、秘密の分布に基づくベクトルを加算して、変換ハッシュ値ベクトルＨ’を算出し、秘密鍵基底ベクトルにより定まる格子において、変換ハッシュ値ベクトルＨ’に最近接する格子点を求めて、署名ベクトルＳとする。署名検証装置は、メッセージデータのハッシュ値ベクトルＨと署名ベクトルＳとの距離がＬ’以内か判断し、Ｌ’以内のとき、メッセージデータを正当と認める。
2009125537.tif 000002
【特許請求の範囲】
【請求項１】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、
秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップと
を含むことを特徴とする方法。
【請求項２】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置であって、
対象データを取得する取得手段と、
秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、
前記対象データと生成した署名データとを出力する出力手段と
を備えることを特徴とする署名生成装置。
【請求項３】
前記秘密記憶手段は、さらに、前記第１サイズより小さい複数の候補ベクトルが属する範囲を示す分布を記憶しており、
前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して前記攪乱ベクトルとする
ことを特徴とする請求項２に記載の署名生成装置。
【請求項４】
前記秘密記憶手段は、耐タンパ性を有し、前記秘密鍵及び前記分布は、外部から知られないように、秘密に保護されている
ことを特徴とする請求項３記載の署名生成装置。
【請求項５】
前記秘密記憶手段に記憶されている前記分布により示される範囲において、複数の候補ベクトルは、選択される確率が一様でないように、配置されており、
前記データ変換手段は、前記確率に従って、１の前記候補データを選択して前記攪乱ベクトルとする
を特徴とする請求項４記載の署名生成装置。
【請求項６】
前記分布により示される範囲は、複数の領域を有し、各領域に対して当該領域の選択確率が予め定められ、前記複数の領域のそれぞれにおいて、複数の候補ベクトルが配置され、
前記データ変換手段は、前記選択確率に基づいて１の領域を選択し、選択した前記領域から１の前記候補ベクトルを選択して前記攪乱ベクトルとする
を特徴とする請求項４記載の署名生成装置。
【請求項７】
前記データ変換手段は、
前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して、前記攪乱ベクトルとするベクトル生成部と、
前記対象データに基づくベクトルに、前記攪乱ベクトルを加えることにより、前記変換ベクトルを生成する加算部と
を含むことを特徴とする請求項４に記載の署名生成装置。
【請求項８】
前記ベクトル生成部は、前記分布に基づいて予め選択した複数の候補ベクトルから、ランダムに選択することにより、前記攪乱ベクトルを生成する
ことを特徴とする請求項７に記載の署名生成装置。
【請求項９】
前記分布は、前記第１サイズを半径とする超球内に含まれる
ことを特徴とする請求項４に記載の署名生成装置。
【請求項１０】
前記署名生成装置は、さらに、前記第１サイズより大きい第２サイズを記憶している公開記憶手段を含み、
前記データ変換手段は、さらに、前記対象データによるベクトルと、前記変換ベクトルとの距離を算出し、算出した距離が前記第２サイズ以下でない場合に、第１サイズより小さい秘密の別の攪乱ベクトルを用いて、取得した対象データを変換して、別の変換ベクトルを生成する
を特徴とする請求項４記載の署名生成装置。
【請求項１１】
前記秘密鍵ベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、
前記公開鍵ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られる
ことを特徴とする請求項４に記載の署名生成装置。
【請求項１２】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名生成装置により、第１サイズより小さい秘密の攪乱ベクトルを用いて、対象データから変換により前記変換ベクトルが生成され、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点である署名ベクトルの一部として生成された署名データを検証する署名検証装置であって、
前記対象データ及び署名データを取得する取得手段と、
公開鍵ベクトルを記憶している記憶手段と、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段と
を備えることを特徴とする署名検証装置。
【請求項１３】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置において用いられる署名生成方法であって、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、
前記対象データと生成した署名データとを出力する出力ステップと
を含むことを特徴とする署名生成方法。
【請求項１４】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成するコンピュータにおいて用いられる署名生成用のコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記コンピュータに、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、
前記対象データと生成した署名データとを出力する出力ステップと
を実行させる前記コンピュータプログラムを記録している記録媒体。
【請求項１５】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名する署名生成装置及び検証する署名検証装置から構成されるシステムであって、
前記署名生成装置は、
対象データを取得する取得手段と、
秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、
前記対象データと生成した署名データとを出力する出力手段とを備え、
前記署名検証装置は、
前記対象データ及び署名データを取得する取得手段と、
公開鍵ベクトルを記憶している記憶手段と、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段と
を備えることを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術としての暗号技術に関し、特に、デジタル署名及びその検証に関する。
【背景技術】
【０００２】
送信装置から受信装置へデータを送信する際に、送信者を特定し、またデータの改ざんを検出又は防止するため、公開鍵暗号の一種であるデジタル署名方式が用いられる。【０００３】
ここで、デジタル署名方式とは、送信装置が、送信したいデータに対し、送信装置の私有鍵（秘密鍵）を用いて署名データを作成し、送信したいデータと共に署名データを受信装置へ送信し、受信装置は、送信装置の公開鍵を用いて署名データを検証し、改ざんされているか否かを判定する方法である。（例えば、非特許文献１参照）。ここで、公開鍵から私有鍵の値を計算することは困難であるので、不正者が送信装置になりすまして、偽造した署名データを作成することはできない。【０００４】
このような公開鍵暗号システムとしては、比較的短く容易に作成される鍵を比較的高速の暗号化プロセスおよび復号プロセスと組み合わせることが望ましく、特許文献１は、鍵長が他の一般的な公開鍵暗号システムの鍵長に匹敵する鍵を、ベクトルの大きな集合からほぼ無作為に選択することを可能にし、適切なセキュリティ・レベルを備える公開鍵暗号システムを開示している。【０００５】
また、高速処理が可能な公開鍵暗号として、ＮＴＲＵ（エヌティーアールユー・クリプトシステムズ・インコーポレーテッドの登録商標）暗号が提案されている（例えば、非特許文献２参照）。このＮＴＲＵ暗号は、ある法の下でべき乗剰余演算を行うＲＳＡ暗号や楕円曲線上の点のスカラ倍演算を行う楕円曲線暗号に比べ、高速な演算が可能な多項式演算を用いて暗号化と復号化を行うので、従来の公開鍵暗号よりも高速に処理することが可能で、ソフトウェアによる処理によっても、実用的な時間で処理可能である。従って、公開鍵暗号にＮＴＲＵ暗号を用いた暗号通信システムでは、従来の公開鍵暗号を用いた暗号通信システムよりも、送信装置及び受信装置の処理が高速に行えるという利点がある。【０００６】
なお、ＮＴＲＵ暗号は高速処理が可能であるだけでなく、その安全性のベースとなる計算量的に困難な問題も、ＲＳＡ暗号や楕円曲線暗号とは異なる。ＲＳＡ暗号は、素因数分解問題を安全性のベースにしており、楕円曲線暗号は、楕円曲線上の離散対数問題を安全性のベースにしている。一方、ＮＴＲＵ暗号は、格子と呼ばれるベクトルの集合に対する最小ベクトル問題または最近傍問題を安全性のベースにしている。【０００７】
上記で提案されたＮＴＲＵ暗号は、データを秘密にするために、データを暗号化する守秘暗号方式であるが、その後、ＮＴＲＵ暗号のデジタル署名方式が提案されている（非特許文献３参照）。このデジタル署名方式については解読法の出現などで、方式が幾度か変更された。以下では、ＮＴＲＵＳｉｇｎと呼ばれるデジタル署名方式について簡単に説明する（詳細については、特許文献２及び非特許文献４参照）。
＜ＮＴＲＵＳｉｇｎ署名方式＞
（１）ＮＴＲＵＳｉｇｎ署名方式のシステムパラメタ
ＮＴＲＵＳｉｇｎ署名方式では、非負整数のパラメタであるＮ，ｑ，ｄｆ，ｄｇ，Ｎｏｒｍｂｏｕｎｄが存在する。以下に、これらのパラメタの意味を説明する。【０００８】
（ｉ）パラメタＮ
ＮＴＲＵＳｉｇｎ署名方式は、多項式の演算により署名生成及び署名検証を行うデジタル署名方式である。パラメタＮは、ＮＴＲＵＳｉｇｎ署名方式で扱う多項式の次数を決める。【０００９】
ＮＴＲＵＳｉｇｎ署名方式で扱う多項式は、パラメタＮに対し、Ｎ−１次以下の整数係数多項式である。Ｎ＝５のとき、例えば、多項式Ｘ＾４＋Ｘ＾３＋１である。なお、本明細書において、「Ｘ＾ａ」は、Ｘのａ乗を意味することとする。また、ＮＴＲＵＳｉｇｎ署名方式において用いられる公開鍵ｈ及び署名ｓは、いずれも、Ｎ−１次以下の多項式として表現される。また、秘密鍵は、４つのＮ−１次以下の多項式対（ｆ，ｇ，Ｆ，Ｇ）である。すなわち、ｆ，ｇ，Ｆ，Ｇは、いずれもＮ−１次以下の多項式である。なお、以下では、４つ組（ｆ，ｇ，Ｆ，Ｇ）を２つの対（ｆ，ｇ），（Ｆ，Ｇ）のさらなる対と捉えて、｛（ｆ，ｇ），（Ｆ，Ｇ）｝と表記する場合もある。【００１０】
次に、ＮＴＲＵＳｉｇｎ署名方式における多項式演算では、パラメタＮに対し、Ｘ＾Ｎ＝１という関係式を用いて、演算結果が常にＮ−１次以下の多項式になるように演算される。例えば、Ｎ＝５の場合、多項式Ｘ＾４＋Ｘ＾２＋１と多項式Ｘ＾３＋Ｘの積は、多項式と多項式の積を「×」、整数と多項式の積（あるいは整数と整数の積）を「・」を用いて表現すると、Ｘ＾５＝１という関係があるので、
（Ｘ＾４＋Ｘ＾２＋１）×（Ｘ＾３＋Ｘ）
＝Ｘ＾７＋２・Ｘ＾５＋２・Ｘ＾３＋Ｘ
＝Ｘ＾２・１＋２・１＋２・Ｘ＾３＋Ｘ
＝２・Ｘ＾３＋Ｘ＾２＋Ｘ＋２
のように、常にＮ−１次以下の多項式になるように演算される。【００１１】
なお、ＮＴＲＵＳｉｇｎ署名方式では、Ｎ−１次の多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）を、ベクトル（ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１））と同一視して表現する。ここで、ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１）は、それぞれ、多項式ａの係数であり、整数である。【００１２】
（ｉｉ）パラメタｑ
ＮＴＲＵＳｉｇｎ署名方式では、値「２」以上の整数であるパラメタｑを用いる。ＮＴＲＵＳｉｇｎ署名方式で出現する多項式の係数については、ｑを法とした剰余を取るように演算する。【００１３】
（ｉｉｉ）パラメタｄｆ，ｄｇ
ＮＴＲＵＳｉｇｎ署名方式で扱う秘密鍵の一部である多項式ｆ及び多項式ｇの選び方は、それぞれパラメタｄｆ，ｄｇにより決まる。ここで、多項式ｇは、公開鍵である多項式ｈを生成するときに、多項式ｆと共に用いられる。【００１４】
多項式ｆについては、そのＮ個の係数のうち、ｄｆ個の係数がそれぞれ値「１」であり、かつ他の係数がそれぞれ値「０」となるように選ばれる。すなわち、多項式ｆは、Ｎ−１次以下の多項式であり、０次（定数項）からＮ−１次まで、Ｎ個の係数を有する。このＮ個の係数のうち、ｄｆ個の係数が値「１」であり、かつ（Ｎ−ｄｆ）個の係数が値「０」となるように選ばれる。【００１５】
同様に、多項式ｇは、Ｎ−１次以下の多項式であり、多項式ｇについては、そのＮ個の係数のうち、ｄｇ個の係数がそれぞれ値「１」であり、かつ他の係数がそれぞれ値「０」となるように選ばれる。【００１６】
（ｉｖ）パラメタＮｏｒｍｂｏｕｎｄ
ＮＴＲＵＳｉｇｎ署名方式では、後述するが、「署名ｓから作られる２・Ｎ次元のベクトル」と「メッセージデータに対するハッシュ値である２・Ｎ次元のベクトル」との距離を計算し、計算された距離により、正しい署名であるかを判定する。Ｎｏｒｍｂｏｕｎｄは、この判定の際に使用されるしきい値である。すなわち、計算された距離がＮｏｒｍｂｏｕｎｄ未満（距離＜Ｎｏｒｍｂｏｕｎｄ）であれば、正しい署名として受理する。一方、計算された距離がＮｏｒｍｂｏｕｎｄ以上（距離≧Ｎｏｒｍｂｏｕｎｄ）であれば、正しくない署名とし拒否する。【００１７】
非特許文献４には、ＮＴＲＵＳｉｇｎ署名方式のパラメタの例として、（Ｎ，ｑ，ｄｆ，ｄｇ，Ｎｏｒｍｂｏｕｎｄ）＝（２５１，１２８，７３，７１，３１０）が挙げられている。
（２）メッセージデータのハッシュ値、ノルム及びベクトル間の距離
ＮＴＲＵＳｉｇｎ署名方式では、メッセージデータのハッシュ値に対する署名を作成する。メッセージデータのハッシュ値は、Ｎ次の多項式の対であり、２・Ｎ次元のベクトルとして表現される。メッセージデータからハッシュ値を求めるハッシュ関数については、非特許文献１に詳しく説明されている。【００１８】
ＮＴＲＵＳｉｇｎ署名方式では、署名検証にベクトルの距離を用いる。以下にその定義を示す。【００１９】
多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）のノルム｜｜ａ｜｜を以下のように定義する。【００２０】
｜｜ａ｜｜＝ｓｑｒｔ（（ａ＿０−μ）＾２＋（ａ＿１−μ）＾２＋…＋（ａ＿（Ｎ−１）−μ）＾２）
μ＝（１／Ｎ）・（ａ＿０＋ａ＿１＋ａ＿２＋…＋ａ＿（Ｎ−１））
ここで、ｓｑｒｔ（ｘ）はｘの平方根を示す。【００２１】
また、多項式ａ，ｂの対（ａ，ｂ）のノルム｜｜（ａ，ｂ）｜｜を以下のように定義する。【００２２】
｜｜（ａ，ｂ）｜｜＝ｓｑｒｔ（｜｜ａ｜｜＾２＋｜｜ｂ｜｜＾２）
多項式ａ，ｂの対（ａ，ｂ）とｃ，ｄの対（ｃ，ｄ）との距離は、｜｜（ｃ−ａ，ｄ−ｂ）｜｜で定義される。
（３）ＮＴＲＵＳｉｇｎ署名方式の鍵生成
ＮＴＲＵＳｉｇｎ署名方式では、上述したように、パラメタｄｆ，ｄｇを用いてランダムに多項式ｆ，多項式ｇを生成する。そして非特許文献４に記載の通り、Ｆｑ×ｆ＝１（ｍｏｄ  ｑ）となる多項式Ｆｑを用いて、
ｈ＝Ｆｑ×ｇ（ｍｏｄ  ｑ）
により、多項式ｈを生成する。さらに、以下の式を満たすようなノルムが小さい多項式Ｆ，Ｇを求める。【００２３】
ｆ×Ｇ−ｇ×Ｆ＝ｑ
ここで、｛（ｆ，ｇ），（Ｆ，Ｇ）｝は、秘密鍵であり、ｈは、公開鍵である。秘密鍵は、署名を生成するための鍵であり、署名生成鍵とも呼ばれる。また、公開鍵は、署名を検証するための鍵であり、署名検証鍵とも呼ばれる。【００２４】
ここで、ｘ＝ｙ（ｍｏｄ  ｑ）においては、次のような演算を行う。つまり、ｉ（ｉ＝０、１、２、・・・、Ｎ−１）について、多項式ｙの第ｉ次の係数を、剰余が０からｑ−１の範囲に収まるように、法ｑで割り、剰余を求め、求められた剰余を、多項式ｘの第ｉ次の係数とする。すなわち、多項式ｙの各係数を、０から（ｑ−１）の範囲に収まるようにｍｏｄ  ｑ演算し、得られた多項式を、多項式ｘとする。
（４）ＮＴＲＵＳｉｇｎ署名方式の署名生成
ＮＴＲＵＳｉｇｎ署名方式の署名生成においては、送信すべきメッセージデータのハッシュ値ベクトルを算出し、その最近傍格子点を署名ベクトルとする。Ｌｓｅｃ座標系での係数を整数に丸めることにより、容易に最近傍格子点が得られる。【００２５】
以下に、ＮＴＲＵＳｉｇｎ署名方式の署名生成の詳細について説明する。【００２６】
ＮＴＲＵＳｉｇｎ署名方式の署名生成では、以下に示すようにして、署名対象であるメッセージデータｍの署名ｓを計算する。【００２７】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトル（ｍ１，ｍ２）（ｍ１及びｍ２は、それぞれ、Ｎ次多項式）を計算する。【００２８】
次に、この２・Ｎ次元のベクトル（ｍ１，ｍ２）と秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝とを用いて、以下の式を満たす多項式ａ，ｂ，Ａ，Ｂを計算する。【００２９】
Ｇ×ｍ１−Ｆ×ｍ２＝Ａ＋ｑ×Ｂ
−ｇ×ｍ１＋ｆ×ｍ２＝ａ＋ｑ×ｂ
ここで、Ａ，ａの係数は、〈−ｑ／２〉＋１から〈ｑ／２〉の範囲に収まるように法ｑで割ったときの剰余である。すなわち、法ｑで割ったときの剰余が〈ｑ／２〉からｑ−１である場合は、ｑだけ減算して、上記範囲に収まるよう調整する。ここで、〈ｘ〉は、ｘ以下の数の中で最も大きい数を示す。例えば、〈−１／２〉＝−１である。【００３０】
次に、以下の式より、ｓ，ｔを計算し、ｓを署名として出力する。【００３１】
ｓ＝ｆ×Ｂ＋Ｆ×ｂ  （ｍｏｄ  ｑ）
ｔ＝ｇ×Ｂ＋Ｇ×ｂ  （ｍｏｄ  ｑ）
（５）ＮＴＲＵＳｉｇｎ署名方式の署名検証
ＮＴＲＵＳｉｇｎ署名方式の署名検証では、以下に示すようにして、署名ｓが署名対象であるメッセージデータｍに対して正しいかどうかを検証する。【００３２】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトル（ｍ１，ｍ２）を計算する。【００３３】
次に、公開鍵ｈを用いて、以下の式より、多項式ｔを計算する。【００３４】
ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）
さらに、２・Ｎ次元ベクトル（ｓ，ｔ）と２・Ｎ次元ベクトル（ｍ１，ｍ２）との距離を求め、Ｎｏｒｍｂｏｕｎｄ未満であるかをチェックする。Ｎｏｒｍｂｏｕｎｄ未満であれば、署名ｓは正しいと判定して署名ｓを受理する。Ｎｏｒｍｂｏｕｎｄ以上であれば、署名ｓは不正と判定して署名ｓを拒否する。【００３５】
このように、ＮＴＲＵＳｉｇｎ署名方式の署名検証では、署名ベクトルがハッシュ値ベクトルに十分近ければ、正しい署名と決定する。
＜安全性のベースとしての格子の問題＞
ＮＴＲＵＳｉｇｎ署名方式は、格子の問題を安全性のベースとしている。以下では、それについて説明する。【００３６】
ＮＴＲＵＳｉｇｎ署名方式では、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝から得られる
（ｆ×α，ｇ×α）＋（Ｆ×β，Ｇ×β）
の２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える。ここで、α，βは任意の多項式である。そのとき、秘密鍵における（ｆ，ｇ），（Ｆ，Ｇ）を格子の基底（ベクトル）と呼ぶ。図２０（ａ）には、この２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。【００３７】
一方、公開鍵ｈと「１」とからなる（１，ｈ），「０」とｑとからなる（０，ｑ）を基底としたときの
（１×α’，ｈ×α’）＋（０，ｑ×β’）
の２・Ｎ次元ベクトル全体も格子（格子Ｌｐｕｂ）として捉える。ここで、α’，β’は任意の多項式である。図２０（ｂ）には、この２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。【００３８】
署名検証では、署名ベクトルである２・Ｎ次元ベクトル（ｓ，ｔ）８２２と、メッセージデータから得られたハッシュ値ベクトルである２・Ｎ次元ベクトル（ｍ１，ｍ２）８２１との距離を求め、Ｎｏｒｍｂｏｕｎｄ未満であるかをチェックしている。言い換えると、図２０（ｂ）に示すように、２・Ｎ次元ベクトル（ｓ，ｔ）８２２を中心とする半径Ｎｏｒｍｂｏｕｎｄの超球８２３内に、２・Ｎ次元ベクトル（ｍ１，ｍ２）８２１が存在しているかどうかをチェックしている。超球８２３内に存在する場合には、署名検証に成功したと決定する。超球８２３内に存在しない場合には、署名検証に失敗したと決定する。【００３９】
ここで、格子Ｌｓｅｃと格子Ｌｐｕｂは、同じベクトル全体を示している。しかし、格子Ｌｓｅｃを構成するための基底ベクトル（秘密鍵基底ベクトルと呼ぶ）のノルムは、格子Ｌｐｕｂを構成するための基底ベクトル（公開鍵基底ベクトルと呼ぶ）のノルムより、非常に小さい。一般に大きいノルムを持つ基底ベクトルから、最も小さいノルムを持つ基底ベクトルを求める問題（最小基底ベクトル問題と呼ぶ）は、困難である。したがって、公開鍵基底ベクトルから秘密鍵基底ベクトルを求めることも困難であり、これが鍵に対する安全性のベースとなる。このようなベースにより、秘密鍵から公開鍵を取得することは、困難であると考えられている。【００４０】
図２０（ａ）に示すように、ＮＴＲＵＳｉｇｎ署名方式の署名生成において、メッセージデータのハッシュ値ベクトル８０１  Ｈ（ｍ）＝（ｍ１，ｍ２）に近い格子点のベクトル（最近傍格子点）を、署名ベクトル８００（ｓ，ｔ）としている。このとき、秘密鍵基底８０２（ｆ，ｇ）及び秘密鍵基底８０３（Ｆ，Ｇ）を用いて、その基底に射影して距離が近いものを計算することで、最も近い格子点のベクトルを求めている。【００４１】
このように、ＮＴＲＵＳｉｇｎ署名方式では、署名ベクトル（ｓ，ｔ）は、メッセージデータのハッシュ値ベクトル（ｍ１，ｍ２）に最も近い格子点のベクトルとなっている。【００４２】
一方、図２０（ｂ）に示すように、Ｌｐｕｂ座標系の公開鍵基底ベクトル８１２（１，ｈ），公開鍵基底ベクトル８１１（０，ｑ）では、基底ベクトルのノルムが大きすぎるため、距離が近いものを計算することが困難になる。【００４３】
一般に、距離が最も近い格子ベクトルを計算する問題を、格子の最近傍問題と呼び、ＮＴＲＵＳｉｇｎ署名方式の署名に対する安全性は、この格子の最近傍問題をベースとしている。【００４４】
この他に、ＮＴＲＵＳｉｇｎ署名方式のように、鍵に対しては格子の最小基底ベクトル問題、署名に対しては格子の最近傍問題を安全性のベースとする署名方式として、ＧＧＨ署名方式が知られている（非特許文献６参照）。
【特許文献１】特表２０００−５１６７３３、“公開鍵暗号システム方法および装置”
【特許文献２】ＷＯ２００３０５０９９８、“Ｓｉｇｎｉｎｇ  ａｎｄ  ｖｅｒｉｆｙｉｎｇ  ｄｉｇｉｔａｌ  ｄｏｃｕｍｅｎｔ  ｕｓｉｎｇ  ＮＴＲＵ  ｏｒ  ｃｏｎｖｏｌｕｔｉｏｎ  ｍｏｄｕｌａｒ  ｌａｔｔｉｃ  ｖｅｃｔｏｒ  ｃｒｙｐｏｔｇｒａｐｈｉｃ  ｓｙｓｔｅｍ”
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｊ．Ｐｉｐｈｅｒ，  ａｎｄ  Ｊ．Ｈ．  Ｓｉｌｖｅｒｍａｎ，  “ＮＴＲＵ：  Ａ  ｒｉｎｇ  ｂａｓｅｄ  ｐｕｂｌｉｃ  ｋｅｙ  ｃｒｙｐｔｏｓｙｓｔｅｍ”，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  １４２３，  ｐｐ．２６７−２８８，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  １９９８．
【非特許文献３】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｊ．Ｐｉｐｈｅｒ  ａｎｄ  Ｊ．Ｓｉｌｖｅｒｍａｎ，  “ＮＳＳ：  Ａｎ  ＮＴＲＵ  Ｌａｔｔｉｃｅ−Ｂａｓｅｄ  Ｓｉｇｎａｔｕｒｅ  Ｓｃｈｅｍｅ，”  Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｐｌｏｇｙ−Ｅｕｒｏｃｒｙｐｔ  ’０１，  ＬＮＣＳ，  Ｖｏｌ．２０４５，  ｐｐ．１２３−１３７，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  ２００１
【非特許文献４】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｎ．Ｇｒａｈａｍ，  Ｊ．Ｐｉｐｈｅｒ，  Ｊ．Ｓｉｌｖｅｒｍａｎ  ａｎｄ  Ｗ．Ｗｈｙｔｅ，  “ＮＴＲＵＳｉｇｎ：  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅｓ  Ｕｓｉｎｇ  ｔｈｅ  ＮＴＲＵ  Ｌａｔｔｉｃｅ，”  ＣＴ−ＲＳＡ’０３，  ＬＮＣＳ，  Ｖｏｌ．２６１２，  ｐｐ．１２２−１４０，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  ２００３
【非特許文献５】“Ｅｆｆｉｃｉｅｎｔ  Ｅｍｂｅｄｄｅｄ  Ｓｅｃｕｒｉｔｙ  Ｓｔａｎｄａｒｄｓ  （ＥＥＳＳ）  ＥＥＳＳ  ＃１：  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  Ａｓｐｅｃｔｓ  ｏｆ  ＮＴＲＵＥｎｃｒｙｐｔ  ａｎｄ  ＮＴＲＵＳｉｇｎ”，  Ｖｅｒ２．０，  Ｊｕｎｅ  ２０ｔｈ，  ２００３
【非特許文献６】Ｏ．Ｇｏｌｄｒｅｉｃｈ，  Ｓ．Ｇｏｌｄｗａｓｓｅｒ  ａｎｄ  Ｓ．Ｈａｌｅｖｉ  “Ｐｕｂｌｉｃ−ｋｅｙ  ｃｒｙｐｔｏｇｒａｐｈｙ  ｆｒｏｍ  ｌａｔｔｉｃｅ  ｒｅｄｕｃｔｉｏｎ  ｐｒｏｂｌｅｍｓ，”  Ｉｎ  Ｐｒｏｃ．  ＣＲＹＰＴＯ  ’９７，  ＬＮＣＳ，  Ｖｏｌ．１２９４，  ｐｐ．１１２−１３１，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  １９９７
【発明の開示】
【発明が解決しようとする課題】
【００４５】
上述したＮＴＲＵＳｉｇｎ署名方式に対しては、転写攻撃（Ｔｒａｎｓｃｒｉｐｔ  ａｔｔａｃｋ）と呼ばれる攻撃がある。転写攻撃は、複数の署名文（メッセージデータと署名の対）から秘密鍵を求める攻撃である。以下に、転写攻撃について、簡単に説明する（詳細は、非特許文献４を参照）。【００４６】
転写攻撃は、複数の署名ｓと、メッセージデータのハッシュ値（ｍ１，ｍ２）の一部ｍ１との差分ｍ１−ｓが
ｍ１−ｓ＝ｅ１×ｆ＋ｅ２×Ｆ
（ここで、ｅ１，ｅ２は、それぞれ、その係数が−１／２から１／２の範囲に入る多項式である）
となることを利用しており、差分ｍ１−ｓの２次モーメント及び４次モーメントの平均値を算出することにより、秘密鍵の一部であるｆ，Ｆを求める。【００４７】
ここで、多項式ａの２次モーメントａ〜２とは、
ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−２）・Ｘ＾（Ｎ−２）＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）と
ａの相反ａ＊＝ａ＿０＋ａ＿（Ｎ−１）・Ｘ＋ａ＿（Ｎ−２）・Ｘ＾２＋…＋ａ＿２・Ｘ＾（Ｎ−２）＋ａ＿１・Ｘ＾（Ｎ−１）と
の積ａ〜２＝ａ×ａ＊である。【００４８】
また、４次モーメントａ〜４は、ａ〜２の２乗、すなわち、ａ〜４＝ａ〜２×ａ〜２である。【００４９】
（ｍ１−ｓの２次モーメント）＝（ｅ１×ｆ＋ｅ２×Ｆ）×（ｅ１＊×ｆ＊＋ｅ２＊×Ｆ＊）＝ｅ１〜×ｆ〜＋ｅ２〜×Ｆ〜＋ｅ１×ｆ×ｅ２＊×Ｆ＊＋ｅ２×Ｆ×ｅ１＊×ｆ＊  
署名文の個数が増大すると、ｍ１−ｓの２次モーメントの平均に含まれるｅ１〜，ｅ２〜はある一定値ｋ１，ｋ２に収束し、上記の式のｅ１×ｆ×ｅ２＊×Ｆ＊とｅ２×Ｆ×ｅ１＊×ｆ＊は０に近づく。したがって、署名文の個数が大きい場合、ｍ１−ｓの２次モーメントの平均は、ｋ１×ｆ〜＋ｋ２×Ｆ〜にほぼ等しくなる。さらに４次モーメントの平均でも、同様にｆ及びＦに関連する情報を得られ、両方の情報からｆを求めることが可能になる。【００５０】
非特許文献４によると、２次モーメント及び４次モーメントの平均から秘密鍵に関する情報が得られるために必要な署名文の個数はそれぞれ１０＾４、１０＾８である。したがって、ＮＴＲＵＳｉｇｎ署名方式の転写攻撃を成功させるためには、１０＾８個以上の署名文が必要と考えられている。なお、転写攻撃は、格子の問題を安全性のベースとする他の署名方式（例えば、ＧＧＨ署名方式）でも同様に起こりうる。【００５１】
上記の問題を解決するために、本発明は、上述した転写攻撃に対抗することができる署名及び検証方法、署名生成装置、署名検証装置、署名生成方法、並びに、署名生成のためのコンピュータプログラムを記録している記録媒体を提供する。
【課題を解決するための手段】
【００５２】
上記目的を達成するために、本発明の一実施態様である方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップとを含むことを特徴とする。
【発明の効果】
【００５３】
この方法によると、転写攻撃をする者が、送信される対象データ及び署名データの対を収集して解析しても、署名データは、第１サイズより小さい秘密の攪乱ベクトルを用いて、前記対象データを変換して生成された変換ベクトルに対して生成されているので、転写攻撃をする者は、署名の際に用いた秘密鍵を求めることが計算量上困難であるという優れた効果を奏する。また、署名データの検証において、前記対象データによるベクトルと前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証し、第２サイズ以下であるとき、検証が成功したとみなすので、署名データの検証を行うことができる。【００５４】
この署名及び検証方法によると、転写攻撃を防ぐことができ、その価値は大きい。
【図面の簡単な説明】
【００５５】
【図１】本発明に係る１個の実施の形態としてのデジタル署名システム１０の構成を示すブロック図である。
【図２】一様な分布の一例を示す図である。
【図３】分布テーブル４１０のデータ構造を示す。
【図４】一様でない分布の一例を示す図である。
【図５】分布テーブル４５０のデータ構造を示す。
【図６】改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理を示す図である。
【図７】改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理を示す図である。
【図８】署名生成装置１００の構成を示すブロック図である。
【図９】署名生成装置１００が有する公開鍵証明書格納部１０３、秘密鍵格納部１０２及びシステムパラメタ格納部１０６に記録されているデータを示す。
【図１０】署名生成部１０４の構成を示すブロック図である。
【図１１】署名検証装置２００の構成を示すブロック図である。
【図１２】署名検証装置２００が有するＣＡ公開鍵格納部２０２、署名データセット格納部２０３及びシステムパラメタ格納部２０５に記録されているデータを示す。
【図１３】署名検証部２０４の構成を示すブロック図である。
【図１４】鍵生成装置３００の構成を示すブロック図である。
【図１５】鍵生成装置３００が有する証明書生成鍵格納部３０４及びシステムパラメタ格納部３０６に記録されているデータを示す。
【図１６】デジタル署名システム１０の動作を示すフローチャートである。
【図１７】署名生成装置１００の動作を示すフローチャートである。
【図１８】署名検証装置２００における署名検証の動作を示すフローチャートである。
【図１９】鍵生成装置１３００の動作を示すフローチャートである。
【図２０】従来のＮＴＲＵＳｉｇｎ署名方式を示す図である。（ａ）は、２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。（ｂ）は、２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。
【図２１】分布テーブル６１０のデータ構造を示す。
【図２２】分布テーブル６５０のデータ構造を示す。
【符号の説明】
【００５６】
１０          デジタル署名システム
２０          通信路
１００        署名生成装置
２００        署名検証装置
３００        鍵生成装置
１０１        送信部
１０２        秘密鍵格納部
１０３        公開鍵証明書格納部
１０４        署名生成部
１０５        署名データセット生成部
１０６        システムパラメタ格納部
１１１        ハッシュ値計算部
１１２        ベクトル生成部
１１３        ハッシュ値変換部
１１４        署名生成部
１１５        署名確認部
１１６        ベクトル群選択格納部
２０１        受信部
２０２        ＣＡ公開鍵格納部
２０３        署名データセット格納部
２０４        署名検証部
２０５        システムパラメタ格納部
２１１        ハッシュ値計算部
２１２        署名ベクトル生成部
２１３        距離判定部
３０１        分布生成部
３０２        鍵生成部
３０３        証明書生成部
３０４        証明書生成鍵格納部
３０５        鍵設定部
３０６        システムパラメタ格納部
【発明を実施するための最良の形態】
【００５７】
請求項１に記載の態様である方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップとを含むことを特徴とする。【００５８】
また、請求項２に記載の態様である署名生成装置は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置であって、対象データを取得する取得手段と、秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、前記対象データと生成した署名データとを出力する出力手段とを備えることを特徴とする。【００５９】
この構成によると、転写攻撃をする者が、送信される対象データ及び署名データの対を収集して解析しても、署名データは、第１サイズより小さい秘密の攪乱ベクトルを用いて、前記対象データを変換して生成された変換ベクトルに対して生成されているので、転写攻撃をする者は、署名の際に用いた秘密鍵を求めることが計算量上困難であるという優れた効果を奏する。【００６０】
また、請求項３に記載の態様である署名生成装置において、前記秘密記憶手段は、さらに、前記第１サイズより小さい複数の候補ベクトルが属する範囲を示す分布を記憶しており、前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して前記攪乱ベクトルとすることを特徴とする。【００６１】
この構成によると、署名生成の都度、複数の候補ベクトルから１の候補ベクトルが選択されて攪乱ベクトルとされるので、用いられる攪乱ベクトルの取り得る範囲が広がり、攻撃をする者に対して、秘密鍵を求めることをさらに困難にすることができる。【００６２】
また、請求項４に記載の態様である署名生成装置において、前記秘密記憶手段は、耐タンパ性を有し、前記秘密鍵及び前記分布は、外部から知られないように、秘密に保護されていることを特徴とする。【００６３】
この構成によると、選択される攪乱ベクトルが秘密に保持されているので、秘密鍵を求めることを困難にすることができる。【００６４】
また、請求項５に記載の態様である署名生成装置において、前記秘密記憶手段に記憶されている前記分布により示される範囲において、複数の候補ベクトルは、選択される確率が一様でないように、配置されており、前記データ変換手段は、前記確率に従って、１の前記候補データを選択して前記攪乱ベクトルとするを特徴とする。【００６５】
この構成によると、署名生成の都度、用いられる攪乱ベクトルの取り得る範囲が広がり、攻撃をする者に対して、秘密鍵を求めることをさらに困難にすることができる。【００６６】
また、請求項６に記載の態様である署名生成装置において、前記分布により示される範囲は、複数の領域を有し、各領域に対して当該領域の選択確率が予め定められ、前記複数の領域のそれぞれにおいて、複数の候補ベクトルが配置され、前記データ変換手段は、前記選択確率に基づいて１の領域を選択し、選択した前記領域から１の前記候補ベクトルを選択して前記攪乱ベクトルとするを特徴とする。【００６７】
また、請求項７に記載の態様である署名生成装置において、前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して、前記攪乱ベクトルとするベクトル生成部と、前記対象データに基づくベクトルに、前記攪乱ベクトルを加えることにより、前記変換ベクトルを生成する加算部とを含むことを特徴とする。【００６８】
また、請求項８に記載の態様である署名生成装置において、前記ベクトル生成部は、前記分布に基づいて予め選択した複数の候補ベクトルから、ランダムに選択することにより、前記攪乱ベクトルを生成することを特徴とする。【００６９】
また、請求項９に記載の態様である署名生成装置において、前記分布は、前記第１サイズを半径とする超球内に含まれることを特徴とする。【００７０】
また、請求項１０に記載の態様である署名生成装置は、さらに、前記第１サイズより大きい第２サイズを記憶している公開記憶手段を含み、前記データ変換手段は、さらに、前記対象データによるベクトルと、前記変換ベクトルとの距離を算出し、算出した距離が前記第２サイズ以下でない場合に、第１サイズより小さい秘密の別の攪乱ベクトルを用いて、取得した対象データを変換して、別の変換ベクトルを生成するを特徴とする。【００７１】
また、請求項１１に記載の態様である署名生成装置において、前記秘密鍵ベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、前記公開鍵ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られることを特徴とする。【００７２】
また、請求項１２に記載の態様である署名検証装置は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名生成装置により、第１サイズより小さい秘密の攪乱ベクトルを用いて、対象データから変換により前記変換ベクトルが生成され、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点である署名ベクトルの一部として生成された署名データを検証する署名検証装置であって、前記対象データ及び署名データを取得する取得手段と、公開鍵ベクトルを記憶している記憶手段と、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段とを備えることを特徴とする。【００７３】
この構成によると、署名データの検証において、前記対象データによるベクトルと前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証し、第２サイズ以下であるとき、検証が成功したとみなすので、署名データの検証を行うことができる。【００７４】
また、請求項１３に記載の態様である署名生成方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置において用いられる署名生成方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、前記対象データと生成した署名データとを出力する出力ステップとを含むことを特徴とする。【００７５】
また、請求項１４に記載の態様である記録媒体は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成するコンピュータにおいて用いられる署名生成用のコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、前記コンピュータに、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、前記対象データと生成した署名データとを出力する出力ステップとを実行させる前記コンピュータプログラムを記録している。【００７６】
また、請求項１５に記載の態様であるシステムは、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名する署名生成装置及び検証する署名検証装置から構成されるシステムであって、前記署名生成装置は、対象データを取得する取得手段と、秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、前記対象データと生成した署名データとを出力する出力手段とを備え、前記署名検証装置は、  前記対象データ及び署名データを取得する取得手段と、公開鍵ベクトルを記憶している記憶手段と、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段とを備えることを特徴とする。
〔実施の形態１〕
本発明に係る１の実施の形態としてのデジタル署名システム１０について説明する。【００７７】
デジタル署名システム１０は、図１に示すように、メッセージ生成装置３０、署名生成装置１００、署名検証装置２００、鍵生成装置３００及びメッセージ受信装置４０から構成され、署名生成装置１００と署名検証装置２００とは、インターネットを代表とする通信路２０を介して接続され、署名生成装置１００と鍵生成装置３００とは、安全性が保証された通信路により接続されることにより、又は他の安全性が保証された手段により、相互に情報が伝達される。【００７８】
デジタル署名システム１０においては、メッセージ生成装置３０は、送信すべきメッセージデータｍ（署名の対象データとも呼ぶ。）を生成し、生成したメッセージデータｍを署名生成装置１００へ出力する。次に、ＮＴＲＵＳｉｇｎ署名方式を改良した改良ＮＴＲＵＳｉｇｎ署名方式を用いて、鍵生成装置３００は、鍵生成を行い、署名生成装置１００は、メッセージデータｍに対する署名データＳＤを生成し、通信路２０を介して署名検証装置２００にメッセージデータｍ及び署名データＳＤを含む署名データセットＳＳを送信し、署名検証装置２００は、署名データセットＳＳを受信し、受信した署名データセットＳＳを検証し、検証結果及びメッセージデータｍをメッセージ受信装置４０へ出力する。メッセージ受信装置４０は、検証結果及びメッセージデータｍを受け取り、受信した検証結果により、受信したメッセージデータｍの採否を決定する。
１．改良ＮＴＲＵＳｉｇｎ署名方式
改良ＮＴＲＵＳｉｇｎ署名方式は、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠としている。最小ベクトル問題(Shortest Vector Problem)は、１の基底ベクトルからその格子に含まれる「最小のベクトル」を求める問題である。近似最小ベクトル問題(Approximate Shortest Vector Problem)は、近似的に最小のベクトル(最小ベクトルではないが、それに近い大きさのベクトル)を求める問題である。
（１）改良ＮＴＲＵＳｉｇｎ署名方式のシステムパラメタ
改良ＮＴＲＵＳｉｇｎ署名方式においては、従来のＮＴＲＵＳｉｇｎ署名方式と同じ非負整数のパラメタＮ，ｑ，ｄｆ，ｄｇの他に距離Ｌ及びＬ’が存在する。従来のＮＴＲＵＳｉｇｎ署名方式では、検証時にＮｏｒｍｂｏｕｎｄを使用する。これに対して、改良ＮＴＲＵＳｉｇｎ署名方式では、後で説明するように、検証時には、Ｎｏｒｍｂｏｕｎｄの代わりに、距離Ｌ’を使用する。【００７９】
以下に、これらのパラメタの意味を説明する。【００８０】
（ｉ）パラメタＮ
改良ＮＴＲＵＳｉｇｎ署名方式は、多項式の演算により署名生成及び署名検証を行うデジタル署名方式である。改良ＮＴＲＵＳｉｇｎ署名方式で扱う多項式の次数は、パラメタＮにより決まる。【００８１】
改良ＮＴＲＵＳｉｇｎ署名方式で扱う多項式は、パラメタＮに対し、Ｎ−１次以下の整数係数多項式であり、Ｎ＝５のとき、例えば、多項式Ｘ＾４＋Ｘ＾３＋１である。【００８２】
また、公開鍵ｈ、署名ｓは、いずれも、Ｎ−１次以下の多項式として表現される。また、秘密鍵は、４つのＮ−１次以下の多項式対（ｆ，ｇ，Ｆ，Ｇ）である。すなわち、ｆ，ｇ，Ｆ，Ｇは、いずれもＮ−１次以下の多項式である。なお、以下では、４つ組（ｆ，ｇ，Ｆ，Ｇ）を２つの対（ｆ，ｇ），（Ｆ，Ｇ）のさらなる対と捉えて、｛（ｆ，ｇ），（Ｆ，Ｇ）｝と表記する場合もある。【００８３】
このように、秘密鍵であるベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られる。また、公開鍵であるベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られる。【００８４】
さらに、改良ＮＴＲＵＳｉｇｎ署名方式における多項式演算は、パラメタＮに対し、Ｘ＾Ｎ＝１という関係式を用いて、演算結果が常にＮ−１次以下の多項式になるように演算される。【００８５】
なお、改良ＮＴＲＵＳｉｇｎ署名方式では、Ｎ−１次の多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）を、ベクトル（ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１））と同一視して表現する。ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１）は、それぞれ、多項式ａの各項の係数であり、整数である。【００８６】
（ｉｉ）パラメタｑ
改良ＮＴＲＵＳｉｇｎ署名方式では、２以上の整数であるパラメタｑを用いる。改良ＮＴＲＵＳｉｇｎ署名方式で出現する多項式の各係数は、ｑを法とした剰余を取るように演算する。【００８７】
（ｉｉｉ）パラメタｄｆ，ｄｇ
改良ＮＴＲＵＳｉｇｎ署名方式で扱う秘密鍵の一部である多項式ｆ及び多項式ｇの選び方は、それぞれパラメタｄｆ，ｄｇにより決まる。多項式ｇは、公開鍵である多項式ｈを生成するときに、多項式ｆと共に用いられる。【００８８】
多項式ｆは、Ｎ個の係数のうち、ｄｆ個の係数が「１」であり、かつ他の係数が「０」となるように選ばれる。すなわち、多項式ｆは、Ｎ−１次以下の多項式であり、０次（定数項）からＮ−１次までのＮ個の項について、それぞれ、１個の係数が存在し、合計でＮ個の係数があるが、これらのＮ個の係数のうち、ｄｆ個の係数が「１」であり、かつ（Ｎ−ｄｆ）個の係数が「０」となるように選ばれる。【００８９】
また、同様に、多項式ｇは、ｄｇ個の係数が「１」であり、かつ他の係数が「０」となるように選ばれる。【００９０】
（ｉｖ）パラメタＬ（距離）
パラメタＬ（第１サイズとも呼ぶ。）は、２・Ｎ次元ベクトル空間における超球の半径である。以下において、改良ＮＴＲＵＳｉｇｎ署名方式において加算されるランダムなベクトルの選択と、超球及び分布ηとの関係について説明する。【００９１】
改良ＮＴＲＵＳｉｇｎ署名方式では、後述するように、メッセージデータのハッシュ値である２・Ｎ次元のベクトル（ハッシュ値ベクトルと呼ぶ）に対し、ランダムなベクトル（攪乱ベクトルとも呼ぶ。）を加算して、変換ハッシュ値ベクトルを生成する。【００９２】
分布ηは、半径Ｌの超球内に含まれるように設定され、ランダムなベクトルは、分布η内に存在する複数のベクトル（候補ベクトルとも呼ぶ。）から等確率でランダムに選択される。したがって、選択されたベクトルのノルムは、Ｌ以下である。【００９３】
分布ηの一例を図２に示す。図２は、２・Ｎ次元ベクトル空間を、２次元の紙面上に、模式的に表現したものであり、中心４０６を有し、半径Ｌ（距離４０２）の超球４０１を表現している。超球４０１の内部に、分布４００が存在する。分布４００は、超球４０１内に完全に含まれている。分布４００内に存在する複数のベクトルから、例えば、ベクトル４０３がランダムに選択される。なお、ベクトル４０４が選択されることもあり、ベクトル４０５が選択されることもある。【００９４】
分布４００のデータ構造を、図３の分布テーブル４１０に示す。【００９５】
分布テーブル４１０は、２・Ｎ次元ベクトル空間において、分布４００が占める空間構造を定めるものであり、２・Ｎ個の限界値ペアを含んで構成されている。２・Ｎ個の限界値ペアは、それぞれ、２・Ｎ次元ベクトルの２・Ｎ個のエレメントに対応している。２・Ｎ個の限界値ペアは、第１グループ及び第２グループから構成され、第１グループは、Ｎ個の限界値ペアを含み、第２グループは、残りのＮ個の限界値ペアを含む。各限界値ペアは、下限値及び上限値を含む。【００９６】
２・Ｎ次元ベクトル空間において、２・Ｎ次元ベクトルの２・Ｎ個のエレメントに対応して、各限界値ペアに含まれる下限値以上及び上限値以下の空間が、分布４００が占める空間である。この空間が、超球４０１の内部に含まれるように、各限界値ペアが設定されている。【００９７】
分布テーブル４１０の第１グループに含まれる第０番目の限界値ペア内の下限値V1_0_min４１１及び上限値V1_0_max４１２は、それぞれ、一例として、「３」及び「８」であり、第１グループに含まれる第Ｎ−１番目の限界値ペア内の下限値V1_(N-1)_min４１３及び上限値V1_(N-1)_max４１４は、それぞれ、一例として、「２」及び「５」である。また、分布テーブル４１０の第２グループに含まれる第０番目の限界値ペア内の下限値V2_0_min４１５及び上限値V2_0_max４１６は、それぞれ、一例として、「１」及び「６」であり、第２グループに含まれる第Ｎ−１番目の限界値ペア内の下限値V2_(N-1)_min４１７及び上限値V2_(N-1)_max４１８は、それぞれ、一例として、「４」及び「７」である。【００９８】
分布テーブル４１０の２・Ｎ個の限界値ペアを用いて、各限界値ペアに含まれる下限値以上かつ上限値以下の値を、確率的に均等に、つまり、一様に、ランダムに選択する。こうして、２・Ｎ個のランダムな値Ｖ１＿０、Ｖ１＿１、Ｖ１＿２、・・・、Ｖ１＿（Ｎ−１）、Ｖ２＿０、Ｖ２＿１、Ｖ２＿２、・・・、Ｖ２＿（Ｎ−１）が選択され、選択された２・Ｎ個のランダムな値の組を上記のランダムに選択されたベクトルＶ（Ｖ１、Ｖ２）とする。【００９９】
ここで、Ｖ１＝（Ｖ１＿０、Ｖ１＿１、Ｖ１＿２、・・・、Ｖ１＿（Ｎ−１））
Ｖ２＝（Ｖ２＿０、Ｖ２＿１、Ｖ２＿２、・・・、Ｖ２＿（Ｎ−１））
このように、図２は、原点から分布の範囲のいずれかの点に向かうベクトルを選択することを示しており、この分布の例では、分布の範囲で一様で（等確率で）ランダムにベクトルを選択する。【０１００】
パラメタＬは、システムパラメタとして公開される。パラメタＬは、一例としてし、Ｌ＝２００である。【０１０１】
次に、分布ηの別の一例を図４に示す。図４は、図２と同様に、２・Ｎ次元ベクトル空間を、２次元の紙面上に、模式的に表現したものであり、中心４４１を有し、半径Ｌ（距離４４２）の超球４３１を表現している。超球４３１の内部に、分布４３２が存在する。分布４３２は、超球４３１内に完全に含まれている。【０１０２】
分布４３２は、図４に示すように、その範囲が３分割されており、部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）から構成されている。各部分領域に対して、当該部分領域を選択する確率が定められている。部分領域Ａ（４３３）を選択する確率は、１／６であり、部分領域Ｂ（４３４）を選択する確率は、１／２であり、部分領域Ｃ（４３５）を選択する確率は、１／３である。この分布４３２を用いる場合には、まず、部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）のいずれかをこれらの確率に依存して選択し、その後、選択した部分領域の範囲でランダムに候補ベクトルからベクトルを選択する。なお、これらの確率の合計は、「１」である。【０１０３】
１／６＋１／２＋１／３＝１
このように、分布４３２では、複数の候補ベクトルは、選択される確率が一様でないように、配置されている。【０１０４】
分布４３２のデータ構造を、図５の分布テーブル４５０に示す。【０１０５】
分布テーブル４５０は、２・Ｎ次元ベクトル空間において、分布４３２が占める空間構造を定めるものであり、部分テーブルと発生確率との組を複数個含んで構成されている。具体的には、分布テーブル４５０は、部分テーブル４５１と発生確率４５４との組と、部分テーブル４５２と発生確率４５５との組と、部分テーブル４５３と発生確率４５６との組とを含む。３個の部分テーブル４５１、４５２及び４５３は、それぞれ、図４の部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）に対応している。各部分テーブルに対応する発生確率は、図４に示す分布４３２の部分領域を選択する確率である。各部分テーブル部は、図３に示す分布テーブル４１０と同様の構造を有しており、それぞれは、２・Ｎ個の限界値ペアを含んで構成されている。【０１０６】
分布テーブル４５０に含まれる３個の発生確率４５４、４５５及び４５６に依存して、一つの部分テーブルが選択され、選択された部分テーブルが示す範囲内で、ランダムにベクトルを選択する。【０１０７】
（ｖ）パラメタＬ’（距離）
改良ＮＴＲＵＳｉｇｎ署名方式では、後述するように、署名ｓから作られる２・Ｎ次元のベクトル（署名ベクトルと呼ぶ）と、ハッシュ値ベクトルとの距離を計算し、この距離により正しい署名であるかを判定する。パラメタＬ’（第２サイズ）は、この判定の際に使用するしきい値である。すなわち、計算された上記距離がＬ’以下であれば、正しい署名として受理し、Ｌ’より大きければ、正しくない署名として拒否する。【０１０８】
非特許文献４には、従来のＮＴＲＵＳｉｇｎ署名方式のパラメタの例として、（Ｎ，ｑ，ｄｆ，ｄｇ）＝（２５１，１２８，７３，７１）の例が挙げられている。【０１０９】
改良ＮＴＲＵＳｉｇｎ署名方式においても、同様のパラメタ例を使用してもよい。改良ＮＴＲＵＳｉｇｎ署名方式においては、距離Ｌの超球内のベクトルを選択したときに、ハッシュ値ベクトルと正しく生成した署名ベクトルとの距離がほとんどＬ’となるように調節する。【０１１０】
例えば、パラメタＬ，Ｌ’は、例えば、（Ｌ，Ｌ’）＝（２００，５００）である。上記の従来のＮＴＲＵＳｉｇｉｎ署名方式のパラメタの例では、Ｎｏｒｍｂｏｕｎｄが３００〜３１０であり、この場合にハッシュ値ベクトルと正しく生成した署名ベクトルの距離がほぼＮｏｒｍｂｏｕｎｄ以内になっている。【０１１１】
これに対して、改良ＮＴＲＵＳｉｇｎ署名方式では、変換ハッシュ値ベクトルと署名ベクトルとの距離がほぼＮｏｒｍｂｏｕｎｄ以内になっている。変換ハッシュ値ベクトルとハッシュ値ベクトルとの差は、ランダムベクトルであり、その距離がＬ以内であるため、Ｌ’をＮｏｒｍｂｏｕｎｄ＋Ｌ程度に設定すればよい。したがって、Ｌを２００とすると、Ｌ’を５００〜５１０に設定すればよい。このように、Ｌ’は、Ｌより大きくする。
（２）メッセージデータのハッシュ値、ノルム及びベクトル間の距離
改良ＮＴＲＵＳｉｇｎ署名方式においても、メッセージデータのハッシュ値に対する署名を作成する。メッセージデータのハッシュ値は、Ｎ次の多項式の対であり、２・Ｎ次元のベクトルと同一視される。ハッシュ関数については、非特許文献１に詳しく説明されている。【０１１２】
一例として、メッセージデータｍから、３５１４ビット（＝１７５７ビット×２＝７ビット×２５１×２）のハッシュ値が生成されるとする。ここで、Ｎ＝２５１とする。生成された３５１４ビットのハッシュ値を先頭から、７ビットずつに区切ると、合計で、２５１×２＝５０２個のビット列ができ、これらの５０２個ビット列を、Ｎ（＝２５１）次の多項式の対の各係数とする。【０１１３】
ここで、３５１４ビットのハッシュ値を（Bit1-1,Bit1-2,Bit1-3,・・・Bit1-251),(Bit2-1,Bit2-2,Bit2-3,・・・Bit2-251)とし、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）（ｍ１及びｍ２はＮ次多項式）とすると、Ｎ次多項式ｍ１の係数は、（Bit1-1,Bit1-2,Bit1-3,・・・Bit1-251)であり、Ｎ次多項式ｍ２の係数は、(Bit2-1,Bit2-2,Bit2-3,・・・Bit2-251)である。ここで、Biti-j(i=1,2、j=1,2,3,・・・,251)は、7ビットの長さである。【０１１４】
改良ＮＴＲＵＳｉｇｎ署名方式においても、従来のＮＴＲＵＳｉｇｎ署名方式と同様のベクトルの距離を用いる。以下にその定義を示す。【０１１５】
多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）のノルム｜｜ａ｜｜を以下のように定義する。【０１１６】
｜｜ａ｜｜＝ｓｑｒｔ（（ａ＿０−μ）＾２＋（ａ＿１−μ）＾２＋…＋（ａ＿
（Ｎ−１）−μ）＾２）
μ＝（１／Ｎ）・（ａ＿０＋ａ＿１＋ａ＿２＋…＋ａ＿（Ｎ−１））
ここで、ｓｑｒｔ（ｘ）はｘの平方根を示す。【０１１７】
多項式ａ，ｂの対（ａ，ｂ）のノルム｜｜（ａ，ｂ）｜｜を以下のように定義する。【０１１８】
｜｜（ａ，ｂ）｜｜＝ｓｑｒｔ（｜｜ａ｜｜＾２＋｜｜ｂ｜｜＾２）
多項式ａ，ｂの対（ａ，ｂ）とｃ，ｄの対（ｃ，ｄ）との距離は、｜｜（ｃ−ａ，ｄ−ｂ）｜｜で定義される。
（３）改良ＮＴＲＵＳｉｇｎ署名方式の鍵生成
改良ＮＴＲＵＳｉｇｎ署名方式では、上述したように、パラメタｄｆ，ｄｇを用いてランダムに多項式ｆ，多項式ｇを生成する。そして非特許文献４に記載の通り、Ｆｑ×ｆ＝１（ｍｏｄ  ｑ）となる多項式Ｆｑを用いて、
ｈ＝Ｆｑ×ｇ（ｍｏｄ  ｑ）
により、多項式ｈを生成する。さらに、以下の式を満たすようなノルムが小さい多項式Ｆ，Ｇを求める。【０１１９】
ｆ×Ｇ−ｇ×Ｆ＝ｑ
ここで、ｘ＝ｙ（ｍｏｄ  ｑ）は、多項式ｙの第ｉ次（０≦ｉ≦Ｎ−１）の係数について、当該第ｉ次の係数を、剰余が０からｑ−１の範囲に収まるように法ｑで割ったときの剰余を、多項式ｘの第ｉ次の係数とする演算である。すなわち、ｙの各係数を、０から（ｑ−１）の範囲に収まるようにｍｏｄ  ｑ演算して得られる多項式を、多項式ｘとする演算である。【０１２０】
さらに、分布ηが距離Ｌの超球に含まれるように、当該分布ηを任意に設定する。設定する情報としては、分布の範囲、分布の範囲における選択する確率である。例えば、図２や図４に示すような分布を設定する。【０１２１】
秘密鍵を｛（ｆ，ｇ），（Ｆ，Ｇ）｝と分布ηとし、公開鍵をｈとする。秘密鍵は、署名を生成するための鍵であり、署名生成鍵とも呼ばれる。また、公開鍵は、署名を検証するための鍵であり、署名検証鍵とも呼ばれる。【０１２２】
分布ηは、秘密鍵に含めているため、当然であるが、秘密に保持しておく。なお、分布ηのすべてを秘密にしてもよいが、例えば、図２に示す分布４００の範囲を秘密にするが、分布４００に基づいて、ベクトルを一様ランダムに選択することを公開しておいてもよい。また、図４に示す分布４３２では、分布４３２の範囲及び各部分領域を選択する確率の両方を秘密としておいてもよいし、分布４３２の範囲を公開し、各部分領域を選択する確率を秘密とするとしてもよい。
（４）改良ＮＴＲＵＳｉｇｎ署名方式の署名生成
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成について、図６及び図１７を用いて、説明する。【０１２３】
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成では、署名対象であるメッセージデータｍの署名ｓを計算する。図６は、署名生成の処理を示した図であり、２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。図１７は、署名生成の処理の手順を示すフローチャートである。【０１２４】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）（ｍ１及びｍ２はＮ次多項式）を計算する（ステップＳＧ１）。以下で、Ｈをハッシュ値ベクトルと呼ぶ。また、図６において、ハッシュ値ベクトルＨを参照符号５０１で示す。【０１２５】
次に、分布の範囲でランダムにベクトルＶを選択し、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを計算する（ステップＳＧ２）。ここで、ｍ１’，ｍ２’をＨ’＝（ｍ１’，ｍ２’）を満たす多項式とする。図６において、変換ハッシュ値ベクトルＨ’を参照符号５０２で示す。【０１２６】
従来のＮＴＲＵＳｉｇｎ署名方式と同様の方法で、変換ハッシュ値ベクトルＨ’に最も近い格子点のベクトルＳ＝（ｓ，ｔ）を計算する（ステップＳＧ３）。図６において、ベクトルＳを参照符号５０３で示す。【０１２７】
この２・Ｎ次元のベクトル（ｍ１’，ｍ２’）と秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝とを用いて、以下の式を満たす多項式ａ，ｂ，Ａ，Ｂを計算する。【０１２８】
Ｇ×ｍ１’−Ｆ×ｍ２’＝Ａ＋ｑ×Ｂ
−ｇ×ｍ１’＋ｆ×ｍ２’＝ａ＋ｑ×ｂ
ここで、Ａ，ａの係数は、〈−ｑ／２〉＋１から〈ｑ／２〉の範囲に収まるように法ｑで割ったときの剰余を取ったものとする。すなわち、法ｑで割ったときの剰余が〈ｑ／２〉からｑ−１である場合は、ｑだけ減算して、上記範囲に収まるよう調整する。ここで、〈ｘ〉は、ｘ以下の数の中で最も大きい数を示す。例えば、〈−１／２〉＝−１である。【０１２９】
次に、以下の式より、ｓ，ｔを計算する。【０１３０】
ｓ＝ｆ×Ｂ＋Ｆ×ｂ  （ｍｏｄ  ｑ）
ｔ＝ｇ×Ｂ＋Ｇ×ｂ  （ｍｏｄ  ｑ）
次に、ハッシュ値ベクトルＨとＳの距離を算出し、ＨとＳの距離がＬ’以内であるかを判定する（ステップＳＧ４）。Ｌ’以内であれば（ステップＳＧ４でＹｅｓ）、ｓを署名とする（ステップＳＧ５）。Ｌ’以内でなければ（ステップＳＧ４でＮｏ）、ステップＳＧ２からやり直す。【０１３１】
Ｌ及びＬ’を上記例のように、（Ｌ，Ｌ’）＝（２００，５００）に設定した場合、ステップＳＧ４では、ハッシュ値ベクトルＨとＳの距離はほとんどＬ’以内に納まるため、ステップＳＧ２に戻る回数はあまり多くない。
（５）改良ＮＴＲＵＳｉｇｎ署名方式の署名検証
改良ＮＴＲＵＳｉｇｎ署名方式の署名検証について、図７及び図１８を用いて、説明する。【０１３２】
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成では、署名ｓが署名対象であるメッセージデータｍの正しい署名であるかを検証する。図７は署名検証の処理を示した図であり、２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。図１８は、署名生成の処理の手順を示すフローチャートである。【０１３３】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）を計算する（ステップＳＶ１）。図７において、ベクトルＨを参照符号５３１で示す。【０１３４】
次に、公開鍵ｈを用いて、以下の式より、多項式ｔを計算し、署名ベクトルＳ＝（ｓ，ｔ）を復元する（ステップＳＶ２）。図７において、署名ベクトルＳを参照符号５３２で示す。【０１３５】
ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）
ＨとＳの距離を求め、求めた距離がＬ’以下であるかをチェックする（ステップＳＶ３）。Ｌ’以下であれば（ステップＳＶ３でＹｅｓ）、署名ｓが正しいと判定して署名ｓを受理し、ＯＫを出力する（ステップＳＶ４）。Ｌ’より大きければ（ステップＳＶ３でＮｏ）、署名ｓが不正と判定して署名ｓを拒否し、ＮＧを出力する（ステップＳＶ５）。
２．各装置の構成
（１）署名生成装置１００の構成
署名生成装置１００は、相手に送信すべきメッセージデータｍに対する署名データセットＳＳを生成する。署名生成装置１００は、図８に示すように、送信部１０１、秘密鍵格納部１０２、公開鍵証明書格納部１０３、署名生成部１０４、署名データセット生成部１０５及びシステムパラメタ格納部１０６を備える。【０１３６】
秘密鍵格納部１０２は、耐タンパ性を有し、図９に示すように、予め、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び秘密鍵である分布ηを格納している。秘密鍵及び分布は、外部から知られないように、秘密に保護されている。【０１３７】
システムパラメタ格納部１０６は、図９に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）を格納している。【０１３８】
公開鍵証明書格納部１０３は、図９に示すように、予め、公開鍵ｈの証明書ＣＰを格納している。証明書ＣＰは、公開鍵ｈと、公開鍵ｈに対する鍵生成装置３００による署名データＳＰとからなる。署名データＳＰも、改良ＮＴＲＵＳｉｇｎ署名方式を使用して生成する。また、証明書ＣＰは予め与えられているものとする。なお、証明書ＣＰは、公開鍵ｈ及び署名データＳＰの他に、例えば、ユーザの識別子や証明書の期限などのデータを含んでいてもよい。【０１３９】
署名生成部１０４は、上述したように、改良ＮＴＲＵＳｉｇｎ署名方式に基づいて、秘密鍵格納部１０２に格納されている秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び分布ηを用いて、メッセージデータｍに対する署名データＳＤを生成する。【０１４０】
署名データセット生成部１０５は、公開鍵証明書格納部１０３から証明書ＣＰを受り取り、署名生成部１０４から署名データＳＤを受け取り、メッセージデータｍ、証明書ＣＰ及び署名データＳＤから構成される署名データセットＳＳを生成する。【０１４１】
送信部１０１は、生成された署名データセットＳＳを、通信路２０を介して署名検証装置２００へ送信する。
（署名生成部１０４の構成）
署名生成部１０４は、図１０に示すように、ハッシュ値計算部１１１、ベクトル生成部１１２、ハッシュ値変換部１１３、署名生成部１１４、署名確認部１１５及びベクトル群選択格納部１１６から構成されている。【０１４２】
ハッシュ値計算部１１１は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ１の処理を行い、メッセージデータｍに対するハッシュ値ベクトルＨを計算する。【０１４３】
ベクトル生成部１１２は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ２で使用するベクトルＶを生成する。【０１４４】
ハッシュ値変換部１１３は、ベクトル生成部１１２で生成したベクトルＶを用いて、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ２の処理を行い、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを生成する。【０１４５】
署名生成部１１４は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ３の処理を行い、署名ベクトルＳ＝（ｓ，ｔ）を生成する。【０１４６】
署名確認部１１５は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ４の処理を行い、署名ベクトルを確認する。確認した結果、ハッシュ値ベクトルと署名ベクトルが距離Ｌ’以内でない場合は、ベクトル生成部１１２の処理からやり直す。距離Ｌ’以内である場合は、署名ベクトルＳ＝（ｓ，ｔ）のｓを署名データＳＤとする。
（２）署名検証装置２００の構成
署名検証装置２００は、図１１に示すように、受信部２０１、ＣＡ公開鍵格納部２０２、署名データセット格納部２０３、署名検証部２０４及びシステムパラメタ格納部２０５を備える。【０１４７】
システムパラメタ格納部２０５は、図１２に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）を格納している。【０１４８】
ＣＡ公開鍵格納部２０２は、図１２に示すように、予め、証明書ＣＰを検証するための鍵生成装置３００の公開鍵ＫＣＰを格納している。【０１４９】
受信部２０１は、署名生成装置１００から送信された署名データセットＳＳを、通信路２０を介して受信し、受信した署名データセットＳＳを署名データセット格納部２０３に書き込む。【０１５０】
署名データセット格納部２０３は、図１２に示すように、受信した署名データセットＳＳを格納する。署名データセットＳＳは、メッセージデータｍ、署名データＳＤ及び証明書ＣＰから構成される。証明書ＣＰは、公開鍵Ｈ及び署名データＳＰを含む。【０１５１】
署名検証部２０４は、署名データセットＳＳに含まれる署名データＳＤを検証し、また、証明書ＣＰに含まれる署名データＳＰを検証する。
（署名検証部２０４の構成）
署名検証部２０４は、図１３に示すように、ハッシュ値計算部２１１、署名ベクトル生成部２１２及び距離判定部２１３から構成されている。【０１５２】
署名検証部２０４は、署名データＳＤを検証し、証明書ＣＰに含まれる署名データＳＰを検証する。以下では、署名データＳＤに対する署名検証について説明する。署名データＳＰについては、メッセージデータｍを公開鍵ｈ、署名データＳＤをＳＰと代えて、同様に検証できるので、詳細の説明を省略する。【０１５３】
ハッシュ値計算部２１１は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ１の処理を行い、メッセージデータｍに対するハッシュ値ベクトルＨを計算する。【０１５４】
署名ベクトル生成部２１２は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ２の処理を行い、署名データＳＤから署名ベクトルＳを生成する。【０１５５】
距離判定部２１３は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ３の処理を行い、ハッシュ値ベクトルＨと署名ベクトルＳの距離を計算する。その距離がＬ’以内である場合は、署名データは正しいと判定する。Ｌ’より大きければ、署名データは不正と判定する。
（３）鍵生成装置３００の構成
鍵生成装置３００は、図１４に示すように、分布生成部３０１、鍵生成部３０２、証明書生成部３０３、証明書生成鍵格納部３０４、鍵設定部３０５及びシステムパラメタ格納部３０６を備えている。【０１５６】
システムパラメタ格納部３０６は、図１５に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）、パラメタＬ（距離）及びパラメタｄｆ，ｄｇを記憶している。【０１５７】
証明書生成鍵格納部３０４は、図１５に示すように、予め、鍵生成装置３００の秘密鍵である証明書生成鍵ＫＣＳを記憶している。【０１５８】
分布生成部３０１は、例えば、図３に示す分布テーブル４１０又は図５に示す分布テーブル４５０を生成することにより、改良ＮＴＲＵＳｉｇｎ署名の鍵生成処理における分布ηを生成し、生成した分布ηを鍵生成部３０２へ出力する。【０１５９】
具体的には、次のようにして、分布生成部３０１は、分布テーブル４１０を生成する。
う。分布生成部３０１は、システムパラメタ格納部３０６からパラメタＮ及びパラメタＬを読み出し、２・Ｎ個の限界値ペアを格納するため領域を備える分布テーブルを生成する。次に、各限界値ペアについて、乱数を発生させて当該限界値ペアに含まれる下限値をランダムに決定する。次に、乱数を発生させて当該下限値より大きい上限値をランダムに決定する。下限値の決定と上限値の決定を全ての限界値ペアについて行う。決定した下限値及び上限値を前記の分布テーブルに格納する。こうして分布テーブル４１０が生成される。なお、各下限値及び各上限値は、分布内のベクトルのノルムがＬ以下となるように決定する。【０１６０】
また、別の例として、次のようにして、分布生成部３０１は、分布テーブル４５０を生成する。【０１６１】
分布生成部３０１は、システムパラメタ格納部３０６からパラメタＮ及びパラメタＬを読み出し、乱数を発生させて、分布テーブル４５０に含まれる部分テーブルの数を決定する。一例として、乱数として「３」が生成されたとする。この場合には、各部分テーブルが２・Ｎ個の限界値ペアを格納するため領域を備えるように、３個の部分テーブルを生成する。次に、３個の発生確率（各発生確率は、「０」より大きく、「１」より小さい）をランダムに決定する。ここで、３個の発生確率の合計が「１」となるようにする。【０１６２】
次に、各部分テーブルについて、上記の分布テーブル４１０と同様にして、各限界値ペアに含まれる下限値及び上限値を決定して各部分テーブルに格納する。【０１６３】
鍵生成部３０２は、システムパラメタ格納部３０６から、パラメタＮ、パラメタｑ、パラメタｄｆ、ｄｇ及びパラメタＬを読み出し、上述したように、改良ＮＴＲＵＳｉｇｎ署名方式の鍵生成処理方法により、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び公開鍵ｈを生成する。また、鍵生成部３０２は、分布生成部３０１から分布ηを受け取る。次に、鍵生成部３０２は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、公開鍵ｈ及び分布ηを鍵設定部３０５へ出力する。また、公開鍵ｈを証明書生成部３０３へ出力する。【０１６４】
証明書生成部３０３は、証明書生成鍵格納部３０４から証明書生成鍵ＫＣＳを読み出し、鍵生成部３０２から公開鍵ｈを受け取り、読み出した証明書生成鍵ＫＣＳを用いて、公開鍵ｈに対する証明書ＣＰを生成する。ここで、証明書ＣＰは公開鍵ｈと、公開鍵ｈの証明書生成鍵ＫＣＳを用いた署名データＳＰとからなる。なお、署名データＳＰの生成は、署名生成装置１００の署名生成部１０４による署名生成方法と同じ署名生成方法を用いて行う。【０１６５】
鍵設定部３０５は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び秘密鍵である分布ηをを署名生成装置１００の秘密鍵格納部１０２へ書き込む。また、証明書ＣＰを署名生成装置１００の公開鍵証明書格納部１０３へ書き込む。
３．デジタル署名システム１０の動作
（１）デジタル署名システム１０の概要の動作
デジタル署名システム１０の概要の動作について、図１６に示すフローチャートを用いて説明する。【０１６６】
署名生成装置１００は、署名データを生成し（ステップＳ１０１）、署名データセットＳＳを生成し（ステップＳ１０２）、生成した署名データセットＳＳを通信路２０を介して、署名検証装置２００へ送信する（ステップＳ１０３）。【０１６７】
署名検証装置２００の受信部２０１は、署名生成装置１００から送信された署名データセットＳＳを、通信路２０を介して受信し、受信した署名データセットＳＳを署名データセット格納部２０３に格納する（ステップＳ２０１）。【０１６８】
署名検証部２０４は、署名データセットＳＳの中の証明書ＣＰに含まれる公開鍵ｈとその署名データＳＰに対し、署名データＳＰが公開鍵ｈの正しい署名であるかを、ＣＡ公開鍵格納部２０２に格納されている鍵生成装置３００の公開鍵ＫＣＰを用いて検証する（ステップＳ２０２）。署名データＳＰが正しくない場合（ステップＳ２０３）、ＮＧを出力し（ステップＳ１０７）、終了する。【０１６９】
署名データＳＰが正しい場合（ステップＳ２０３）、署名検証部２０４は、署名データセットＳＳの中のメッセージデータｍとその署名データＳＤに対し、署名データＳＤがメッセージデータｍの正しい署名であるかを、公開鍵ｈを用いて検証する（ステップＳ２０４）。署名データＳＤが正しくない場合（ステップＳ２０５）、ＮＧを出力し（ステップＳ２０７）、終了する。署名データＳＤが正しい場合（ステップＳ２０５）、ＯＫを出力し（ステップＳ２０６）、終了する。
（２）署名生成装置１００の動作
署名生成装置１００の動作について、図１７に示すフローチャートを用いて説明する。【０１７０】
ハッシュ値計算部１１１は、メッセージデータｍに対するハッシュ値ベクトルＨを計算する（ステップＳＧ１）。【０１７１】
ベクトル生成部１１２は、ベクトルＶを生成し、ハッシュ値変換部１１３は、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを生成する（ステップＳＧ２）。【０１７２】
署名生成部１１４は、署名ベクトルＳ＝（ｓ，ｔ）を生成する（ステップＳＧ３）。【０１７３】
署名確認部１１５は、署名ベクトルを確認する（ステップＳＧ４）。確認した結果、ハッシュ値ベクトルと署名ベクトルが距離Ｌ’以内でない場合は（ステップＳＧ４でＮｏ）、ステップＳＧ２に戻って、ベクトル生成部１１２の処理からやり直す。距離Ｌ’以内である場合は（ステップＳＧ４でＹｅｓ）、署名ベクトルＳ＝（ｓ，ｔ）のｓを署名データＳＤとする（ステップＳＧ５）。
（３）署名検証装置２００の署名検証部２０４の動作
署名検証装置２００の署名検証部２０４による署名検証の動作について、図１８に示すフローチャートを用いて説明する。【０１７４】
署名検証部２０４は、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）を計算し（ステップＳＶ１）、公開鍵ｈを用いて、ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）により、多項式ｔを計算し、署名ベクトルＳ＝（ｓ，ｔ）を復元し（ステップＳＶ２）、ＨとＳの距離を求め、求めた距離がＬ’以下であるかをチェックし（ステップＳＶ３）、Ｌ’以下であれば（ステップＳＶ３でＹｅｓ）、署名ｓが正しいと判定して署名ｓを受理し、ＯＫを出力する（ステップＳＶ４）。Ｌ’より大きければ（ステップＳＶ３でＮｏ）、署名ｓが不正と判定して署名ｓを拒否し、ＮＧを出力する（ステップＳＶ５）。
（４）鍵生成装置３００の動作
鍵生成装置３００は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、分布ηと証明書ＣＰを署名生成装置１００に設定する。以下で、図１９に示すフローチャートを用いて、その動作について説明する。【０１７５】
鍵生成装置３００の鍵生成部３０２は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝と公開鍵ｈを生成し（ステップＳ４０１）、分布生成部３０１は、分布ηを生成し（ステップＳ４０２）、証明書生成部３０３は、証明書生成鍵格納部３０４に格納されている証明書生成鍵ＫＣＳを用いて、公開鍵ｈに対する証明書ＣＰを生成し（ステップＳ４０３）、鍵設定部３０５は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、分布ηと証明書ＣＰを、それぞれ署名生成装置１００の秘密鍵格納部１０２と公開鍵証明書格納部１０３に格納する（ステップＳ４０４）。
４．実施の形態１の効果
実施の形態１におけるデジタル署名システム１０では、図７に示すように、署名ベクトルＳを最近傍の格子のベクトルとする変換ハッシュ値ベクトルＨ’を隠蔽しており、検証者に送信していない。そのため、検証者に送信する際の通信路での攻撃者の傍受が発生した場合や、検証者自身が攻撃者である場合に、攻撃者が転写攻撃を試みようとしても、ベクトルとその最近傍の格子のベクトルとの差分の分布を知ることができないため、転写攻撃が困難になる。【０１７６】
転写攻撃は、個々の署名ベクトルとハッシュ値との差が秘密鍵の関連性を除いて一様分布であることを利用している。その上で、複数の署名データを収集して、差分の分布に関する情報（分布の範囲や発生確率）を用いて、統計的に一様分布の部分を取り去ることで、秘密鍵の部分のみを抽出している。この転写攻撃を発展させて、署名ベクトルとハッシュ値ベクトルとの差分の分布を用いた攻撃を行う場合においても、分布の範囲が秘密であり、分布の範囲が既知である条件を満たすことができないため、分布を予想した攻撃ができなくなり、このような攻撃が困難になる。以下で、このことについてもう少し詳しく述べる。【０１７７】
署名ベクトルは、分布ηを用いてハッシュ値ベクトルを変換して得られた変換ハッシュ値ベクトルの最近傍の格子点のベクトルである。ここで、分布ηは、分布の範囲が秘密であるため、攻撃者は署名ベクトルとハッシュ値ベクトルとの差分の分布の範囲がわからない。そのため、上記のような攻撃が困難になる。【０１７８】
また、攻撃者が分布の範囲が既知であっても、分布が一様でなく、図４のように各部分領域の発生確率が既知でない場合は、同様に、転写攻撃が困難になる。【０１７９】
なお、攻撃者にとって、分布の範囲が既知であり、発生確率も既知である場合であっても、ランダムなベクトルＶをハッシュ値ベクトルに加算することにより、分布の範囲が広がる。転写攻撃では、一様分布の部分を取り去るためには、その分布の大きさに依存した署名のサンプル数が必要になる。したがって、ランダムなベクトルＶを加算することで、分布の範囲が広がり、転写攻撃に要する署名のサンプル数が多くなるため、攻撃が困難になるという効果がある。
５．以上説明したように、本発明は、上述した転写攻撃を防ぐことができ、格子の問題を安全性のベースとする署名方式、特に、ＮＴＲＵＳｉｇｎ署名方式をベースにしたデジタル署名システムを提供することを目的とする。【０１８０】
本発明の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含むことを特徴とする。【０１８１】
ここで、前記分布は一様でないとしてもよい。【０１８２】
ここで、前記分布の範囲は秘密であるとしてもよい。【０１８３】
ここで、前記分布の範囲は、複数の領域に分割され、各領域の選択確率が予め定められ、前記ベクトル生成手段は、前記選択確率に基づいて前記領域を選択し、選択した前記領域に基づいてベクトル生成してもよい。【０１８４】
ここで、前記ベクトル生成手段は、前記分布に基づいてランダムに選択したベクトルを生成し、前記メッセージ変換手段は、前記メッセージデータに対して前記ベクトルを加算して前記変換メッセージデータを生成してもよい。【０１８５】
ここで、前記ベクトル生成手段は、前記分布に基づいて予め選択した複数のベクトルから、ランダムに選択することでベクトルを生成してもよい。【０１８６】
ここで、前記分布は、所定の距離Ｌの超球に含まれるとしてもよい。【０１８７】
ここで、前記公開鍵は、前記距離Ｌに関連する距離Ｌ’を含み、前記署名生成部は、前記メッセージデータとの前記署名データとの距離がＬ’以内でない場合に、前記変換メッセージデータを計算しなおすとしてもよい。【０１８８】
ここで、前記公開鍵は前記距離Ｌ’を含むとしてもよい。【０１８９】
ここで、前記距離Ｌ’は、前記署名方式のシステムパラメタであるとしてもよい。【０１９０】
ここで、前記秘密鍵基底ベクトルは、加算、減算、乗算と元の大きさを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、前記公開鍵基底ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られるとしてもよい。【０１９１】
ここで、前記秘密鍵格納部は、タンパー攻撃の対策をしているとしてもよい。【０１９２】
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを検証する署名検証装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名検証装置は、前記署名データを検証するために使用する前記公開鍵を格納する公開鍵格納部と、前記公開鍵格納部に格納された前記公開鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを検証する署名検証部とを備え、前記秘密鍵は、所定の距離Ｌの超球に含まれる所定のベクトルの分布を含み、前記公開鍵は、前記距離Ｌに関連する距離Ｌ’を含み、前記署名検証部は、前記メッセージデータと前記署名データの距離がＬ’以内であるか否かを判定することを特徴とする。【０１９３】
ここで、署名方式を用いて、チャレンジデータに対するレスポンスデータである認証データを生成する認証データ生成装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記認証データ生成装置は、前記認証データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記チャレンジデータに対する前記認証データを生成する認証データ生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記認証データ生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記チャレンジデータに対するハッシュ値である前記メッセージデータを生成するメッセージデータ生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換チャレンジデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いたときの前記署名データを前記認証データとして生成する認証データ生成手段と、を含むとしてもよい。【０１９４】
また、本発明の別の１の態様は、ベクトルの集合である格子の最近傍問題を安全性のベースとする署名方式を用いて、メッセージデータに対する署名データを生成する署名生成方法であって、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成ステップは、前記メッセージデータを、前記分布に基づくベクトルを用いて変換した変換メッセージデータに対して、前記秘密鍵基底ベクトルを用いて前記格子の元である前記署名データを生成することを特徴とする。【０１９５】
ここで、前記分布は一様でないとしてもよい。【０１９６】
ここで、前記分布の範囲は秘密であるとしてもよい。【０１９７】
ここで、前記分布の範囲は、複数の領域に分割され、各領域の選択確率が予め定められ、前記署名生成ステップは、前記選択確率に基づいて前記領域を選択し、選択した前記領域に基づいて生成したベクトルを用いるとしてもよい。【０１９８】
ここで、前記署名生成ステップは、前記メッセージデータに対して、前記分布に基づいてランダムに選択したベクトルを加算して前記変換メッセージデータを生成してもよい。【０１９９】
ここで、前記分布は、所定の距離Ｌの超球に含まれるとしてもよい。【０２００】
また、本発明の別の１の態様は、ベクトルの集合である格子の最近傍問題を安全性のベースとする署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置に実行させるプログラムであって、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを前記署名生成装置に実行させ、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成ステップは、前記メッセージデータを、前記分布に基づくベクトルを用いて変換した変換メッセージデータに対して、前記秘密鍵基底ベクトルを用いて前記格子の元である前記署名データを生成することを特徴とする。【０２０１】
ここで、前記プログラムは、記録媒体に記録されているとしてもよい。【０２０２】
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置の集積回路であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含むことを特徴とする。【０２０３】
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置と前記署名データを検証する署名検証装置からなるデジタル署名システムであって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記署名検証装置は、前記署名データを検証するために使用する前記公開鍵を格納する公開鍵格納部と、前記公開鍵格納部に格納された前記公開鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを検証する署名検証部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含み、前記署名検証部は、前記メッセージデータと前記署名データの距離を判定することを特徴とする。
６．変形例
上記に説明した実施の形態は、本発明の実施の一例であり、本発明はこの実施の形態に何ら限定されるものではなく、その旨を逸脱しない範囲において種々なる態様で実施し得るものである。例えば、以下のような場合も本発明に含まれる。
（１）実施の形態１におけるデジタル署名システム１０では、ランダムなベクトルを分布に基づいて選択していたが、予め分布に基づくベクトルを求めて記憶しておき、記憶しているそのベクトルを用いるとしてもよい。また、予め複数の分布に基づくベクトルを複数個求めて記憶しておき、記憶している複数のベクトルから１個のベクトルを選択するとしてもよい。
（２）デジタル署名システム１０では、ベクトルＶを加算して変換ハッシュ値ベクトルを生成していたが、これに限らない。例えば、ベクトルＶをｎ倍（ｎは０以外の整数）したものを加算して変換ハッシュ値ベクトルを生成するとしてもよい。また、ベクトルＶを減算して変換ハッシュ値を生成するとしてもよい。
（３）改良ＮＴＲＵＳｉｇｎ署名方式におけるＬとＬ‘は、（Ｌ，Ｌ’）＝（２００，５００）としていたが、他の値でもよい。例えば、（Ｌ，Ｌ’）＝（５０，３５０）であってもよい。また、ＬとＬ’の差は、従来のＮＴＲＵＳｉｇｎ署名方式のＮｏｒｍｂｏｕｎｄと程度としていたが、Ｎｏｒｍｂｏｕｎｄより小さくてもよい。Ｌ’は、ほとんどのハッシュ値ベクトルと正しく生成した署名ベクトルの距離がその値以下に納まる値であれば何でもよい。
（４）改良ＮＴＲＵＳｉｇｎ署名方式において、距離Ｌをシステムパラメタとして公開していたが、署名を生成するユーザごとに異なる値としてもよい。その場合は、Ｌ’を公開鍵に含めて署名を検証するユーザに知らせるとしてもよい。また、距離Ｌを秘密にするとしてもよい。
（５）改良ＮＴＲＵＳｉｇｎ署名方式において、分布ηとして図２や図４に示す分布４００、４３２を使用するとしているが、これに限らない。例えば、ある次元（例えばｉ番目、すなわち、ｉ−１次の項）の要素を所定の範囲（例えば、２以上５以下）に制限するとしてもよい。
（６）ＮＴＲＵＳｉｇｎ署名方式では、秘密鍵における（ｆ，ｇ），（Ｆ，Ｇ）を格子の基底ベクトル（秘密鍵基底ベクトル）、公開鍵におけるｈとシステムパラメタであるｑから得られる（１，ｈ），（０，ｑ）を格子の基底ベクトル（公開鍵基底ベクトル）としたとき、それぞれの基底ベクトルから得られる格子点が同一であることから、格子の問題（格子の最近傍問題）をベースにした署名方式と呼ばれる。改良ＮＴＲＵＳｉｇｎ署名方式も同様の秘密鍵基底ベクトルと公開鍵基底ベクトルを持つ。【０２０４】
本発明では、署名方式としてＮＴＲＵＳｉｇｎ署名方式をベースとした改良ＮＴＲＵＳｉｇｎ署名方式を使用しているが、これに限らない。転写攻撃は他の格子の問題をベースとした署名方式、例えば、ＧＧＨ署名方式でも適用できる。署名方式として、転写攻撃が適用できる、格子の問題をベースとした署名方式、例えば、ＧＧＨ署名方式をベースとするとしてもよい。ＧＧＨ署名方式は、非特許文献６に詳細に述べられている。他の格子の最近傍問題を署名の安全性のベースとする署名方式をベースとするとしてもよい。
（７）分布ηのデータ構造である分布テーブルの他の一例について説明する。【０２０５】
図２１に示す分布テーブル６１０は、３個の分布情報ｉ（ｉ＝１、２、３）から構成され、分布情報ｉは、下限値Ｃ＿ｉ＿ｍｉｎ、上限値Ｃ＿ｉ＿ｍａｘ、多項式Ｂａｓｅ１＿ｉ、及び多項式Ｂａｓｅ２＿ｉを含む。【０２０６】
ｉ＝１とするときに、下限値Ｃ＿１＿ｍｉｎ以上であり、上限値Ｃ＿１＿ｍａｘ以下であるＣ＿１を一様ランダムに選択し、ｉ＝２とするときに、下限値Ｃ＿２＿ｍｉｎ以上であり、上限値Ｃ＿２＿ｍａｘ以下であるＣ＿２を一様ランダムに選択し、ｉ＝３とするときに、下限値Ｃ＿３＿ｍｉｎ以上であり、上限値Ｃ＿３＿ｍａｘ以下であるＣ＿３を一様ランダムに選択する。【０２０７】
次に、Ｖ１＝Ｃ＿１×Ｂａｓｅ１＿１＋Ｃ＿２×Ｂａｓｅ１＿２＋Ｃ＿３×Ｂａｓｅ１＿３を算出し、Ｖ２＝Ｃ＿１×Ｂａｓｅ２＿１＋Ｃ＿２×Ｂａｓｅ２＿２＋Ｃ＿３×Ｂａｓｅ２＿３を算出し、Ｖ＝（Ｖ１、Ｖ２）とする。【０２０８】
上記の分布の中で最もノルムが大きくなるベクトルV_max(=(V1_max, V2_max))は、
V1_max=c_1_max×Base1_1+c_2_min×Base1_2+c_3_max×Base1_3
V2_max=c_1_max×Base2_1+c_2_min×Base2_2+c_3_max×Base2_3
であり、そのノルムは 194.9 < 200である。【０２０９】
分布テーブル６１０において、ベースの多項式Base1_i, Base2_i(i=1, 2, 3)は、係数（重み）を３個有しているが、これに限らない。例えば、２個であってもよいし、４個以上であってもよい
また、分布テーブル６１０において、Base1_i及びBase2_iのそれぞれについて、多項式の数は３個であるが、２個でもよいし、４個以上でもよい。
（８）分布ηのデータ構造である分布テーブルのさらに他の一例について説明する。【０２１０】
図２２に示す分布テーブル６５０は、３個の分布情報ｉ（ｉ＝１、２、３）から構成され、分布情報ｉは、第１サブ分布情報及び第２サブ分布情報を含み、第１サブ分布情報は、下限値Ｃ＿１＿ｉ＿ｍｉｎ、上限値Ｃ＿１＿ｉ＿ｍａｘ及び多項式Ｂａｓｅ１＿ｉを含み、
第２サブ分布情報は、下限値Ｃ＿２＿ｉ＿ｍｉｎ、上限値Ｃ＿２＿ｉ＿ｍａｘ及び多項式Ｂａｓｅ２＿ｉを含む。【０２１１】
ｉ＝１とするときに、下限値Ｃ＿１＿１＿ｍｉｎ以上であり、上限値Ｃ＿１＿１＿ｍａｘ以下であるＣ＿１＿１を一様ランダムに選択し、下限値Ｃ＿２＿１＿ｍｉｎ以上であり、上限値Ｃ＿２＿１＿ｍａｘ以下であるＣ＿２＿１を一様ランダムに選択する。ｉ＝２とするときに、下限値Ｃ＿１＿２＿ｍｉｎ以上であり、上限値Ｃ＿１＿２＿ｍａｘ以下であるＣ＿１＿２を一様ランダムに選択し、下限値Ｃ＿２＿２＿ｍｉｎ以上であり、上限値Ｃ＿２＿２＿ｍａｘ以下であるＣ＿２＿２を一様ランダムに選択する。ｉ＝３とするときに、下限値Ｃ＿１＿３＿ｍｉｎ以上であり、上限値Ｃ＿１＿３＿ｍａｘ以下であるＣ＿１＿３を一様ランダムに選択し、下限値Ｃ＿２＿３＿ｍｉｎ以上であり、上限値Ｃ＿２＿３＿ｍａｘ以下であるＣ＿２＿３を一様ランダムに選択する。【０２１２】
次に、Ｖ１＝Ｃ＿１＿１×Ｂａｓｅ１＿１＋Ｃ＿１＿２×Ｂａｓｅ１＿２＋Ｃ＿１＿３×Ｂａｓｅ１＿３を算出し、Ｖ２＝Ｃ＿２＿１×Ｂａｓｅ２＿１＋Ｃ＿２＿２×Ｂａｓｅ２＿２＋Ｃ＿２＿３×Ｂａｓｅ２＿３を算出し、Ｖ＝（Ｖ１、Ｖ２）とする。【０２１３】
上記の分布の中で最もノルムが大きくなるベクトルV_max(=(V1_max, V2_max))は、
V1_max=c_1_1_max×Base1_1+c_1_2_max×Base1_2+c_1_3_max×Base1_3
V2_max=c_2_1_max×Base2_1+c_2_2_min×Base2_2+c_2_3_min×Base2_3
であり、そのノルムは 199.1 < 200である。【０２１４】
ここで、c_1_iやc_2_iは、minからmaxの間で一様ランダムに選択（生成）するとしているが、これに限らない。例えば、ガウス分布に従ってランダムに選択するとしてもよい。その場合は、平均値と分散を予め決めておき、ガウス分布にしたがって発生させる。【０２１５】
なお、ガウス分布の発生方法については、以下の文献に詳しく記載されている。
D.E. Knuth, “THE ART OF COMPUTER PROGRAMMING, 2nd ed., 
vol.2:Seminumerical Algorithms”, ADDISON-WESLEY, 1981, pp. 129-130
（９）上記の実施の形態では、署名検証時に、「Ｌ以内」で正しいと判定するとしているが、これには限定されず、「Ｌ未満」で正しいと判定するとしてもよい。その場合は、「Ｌより大きい」ときに不正と判定するのではなく、「Ｌ以上」のときに不正と判定する。
（１０）上記の実施の形態及び変形例は、認証において適用される。認証とは、メッセージデータが自称どおりの人物によって送られたこと、またメッセージデータが改竄されなかったということの検証である。また、実施の形態及び変形例は、身分の証明において適用される。身分の証明とは、例えば、データへのアクセス権、又は施設へのアクセス権（入室権）を持つことの証明、又は自分が主張どおりの人物であることの証明である。さらに、実施の形態及び変形例は、否認防止において適用される。否認防止とは、例えば、実は何かに同意したのに、同意していないと主張する者に対抗することをいう。
（１１）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。【０２１６】
上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。【０２１７】
上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。【０２１８】
本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。【０２１９】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。【０２２０】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。【０２２１】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。【０２２２】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１２）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０２２３】
本発明を構成する各装置は、認証、身分の証明、否認の防止などの処理を必要とする様々な産業分野において、認証、身分の証明、否認の防止などの処理を行う際に、経営的に、また継続的及び反復的に使用し、また製造することができる。
【図１】
2009125537.tif 000003
【図２】
2009125537.tif 000004
【図３】
2009125537.tif 000005
【図４】
2009125537.tif 000006
【図５】
2009125537.tif 000007
【図６】
2009125537.tif 000008
【図７】
2009125537.tif 000009
【図８】
2009125537.tif 000010
【図９】
2009125537.tif 000011
【図１０】
2009125537.tif 000012
【図１１】
2009125537.tif 000013
【図１２】
2009125537.tif 000014
【図１３】
2009125537.tif 000015
【図１４】
2009125537.tif 000016
【図１５】
2009125537.tif 000017
【図１６】
2009125537.tif 000018
【図１７】
2009125537.tif 000019
【図１８】
2009125537.tif 000020
【図１９】
2009125537.tif 000021
【図２０】
2009125537.tif 000022
【図２１】
2009125537.tif 000023
【図２２】
2009125537.tif 000024
【手続補正書】
【提出日】平成22年8月25日(2010.8.25)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術としての暗号技術に関し、特に、デジタル署名及びその検証に関する。
【背景技術】
【０００２】
送信装置から受信装置へデータを送信する際に、送信者を特定し、またデータの改ざんを検出又は防止するため、公開鍵暗号の一種であるデジタル署名方式が用いられる。
ここで、デジタル署名方式とは、送信装置が、送信したいデータに対し、送信装置の私有鍵（秘密鍵）を用いて署名データを作成し、送信したいデータと共に署名データを受信装置へ送信し、受信装置は、送信装置の公開鍵を用いて署名データを検証し、改ざんされているか否かを判定する方法である。（例えば、非特許文献１参照）。ここで、公開鍵から私有鍵の値を計算することは困難であるので、不正者が送信装置になりすまして、偽造した署名データを作成することはできない。
【０００３】
このような公開鍵暗号システムとしては、比較的短く容易に作成される鍵を比較的高速の暗号化プロセスおよび復号プロセスと組み合わせることが望ましく、特許文献１は、鍵長が他の一般的な公開鍵暗号システムの鍵長に匹敵する鍵を、ベクトルの大きな集合からほぼ無作為に選択することを可能にし、適切なセキュリティ・レベルを備える公開鍵暗号システムを開示している。
【０００４】
また、高速処理が可能な公開鍵暗号として、ＮＴＲＵ（エヌティーアールユー・クリプトシステムズ・インコーポレーテッドの登録商標）暗号が提案されている（例えば、非特許文献２参照）。このＮＴＲＵ暗号は、ある法の下でべき乗剰余演算を行うＲＳＡ暗号や楕円曲線上の点のスカラ倍演算を行う楕円曲線暗号に比べ、高速な演算が可能な多項式演算を用いて暗号化と復号化を行うので、従来の公開鍵暗号よりも高速に処理することが可能で、ソフトウェアによる処理によっても、実用的な時間で処理可能である。従って、公開鍵暗号にＮＴＲＵ暗号を用いた暗号通信システムでは、従来の公開鍵暗号を用いた暗号通信システムよりも、送信装置及び受信装置の処理が高速に行えるという利点がある。
【０００５】
なお、ＮＴＲＵ暗号は高速処理が可能であるだけでなく、その安全性のベースとなる計算量的に困難な問題も、ＲＳＡ暗号や楕円曲線暗号とは異なる。ＲＳＡ暗号は、素因数分解問題を安全性のベースにしており、楕円曲線暗号は、楕円曲線上の離散対数問題を安全性のベースにしている。一方、ＮＴＲＵ暗号は、格子と呼ばれるベクトルの集合に対する最小ベクトル問題または最近傍問題を安全性のベースにしている。
【０００６】
上記で提案されたＮＴＲＵ暗号は、データを秘密にするために、データを暗号化する守秘暗号方式であるが、その後、ＮＴＲＵ暗号のデジタル署名方式が提案されている（非特許文献３参照）。このデジタル署名方式については解読法の出現などで、方式が幾度か変更された。以下では、ＮＴＲＵＳｉｇｎと呼ばれるデジタル署名方式について簡単に説明する（詳細については、特許文献２及び非特許文献４参照）。
＜ＮＴＲＵＳｉｇｎ署名方式＞
（１）ＮＴＲＵＳｉｇｎ署名方式のシステムパラメタ
ＮＴＲＵＳｉｇｎ署名方式では、非負整数のパラメタであるＮ，ｑ，ｄｆ，ｄｇ，Ｎｏｒｍｂｏｕｎｄが存在する。以下に、これらのパラメタの意味を説明する。
【０００７】
（ｉ）パラメタＮ
ＮＴＲＵＳｉｇｎ署名方式は、多項式の演算により署名生成及び署名検証を行うデジタル署名方式である。パラメタＮは、ＮＴＲＵＳｉｇｎ署名方式で扱う多項式の次数を決める。
【０００８】
ＮＴＲＵＳｉｇｎ署名方式で扱う多項式は、パラメタＮに対し、Ｎ−１次以下の整数係数多項式である。Ｎ＝５のとき、例えば、多項式Ｘ＾４＋Ｘ＾３＋１である。なお、本明細書において、「Ｘ＾ａ」は、Ｘのａ乗を意味することとする。また、ＮＴＲＵＳｉｇｎ署名方式において用いられる公開鍵ｈ及び署名ｓは、いずれも、Ｎ−１次以下の多項式として表現される。また、秘密鍵は、４つのＮ−１次以下の多項式対（ｆ，ｇ，Ｆ，Ｇ）である。すなわち、ｆ，ｇ，Ｆ，Ｇは、いずれもＮ−１次以下の多項式である。なお、以下では、４つ組（ｆ，ｇ，Ｆ，Ｇ）を２つの対（ｆ，ｇ），（Ｆ，Ｇ）のさらなる対と捉えて、｛（ｆ，ｇ），（Ｆ，Ｇ）｝と表記する場合もある。
【０００９】
次に、ＮＴＲＵＳｉｇｎ署名方式における多項式演算では、パラメタＮに対し、Ｘ＾Ｎ＝１という関係式を用いて、演算結果が常にＮ−１次以下の多項式になるように演算される。例えば、Ｎ＝５の場合、多項式Ｘ＾４＋Ｘ＾２＋１と多項式Ｘ＾３＋Ｘの積は、多項式と多項式の積を「×」、整数と多項式の積（あるいは整数と整数の積）を「・」を用いて表現すると、Ｘ＾５＝１という関係があるので、
（Ｘ＾４＋Ｘ＾２＋１）×（Ｘ＾３＋Ｘ）
＝Ｘ＾７＋２・Ｘ＾５＋２・Ｘ＾３＋Ｘ
＝Ｘ＾２・１＋２・１＋２・Ｘ＾３＋Ｘ
＝２・Ｘ＾３＋Ｘ＾２＋Ｘ＋２
のように、常にＮ−１次以下の多項式になるように演算される。
【００１０】
なお、ＮＴＲＵＳｉｇｎ署名方式では、Ｎ−１次の多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）を、ベクトル（ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１））と同一視して表現する。ここで、ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１）は、それぞれ、多項式ａの係数であり、整数である。
【００１１】
（ｉｉ）パラメタｑ
ＮＴＲＵＳｉｇｎ署名方式では、値「２」以上の整数であるパラメタｑを用いる。ＮＴＲＵＳｉｇｎ署名方式で出現する多項式の係数については、ｑを法とした剰余を取るように演算する。
【００１２】
（ｉｉｉ）パラメタｄｆ，ｄｇ
ＮＴＲＵＳｉｇｎ署名方式で扱う秘密鍵の一部である多項式ｆ及び多項式ｇの選び方は、それぞれパラメタｄｆ，ｄｇにより決まる。ここで、多項式ｇは、公開鍵である多項式ｈを生成するときに、多項式ｆと共に用いられる。
【００１３】
多項式ｆについては、そのＮ個の係数のうち、ｄｆ個の係数がそれぞれ値「１」であり、かつ他の係数がそれぞれ値「０」となるように選ばれる。すなわち、多項式ｆは、Ｎ−１次以下の多項式であり、０次（定数項）からＮ−１次まで、Ｎ個の係数を有する。このＮ個の係数のうち、ｄｆ個の係数が値「１」であり、かつ（Ｎ−ｄｆ）個の係数が値「０」となるように選ばれる。
【００１４】
同様に、多項式ｇは、Ｎ−１次以下の多項式であり、多項式ｇについては、そのＮ個の係数のうち、ｄｇ個の係数がそれぞれ値「１」であり、かつ他の係数がそれぞれ値「０」となるように選ばれる。
【００１５】
（ｉｖ）パラメタＮｏｒｍｂｏｕｎｄ
ＮＴＲＵＳｉｇｎ署名方式では、後述するが、「署名ｓから作られる２・Ｎ次元のベクトル」と「メッセージデータに対するハッシュ値である２・Ｎ次元のベクトル」との距離を計算し、計算された距離により、正しい署名であるかを判定する。Ｎｏｒｍｂｏｕｎｄは、この判定の際に使用されるしきい値である。すなわち、計算された距離がＮｏｒｍｂｏｕｎｄ未満（距離＜Ｎｏｒｍｂｏｕｎｄ）であれば、正しい署名として受理する。一方、計算された距離がＮｏｒｍｂｏｕｎｄ以上（距離≧Ｎｏｒｍｂｏｕｎｄ）であれば、正しくない署名とし拒否する。
【００１６】
非特許文献４には、ＮＴＲＵＳｉｇｎ署名方式のパラメタの例として、（Ｎ，ｑ，ｄｆ，ｄｇ，Ｎｏｒｍｂｏｕｎｄ）＝（２５１，１２８，７３，７１，３１０）が挙げられている。
（２）メッセージデータのハッシュ値、ノルム及びベクトル間の距離
ＮＴＲＵＳｉｇｎ署名方式では、メッセージデータのハッシュ値に対する署名を作成する。メッセージデータのハッシュ値は、Ｎ次の多項式の対であり、２・Ｎ次元のベクトルとして表現される。メッセージデータからハッシュ値を求めるハッシュ関数については、非特許文献１に詳しく説明されている。
【００１７】
ＮＴＲＵＳｉｇｎ署名方式では、署名検証にベクトルの距離を用いる。以下にその定義を示す。
多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）のノルム｜｜ａ｜｜を以下のように定義する。
【００１８】
｜｜ａ｜｜＝ｓｑｒｔ（（ａ＿０−μ）＾２＋（ａ＿１−μ）＾２＋…＋（ａ＿（Ｎ−１）−μ）＾２）
μ＝（１／Ｎ）・（ａ＿０＋ａ＿１＋ａ＿２＋…＋ａ＿（Ｎ−１））
ここで、ｓｑｒｔ（ｘ）はｘの平方根を示す。
【００１９】
また、多項式ａ，ｂの対（ａ，ｂ）のノルム｜｜（ａ，ｂ）｜｜を以下のように定義する。
｜｜（ａ，ｂ）｜｜＝ｓｑｒｔ（｜｜ａ｜｜＾２＋｜｜ｂ｜｜＾２）
多項式ａ，ｂの対（ａ，ｂ）とｃ，ｄの対（ｃ，ｄ）との距離は、｜｜（ｃ−ａ，ｄ−ｂ）｜｜で定義される。
（３）ＮＴＲＵＳｉｇｎ署名方式の鍵生成
ＮＴＲＵＳｉｇｎ署名方式では、上述したように、パラメタｄｆ，ｄｇを用いてランダムに多項式ｆ，多項式ｇを生成する。そして非特許文献４に記載の通り、Ｆｑ×ｆ＝１（ｍｏｄ  ｑ）となる多項式Ｆｑを用いて、
ｈ＝Ｆｑ×ｇ（ｍｏｄ  ｑ）
により、多項式ｈを生成する。さらに、以下の式を満たすようなノルムが小さい多項式Ｆ，Ｇを求める。
【００２０】
ｆ×Ｇ−ｇ×Ｆ＝ｑ
ここで、｛（ｆ，ｇ），（Ｆ，Ｇ）｝は、秘密鍵であり、ｈは、公開鍵である。秘密鍵は、署名を生成するための鍵であり、署名生成鍵とも呼ばれる。また、公開鍵は、署名を検証するための鍵であり、署名検証鍵とも呼ばれる。
【００２１】
ここで、ｘ＝ｙ（ｍｏｄ  ｑ）においては、次のような演算を行う。つまり、ｉ（ｉ＝０、１、２、・・・、Ｎ−１）について、多項式ｙの第ｉ次の係数を、剰余が０からｑ−１の範囲に収まるように、法ｑで割り、剰余を求め、求められた剰余を、多項式ｘの第ｉ次の係数とする。すなわち、多項式ｙの各係数を、０から（ｑ−１）の範囲に収まるようにｍｏｄ  ｑ演算し、得られた多項式を、多項式ｘとする。
（４）ＮＴＲＵＳｉｇｎ署名方式の署名生成
ＮＴＲＵＳｉｇｎ署名方式の署名生成においては、送信すべきメッセージデータのハッシュ値ベクトルを算出し、その最近傍格子点を署名ベクトルとする。Ｌｓｅｃ座標系での係数を整数に丸めることにより、容易に最近傍格子点が得られる。
【００２２】
以下に、ＮＴＲＵＳｉｇｎ署名方式の署名生成の詳細について説明する。
ＮＴＲＵＳｉｇｎ署名方式の署名生成では、以下に示すようにして、署名対象であるメッセージデータｍの署名ｓを計算する。
【００２３】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトル（ｍ１，ｍ２）（ｍ１及びｍ２は、それぞれ、Ｎ次多項式）を計算する。
次に、この２・Ｎ次元のベクトル（ｍ１，ｍ２）と秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝とを用いて、以下の式を満たす多項式ａ，ｂ，Ａ，Ｂを計算する。
【００２４】
Ｇ×ｍ１−Ｆ×ｍ２＝Ａ＋ｑ×Ｂ
−ｇ×ｍ１＋ｆ×ｍ２＝ａ＋ｑ×ｂ
ここで、Ａ，ａの係数は、〈−ｑ／２〉＋１から〈ｑ／２〉の範囲に収まるように法ｑで割ったときの剰余である。すなわち、法ｑで割ったときの剰余が〈ｑ／２〉からｑ−１である場合は、ｑだけ減算して、上記範囲に収まるよう調整する。ここで、〈ｘ〉は、ｘ以下の数の中で最も大きい数を示す。例えば、〈−１／２〉＝−１である。
【００２５】
次に、以下の式より、ｓ，ｔを計算し、ｓを署名として出力する。
ｓ＝ｆ×Ｂ＋Ｆ×ｂ  （ｍｏｄ  ｑ）
ｔ＝ｇ×Ｂ＋Ｇ×ｂ  （ｍｏｄ  ｑ）
（５）ＮＴＲＵＳｉｇｎ署名方式の署名検証
ＮＴＲＵＳｉｇｎ署名方式の署名検証では、以下に示すようにして、署名ｓが署名対象であるメッセージデータｍに対して正しいかどうかを検証する。
【００２６】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトル（ｍ１，ｍ２）を計算する。
次に、公開鍵ｈを用いて、以下の式より、多項式ｔを計算する。
【００２７】
ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）
さらに、２・Ｎ次元ベクトル（ｓ，ｔ）と２・Ｎ次元ベクトル（ｍ１，ｍ２）との距離を求め、Ｎｏｒｍｂｏｕｎｄ未満であるかをチェックする。Ｎｏｒｍｂｏｕｎｄ未満であれば、署名ｓは正しいと判定して署名ｓを受理する。Ｎｏｒｍｂｏｕｎｄ以上であれば、署名ｓは不正と判定して署名ｓを拒否する。
【００２８】
このように、ＮＴＲＵＳｉｇｎ署名方式の署名検証では、署名ベクトルがハッシュ値ベクトルに十分近ければ、正しい署名と決定する。
＜安全性のベースとしての格子の問題＞
ＮＴＲＵＳｉｇｎ署名方式は、格子の問題を安全性のベースとしている。以下では、それについて説明する。
【００２９】
ＮＴＲＵＳｉｇｎ署名方式では、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝から得られる
（ｆ×α，ｇ×α）＋（Ｆ×β，Ｇ×β）
の２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える。ここで、α，βは任意の多項式である。そのとき、秘密鍵における（ｆ，ｇ），（Ｆ，Ｇ）を格子の基底（ベクトル）と呼ぶ。図２０（ａ）には、この２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。
【００３０】
一方、公開鍵ｈと「１」とからなる（１，ｈ），「０」とｑとからなる（０，ｑ）を基底としたときの
（１×α’，ｈ×α’）＋（０，ｑ×β’）
の２・Ｎ次元ベクトル全体も格子（格子Ｌｐｕｂ）として捉える。ここで、α’，β’は任意の多項式である。図２０（ｂ）には、この２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。
【００３１】
署名検証では、署名ベクトルである２・Ｎ次元ベクトル（ｓ，ｔ）８２２と、メッセージデータから得られたハッシュ値ベクトルである２・Ｎ次元ベクトル（ｍ１，ｍ２）８２１との距離を求め、Ｎｏｒｍｂｏｕｎｄ未満であるかをチェックしている。言い換えると、図２０（ｂ）に示すように、２・Ｎ次元ベクトル（ｓ，ｔ）８２２を中心とする半径Ｎｏｒｍｂｏｕｎｄの超球８２３内に、２・Ｎ次元ベクトル（ｍ１，ｍ２）８２１が存在しているかどうかをチェックしている。超球８２３内に存在する場合には、署名検証に成功したと決定する。超球８２３内に存在しない場合には、署名検証に失敗したと決定する。
【００３２】
ここで、格子Ｌｓｅｃと格子Ｌｐｕｂは、同じベクトル全体を示している。しかし、格子Ｌｓｅｃを構成するための基底ベクトル（秘密鍵基底ベクトルと呼ぶ）のノルムは、格子Ｌｐｕｂを構成するための基底ベクトル（公開鍵基底ベクトルと呼ぶ）のノルムより、非常に小さい。一般に大きいノルムを持つ基底ベクトルから、最も小さいノルムを持つ基底ベクトルを求める問題（最小基底ベクトル問題と呼ぶ）は、困難である。したがって、公開鍵基底ベクトルから秘密鍵基底ベクトルを求めることも困難であり、これが鍵に対する安全性のベースとなる。このようなベースにより、秘密鍵から公開鍵を取得することは、困難であると考えられている。
【００３３】
図２０（ａ）に示すように、ＮＴＲＵＳｉｇｎ署名方式の署名生成において、メッセージデータのハッシュ値ベクトル８０１  Ｈ（ｍ）＝（ｍ１，ｍ２）に近い格子点のベクトル（最近傍格子点）を、署名ベクトル８００（ｓ，ｔ）としている。このとき、秘密鍵基底８０２（ｆ，ｇ）及び秘密鍵基底８０３（Ｆ，Ｇ）を用いて、その基底に射影して距離が近いものを計算することで、最も近い格子点のベクトルを求めている。
【００３４】
このように、ＮＴＲＵＳｉｇｎ署名方式では、署名ベクトル（ｓ，ｔ）は、メッセージデータのハッシュ値ベクトル（ｍ１，ｍ２）に最も近い格子点のベクトルとなっている。
一方、図２０（ｂ）に示すように、Ｌｐｕｂ座標系の公開鍵基底ベクトル８１２（１，ｈ），公開鍵基底ベクトル８１１（０，ｑ）では、基底ベクトルのノルムが大きすぎるため、距離が近いものを計算することが困難になる。
【００３５】
一般に、距離が最も近い格子ベクトルを計算する問題を、格子の最近傍問題と呼び、ＮＴＲＵＳｉｇｎ署名方式の署名に対する安全性は、この格子の最近傍問題をベースとしている。
【００３６】
この他に、ＮＴＲＵＳｉｇｎ署名方式のように、鍵に対しては格子の最小基底ベクトル問題、署名に対しては格子の最近傍問題を安全性のベースとする署名方式として、ＧＧＨ署名方式が知られている（非特許文献６参照）。
【先行技術文献】
【特許文献】
【００３７】
【特許文献１】特表２０００−５１６７３３、“公開鍵暗号システム方法および装置”
【特許文献２】ＷＯ２００３０５０９９８、“Ｓｉｇｎｉｎｇ  ａｎｄ  ｖｅｒｉｆｙｉｎｇ  ｄｉｇｉｔａｌ  ｄｏｃｕｍｅｎｔ  ｕｓｉｎｇ  ＮＴＲＵ  ｏｒ  ｃｏｎｖｏｌｕｔｉｏｎ  ｍｏｄｕｌａｒ  ｌａｔｔｉｃ  ｖｅｃｔｏｒ  ｃｒｙｐｏｔｇｒａｐｈｉｃ  ｓｙｓｔｅｍ”
【非特許文献】
【００３８】
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｊ．Ｐｉｐｈｅｒ，  ａｎｄ  Ｊ．Ｈ．  Ｓｉｌｖｅｒｍａｎ，  “ＮＴＲＵ：  Ａ  ｒｉｎｇ  ｂａｓｅｄ  ｐｕｂｌｉｃ  ｋｅｙ  ｃｒｙｐｔｏｓｙｓｔｅｍ”，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  １４２３，  ｐｐ．２６７−２８８，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  １９９８．
【非特許文献３】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｊ．Ｐｉｐｈｅｒ  ａｎｄ  Ｊ．Ｓｉｌｖｅｒｍａｎ，  “ＮＳＳ：  Ａｎ  ＮＴＲＵ  Ｌａｔｔｉｃｅ−Ｂａｓｅｄ  Ｓｉｇｎａｔｕｒｅ  Ｓｃｈｅｍｅ，”  Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｐｌｏｇｙ−Ｅｕｒｏｃｒｙｐｔ  ’０１，  ＬＮＣＳ，  Ｖｏｌ．２０４５，  ｐｐ．１２３−１３７，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  ２００１
【非特許文献４】Ｊ．Ｈｏｆｆｓｔｅｉｎ，  Ｎ．Ｇｒａｈａｍ，  Ｊ．Ｐｉｐｈｅｒ，  Ｊ．Ｓｉｌｖｅｒｍａｎ  ａｎｄ  Ｗ．Ｗｈｙｔｅ，  “ＮＴＲＵＳｉｇｎ：  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅｓ  Ｕｓｉｎｇ  ｔｈｅ  ＮＴＲＵ  Ｌａｔｔｉｃｅ，”  ＣＴ−ＲＳＡ’０３，  ＬＮＣＳ，  Ｖｏｌ．２６１２，  ｐｐ．１２２−１４０，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  ２００３
【非特許文献５】“Ｅｆｆｉｃｉｅｎｔ  Ｅｍｂｅｄｄｅｄ  Ｓｅｃｕｒｉｔｙ  Ｓｔａｎｄａｒｄｓ  （ＥＥＳＳ）  ＥＥＳＳ  ＃１：  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  Ａｓｐｅｃｔｓ  ｏｆ  ＮＴＲＵＥｎｃｒｙｐｔ  ａｎｄ  ＮＴＲＵＳｉｇｎ”，  Ｖｅｒ２．０，  Ｊｕｎｅ  ２０ｔｈ，  ２００３
【非特許文献６】Ｏ．Ｇｏｌｄｒｅｉｃｈ，  Ｓ．Ｇｏｌｄｗａｓｓｅｒ  ａｎｄ  Ｓ．Ｈａｌｅｖｉ  “Ｐｕｂｌｉｃ−ｋｅｙ  ｃｒｙｐｔｏｇｒａｐｈｙ  ｆｒｏｍ  ｌａｔｔｉｃｅ  ｒｅｄｕｃｔｉｏｎ  ｐｒｏｂｌｅｍｓ，”  Ｉｎ  Ｐｒｏｃ．  ＣＲＹＰＴＯ  ’９７，  ＬＮＣＳ，  Ｖｏｌ．１２９４，  ｐｐ．１１２−１３１，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，  １９９７
【発明の概要】
【発明が解決しようとする課題】
【００３９】
上述したＮＴＲＵＳｉｇｎ署名方式に対しては、転写攻撃（Ｔｒａｎｓｃｒｉｐｔ  ａｔｔａｃｋ）と呼ばれる攻撃がある。転写攻撃は、複数の署名文（メッセージデータと署名の対）から秘密鍵を求める攻撃である。以下に、転写攻撃について、簡単に説明する（詳細は、非特許文献４を参照）。
【００４０】
転写攻撃は、複数の署名ｓと、メッセージデータのハッシュ値（ｍ１，ｍ２）の一部ｍ１との差分ｍ１−ｓが
ｍ１−ｓ＝ｅ１×ｆ＋ｅ２×Ｆ
（ここで、ｅ１，ｅ２は、それぞれ、その係数が−１／２から１／２の範囲に入る多項式である）
となることを利用しており、差分ｍ１−ｓの２次モーメント及び４次モーメントの平均値を算出することにより、秘密鍵の一部であるｆ，Ｆを求める。
【００４１】
ここで、多項式ａの２次モーメントａ〜２とは、
ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−２）・Ｘ＾（Ｎ−２）＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）と
ａの相反ａ＊＝ａ＿０＋ａ＿（Ｎ−１）・Ｘ＋ａ＿（Ｎ−２）・Ｘ＾２＋…＋ａ＿２・Ｘ＾（Ｎ−２）＋ａ＿１・Ｘ＾（Ｎ−１）と
の積ａ〜２＝ａ×ａ＊である。
【００４２】
また、４次モーメントａ〜４は、ａ〜２の２乗、すなわち、ａ〜４＝ａ〜２×ａ〜２である。
（ｍ１−ｓの２次モーメント）＝（ｅ１×ｆ＋ｅ２×Ｆ）×（ｅ１＊×ｆ＊＋ｅ２＊×Ｆ＊）＝ｅ１〜×ｆ〜＋ｅ２〜×Ｆ〜＋ｅ１×ｆ×ｅ２＊×Ｆ＊＋ｅ２×Ｆ×ｅ１＊×ｆ＊  
署名文の個数が増大すると、ｍ１−ｓの２次モーメントの平均に含まれるｅ１〜，ｅ２〜はある一定値ｋ１，ｋ２に収束し、上記の式のｅ１×ｆ×ｅ２＊×Ｆ＊とｅ２×Ｆ×ｅ１＊×ｆ＊は０に近づく。したがって、署名文の個数が大きい場合、ｍ１−ｓの２次モーメントの平均は、ｋ１×ｆ〜＋ｋ２×Ｆ〜にほぼ等しくなる。さらに４次モーメントの平均でも、同様にｆ及びＦに関連する情報を得られ、両方の情報からｆを求めることが可能になる。
【００４３】
非特許文献４によると、２次モーメント及び４次モーメントの平均から秘密鍵に関する情報が得られるために必要な署名文の個数はそれぞれ１０＾４、１０＾８である。したがって、ＮＴＲＵＳｉｇｎ署名方式の転写攻撃を成功させるためには、１０＾８個以上の署名文が必要と考えられている。なお、転写攻撃は、格子の問題を安全性のベースとする他の署名方式（例えば、ＧＧＨ署名方式）でも同様に起こりうる。
【００４４】
上記の問題を解決するために、本発明は、上述した転写攻撃に対抗することができる署名及び検証方法、署名生成装置、署名検証装置、署名生成方法、並びに、署名生成のためのコンピュータプログラムを記録している記録媒体を提供する。
【課題を解決するための手段】
【００４５】
上記目的を達成するために、本発明の一実施態様である方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップとを含むことを特徴とする。
【発明の効果】
【００４６】
この方法によると、転写攻撃をする者が、送信される対象データ及び署名データの対を収集して解析しても、署名データは、第１サイズより小さい秘密の攪乱ベクトルを用いて、前記対象データを変換して生成された変換ベクトルに対して生成されているので、転写攻撃をする者は、署名の際に用いた秘密鍵を求めることが計算量上困難であるという優れた効果を奏する。また、署名データの検証において、前記対象データによるベクトルと前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証し、第２サイズ以下であるとき、検証が成功したとみなすので、署名データの検証を行うことができる。
【００４７】
この署名及び検証方法によると、転写攻撃を防ぐことができ、その価値は大きい。
【図面の簡単な説明】
【００４８】
【図１】本発明に係る１個の実施の形態としてのデジタル署名システム１０の構成を示すブロック図である。
【図２】一様な分布の一例を示す図である。
【図３】分布テーブル４１０のデータ構造を示す。
【図４】一様でない分布の一例を示す図である。
【図５】分布テーブル４５０のデータ構造を示す。
【図６】改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理を示す図である。
【図７】改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理を示す図である。
【図８】署名生成装置１００の構成を示すブロック図である。
【図９】署名生成装置１００が有する公開鍵証明書格納部１０３、秘密鍵格納部１０２及びシステムパラメタ格納部１０６に記録されているデータを示す。
【図１０】署名生成部１０４の構成を示すブロック図である。
【図１１】署名検証装置２００の構成を示すブロック図である。
【図１２】署名検証装置２００が有するＣＡ公開鍵格納部２０２、署名データセット格納部２０３及びシステムパラメタ格納部２０５に記録されているデータを示す。
【図１３】署名検証部２０４の構成を示すブロック図である。
【図１４】鍵生成装置３００の構成を示すブロック図である。
【図１５】鍵生成装置３００が有する証明書生成鍵格納部３０４及びシステムパラメタ格納部３０６に記録されているデータを示す。
【図１６】デジタル署名システム１０の動作を示すフローチャートである。
【図１７】署名生成装置１００の動作を示すフローチャートである。
【図１８】署名検証装置２００における署名検証の動作を示すフローチャートである。
【図１９】鍵生成装置１３００の動作を示すフローチャートである。
【図２０】従来のＮＴＲＵＳｉｇｎ署名方式を示す図である。（ａ）は、２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。（ｂ）は、２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。
【図２１】分布テーブル６１０のデータ構造を示す。
【図２２】分布テーブル６５０のデータ構造を示す。
【発明を実施するための形態】
【００４９】
請求項１に記載の態様である方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップとを含むことを特徴とする。
【００５０】
また、請求項２に記載の態様である署名生成装置は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置であって、対象データを取得する取得手段と、秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、前記対象データと生成した署名データとを出力する出力手段とを備えることを特徴とする。
【００５１】
この構成によると、転写攻撃をする者が、送信される対象データ及び署名データの対を収集して解析しても、署名データは、第１サイズより小さい秘密の攪乱ベクトルを用いて、前記対象データを変換して生成された変換ベクトルに対して生成されているので、転写攻撃をする者は、署名の際に用いた秘密鍵を求めることが計算量上困難であるという優れた効果を奏する。
【００５２】
また、請求項３に記載の態様である署名生成装置において、前記秘密記憶手段は、さらに、前記第１サイズより小さい複数の候補ベクトルが属する範囲を示す分布を記憶しており、前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して前記攪乱ベクトルとすることを特徴とする。
【００５３】
この構成によると、署名生成の都度、複数の候補ベクトルから１の候補ベクトルが選択されて攪乱ベクトルとされるので、用いられる攪乱ベクトルの取り得る範囲が広がり、攻撃をする者に対して、秘密鍵を求めることをさらに困難にすることができる。
【００５４】
また、請求項４に記載の態様である署名生成装置において、前記秘密記憶手段は、耐タンパ性を有し、前記秘密鍵及び前記分布は、外部から知られないように、秘密に保護されていることを特徴とする。
【００５５】
この構成によると、選択される攪乱ベクトルが秘密に保持されているので、秘密鍵を求めることを困難にすることができる。
また、請求項５に記載の態様である署名生成装置において、前記秘密記憶手段に記憶されている前記分布により示される範囲において、複数の候補ベクトルは、選択される確率が一様でないように、配置されており、前記データ変換手段は、前記確率に従って、１の前記候補データを選択して前記攪乱ベクトルとするを特徴とする。
【００５６】
この構成によると、署名生成の都度、用いられる攪乱ベクトルの取り得る範囲が広がり、攻撃をする者に対して、秘密鍵を求めることをさらに困難にすることができる。
また、請求項６に記載の態様である署名生成装置において、前記分布により示される範囲は、複数の領域を有し、各領域に対して当該領域の選択確率が予め定められ、前記複数の領域のそれぞれにおいて、複数の候補ベクトルが配置され、前記データ変換手段は、前記選択確率に基づいて１の領域を選択し、選択した前記領域から１の前記候補ベクトルを選択して前記攪乱ベクトルとするを特徴とする。
【００５７】
また、請求項７に記載の態様である署名生成装置において、前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して、前記攪乱ベクトルとするベクトル生成部と、前記対象データに基づくベクトルに、前記攪乱ベクトルを加えることにより、前記変換ベクトルを生成する加算部とを含むことを特徴とする。
【００５８】
また、請求項８に記載の態様である署名生成装置において、前記ベクトル生成部は、前記分布に基づいて予め選択した複数の候補ベクトルから、ランダムに選択することにより、前記攪乱ベクトルを生成することを特徴とする。
【００５９】
また、請求項９に記載の態様である署名生成装置において、前記分布は、前記第１サイズを半径とする超球内に含まれることを特徴とする。
また、請求項１０に記載の態様である署名生成装置は、さらに、前記第１サイズより大きい第２サイズを記憶している公開記憶手段を含み、前記データ変換手段は、さらに、前記対象データによるベクトルと、前記変換ベクトルとの距離を算出し、算出した距離が前記第２サイズ以下でない場合に、第１サイズより小さい秘密の別の攪乱ベクトルを用いて、取得した対象データを変換して、別の変換ベクトルを生成するを特徴とする。
【００６０】
また、請求項１１に記載の態様である署名生成装置において、前記秘密鍵ベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、前記公開鍵ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られることを特徴とする。
【００６１】
また、請求項１２に記載の態様である署名検証装置は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名生成装置により、第１サイズより小さい秘密の攪乱ベクトルを用いて、対象データから変換により前記変換ベクトルが生成され、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点である署名ベクトルの一部として生成された署名データを検証する署名検証装置であって、前記対象データ及び署名データを取得する取得手段と、公開鍵ベクトルを記憶している記憶手段と、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段とを備えることを特徴とする。
【００６２】
この構成によると、署名データの検証において、前記対象データによるベクトルと前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証し、第２サイズ以下であるとき、検証が成功したとみなすので、署名データの検証を行うことができる。
【００６３】
また、請求項１３に記載の態様である署名生成方法は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置において用いられる署名生成方法であって、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、前記対象データと生成した署名データとを出力する出力ステップとを含むことを特徴とする。
【００６４】
また、請求項１４に記載の態様である記録媒体は、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成するコンピュータにおいて用いられる署名生成用のコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、前記コンピュータに、対象データを取得する取得ステップと、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、前記対象データと生成した署名データとを出力する出力ステップとを実行させる前記コンピュータプログラムを記録している。
【００６５】
また、請求項１５に記載の態様であるシステムは、データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名する署名生成装置及び検証する署名検証装置から構成されるシステムであって、前記署名生成装置は、対象データを取得する取得手段と、秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、前記対象データと生成した署名データとを出力する出力手段とを備え、前記署名検証装置は、  前記対象データ及び署名データを取得する取得手段と、公開鍵ベクトルを記憶している記憶手段と、公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段とを備えることを特徴とする。
〔実施の形態１〕
本発明に係る１の実施の形態としてのデジタル署名システム１０について説明する。
【００６６】
デジタル署名システム１０は、図１に示すように、メッセージ生成装置３０、署名生成装置１００、署名検証装置２００、鍵生成装置３００及びメッセージ受信装置４０から構成され、署名生成装置１００と署名検証装置２００とは、インターネットを代表とする通信路２０を介して接続され、署名生成装置１００と鍵生成装置３００とは、安全性が保証された通信路により接続されることにより、又は他の安全性が保証された手段により、相互に情報が伝達される。
【００６７】
デジタル署名システム１０においては、メッセージ生成装置３０は、送信すべきメッセージデータｍ（署名の対象データとも呼ぶ。）を生成し、生成したメッセージデータｍを署名生成装置１００へ出力する。次に、ＮＴＲＵＳｉｇｎ署名方式を改良した改良ＮＴＲＵＳｉｇｎ署名方式を用いて、鍵生成装置３００は、鍵生成を行い、署名生成装置１００は、メッセージデータｍに対する署名データＳＤを生成し、通信路２０を介して署名検証装置２００にメッセージデータｍ及び署名データＳＤを含む署名データセットＳＳを送信し、署名検証装置２００は、署名データセットＳＳを受信し、受信した署名データセットＳＳを検証し、検証結果及びメッセージデータｍをメッセージ受信装置４０へ出力する。メッセージ受信装置４０は、検証結果及びメッセージデータｍを受け取り、受信した検証結果により、受信したメッセージデータｍの採否を決定する。
１．改良ＮＴＲＵＳｉｇｎ署名方式
改良ＮＴＲＵＳｉｇｎ署名方式は、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠としている。最小ベクトル問題(Shortest Vector Problem)は、１の基底ベクトルからその格子に含まれる「最小のベクトル」を求める問題である。近似最小ベクトル問題(Approximate Shortest Vector Problem)は、近似的に最小のベクトル(最小ベクトルではないが、それに近い大きさのベクトル)を求める問題である。
（１）改良ＮＴＲＵＳｉｇｎ署名方式のシステムパラメタ
改良ＮＴＲＵＳｉｇｎ署名方式においては、従来のＮＴＲＵＳｉｇｎ署名方式と同じ非負整数のパラメタＮ，ｑ，ｄｆ，ｄｇの他に距離Ｌ及びＬ’が存在する。従来のＮＴＲＵＳｉｇｎ署名方式では、検証時にＮｏｒｍｂｏｕｎｄを使用する。これに対して、改良ＮＴＲＵＳｉｇｎ署名方式では、後で説明するように、検証時には、Ｎｏｒｍｂｏｕｎｄの代わりに、距離Ｌ’を使用する。
【００６８】
以下に、これらのパラメタの意味を説明する。
（ｉ）パラメタＮ
改良ＮＴＲＵＳｉｇｎ署名方式は、多項式の演算により署名生成及び署名検証を行うデジタル署名方式である。改良ＮＴＲＵＳｉｇｎ署名方式で扱う多項式の次数は、パラメタＮにより決まる。
【００６９】
改良ＮＴＲＵＳｉｇｎ署名方式で扱う多項式は、パラメタＮに対し、Ｎ−１次以下の整数係数多項式であり、Ｎ＝５のとき、例えば、多項式Ｘ＾４＋Ｘ＾３＋１である。
また、公開鍵ｈ、署名ｓは、いずれも、Ｎ−１次以下の多項式として表現される。また、秘密鍵は、４つのＮ−１次以下の多項式対（ｆ，ｇ，Ｆ，Ｇ）である。すなわち、ｆ，ｇ，Ｆ，Ｇは、いずれもＮ−１次以下の多項式である。なお、以下では、４つ組（ｆ，ｇ，Ｆ，Ｇ）を２つの対（ｆ，ｇ），（Ｆ，Ｇ）のさらなる対と捉えて、｛（ｆ，ｇ），（Ｆ，Ｇ）｝と表記する場合もある。
【００７０】
このように、秘密鍵であるベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られる。また、公開鍵であるベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られる。
【００７１】
さらに、改良ＮＴＲＵＳｉｇｎ署名方式における多項式演算は、パラメタＮに対し、Ｘ＾Ｎ＝１という関係式を用いて、演算結果が常にＮ−１次以下の多項式になるように演算される。
【００７２】
なお、改良ＮＴＲＵＳｉｇｎ署名方式では、Ｎ−１次の多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）を、ベクトル（ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１））と同一視して表現する。ａ＿０，ａ＿１，ａ＿２，…，ａ＿（Ｎ−１）は、それぞれ、多項式ａの各項の係数であり、整数である。
【００７３】
（ｉｉ）パラメタｑ
改良ＮＴＲＵＳｉｇｎ署名方式では、２以上の整数であるパラメタｑを用いる。改良ＮＴＲＵＳｉｇｎ署名方式で出現する多項式の各係数は、ｑを法とした剰余を取るように演算する。
【００７４】
（ｉｉｉ）パラメタｄｆ，ｄｇ
改良ＮＴＲＵＳｉｇｎ署名方式で扱う秘密鍵の一部である多項式ｆ及び多項式ｇの選び方は、それぞれパラメタｄｆ，ｄｇにより決まる。多項式ｇは、公開鍵である多項式ｈを生成するときに、多項式ｆと共に用いられる。
【００７５】
多項式ｆは、Ｎ個の係数のうち、ｄｆ個の係数が「１」であり、かつ他の係数が「０」となるように選ばれる。すなわち、多項式ｆは、Ｎ−１次以下の多項式であり、０次（定数項）からＮ−１次までのＮ個の項について、それぞれ、１個の係数が存在し、合計でＮ個の係数があるが、これらのＮ個の係数のうち、ｄｆ個の係数が「１」であり、かつ（Ｎ−ｄｆ）個の係数が「０」となるように選ばれる。
【００７６】
また、同様に、多項式ｇは、ｄｇ個の係数が「１」であり、かつ他の係数が「０」となるように選ばれる。
（ｉｖ）パラメタＬ（距離）
パラメタＬ（第１サイズとも呼ぶ。）は、２・Ｎ次元ベクトル空間における超球の半径である。以下において、改良ＮＴＲＵＳｉｇｎ署名方式において加算されるランダムなベクトルの選択と、超球及び分布ηとの関係について説明する。
【００７７】
改良ＮＴＲＵＳｉｇｎ署名方式では、後述するように、メッセージデータのハッシュ値である２・Ｎ次元のベクトル（ハッシュ値ベクトルと呼ぶ）に対し、ランダムなベクトル（攪乱ベクトルとも呼ぶ。）を加算して、変換ハッシュ値ベクトルを生成する。
【００７８】
分布ηは、半径Ｌの超球内に含まれるように設定され、ランダムなベクトルは、分布η内に存在する複数のベクトル（候補ベクトルとも呼ぶ。）から等確率でランダムに選択される。したがって、選択されたベクトルのノルムは、Ｌ以下である。
【００７９】
分布ηの一例を図２に示す。図２は、２・Ｎ次元ベクトル空間を、２次元の紙面上に、模式的に表現したものであり、中心４０６を有し、半径Ｌ（距離４０２）の超球４０１を表現している。超球４０１の内部に、分布４００が存在する。分布４００は、超球４０１内に完全に含まれている。分布４００内に存在する複数のベクトルから、例えば、ベクトル４０３がランダムに選択される。なお、ベクトル４０４が選択されることもあり、ベクトル４０５が選択されることもある。
【００８０】
分布４００のデータ構造を、図３の分布テーブル４１０に示す。
分布テーブル４１０は、２・Ｎ次元ベクトル空間において、分布４００が占める空間構造を定めるものであり、２・Ｎ個の限界値ペアを含んで構成されている。２・Ｎ個の限界値ペアは、それぞれ、２・Ｎ次元ベクトルの２・Ｎ個のエレメントに対応している。２・Ｎ個の限界値ペアは、第１グループ及び第２グループから構成され、第１グループは、Ｎ個の限界値ペアを含み、第２グループは、残りのＮ個の限界値ペアを含む。各限界値ペアは、下限値及び上限値を含む。
【００８１】
２・Ｎ次元ベクトル空間において、２・Ｎ次元ベクトルの２・Ｎ個のエレメントに対応して、各限界値ペアに含まれる下限値以上及び上限値以下の空間が、分布４００が占める空間である。この空間が、超球４０１の内部に含まれるように、各限界値ペアが設定されている。
【００８２】
分布テーブル４１０の第１グループに含まれる第０番目の限界値ペア内の下限値
V1_0_min４１１及び上限値V1_0_max４１２は、それぞれ、一例として、「３」及び「８」であり、第１グループに含まれる第Ｎ−１番目の限界値ペア内の下限値V1_(N-1)_min４１３及び上限値V1_(N-1)_max４１４は、それぞれ、一例として、「２」及び「５」である。また、分布テーブル４１０の第２グループに含まれる第０番目の限界値ペア内の下限値V2_0_min４１５及び上限値V2_0_max４１６は、それぞれ、一例として、「１」及び「６」であり、第２グループに含まれる第Ｎ−１番目の限界値ペア内の下限値V2_(N-1)_min４１７及び上限値V2_(N-1)_max４１８は、それぞれ、一例として、「４」及び「７」である。
【００８３】
分布テーブル４１０の２・Ｎ個の限界値ペアを用いて、各限界値ペアに含まれる下限値以上かつ上限値以下の値を、確率的に均等に、つまり、一様に、ランダムに選択する。こうして、２・Ｎ個のランダムな値Ｖ１＿０、Ｖ１＿１、Ｖ１＿２、・・・、Ｖ１＿（Ｎ−１）、Ｖ２＿０、Ｖ２＿１、Ｖ２＿２、・・・、Ｖ２＿（Ｎ−１）が選択され、選択された２・Ｎ個のランダムな値の組を上記のランダムに選択されたベクトルＶ＝（Ｖ１、Ｖ２）とする。
【００８４】
ここで、Ｖ１＝（Ｖ１＿０、Ｖ１＿１、Ｖ１＿２、・・・、Ｖ１＿（Ｎ−１））
Ｖ２＝（Ｖ２＿０、Ｖ２＿１、Ｖ２＿２、・・・、Ｖ２＿（Ｎ−１））
このように、図２は、原点から分布の範囲のいずれかの点に向かうベクトルを選択することを示しており、この分布の例では、分布の範囲で一様で（等確率で）ランダムにベクトルを選択する。
【００８５】
パラメタＬは、システムパラメタとして公開される。パラメタＬは、一例としてし、Ｌ＝２００である。
次に、分布ηの別の一例を図４に示す。図４は、図２と同様に、２・Ｎ次元ベクトル空間を、２次元の紙面上に、模式的に表現したものであり、中心４４１を有し、半径Ｌ（距離４４２）の超球４３１を表現している。超球４３１の内部に、分布４３２が存在する。分布４３２は、超球４３１内に完全に含まれている。
【００８６】
分布４３２は、図４に示すように、その範囲が３分割されており、部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）から構成されている。各部分領域に対して、当該部分領域を選択する確率が定められている。部分領域Ａ（４３３）を選択する確率は、１／６であり、部分領域Ｂ（４３４）を選択する確率は、１／２であり、部分領域Ｃ（４３５）を選択する確率は、１／３である。この分布４３２を用いる場合には、まず、部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）のいずれかをこれらの確率に依存して選択し、その後、選択した部分領域の範囲でランダムに候補ベクトルからベクトルを選択する。なお、これらの確率の合計は、「１」である。
【００８７】
１／６＋１／２＋１／３＝１
このように、分布４３２では、複数の候補ベクトルは、選択される確率が一様でないように、配置されている。
【００８８】
分布４３２のデータ構造を、図５の分布テーブル４５０に示す。
分布テーブル４５０は、２・Ｎ次元ベクトル空間において、分布４３２が占める空間構造を定めるものであり、部分テーブルと発生確率との組を複数個含んで構成されている。具体的には、分布テーブル４５０は、部分テーブル４５１と発生確率４５４との組と、部分テーブル４５２と発生確率４５５との組と、部分テーブル４５３と発生確率４５６との組とを含む。３個の部分テーブル４５１、４５２及び４５３は、それぞれ、図４の部分領域Ａ（４３３）、部分領域Ｂ（４３４）及び部分領域Ｃ（４３５）に対応している。各部分テーブルに対応する発生確率は、図４に示す分布４３２の部分領域を選択する確率である。各部分テーブル部は、図３に示す分布テーブル４１０と同様の構造を有しており、それぞれは、２・Ｎ個の限界値ペアを含んで構成されている。
【００８９】
分布テーブル４５０に含まれる３個の発生確率４５４、４５５及び４５６に依存して、一つの部分テーブルが選択され、選択された部分テーブルが示す範囲内で、ランダムにベクトルを選択する。
【００９０】
（ｖ）パラメタＬ’（距離）
改良ＮＴＲＵＳｉｇｎ署名方式では、後述するように、署名ｓから作られる２・Ｎ次元のベクトル（署名ベクトルと呼ぶ）と、ハッシュ値ベクトルとの距離を計算し、この距離により正しい署名であるかを判定する。パラメタＬ’（第２サイズ）は、この判定の際に使用するしきい値である。すなわち、計算された上記距離がＬ’以下であれば、正しい署名として受理し、Ｌ’より大きければ、正しくない署名として拒否する。
【００９１】
非特許文献４には、従来のＮＴＲＵＳｉｇｎ署名方式のパラメタの例として、（Ｎ，ｑ，ｄｆ，ｄｇ）＝（２５１，１２８，７３，７１）の例が挙げられている。
改良ＮＴＲＵＳｉｇｎ署名方式においても、同様のパラメタ例を使用してもよい。改良ＮＴＲＵＳｉｇｎ署名方式においては、距離Ｌの超球内のベクトルを選択したときに、ハッシュ値ベクトルと正しく生成した署名ベクトルとの距離がほとんどＬ’となるように調節する。
【００９２】
例えば、パラメタＬ，Ｌ’は、例えば、（Ｌ，Ｌ’）＝（２００，５００）である。上記の従来のＮＴＲＵＳｉｇｉｎ署名方式のパラメタの例では、Ｎｏｒｍｂｏｕｎｄが３００〜３１０であり、この場合にハッシュ値ベクトルと正しく生成した署名ベクトルの距離がほぼＮｏｒｍｂｏｕｎｄ以内になっている。
【００９３】
これに対して、改良ＮＴＲＵＳｉｇｎ署名方式では、変換ハッシュ値ベクトルと署名ベクトルとの距離がほぼＮｏｒｍｂｏｕｎｄ以内になっている。変換ハッシュ値ベクトルとハッシュ値ベクトルとの差は、ランダムベクトルであり、その距離がＬ以内であるため、Ｌ’をＮｏｒｍｂｏｕｎｄ＋Ｌ程度に設定すればよい。したがって、Ｌを２００とすると、Ｌ’を５００〜５１０に設定すればよい。このように、Ｌ’は、Ｌより大きくする。
（２）メッセージデータのハッシュ値、ノルム及びベクトル間の距離
改良ＮＴＲＵＳｉｇｎ署名方式においても、メッセージデータのハッシュ値に対する署名を作成する。メッセージデータのハッシュ値は、Ｎ次の多項式の対であり、２・Ｎ次元のベクトルと同一視される。ハッシュ関数については、非特許文献１に詳しく説明されている。
【００９４】
一例として、メッセージデータｍから、３５１４ビット（＝１７５７ビット×２＝７ビット×２５１×２）のハッシュ値が生成されるとする。ここで、Ｎ＝２５１とする。生成された３５１４ビットのハッシュ値を先頭から、７ビットずつに区切ると、合計で、２５１×２＝５０２個のビット列ができ、これらの５０２個ビット列を、Ｎ（＝２５１）次の多項式の対の各係数とする。
【００９５】
ここで、３５１４ビットのハッシュ値を（Bit1-1,Bit1-2,Bit1-3,・・・
Bit1-251),(Bit2-1,Bit2-2,Bit2-3,・・・Bit2-251)とし、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）（ｍ１及びｍ２はＮ次多項式）とすると、Ｎ次多項式ｍ１の係数は、（Bit1-1,Bit1-2,Bit1-3,・・・Bit1-251)であり、Ｎ次多項式ｍ２の係数は、(Bit2-1,Bit2-2,Bit2-3,・・・Bit2-251)である。ここで、Biti-j(i=1,2、j=1,2,3,・・・,251)は、7ビットの長さである。
【００９６】
改良ＮＴＲＵＳｉｇｎ署名方式においても、従来のＮＴＲＵＳｉｇｎ署名方式と同様のベクトルの距離を用いる。以下にその定義を示す。
多項式ａ＝ａ＿０＋ａ＿１・Ｘ＋ａ＿２・Ｘ＾２＋…＋ａ＿（Ｎ−１）・Ｘ＾（Ｎ−１）のノルム｜｜ａ｜｜を以下のように定義する。
【００９７】
｜｜ａ｜｜＝ｓｑｒｔ（（ａ＿０−μ）＾２＋（ａ＿１−μ）＾２＋…＋（ａ＿
（Ｎ−１）−μ）＾２）
μ＝（１／Ｎ）・（ａ＿０＋ａ＿１＋ａ＿２＋…＋ａ＿（Ｎ−１））
ここで、ｓｑｒｔ（ｘ）はｘの平方根を示す。
【００９８】
多項式ａ，ｂの対（ａ，ｂ）のノルム｜｜（ａ，ｂ）｜｜を以下のように定義する。
｜｜（ａ，ｂ）｜｜＝ｓｑｒｔ（｜｜ａ｜｜＾２＋｜｜ｂ｜｜＾２）
多項式ａ，ｂの対（ａ，ｂ）とｃ，ｄの対（ｃ，ｄ）との距離は、｜｜（ｃ−ａ，ｄ−ｂ）｜｜で定義される。
（３）改良ＮＴＲＵＳｉｇｎ署名方式の鍵生成
改良ＮＴＲＵＳｉｇｎ署名方式では、上述したように、パラメタｄｆ，ｄｇを用いてランダムに多項式ｆ，多項式ｇを生成する。そして非特許文献４に記載の通り、Ｆｑ×ｆ＝１（ｍｏｄ  ｑ）となる多項式Ｆｑを用いて、
ｈ＝Ｆｑ×ｇ（ｍｏｄ  ｑ）
により、多項式ｈを生成する。さらに、以下の式を満たすようなノルムが小さい多項式Ｆ，Ｇを求める。
【００９９】
ｆ×Ｇ−ｇ×Ｆ＝ｑ
ここで、ｘ＝ｙ（ｍｏｄ  ｑ）は、多項式ｙの第ｉ次（０≦ｉ≦Ｎ−１）の係数について、当該第ｉ次の係数を、剰余が０からｑ−１の範囲に収まるように法ｑで割ったときの剰余を、多項式ｘの第ｉ次の係数とする演算である。すなわち、ｙの各係数を、０から（ｑ−１）の範囲に収まるようにｍｏｄ  ｑ演算して得られる多項式を、多項式ｘとする演算である。
【０１００】
さらに、分布ηが距離Ｌの超球に含まれるように、当該分布ηを任意に設定する。設定する情報としては、分布の範囲、分布の範囲における選択する確率である。例えば、図２や図４に示すような分布を設定する。
【０１０１】
秘密鍵を｛（ｆ，ｇ），（Ｆ，Ｇ）｝と分布ηとし、公開鍵をｈとする。秘密鍵は、署名を生成するための鍵であり、署名生成鍵とも呼ばれる。また、公開鍵は、署名を検証するための鍵であり、署名検証鍵とも呼ばれる。
【０１０２】
分布ηは、秘密鍵に含めているため、当然であるが、秘密に保持しておく。なお、分布ηのすべてを秘密にしてもよいが、例えば、図２に示す分布４００の範囲を秘密にするが、分布４００に基づいて、ベクトルを一様ランダムに選択することを公開しておいてもよい。また、図４に示す分布４３２では、分布４３２の範囲及び各部分領域を選択する確率の両方を秘密としておいてもよいし、分布４３２の範囲を公開し、各部分領域を選択する確率を秘密とするとしてもよい。
（４）改良ＮＴＲＵＳｉｇｎ署名方式の署名生成
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成について、図６及び図１７を用いて、説明する。
【０１０３】
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成では、署名対象であるメッセージデータｍの署名ｓを計算する。図６は、署名生成の処理を示した図であり、２・Ｎ次元ベクトル全体を格子（格子Ｌｓｅｃ）として捉える場合におけるＬｓｅｃ座標系を図示している。図１７は、署名生成の処理の手順を示すフローチャートである。
【０１０４】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）（ｍ１及びｍ２はＮ次多項式）を計算する（ステップＳＧ１）。以下で、Ｈをハッシュ値ベクトルと呼ぶ。また、図６において、ハッシュ値ベクトルＨを参照符号５０１で示す。
【０１０５】
次に、分布の範囲でランダムにベクトルＶを選択し、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを計算する（ステップＳＧ２）。ここで、ｍ１’，ｍ２’をＨ’＝（ｍ１’，ｍ
２’）を満たす多項式とする。図６において、変換ハッシュ値ベクトルＨ’を参照符号５０２で示す。
【０１０６】
従来のＮＴＲＵＳｉｇｎ署名方式と同様の方法で、変換ハッシュ値ベクトルＨ’に最も近い格子点のベクトルＳ＝（ｓ，ｔ）を計算する（ステップＳＧ３）。図６において、ベクトルＳを参照符号５０３で示す。
【０１０７】
この２・Ｎ次元のベクトル（ｍ１’，ｍ２’）と秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝とを用いて、以下の式を満たす多項式ａ，ｂ，Ａ，Ｂを計算する。
Ｇ×ｍ１’−Ｆ×ｍ２’＝Ａ＋ｑ×Ｂ
−ｇ×ｍ１’＋ｆ×ｍ２’＝ａ＋ｑ×ｂ
ここで、Ａ，ａの係数は、〈−ｑ／２〉＋１から〈ｑ／２〉の範囲に収まるように法ｑで割ったときの剰余を取ったものとする。すなわち、法ｑで割ったときの剰余が〈ｑ／２〉からｑ−１である場合は、ｑだけ減算して、上記範囲に収まるよう調整する。ここで、〈ｘ〉は、ｘ以下の数の中で最も大きい数を示す。例えば、〈−１／２〉＝−１である。
【０１０８】
次に、以下の式より、ｓ，ｔを計算する。
ｓ＝ｆ×Ｂ＋Ｆ×ｂ  （ｍｏｄ  ｑ）
ｔ＝ｇ×Ｂ＋Ｇ×ｂ  （ｍｏｄ  ｑ）
次に、ハッシュ値ベクトルＨとＳの距離を算出し、ＨとＳの距離がＬ’以内であるかを判定する（ステップＳＧ４）。Ｌ’以内であれば（ステップＳＧ４でＹｅｓ）、ｓを署名とする（ステップＳＧ５）。Ｌ’以内でなければ（ステップＳＧ４でＮｏ）、ステップＳＧ２からやり直す。
【０１０９】
Ｌ及びＬ’を上記例のように、（Ｌ，Ｌ’）＝（２００，５００）に設定した場合、ステップＳＧ４では、ハッシュ値ベクトルＨとＳの距離はほとんどＬ’以内に納まるため、ステップＳＧ２に戻る回数はあまり多くない。
（５）改良ＮＴＲＵＳｉｇｎ署名方式の署名検証
改良ＮＴＲＵＳｉｇｎ署名方式の署名検証について、図７及び図１８を用いて、説明する。
【０１１０】
改良ＮＴＲＵＳｉｇｎ署名方式の署名生成では、署名ｓが署名対象であるメッセージデータｍの正しい署名であるかを検証する。図７は署名検証の処理を示した図であり、２・Ｎ次元ベクトル全体を格子（格子Ｌｐｕｂ）として捉える場合におけるＬｐｕｂ座標系を図示している。図１８は、署名生成の処理の手順を示すフローチャートである。
【０１１１】
まず、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）を計算する（ステップＳＶ１）。図７において、ベクトルＨを参照符号５３１で示す。
【０１１２】
次に、公開鍵ｈを用いて、以下の式より、多項式ｔを計算し、署名ベクトルＳ＝（ｓ，ｔ）を復元する（ステップＳＶ２）。図７において、署名ベクトルＳを参照符号５３２で示す。
【０１１３】
ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）
ＨとＳの距離を求め、求めた距離がＬ’以下であるかをチェックする（ステップＳＶ３）。Ｌ’以下であれば（ステップＳＶ３でＹｅｓ）、署名ｓが正しいと判定して署名ｓを受理し、ＯＫを出力する（ステップＳＶ４）。Ｌ’より大きければ（ステップＳＶ３でＮｏ）、署名ｓが不正と判定して署名ｓを拒否し、ＮＧを出力する（ステップＳＶ５）。
２．各装置の構成
（１）署名生成装置１００の構成
署名生成装置１００は、相手に送信すべきメッセージデータｍに対する署名データセットＳＳを生成する。署名生成装置１００は、図８に示すように、送信部１０１、秘密鍵格納部１０２、公開鍵証明書格納部１０３、署名生成部１０４、署名データセット生成部１０５及びシステムパラメタ格納部１０６を備える。
【０１１４】
秘密鍵格納部１０２は、耐タンパ性を有し、図９に示すように、予め、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び秘密鍵である分布ηを格納している。秘密鍵及び分布は、外部から知られないように、秘密に保護されている。
【０１１５】
システムパラメタ格納部１０６は、図９に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）を格納している。
公開鍵証明書格納部１０３は、図９に示すように、予め、公開鍵ｈの証明書ＣＰを格納している。証明書ＣＰは、公開鍵ｈと、公開鍵ｈに対する鍵生成装置３００による署名データＳＰとからなる。署名データＳＰも、改良ＮＴＲＵＳｉｇｎ署名方式を使用して生成する。また、証明書ＣＰは予め与えられているものとする。なお、証明書ＣＰは、公開鍵ｈ及び署名データＳＰの他に、例えば、ユーザの識別子や証明書の期限などのデータを含んでいてもよい。
【０１１６】
署名生成部１０４は、上述したように、改良ＮＴＲＵＳｉｇｎ署名方式に基づいて、秘密鍵格納部１０２に格納されている秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び分布ηを用いて、メッセージデータｍに対する署名データＳＤを生成する。
【０１１７】
署名データセット生成部１０５は、公開鍵証明書格納部１０３から証明書ＣＰを受り取り、署名生成部１０４から署名データＳＤを受け取り、メッセージデータｍ、証明書ＣＰ及び署名データＳＤから構成される署名データセットＳＳを生成する。
【０１１８】
送信部１０１は、生成された署名データセットＳＳを、通信路２０を介して署名検証装置２００へ送信する。
（署名生成部１０４の構成）
署名生成部１０４は、図１０に示すように、ハッシュ値計算部１１１、ベクトル生成部１１２、ハッシュ値変換部１１３、署名生成部１１４、署名確認部１１５及びベクトル群選択格納部１１６から構成されている。
【０１１９】
ハッシュ値計算部１１１は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ１の処理を行い、メッセージデータｍに対するハッシュ値ベクトルＨを計算する。
【０１２０】
ベクトル生成部１１２は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ２で使用するベクトルＶを生成する。
ハッシュ値変換部１１３は、ベクトル生成部１１２で生成したベクトルＶを用いて、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ２の処理を行い、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを生成する。
【０１２１】
署名生成部１１４は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ３の処理を行い、署名ベクトルＳ＝（ｓ，ｔ）を生成する。
署名確認部１１５は、改良ＮＴＲＵＳｉｇｎ署名方式の署名生成処理におけるステップＳＧ４の処理を行い、署名ベクトルを確認する。確認した結果、ハッシュ値ベクトルと署名ベクトルが距離Ｌ’以内でない場合は、ベクトル生成部１１２の処理からやり直す。距離Ｌ’以内である場合は、署名ベクトルＳ＝（ｓ，ｔ）のｓを署名データＳＤとする。
（２）署名検証装置２００の構成
署名検証装置２００は、図１１に示すように、受信部２０１、ＣＡ公開鍵格納部２０２、署名データセット格納部２０３、署名検証部２０４及びシステムパラメタ格納部２０５を備える。
【０１２２】
システムパラメタ格納部２０５は、図１２に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）を格納している。
ＣＡ公開鍵格納部２０２は、図１２に示すように、予め、証明書ＣＰを検証するための鍵生成装置３００の公開鍵ＫＣＰを格納している。
【０１２３】
受信部２０１は、署名生成装置１００から送信された署名データセットＳＳを、通信路２０を介して受信し、受信した署名データセットＳＳを署名データセット格納部２０３に書き込む。
【０１２４】
署名データセット格納部２０３は、図１２に示すように、受信した署名データセットＳＳを格納する。署名データセットＳＳは、メッセージデータｍ、署名データＳＤ及び証明書ＣＰから構成される。証明書ＣＰは、公開鍵Ｈ及び署名データＳＰを含む。
【０１２５】
署名検証部２０４は、署名データセットＳＳに含まれる署名データＳＤを検証し、また、証明書ＣＰに含まれる署名データＳＰを検証する。
（署名検証部２０４の構成）
署名検証部２０４は、図１３に示すように、ハッシュ値計算部２１１、署名ベクトル生成部２１２及び距離判定部２１３から構成されている。
【０１２６】
署名検証部２０４は、署名データＳＤを検証し、証明書ＣＰに含まれる署名データＳＰを検証する。以下では、署名データＳＤに対する署名検証について説明する。署名データＳＰについては、メッセージデータｍを公開鍵ｈ、署名データＳＤをＳＰと代えて、同様に検証できるので、詳細の説明を省略する。
【０１２７】
ハッシュ値計算部２１１は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ１の処理を行い、メッセージデータｍに対するハッシュ値ベクトルＨを計算する。
【０１２８】
署名ベクトル生成部２１２は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ２の処理を行い、署名データＳＤから署名ベクトルＳを生成する。
距離判定部２１３は、改良ＮＴＲＵＳｉｇｎ署名方式の署名検証処理におけるステップＳＶ３の処理を行い、ハッシュ値ベクトルＨと署名ベクトルＳの距離を計算する。その距離がＬ’以内である場合は、署名データは正しいと判定する。Ｌ’より大きければ、署名データは不正と判定する。
（３）鍵生成装置３００の構成
鍵生成装置３００は、図１４に示すように、分布生成部３０１、鍵生成部３０２、証明書生成部３０３、証明書生成鍵格納部３０４、鍵設定部３０５及びシステムパラメタ格納部３０６を備えている。
【０１２９】
システムパラメタ格納部３０６は、図１５に示すように、予めシステムパラメタとして、パラメタＮ、パラメタｑ及びパラメタＬ’（距離）、パラメタＬ（距離）及びパラメタｄｆ，ｄｇを記憶している。
【０１３０】
証明書生成鍵格納部３０４は、図１５に示すように、予め、鍵生成装置３００の秘密鍵である証明書生成鍵ＫＣＳを記憶している。
分布生成部３０１は、例えば、図３に示す分布テーブル４１０又は図５に示す分布テーブル４５０を生成することにより、改良ＮＴＲＵＳｉｇｎ署名の鍵生成処理における分布ηを生成し、生成した分布ηを鍵生成部３０２へ出力する。
【０１３１】
具体的には、次のようにして、分布生成部３０１は、分布テーブル４１０を生成する。
う。分布生成部３０１は、システムパラメタ格納部３０６からパラメタＮ及びパラメタＬを読み出し、２・Ｎ個の限界値ペアを格納するため領域を備える分布テーブルを生成する。次に、各限界値ペアについて、乱数を発生させて当該限界値ペアに含まれる下限値をランダムに決定する。次に、乱数を発生させて当該下限値より大きい上限値をランダムに決定する。下限値の決定と上限値の決定を全ての限界値ペアについて行う。決定した下限値及び上限値を前記の分布テーブルに格納する。こうして分布テーブル４１０が生成される。なお、各下限値及び各上限値は、分布内のベクトルのノルムがＬ以下となるように決定する。
【０１３２】
また、別の例として、次のようにして、分布生成部３０１は、分布テーブル４５０を生成する。
分布生成部３０１は、システムパラメタ格納部３０６からパラメタＮ及びパラメタＬを読み出し、乱数を発生させて、分布テーブル４５０に含まれる部分テーブルの数を決定する。一例として、乱数として「３」が生成されたとする。この場合には、各部分テーブルが２・Ｎ個の限界値ペアを格納するため領域を備えるように、３個の部分テーブルを生成する。次に、３個の発生確率（各発生確率は、「０」より大きく、「１」より小さい）をランダムに決定する。ここで、３個の発生確率の合計が「１」となるようにする。
【０１３３】
次に、各部分テーブルについて、上記の分布テーブル４１０と同様にして、各限界値ペアに含まれる下限値及び上限値を決定して各部分テーブルに格納する。
鍵生成部３０２は、システムパラメタ格納部３０６から、パラメタＮ、パラメタｑ、パラメタｄｆ、ｄｇ及びパラメタＬを読み出し、上述したように、改良ＮＴＲＵＳｉｇｎ署名方式の鍵生成処理方法により、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び公開鍵ｈを生成する。また、鍵生成部３０２は、分布生成部３０１から分布ηを受け取る。次に、鍵生成部３０２は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、公開鍵ｈ及び分布ηを鍵設定部３０５へ出力する。また、公開鍵ｈを証明書生成部３０３へ出力する。
【０１３４】
証明書生成部３０３は、証明書生成鍵格納部３０４から証明書生成鍵ＫＣＳを読み出し、鍵生成部３０２から公開鍵ｈを受け取り、読み出した証明書生成鍵ＫＣＳを用いて、公開鍵ｈに対する証明書ＣＰを生成する。ここで、証明書ＣＰは公開鍵ｈと、公開鍵ｈの証明書生成鍵ＫＣＳを用いた署名データＳＰとからなる。なお、署名データＳＰの生成は、署名生成装置１００の署名生成部１０４による署名生成方法と同じ署名生成方法を用いて行う。
【０１３５】
鍵設定部３０５は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝及び秘密鍵である分布ηをを署名生成装置１００の秘密鍵格納部１０２へ書き込む。また、証明書ＣＰを署名生成装置１００の公開鍵証明書格納部１０３へ書き込む。
３．デジタル署名システム１０の動作
（１）デジタル署名システム１０の概要の動作
デジタル署名システム１０の概要の動作について、図１６に示すフローチャートを用いて説明する。
【０１３６】
署名生成装置１００は、署名データを生成し（ステップＳ１０１）、署名データセットＳＳを生成し（ステップＳ１０２）、生成した署名データセットＳＳを通信路２０を介して、署名検証装置２００へ送信する（ステップＳ１０３）。
【０１３７】
署名検証装置２００の受信部２０１は、署名生成装置１００から送信された署名データセットＳＳを、通信路２０を介して受信し、受信した署名データセットＳＳを署名データセット格納部２０３に格納する（ステップＳ２０１）。
【０１３８】
署名検証部２０４は、署名データセットＳＳの中の証明書ＣＰに含まれる公開鍵ｈとその署名データＳＰに対し、署名データＳＰが公開鍵ｈの正しい署名であるかを、ＣＡ公開鍵格納部２０２に格納されている鍵生成装置３００の公開鍵ＫＣＰを用いて検証する（ステップＳ２０２）。署名データＳＰが正しくない場合（ステップＳ２０３）、ＮＧを出力し（ステップＳ１０７）、終了する。
【０１３９】
署名データＳＰが正しい場合（ステップＳ２０３）、署名検証部２０４は、署名データセットＳＳの中のメッセージデータｍとその署名データＳＤに対し、署名データＳＤがメッセージデータｍの正しい署名であるかを、公開鍵ｈを用いて検証する（ステップＳ２０４）。署名データＳＤが正しくない場合（ステップＳ２０５）、ＮＧを出力し（ステップＳ２０７）、終了する。署名データＳＤが正しい場合（ステップＳ２０５）、ＯＫを出力し（ステップＳ２０６）、終了する。
（２）署名生成装置１００の動作
署名生成装置１００の動作について、図１７に示すフローチャートを用いて説明する。
【０１４０】
ハッシュ値計算部１１１は、メッセージデータｍに対するハッシュ値ベクトルＨを計算する（ステップＳＧ１）。
ベクトル生成部１１２は、ベクトルＶを生成し、ハッシュ値変換部１１３は、変換ハッシュ値ベクトルＨ’＝Ｈ＋Ｖを生成する（ステップＳＧ２）。
【０１４１】
署名生成部１１４は、署名ベクトルＳ＝（ｓ，ｔ）を生成する（ステップＳＧ３）。
署名確認部１１５は、署名ベクトルを確認する（ステップＳＧ４）。確認した結果、ハッシュ値ベクトルと署名ベクトルが距離Ｌ’以内でない場合は（ステップＳＧ４でＮｏ）、ステップＳＧ２に戻って、ベクトル生成部１１２の処理からやり直す。距離Ｌ’以内である場合は（ステップＳＧ４でＹｅｓ）、署名ベクトルＳ＝（ｓ，ｔ）のｓを署名データＳＤとする（ステップＳＧ５）。
（３）署名検証装置２００の署名検証部２０４の動作
署名検証装置２００の署名検証部２０４による署名検証の動作について、図１８に示すフローチャートを用いて説明する。
【０１４２】
署名検証部２０４は、メッセージデータｍに対するハッシュ値である２・Ｎ次元のベクトルＨ＝（ｍ１，ｍ２）を計算し（ステップＳＶ１）、公開鍵ｈを用いて、ｔ＝ｓ×ｈ  （ｍｏｄ  ｑ）により、多項式ｔを計算し、署名ベクトルＳ＝（ｓ，ｔ）を復元し（ステップＳＶ２）、ＨとＳの距離を求め、求めた距離がＬ’以下であるかをチェックし（ステップＳＶ３）、Ｌ’以下であれば（ステップＳＶ３でＹｅｓ）、署名ｓが正しいと判定して署名ｓを受理し、ＯＫを出力する（ステップＳＶ４）。Ｌ’より大きければ（ステップＳＶ３でＮｏ）、署名ｓが不正と判定して署名ｓを拒否し、ＮＧを出力する（ステップＳＶ５）。
（４）鍵生成装置３００の動作
鍵生成装置３００は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、分布ηと証明書ＣＰを署名生成装置１００に設定する。以下で、図１９に示すフローチャートを用いて、その動作について説明する。
【０１４３】
鍵生成装置３００の鍵生成部３０２は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝と公開鍵ｈを生成し（ステップＳ４０１）、分布生成部３０１は、分布ηを生成し（ステップＳ４０２）、証明書生成部３０３は、証明書生成鍵格納部３０４に格納されている証明書生成鍵ＫＣＳを用いて、公開鍵ｈに対する証明書ＣＰを生成し（ステップＳ４０３）、鍵設定部３０５は、秘密鍵｛（ｆ，ｇ），（Ｆ，Ｇ）｝、分布ηと証明書ＣＰを、それぞれ署名生成装置１００の秘密鍵格納部１０２と公開鍵証明書格納部１０３に格納する（ステップＳ４０４）。
４．実施の形態１の効果
実施の形態１におけるデジタル署名システム１０では、図７に示すように、署名ベクトルＳを最近傍の格子のベクトルとする変換ハッシュ値ベクトルＨ’を隠蔽しており、検証者に送信していない。そのため、検証者に送信する際の通信路での攻撃者の傍受が発生した場合や、検証者自身が攻撃者である場合に、攻撃者が転写攻撃を試みようとしても、ベクトルとその最近傍の格子のベクトルとの差分の分布を知ることができないため、転写攻撃が困難になる。
【０１４４】
転写攻撃は、個々の署名ベクトルとハッシュ値との差が秘密鍵の関連性を除いて一様分布であることを利用している。その上で、複数の署名データを収集して、差分の分布に関する情報（分布の範囲や発生確率）を用いて、統計的に一様分布の部分を取り去ることで、秘密鍵の部分のみを抽出している。この転写攻撃を発展させて、署名ベクトルとハッシュ値ベクトルとの差分の分布を用いた攻撃を行う場合においても、分布の範囲が秘密であり、分布の範囲が既知である条件を満たすことができないため、分布を予想した攻撃ができなくなり、このような攻撃が困難になる。以下で、このことについてもう少し詳しく述べる。
【０１４５】
署名ベクトルは、分布ηを用いてハッシュ値ベクトルを変換して得られた変換ハッシュ値ベクトルの最近傍の格子点のベクトルである。ここで、分布ηは、分布の範囲が秘密であるため、攻撃者は署名ベクトルとハッシュ値ベクトルとの差分の分布の範囲がわからない。そのため、上記のような攻撃が困難になる。
【０１４６】
また、攻撃者が分布の範囲が既知であっても、分布が一様でなく、図４のように各部分領域の発生確率が既知でない場合は、同様に、転写攻撃が困難になる。
なお、攻撃者にとって、分布の範囲が既知であり、発生確率も既知である場合であっても、ランダムなベクトルＶをハッシュ値ベクトルに加算することにより、分布の範囲が広がる。転写攻撃では、一様分布の部分を取り去るためには、その分布の大きさに依存した署名のサンプル数が必要になる。したがって、ランダムなベクトルＶを加算することで、分布の範囲が広がり、転写攻撃に要する署名のサンプル数が多くなるため、攻撃が困難になるという効果がある。
５．以上説明したように、本発明は、上述した転写攻撃を防ぐことができ、格子の問題を安全性のベースとする署名方式、特に、ＮＴＲＵＳｉｇｎ署名方式をベースにしたデジタル署名システムを提供することを目的とする。
【０１４７】
本発明の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含むことを特徴とする。
【０１４８】
ここで、前記分布は一様でないとしてもよい。
ここで、前記分布の範囲は秘密であるとしてもよい。
ここで、前記分布の範囲は、複数の領域に分割され、各領域の選択確率が予め定められ、前記ベクトル生成手段は、前記選択確率に基づいて前記領域を選択し、選択した前記領域に基づいてベクトル生成してもよい。
【０１４９】
ここで、前記ベクトル生成手段は、前記分布に基づいてランダムに選択したベクトルを生成し、前記メッセージ変換手段は、前記メッセージデータに対して前記ベクトルを加算して前記変換メッセージデータを生成してもよい。
【０１５０】
ここで、前記ベクトル生成手段は、前記分布に基づいて予め選択した複数のベクトルから、ランダムに選択することでベクトルを生成してもよい。
ここで、前記分布は、所定の距離Ｌの超球に含まれるとしてもよい。
【０１５１】
ここで、前記公開鍵は、前記距離Ｌに関連する距離Ｌ’を含み、前記署名生成部は、前記メッセージデータとの前記署名データとの距離がＬ’以内でない場合に、前記変換メッセージデータを計算しなおすとしてもよい。
【０１５２】
ここで、前記公開鍵は前記距離Ｌ’を含むとしてもよい。
ここで、前記距離Ｌ’は、前記署名方式のシステムパラメタであるとしてもよい。
ここで、前記秘密鍵基底ベクトルは、加算、減算、乗算と元の大きさを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、前記公開鍵基底ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られるとしてもよい。
【０１５３】
ここで、前記秘密鍵格納部は、タンパー攻撃の対策をしているとしてもよい。
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを検証する署名検証装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名検証装置は、前記署名データを検証するために使用する前記公開鍵を格納する公開鍵格納部と、前記公開鍵格納部に格納された前記公開鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを検証する署名検証部とを備え、前記秘密鍵は、所定の距離Ｌの超球に含まれる所定のベクトルの分布を含み、前記公開鍵は、前記距離Ｌに関連する距離Ｌ’を含み、前記署名検証部は、前記メッセージデータと前記署名データの距離がＬ’以内であるか否かを判定することを特徴とする。
【０１５４】
ここで、署名方式を用いて、チャレンジデータに対するレスポンスデータである認証データを生成する認証データ生成装置であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記認証データ生成装置は、前記認証データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記チャレンジデータに対する前記認証データを生成する認証データ生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記認証データ生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記チャレンジデータに対するハッシュ値である前記メッセージデータを生成するメッセージデータ生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換チャレンジデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いたときの前記署名データを前記認証データとして生成する認証データ生成手段と、を含むとしてもよい。
【０１５５】
また、本発明の別の１の態様は、ベクトルの集合である格子の最近傍問題を安全性のベースとする署名方式を用いて、メッセージデータに対する署名データを生成する署名生成方法であって、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成ステップは、前記メッセージデータを、前記分布に基づくベクトルを用いて変換した変換メッセージデータに対して、前記秘密鍵基底ベクトルを用いて前記格子の元である前記署名データを生成することを特徴とする。
【０１５６】
ここで、前記分布は一様でないとしてもよい。
ここで、前記分布の範囲は秘密であるとしてもよい。
ここで、前記分布の範囲は、複数の領域に分割され、各領域の選択確率が予め定められ、前記署名生成ステップは、前記選択確率に基づいて前記領域を選択し、選択した前記領域に基づいて生成したベクトルを用いるとしてもよい。
【０１５７】
ここで、前記署名生成ステップは、前記メッセージデータに対して、前記分布に基づいてランダムに選択したベクトルを加算して前記変換メッセージデータを生成してもよい。
ここで、前記分布は、所定の距離Ｌの超球に含まれるとしてもよい。
【０１５８】
また、本発明の別の１の態様は、ベクトルの集合である格子の最近傍問題を安全性のベースとする署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置に実行させるプログラムであって、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを前記署名生成装置に実行させ、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成ステップは、前記メッセージデータを、前記分布に基づくベクトルを用いて変換した変換メッセージデータに対して、前記秘密鍵基底ベクトルを用いて前記格子の元である前記署名データを生成することを特徴とする。
【０１５９】
ここで、前記プログラムは、記録媒体に記録されているとしてもよい。
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置の集積回路であって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含むことを特徴とする。
【０１６０】
また、本発明の別の１の態様は、署名方式を用いて、メッセージデータに対する署名データを生成する署名生成装置と前記署名データを検証する署名検証装置からなるデジタル署名システムであって、前記署名方式は、ベクトルの集合である格子の最近傍問題を安全性のベースとしており、秘密の格子の基底ベクトルである秘密鍵基底ベクトルを構成するための情報を含む秘密鍵と、前記秘密鍵基底ベクトルと同じ前記格子を表現する公開の基底ベクトルである公開鍵基底ベクトルを構成するための情報を含む公開鍵を生成する鍵生成ステップと、前記秘密鍵を用いて前記メッセージデータに対する、１以上の前記格子の元からなる前記署名データを生成する署名生成ステップと、前記公開鍵を用いて前記署名データを検証する署名検証ステップとを含み、前記署名生成装置は、前記署名データを生成するために使用する前記秘密鍵を格納する秘密鍵格納部と、前記秘密鍵格納部に格納された前記秘密鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを生成する署名生成部とを備え、前記署名検証装置は、前記署名データを検証するために使用する前記公開鍵を格納する公開鍵格納部と、前記公開鍵格納部に格納された前記公開鍵を用いて、前記メッセージデータに対する前記格子の元である前記署名データを検証する署名検証部とを備え、前記秘密鍵は、所定のベクトルの分布を含み、前記署名生成部は、前記分布に基づくベクトルを生成するベクトル生成手段と、前記メッセージデータを前記ベクトルに基づいて変換して変換メッセージデータを生成するメッセージ変換手段と、前記変換メッセージデータを前記メッセージデータとして用いて前記署名データを生成する署名生成手段と、を含み、前記署名検証部は、前記メッセージデータと前記署名データの距離を判定することを特徴とする。
【０１６１】
６．変形例
上記に説明した実施の形態は、本発明の実施の一例であり、本発明はこの実施の形態に何ら限定されるものではなく、その旨を逸脱しない範囲において種々なる態様で実施し得るものである。例えば、以下のような場合も本発明に含まれる。
（１）実施の形態１におけるデジタル署名システム１０では、ランダムなベクトルを分布に基づいて選択していたが、予め分布に基づくベクトルを求めて記憶しておき、記憶しているそのベクトルを用いるとしてもよい。また、予め複数の分布に基づくベクトルを複数個求めて記憶しておき、記憶している複数のベクトルから１個のベクトルを選択するとしてもよい。
（２）デジタル署名システム１０では、ベクトルＶを加算して変換ハッシュ値ベクトルを生成していたが、これに限らない。例えば、ベクトルＶをｎ倍（ｎは０以外の整数）したものを加算して変換ハッシュ値ベクトルを生成するとしてもよい。また、ベクトルＶを減算して変換ハッシュ値を生成するとしてもよい。
（３）改良ＮＴＲＵＳｉｇｎ署名方式におけるＬとＬ‘は、（Ｌ，Ｌ’）＝（２００，５００）としていたが、他の値でもよい。例えば、（Ｌ，Ｌ’）＝（５０，３５０）であってもよい。また、ＬとＬ’の差は、従来のＮＴＲＵＳｉｇｎ署名方式のＮｏｒｍｂｏｕｎｄと程度としていたが、Ｎｏｒｍｂｏｕｎｄより小さくてもよい。Ｌ’は、ほとんどのハッシュ値ベクトルと正しく生成した署名ベクトルの距離がその値以下に納まる値であれば何でもよい。
（４）改良ＮＴＲＵＳｉｇｎ署名方式において、距離Ｌをシステムパラメタとして公開していたが、署名を生成するユーザごとに異なる値としてもよい。その場合は、Ｌ’を公開鍵に含めて署名を検証するユーザに知らせるとしてもよい。また、距離Ｌを秘密にするとしてもよい。
（５）改良ＮＴＲＵＳｉｇｎ署名方式において、分布ηとして図２や図４に示す分布４００、４３２を使用するとしているが、これに限らない。例えば、ある次元（例えばｉ番目、すなわち、ｉ−１次の項）の要素を所定の範囲（例えば、２以上５以下）に制限するとしてもよい。
（６）ＮＴＲＵＳｉｇｎ署名方式では、秘密鍵における（ｆ，ｇ），（Ｆ，Ｇ）を格子の基底ベクトル（秘密鍵基底ベクトル）、公開鍵におけるｈとシステムパラメタであるｑから得られる（１，ｈ），（０，ｑ）を格子の基底ベクトル（公開鍵基底ベクトル）としたとき、それぞれの基底ベクトルから得られる格子点が同一であることから、格子の問題（格子の最近傍問題）をベースにした署名方式と呼ばれる。改良ＮＴＲＵＳｉｇｎ署名方式も同様の秘密鍵基底ベクトルと公開鍵基底ベクトルを持つ。
【０１６２】
本発明では、署名方式としてＮＴＲＵＳｉｇｎ署名方式をベースとした改良ＮＴＲＵＳｉｇｎ署名方式を使用しているが、これに限らない。転写攻撃は他の格子の問題をベースとした署名方式、例えば、ＧＧＨ署名方式でも適用できる。署名方式として、転写攻撃が適用できる、格子の問題をベースとした署名方式、例えば、ＧＧＨ署名方式をベースとするとしてもよい。ＧＧＨ署名方式は、非特許文献６に詳細に述べられている。他の格子の最近傍問題を署名の安全性のベースとする署名方式をベースとするとしてもよい。
（７）分布ηのデータ構造である分布テーブルの他の一例について説明する。
【０１６３】
図２１に示す分布テーブル６１０は、３個の分布情報ｉ（ｉ＝１、２、３）から構成され、分布情報ｉは、下限値Ｃ＿ｉ＿ｍｉｎ、上限値Ｃ＿ｉ＿ｍａｘ、多項式Ｂａｓｅ１＿ｉ、及び多項式Ｂａｓｅ２＿ｉを含む。
【０１６４】
ｉ＝１とするときに、下限値Ｃ＿１＿ｍｉｎ以上であり、上限値Ｃ＿１＿ｍａｘ以下であるＣ＿１を一様ランダムに選択し、ｉ＝２とするときに、下限値Ｃ＿２＿ｍｉｎ以上であり、上限値Ｃ＿２＿ｍａｘ以下であるＣ＿２を一様ランダムに選択し、ｉ＝３とするときに、下限値Ｃ＿３＿ｍｉｎ以上であり、上限値Ｃ＿３＿ｍａｘ以下であるＣ＿３を一様ランダムに選択する。
【０１６５】
次に、Ｖ１＝Ｃ＿１×Ｂａｓｅ１＿１＋Ｃ＿２×Ｂａｓｅ１＿２＋Ｃ＿３×Ｂａｓｅ１＿３を算出し、Ｖ２＝Ｃ＿１×Ｂａｓｅ２＿１＋Ｃ＿２×Ｂａｓｅ２＿２＋Ｃ＿３×Ｂａｓｅ２＿３を算出し、Ｖ＝（Ｖ１、Ｖ２）とする。
【０１６６】
上記の分布の中で最もノルムが大きくなるベクトルV_max(=(V1_max, V2_max))は、
V1_max=c_1_max×Base1_1+c_2_min×Base1_2+c_3_max×Base1_3
V2_max=c_1_max×Base2_1+c_2_min×Base2_2+c_3_max×Base2_3
であり、そのノルムは 194.9 < 200である。
【０１６７】
分布テーブル６１０において、ベースの多項式Base1_i, Base2_i(i=1, 2, 3)は、係数（重み）を３個有しているが、これに限らない。例えば、２個であってもよいし、４個以上であってもよい
また、分布テーブル６１０において、Base1_i及びBase2_iのそれぞれについて、多項式の数は３個であるが、２個でもよいし、４個以上でもよい。
（８）分布ηのデータ構造である分布テーブルのさらに他の一例について説明する。
【０１６８】
図２２に示す分布テーブル６５０は、３個の分布情報ｉ（ｉ＝１、２、３）から構成され、分布情報ｉは、第１サブ分布情報及び第２サブ分布情報を含み、第１サブ分布情報は、下限値Ｃ＿１＿ｉ＿ｍｉｎ、上限値Ｃ＿１＿ｉ＿ｍａｘ及び多項式Ｂａｓｅ１＿ｉを含み、
第２サブ分布情報は、下限値Ｃ＿２＿ｉ＿ｍｉｎ、上限値Ｃ＿２＿ｉ＿ｍａｘ及び多項式Ｂａｓｅ２＿ｉを含む。
【０１６９】
ｉ＝１とするときに、下限値Ｃ＿１＿１＿ｍｉｎ以上であり、上限値Ｃ＿１＿１＿ｍａｘ以下であるＣ＿１＿１を一様ランダムに選択し、下限値Ｃ＿２＿１＿ｍｉｎ以上であり、上限値Ｃ＿２＿１＿ｍａｘ以下であるＣ＿２＿１を一様ランダムに選択する。ｉ＝２とするときに、下限値Ｃ＿１＿２＿ｍｉｎ以上であり、上限値Ｃ＿１＿２＿ｍａｘ以下であるＣ＿１＿２を一様ランダムに選択し、下限値Ｃ＿２＿２＿ｍｉｎ以上であり、上限値Ｃ＿２＿２＿ｍａｘ以下であるＣ＿２＿２を一様ランダムに選択する。ｉ＝３とするときに、下限値Ｃ＿１＿３＿ｍｉｎ以上であり、上限値Ｃ＿１＿３＿ｍａｘ以下であるＣ＿１＿３を一様ランダムに選択し、下限値Ｃ＿２＿３＿ｍｉｎ以上であり、上限値Ｃ＿２＿３＿ｍａｘ以下であるＣ＿２＿３を一様ランダムに選択する。
【０１７０】
次に、Ｖ１＝Ｃ＿１＿１×Ｂａｓｅ１＿１＋Ｃ＿１＿２×Ｂａｓｅ１＿２＋Ｃ＿１＿３×Ｂａｓｅ１＿３を算出し、Ｖ２＝Ｃ＿２＿１×Ｂａｓｅ２＿１＋Ｃ＿２＿２×Ｂａｓｅ２＿２＋Ｃ＿２＿３×Ｂａｓｅ２＿３を算出し、Ｖ＝（Ｖ１、Ｖ２）とする。
【０１７１】
上記の分布の中で最もノルムが大きくなるベクトルV_max(=(V1_max, V2_max))は、
V1_max=c_1_1_max×Base1_1+c_1_2_max×Base1_2+c_1_3_max×Base1_3
V2_max=c_2_1_max×Base2_1+c_2_2_min×Base2_2+c_2_3_min×Base2_3
であり、そのノルムは 199.1 < 200である。
【０１７２】
ここで、c_1_iやc_2_iは、minからmaxの間で一様ランダムに選択（生成）するとしているが、これに限らない。例えば、ガウス分布に従ってランダムに選択するとしてもよい。その場合は、平均値と分散を予め決めておき、ガウス分布にしたがって発生させる。
【０１７３】
なお、ガウス分布の発生方法については、以下の文献に詳しく記載されている。
D.E. Knuth, “THE ART OF COMPUTER PROGRAMMING, 2nd ed., 
vol.2:Seminumerical Algorithms”, ADDISON-WESLEY, 1981, pp. 129-130
（９）上記の実施の形態では、署名検証時に、「Ｌ以内」で正しいと判定するとしているが、これには限定されず、「Ｌ未満」で正しいと判定するとしてもよい。その場合は、「Ｌより大きい」ときに不正と判定するのではなく、「Ｌ以上」のときに不正と判定する。
（１０）上記の実施の形態及び変形例は、認証において適用される。認証とは、メッセージデータが自称どおりの人物によって送られたこと、またメッセージデータが改竄されなかったということの検証である。また、実施の形態及び変形例は、身分の証明において適用される。身分の証明とは、例えば、データへのアクセス権、又は施設へのアクセス権（入室権）を持つことの証明、又は自分が主張どおりの人物であることの証明である。さらに、実施の形態及び変形例は、否認防止において適用される。否認防止とは、例えば、実は何かに同意したのに、同意していないと主張する者に対抗することをいう。
（１１）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１７４】
上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１７５】
上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１７６】
本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０１７７】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１７８】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【０１７９】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０１８０】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１２）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１８１】
本発明を構成する各装置は、認証、身分の証明、否認の防止などの処理を必要とする様々な産業分野において、認証、身分の証明、否認の防止などの処理を行う際に、経営的に、また継続的及び反復的に使用し、また製造することができる。
【符号の説明】
【０１８２】
１０          デジタル署名システム
２０          通信路
１００        署名生成装置
２００        署名検証装置
３００        鍵生成装置
１０１        送信部
１０２        秘密鍵格納部
１０３        公開鍵証明書格納部
１０４        署名生成部
１０５        署名データセット生成部
１０６        システムパラメタ格納部
１１１        ハッシュ値計算部
１１２        ベクトル生成部
１１３        ハッシュ値変換部
１１４        署名生成部
１１５        署名確認部
１１６        ベクトル群選択格納部
２０１        受信部
２０２        ＣＡ公開鍵格納部
２０３        署名データセット格納部
２０４        署名検証部
２０５        システムパラメタ格納部
２１１        ハッシュ値計算部
２１２        署名ベクトル生成部
２１３        距離判定部
３０１        分布生成部
３０２        鍵生成部
３０３        証明書生成部
３０４        証明書生成鍵格納部
３０５        鍵設定部
３０６        システムパラメタ格納部
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに署名し、検証する方法であって、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成する変換ステップと、
秘密鍵ベクトルを基底ベクトルとして定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名ステップと、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証ステップと、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力ステップと
を含むことを特徴とする方法。
【請求項２】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置であって、
対象データを取得する取得手段と、
秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、
前記対象データと生成した署名データとを出力する出力手段と
を備えることを特徴とする署名生成装置。
【請求項３】
前記秘密記憶手段は、さらに、前記第１サイズより小さい複数の候補ベクトルが属する範囲を示す分布を記憶しており、
前記データ変換手段は、前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して前記攪乱ベクトルとする
ことを特徴とする請求項２に記載の署名生成装置。
【請求項４】
前記秘密記憶手段は、耐タンパ性を有し、前記秘密鍵及び前記分布は、外部から知られないように、秘密に保護されている
ことを特徴とする請求項３記載の署名生成装置。
【請求項５】
前記秘密記憶手段に記憶されている前記分布により示される範囲において、複数の候補ベクトルは、選択される確率が一様でないように、配置されており、
前記データ変換手段は、前記確率に従って、１の前記候補データを選択して前記攪乱ベクトルとする
を特徴とする請求項４記載の署名生成装置。
【請求項６】
前記分布により示される範囲は、複数の領域を有し、各領域に対して当該領域の選択確率が予め定められ、前記複数の領域のそれぞれにおいて、複数の候補ベクトルが配置され、
前記データ変換手段は、前記選択確率に基づいて１の領域を選択し、選択した前記領域から１の前記候補ベクトルを選択して前記攪乱ベクトルとする
を特徴とする請求項４記載の署名生成装置。
【請求項７】
前記データ変換手段は、
前記分布により示される範囲に属する前記候補ベクトルから、１の候補ベクトルを選択して、前記攪乱ベクトルとするベクトル生成部と、
前記対象データに基づくベクトルに、前記攪乱ベクトルを加えることにより、前記変換ベクトルを生成する加算部と
を含むことを特徴とする請求項４に記載の署名生成装置。
【請求項８】
前記ベクトル生成部は、前記分布に基づいて予め選択した複数の候補ベクトルから、ランダムに選択することにより、前記攪乱ベクトルを生成する
ことを特徴とする請求項７に記載の署名生成装置。
【請求項９】
前記分布は、前記第１サイズを半径とする超球内に含まれる
ことを特徴とする請求項４に記載の署名生成装置。
【請求項１０】
前記署名生成装置は、さらに、前記第１サイズより大きい第２サイズを記憶している公開記憶手段を含み、
前記データ変換手段は、さらに、前記対象データによるベクトルと、前記変換ベクトルとの距離を算出し、算出した距離が前記第２サイズ以下でない場合に、第１サイズより小さい秘密の別の攪乱ベクトルを用いて、取得した対象データを変換して、別の変換ベクトルを生成する
を特徴とする請求項４記載の署名生成装置。
【請求項１１】
前記秘密鍵ベクトルは、加算、減算、乗算と、元のサイズを示すノルムが定義されたＮ次元配列の集合である環Ｒと正整数ｑに対し、前記環Ｒの元ｆ，ｇおよび、ｆ（ｍｏｄ  ｑ）の逆数である元Ｆｑと、ｆ×Ｇ−ｇ×Ｆ＝ｑを満たす（Ｆ，Ｇ）とに基づく、前記元の４つ組（ｆ，ｇ，Ｆ，Ｇ）から得られ、
前記公開鍵ベクトルは、前記正整数ｑと前記元ｇおよび前記元Ｆｑの積とｍｏｄ  ｑで合同である元ｈから得られる
ことを特徴とする請求項４に記載の署名生成装置。
【請求項１２】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名生成装置により、第１サイズより小さい秘密の攪乱ベクトルを用いて、対象データから変換により前記変換ベクトルが生成され、秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点である署名ベクトルの一部として生成された署名データを検証する署名検証装置であって、
前記対象データ及び署名データを取得する取得手段と、
公開鍵ベクトルを記憶している記憶手段と、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段と
を備えることを特徴とする署名検証装置。
【請求項１３】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成する署名生成装置において用いられる署名生成方法であって、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、
前記対象データと生成した署名データとを出力する出力ステップと
を含むことを特徴とする署名生成方法。
【請求項１４】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、対象データに対する署名データを生成するコンピュータにおいて用いられる署名生成用のコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記コンピュータに、
対象データを取得する取得ステップと、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換ステップと、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成ステップと、
前記対象データと生成した署名データとを出力する出力ステップと
を実行させる前記コンピュータプログラムを記録している記録媒体。
【請求項１５】
データを複数に分割して多次元のベクトルとして表わし、最小ベクトル問題又は近似最小ベクトル問題を安全性の根拠として、署名する署名生成装置及び検証する署名検証装置から構成されるシステムであって、
前記署名生成装置は、
対象データを取得する取得手段と、
秘密鍵ベクトルを秘密に記憶している秘密記憶手段と、
第１サイズより小さい秘密の攪乱ベクトルを用いて、取得した対象データを変換して、変換ベクトルを生成するデータ変換手段と、
秘密鍵ベクトルを基底として定まる格子において、前記変換ベクトルに最近接する格子点を求めて前記変換ベクトルに対する署名ベクトルを生成し、前記署名ベクトルの一部を署名データとする署名生成手段と、
前記対象データと生成した署名データとを出力する出力手段とを備え、
前記署名検証装置は、
前記対象データ及び署名データを取得する取得手段と、
公開鍵ベクトルを記憶している記憶手段と、
公開鍵ベクトルと前記署名データとを用いて、前記署名ベクトルを復元し、前記対象データによるベクトルと復元された前記署名ベクトルとの距離が、前記第１サイズより大きい第２サイズ以下であるか否かを検証する検証手段と、
第２サイズ以下であるとき、検証が成功したことを示す成功情報を出力する出力手段と
を備えることを特徴とするシステム。
【請求項１６】
前記出力手段は、前記変換ベクトルを出力することなく、隠蔽する
ことを特徴とする請求項５記載の署名生成装置。
【請求項１７】
前記秘密記憶手段は、さらに、上限値、下限値及び多項式を対応付けて含む分布テーブルを記憶しており、
前記データ変換手段は、上限値以下、かつ下限値以上である値をランダムに選択し、選択した値を前記多項式に乗じ、得られた多項式を用いて、前記攪乱ベクトルを生成する
ことを特徴とする請求項２記載の署名生成装置。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009125537.tif 000025
【図２】
2009125537.tif 000026
【図３】
2009125537.tif 000027
【図４】
2009125537.tif 000028
【図５】
2009125537.tif 000029
【図６】
2009125537.tif 000030
【図７】
2009125537.tif 000031
【図８】
2009125537.tif 000032
【図９】
2009125537.tif 000033
【図１０】
2009125537.tif 000034
【図１１】
2009125537.tif 000035
【図１２】
2009125537.tif 000036
【図１３】
2009125537.tif 000037
【図１４】
2009125537.tif 000038
【図１５】
2009125537.tif 000039
【図１６】
2009125537.tif 000040
【図１７】
2009125537.tif 000041
【図１８】
2009125537.tif 000042
【図１９】
2009125537.tif 000043
【図２０】
2009125537.tif 000044
【図２１】
2009125537.tif 000045
【図２２】
2009125537.tif 000046
【国際調査報告】
2009125537.tif 000047
2009125537.tif 000048
2009125537.tif 000049
2009125537.tif 000050