(57)【要約】【課題】公開鍵の取得や管理の煩雑さを軽減し、様々なビット長のメッセージに柔軟に対応可能なメッセージ復元署名技術を提供する。【解決手段】署名生成装置１０が、整数ｙを選択し、Ｒ＝ｅ（Ｐ１，Ｐ２）ｙ、ｈ＝Ｈ１（ｒｅｃ｜Ｒ｜ｉｄ）、ｖ＝Ｈ２（ｈ｜Ｒ｜ｉｄ）、ｒ＝ｈ｜（ｖ（＋）ｒｅｃ）、ｕ＝Ｈ３（ｒ｜Ｍｃｌｒ｜ｉｄ）、ｔ＝ｕ  ｍｏｄ  ｐ、σ＝ｙ・Ｐ１−ｔ・Ｓｉｄを算出し、署名情報（ｒ，σ）を送信する。また、署名検証装置２０が、署名情報（ｒ’，σ’）を受信し、ｕ’＝Ｈ３（ｒ’｜Ｍｃｌｒ｜ｉｄ）、ｔ＝ｕ’  ｍｏｄ  ｐ、Ｒ’＝ｅ（σ’，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ’を算出し、ｒ’からビット列ｈ’，ｘ’を抽出し、ｖ’＝Ｈ２（ｈ’｜Ｒ’｜ｉｄ）、ｒｅｃ’＝ｖ’（＋）ｘ’、ｈ’’＝Ｈ１（ｒｅｃ’｜Ｒ’｜ｉｄ）を算出し、ｈ’＝ｈ’’であるか否かを判定する。【選択図】図１
2010002662.tif 000002
【特許請求の範囲】
【請求項１】
署名生成装置と署名検証装置とを有するリカバリ署名システムであって、
前記署名生成装置は、
有限体上の楕円曲線をＥとし、楕円曲線Ｅ上の有理点からなる有限集合の要素数＃Ｅを割り切る素数をｐとし、楕円曲線Ｅ上のｐ等分点からなる有限集合をＥ［ｐ］とし、上記有限体を基礎体とする拡大体からなる有限集合μｐとし、有限集合Ｅ［ｐ］の２つの元を有限集合μｐの１つの元に写す非退化双線形ペアリング関数をｅ：Ｅ［ｐ］×Ｅ［ｐ］→μｐとし、ｅ（Ｐ１，Ｐ２）≠１を満たす有限集合Ｅ［ｐ］の元をＰ１，Ｐ２∈Ｅ［ｐ］とし、前記署名生成装置の識別子をｉｄとし、識別子ｉｄに対応する有限集合Ｅ［ｐ］の元をＰｉｄとし、整数であるマスター秘密鍵をｍｓとし、Ｐｉｄの楕円曲線Ｅ上でのｍｓ倍点ｍｓ・Ｐｉｄを前記署名生成装置の秘密鍵Ｓｉｄとした場合における、当該秘密鍵Ｓｉｄを格納する第１記憶部と、
秘匿される署名対象のビット列である復元署名対象情報ｒｅｃを格納する第２記憶部と、
任意の整数ｙを選択する任意数選択部と、
双線形関数値Ｒ＝ｅ（Ｐ１，Ｐ２）ｙ∈μｐを算出する第１双線形関数演算部と、
前記復元署名対象情報ｒｅｃのビット列と前記双線形関数値Ｒのビット列とを含むビット結合値αに対し、第１ハッシュ関数Ｈ１を作用させたハッシュ値ｈ＝Ｈ１（α）を算出する第１ハッシュ演算部と、
前記ハッシュ値ｈのビット列と前記双線形関数値Ｒのビット列とを含むビット結合値βに対し、任意のビット長のビット列を前記復元署名対象情報ｒｅｃとビット長が等しいビット列に変換する第２ハッシュ関数Ｈ２を作用させたハッシュ値ｖ＝Ｈ２（β）を算出する第２ハッシュ演算部と、
前記ハッシュ値ｖと前記復元署名対象情報ｒｅｃとの排他的論理和値ｘを算出する第１排他的論理和演算部と、
前記ハッシュ値ｈのビット列を第１ビット位置に配置し、前記排他的論理和値ｘのビット列を第２ビット位置に配置したビット結合値ｒを算出するビット結合部と、
前記ビット結合値ｒのビット列を含むビット列γに対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ＝Ｈ３（γ）を算出する第３ハッシュ演算部と、
予め定められた規則に従って前記ハッシュ値ｕに対して定まる整数をｔとした場合における、前記元Ｐ１の楕円曲線Ｅ上でのｙ倍点ｙ・Ｐ１と、Ｓｉｄの楕円曲線Ｅ上でのｔ倍点ｔ・Ｓｉｄの楕円逆元−ｔ・Ｓｉｄとを楕円加算した楕円曲線演算値σ＝ｙ・Ｐ１−ｔ・Ｓｉｄを算出する楕円曲線演算部と、
前記ビット結合値ｒと前記楕円曲線演算値σとからなる署名情報（ｒ，σ）を送信する送信部と、を有し、
前記署名検証装置は、
前記元Ｐ２と、前記元Ｐ２の楕円曲線Ｅ上でのｍｓ倍点ｍｓ・Ｐ２であるマスター公開鍵ｍｐと、を格納する第３記憶部と、
ビット列である第１パート情報ｒ’と、有限集合Ｅ［ｐ］の元である第２パート情報σ’とからなる、署名情報（ｒ’，σ’）を受信する受信部と、
前記第１パート情報ｒ’と前記第２パート情報σ’を格納する第４記憶部と、
前記署名生成装置の識別子ｉｄに対応する有限集合Ｅ［ｐ］の元Ｐｉｄを格納する第５記憶部と、
前記第１パート情報ｒ’のビット列を含むビット列γ’に対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ’＝Ｈ３（γ’）を算出する第４ハッシュ演算部と、
前記予め定められた規則に従って前記ハッシュ値ｕ’に対して定まる整数をｔ’とした場合における、双線形関数値Ｒ’＝ｅ（σ’，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ’∈μｐを算出する第２双線形関数演算部と、
前記第１パート情報ｒ’の前記第１ビット位置のビット列ｈ’と、前記第１パート情報ｒ’の前記第２ビット位置のビット列ｘ’とを抽出するビット分割部と、
前記ハッシュ値ｈ’のビット列と前記双線形関数値Ｒ’のビット列とを含むビット結合値β’に対し、前記第２ハッシュ関数Ｈ２を作用させたハッシュ値ｖ’＝Ｈ２（β’）を算出する第５ハッシュ演算部と、
前記ハッシュ値ｖ’と前記ビット列ｘ’との排他的倫理和値を、署名対象情報の復元値ｒｅｃ’として算出する第２排他的論理和演算部と、
前記署名対象情報の復元値ｒｅｃ’のビット列と前記双線形関数値Ｒ’のビット列とを含むビット結合値α’に対し、前記第１ハッシュ関数Ｈ１を作用させたハッシュ値ｈ’’＝Ｈ１（α’）を算出する第６ハッシュ演算部と、
前記ビット列ｈ’と前記ハッシュ値ｈ’’とが等しいか否かを判定する比較部と、を有する、
ことを特徴とするリカバリ署名システム。
【請求項２】
請求項１のリカバリ署名システムであって、
前記署名生成装置は、秘匿されない署名対象のビット列であるクリアーメッセージＭｃｌｒを格納する第６記憶部を有し、
前記署名生成装置の前記第３ハッシュ演算部は、前記ビット結合値ｒのビット列と前記クリアーメッセージＭｃｌｒのビット列とを含むビット結合値であるビット列γに対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ＝Ｈ３（γ）を算出するように構成され、
前記署名生成装置の前記送信部は、前記署名情報（ｒ，σ）と前記クリアーメッセージＭｃｌｒとを送信するように構成され、
前記署名検証装置の前記受信部は、前記署名情報（ｒ’，σ’）と前記クリアーメッセージＭｃｌｒとを受信するように構成され、
前記署名検証装置は、前記クリアーメッセージＭｃｌｒを格納する第７記憶部を有し、
前記署名検証装置の前記第４ハッシュ演算部は、前記第１パート情報ｒ’のビット列と前記クリアーメッセージＭｃｌｒのビット列とを含むビット結合値であるビット列γ’に対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ’＝Ｈ３（γ’）を算出するように構成される、
ことを特徴とするリカバリ署名システム。
【請求項３】
請求項１又は２のリカバリ署名システムであって、
前記署名生成装置は、
前記ハッシュ値ｕに対して定まる整数ｔが０であるか否かを判定する第１判定部と、
前記ハッシュ値ｕに対して定まる整数ｔが０である場合に、前記任意数選択部に新たな任意の整数ｙを選択させ、その新たな任意の整数ｙに基づき、前記第１双線形関数演算部の処理と、前記第１ハッシュ演算部の処理と、前記第２ハッシュ演算部の処理と、前記第１排他的論理和演算部の処理と、前記ビット結合部の処理と、前記第３ハッシュ演算部の処理とをやり直させる制御部と、を有し、
前記署名検証装置は、
前記ハッシュ値ｕ’に対して定まる整数ｔ’が０であるか否かを判定し、整数ｔ’が０である場合に、前記署名情報（ｒ’，σ’）が正当でないと判定する第２判定部を有する、
ことを特徴とするリカバリ署名システム。
【請求項４】
請求項１から３の何れかのリカバリ署名システムを構成する署名生成装置。
【請求項５】
請求項１から３の何れかのリカバリ署名システムを構成する署名検証装置。
【請求項６】
請求項４の署名生成装置が実行する署名生成方法。
【請求項７】
請求項５の署名検証装置が実行する署名検証方法。
【請求項８】
請求項４の署名生成装置としてコンピュータを機能させるためのプログラム。
【請求項９】
請求項５の署名検証装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術の応用技術に関し、特に、署名からメッセージが復元できるメッセージ復元署名に関する。
【背景技術】
【０００２】
メッセージ復元署名の従来技術として非特許文献１に示すものがある。この方式は、ランダムオラクルモデルで安全性が証明される方式である。以下にこの方式の概要を示す。
【０００３】
この方式では、
メッセージＭ∈｛０，１｝ｋ２
関数Ｆ１：｛０，１｝ｋ２→｛０，１｝ｋ１
関数Ｆ２：｛０，１｝ｋ１→｛０，１｝ｋ２
関数Ｆ：｛０，１｝ｋ１＋ｋ２→｛０，１｝ｋ
Ｅ：有限体Ｆｑ上で定義された楕円曲線
ｐ：楕円曲線Ｅ上の点Ｒに対してｐ・Ｒ＝Ｏ（Ｏは無限遠点）を満たす素数
Ｇ１：楕円曲線Ｅ上の位数ｐの部分集合の点
ｗ∈Ｚ／ｐＺ
秘密鍵：ｘ∈Ｚ／ｐＺ
公開鍵：（Ｆｑ，Ｅ，Ｇ１，Ｙ）（Ｙ＝−ｘ・Ｇ１（∈Ｅ））
とする。なお、｛０，１｝δは、２進δ桁のビットデータを示し、｛０，１｝δ→｛０，１｝εは、２進δ桁のビットデータから２進ε桁のビットデータへの写像である関数を示す。
【０００４】
＜署名生成＞
署名生成は以下のように行う。ただし、Ｒｘは点Ｒ∈Ｅのｘ座標を示し、（＋）は排他的論理和演算子を示す。
【０００５】
Ｍ’＝Ｆ１（Ｍ）｜（Ｆ２（Ｆ１（Ｍ））（＋）Ｍ）  …(1)
Ｒｘ＝（ｗ・Ｇ１）ｘ
ｒ＝Ｒｘ（＋）Ｍ’  …(2)
ｃ＝Ｆ（ｒ）
ｚ＝ｗ＋ｃ・ｘ  ｍｏｄ  ｐ
署名Ｓｉｇｎ＝（ｒ，ｚ）
【０００６】
＜署名検証＞
署名検証は以下のように行う。ただし、［Ｍ’］ｋ１はＭ’の先頭ｋ１ビットを示し、［Ｍ’］ｋ２はＭ’の残りのｋ２ビットを示す。
【０００７】
Ｍ’＝ｒ（＋）（ｚ・Ｇ１＋Ｆ（ｒ）・Ｙ）ｘ
Ｍ＝［Ｍ’］ｋ２（＋）Ｆ２（［Ｍ’］ｋ１）
［Ｍ’］ｋ１＝Ｆ１（Ｍ）であれば検証合格
【非特許文献１】Masayuki Abe, Tatsuaki Okamoto, "A Signature Scheme with Message Recovery as Secure as Discrete Logarithm," ASIACRYPT 1999, pp.378-389
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、非特許文献１の方式では、署名検証を行う署名検証装置が、署名生成を行った署名生成装置の公開鍵を取得する必要がある。従来の構成の場合、公開鍵は署名生成装置ごとに異なるため、その取得や管理が煩雑であった。
【０００９】
また、非特許文献１の方式では、式（１）の（Ｆ２（Ｆ１（Ｍ））や式（２）のＲｘのビット長が固定長であり、メッセージＭのビット長も固定長としなければならない。特に、式（２）のＲｘは楕円曲線Ｅ上の点Ｒ∈Ｅのｘ座標であり、そのビット長は楕円曲線Ｅに依存する。しかしながら、メッセージＭのビット長に応じ、Ｒｘのビット長がＭ’（式（１）の演算結果）のビット長と等しくなるように楕円曲線Ｅを変更し、なおかつ、変更されたすべての楕円曲線Ｅにおいて安全性を確保することは容易ではない。
【００１０】
このため、従来は、メッセージＭの長さが固定長より短い場合であっても、それに併せて署名Ｓｉｇｎの一部分ｒのビット長を短くすることができず、非効率であった。また、メッセージＭのビット長が固定長よりも長い場合には、式（１）にメッセージＭの一部分しか代入することができず、メッセージＭの全てのビットを対象としたメッセージ復元署名を構成できない。
【００１１】
本発明はこのような点に鑑みてなされたものであり、公開鍵の取得や管理の煩雑さを軽減し、なおかつ、様々なビット長のメッセージに柔軟に対応可能なメッセージ復元署名技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の署名生成装置は、有限体Ｆｑ上の楕円曲線をＥとし、楕円曲線Ｅ上の有理点からなる有限集合の要素数＃Ｅを割り切る素数をｐとし、楕円曲線Ｅ上のｐ等分点からなる有限集合をＥ［ｐ］とし、有限体Ｆｑを基礎体とする拡大体からなる有限集合をμｐとし、有限集合Ｅ［ｐ］の２つの元を有限集合μｐの１つの元に写す非退化双線形ペアリング関数をｅ：Ｅ［ｐ］×Ｅ［ｐ］→μｐとし、ｅ（Ｐ１，Ｐ２）≠１を満たす有限集合Ｅ［ｐ］の元をＰ１，Ｐ２∈Ｅ［ｐ］とし、署名生成装置の識別子をｉｄとし、識別子ｉｄに対応する有限集合Ｅ［ｐ］の元をＰｉｄとし、整数であるマスター秘密鍵をｍｓとし、Ｐｉｄの楕円曲線Ｅ上でのｍｓ倍点ｍｓ・Ｐｉｄを署名生成装置の秘密鍵Ｓｉｄとした場合における、当該秘密鍵Ｓｉｄを格納する第１記憶部と、秘匿される署名対象のビット列である復元署名対象情報ｒｅｃを格納する第２記憶部と、任意の整数ｙを選択する任意数選択部と、双線形関数値Ｒ＝ｅ（Ｐ１，Ｐ２）ｙ∈μｐを算出する第１双線形関数演算部と、復元署名対象情報ｒｅｃのビット列と双線形関数値Ｒのビット列とを含むビット結合値αに対し、第１ハッシュ関数Ｈ１を作用させたハッシュ値ｈ＝Ｈ１（α）を算出する第１ハッシュ演算部と、ハッシュ値ｈのビット列と双線形関数値Ｒのビット列とを含むビット結合値βに対し、任意のビット長のビット列を復元署名対象情報ｒｅｃとビット長が等しいビット列に変換する第２ハッシュ関数Ｈ２を作用させたハッシュ値ｖ＝Ｈ２（β）を算出する第２ハッシュ演算部と、ハッシュ値ｖと復元署名対象情報ｒｅｃとの排他的論理和値ｘを算出する第１排他的論理和演算部と、ハッシュ値ｈのビット列を第１ビット位置に配置し、排他的論理和値ｘのビット列を第２ビット位置に配置したビット結合値ｒを算出するビット結合部と、ビット結合値ｒのビット列を含むビット列γに対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ＝Ｈ３（γ）を算出する第３ハッシュ演算部と、予め定められた規則に従ってハッシュ値ｕに対して定まる整数をｔとした場合における、元Ｐ１の楕円曲線Ｅ上でのｙ倍点ｙ・Ｐ１と、Ｓｉｄの楕円曲線Ｅ上でのｔ倍点ｔ・Ｓｉｄの楕円逆元−ｔ・Ｓｉｄとを楕円加算した楕円曲線演算値σ＝ｙ・Ｐ１−ｔ・Ｓｉｄを算出する楕円曲線演算部と、ビット結合値ｒと楕円曲線演算値σとからなる署名情報（ｒ，σ）を送信する送信部と、を有する。
【００１３】
以上のように本発明では、第２ハッシュ演算部が、任意のビット長のビット列を復元署名対象情報ｒｅｃとビット長が等しいビット列に変換する第２ハッシュ関数Ｈ２を用い、ビット結合値βを復元署名対象情報ｒｅｃとビット長が等しいハッシュ値ｖに変換する。ハッシュ関数の出力ビット長を変化させることは、楕円曲線Ｅを変更することに比べて大変容易である。そのため、本発明の署名生成装置では、復元署名対象情報ｒｅｃのあらゆるビット長に柔軟に対応した署名生成が可能となる。
【００１４】
また、本発明の署名検証装置は、元Ｐ２と、元Ｐ２の楕円曲線Ｅ上でのｍｓ倍点ｍｓ・Ｐ２であるマスター公開鍵ｍｐと、を格納する第３記憶部と、ビット列である第１パート情報ｒ’と、有限集合Ｅ［ｐ］の元である第２パート情報σ’とからなる署名情報（ｒ’，σ’）を受信する受信部と、第１パート情報ｒ’と第２パート情報σ’を格納する第４記憶部と、署名生成装置の識別子ｉｄに対応する有限集合Ｅ［ｐ］の元Ｐｉｄを格納する第５記憶部と、第１パート情報ｒ’のビット列を含むビット列γ’に対し、第３ハッシュ関数Ｈ３を作用させたハッシュ値ｕ’＝Ｈ３（γ’）を算出する第４ハッシュ演算部と、予め定められた規則に従ってハッシュ値ｕ’に対して定まる整数をｔ’とした場合における、双線形関数値Ｒ’＝ｅ（σ’，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ’∈μｐを算出する第２双線形関数演算部と、第１パート情報ｒ’の第１ビット位置のビット列ｈ’と、第１パート情報ｒ’の第２ビット位置のビット列ｘ’とを抽出するビット分割部と、ハッシュ値ｈ’のビット列と双線形関数値Ｒ’のビット列とを含むビット結合値β’に対し、第２ハッシュ関数Ｈ２を作用させたハッシュ値ｖ’＝Ｈ２（β’）を算出する第５ハッシュ演算部と、ハッシュ値ｖ’とビット列ｘ’との排他的倫理和値を、署名対象情報の復元値ｒｅｃ’として算出する第２排他的論理和演算部と、署名対象情報の復元値ｒｅｃ’のビット列と双線形関数値Ｒ’のビット列とを含むビット結合値α’に対し、第１ハッシュ関数Ｈ１を作用させたハッシュ値ｈ’’＝Ｈ１（α’）を算出する第６ハッシュ演算部と、ビット列ｈ’とハッシュ値ｈ’’とが等しいか否かを判定する比較部と、を有する。
【００１５】
この署名検証装置により、上述の署名生成装置が生成した署名を検証できる。また、本発明の署名検証装置は、複数の署名生成装置に共通するマスター公開鍵ｍｐと、実際に署名生成を行った署名生成装置の識別子ｉｄとがあれば、署名検証と署名対象情報の復元とができる。そのため、実際に署名生成を行った署名生成装置ごとに異なる公開鍵を用いる従来構成に比べ、署名検証と署名対象情報の復元を行うために必要な鍵の取得や管理の煩雑さを軽減できる。
【発明の効果】
【００１６】
本発明では、公開鍵の取得や管理の煩雑さを軽減し、様々なビット長のメッセージに柔軟に対応可能なメッセージ復元署名を実現できる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施形態を説明する。
〔記号・用語の定義〕
まず、各実施形態で使用する記号・用語を定義する。
【００１８】
Ｚ：整数集合。
ｋ：ｋ∈Ｚ（Ｚの元）であるセキュリティパラメータ。
Ｅ：位数ｑの有限体Ｆｑ上で定義された楕円曲線。アフィン（affine）座標版のWeierstrass方程式
ｙ２＋ａ１・ｘ・ｙ＋ａ３・ｙ＝ｘ３＋ａ２・ｘ２＋ａ４・ｘ＋ａ６    …(3)
（ただし、ａ１，ａ２，ａ３，ａ４，ａ６∈Ｆｑ）を満たす点（ｘ,ｙ）の集合に無限遠点と呼ばれる特別な点Ｏを付加したもので定義される。楕円曲線Ｅ上の任意の２点に対して楕円加算と呼ばれる二項演算＋及び楕円曲線Ｅ上の任意の１点に対して楕円逆元と呼ばれる単項演算−がそれぞれ定義できる。また、この楕円加算に関して群をなすこと及び楕円加算を用いて楕円スカラー倍算と呼ばれる演算が定義できることはよく知られている（例えば、参考文献１“イアン・Ｆ・ブラケ、ガディエル・セロッシ、ナイジェル・Ｐ・スマート＝著、「楕円曲線暗号」、出版＝ピアソン・エデュケーション、ISBN4-89471-431-0”等参照）。
【００１９】
＃Ｅ：楕円曲線Ｅ上の有理点からなる有限集合の要素数。有限体Ｆｑ上で定義された楕円曲線Ｅの有理点の個数＃Ｅは有限である。
ｐ：＃Ｅを割り切る大きい素数。
Ｅ［ｐ］：楕円曲線Ｅのｐ等分点からなる有限集合。楕円曲線Ｅ上の点Ａのうち、楕円曲線Ｅ上での楕円スカラー倍算値ｐ・Ａがｐ・Ａ＝Ｏを満たす点Ａの有限集合として定義される。Ｅ［ｐ］はＥの部分群である。
μｐ：有限体Ｆｑを基礎体とする拡大体である有限集合。その一例は、有限体Ｆｑの代数閉包における１のｐ乗根からなる有限集合である。
ｅ：非退化双線形ペアリング（pairing）関数（以下「ペアリング関数」と呼ぶ）であり、以下の式で定義される。
Ｅ［ｐ］×Ｅ［ｐ］＝μｐ  …(4)
【００２０】
ペアリング関数ｅは次の性質を持つ。
［性質１］Ｅ［ｐ］上の任意の点Ａ１に対して、ｅ（Ａ１，Ａ１）＝１が成り立つ。
［性質２］Ｅ［ｐ］上の任意の２点Ａ１、Ａ２に対して、ｅ（Ａ１，Ａ２）＝ｅ（Ａ２，Ａ１）−１が成り立つ。
［性質３］Ｅ［ｐ］上の任意の３点Ａ１，Ａ２，Ａ３に対して、ｅ（Ａ１＋Ａ２，Ａ３）＝ｅ（Ａ１，Ａ３）ｅ（Ａ２，Ａ３）であり、ｅ（Ａ１，Ａ２＋Ａ３）＝ｅ（Ａ１，Ａ２）ｅ（Ａ１，Ａ３）が成り立つ。
［性質４］Ｅ［ｐ］上の任意の点Ａ１に対して、ｅ（Ａ１，Ｏ）＝１が成り立つ。
［性質５］Ｅ［ｐ］上のある点Ａ１がＥ［ｐ］上のすべての点Ａ２に対して、ｅ（Ａ１，Ａ２）＝１を満たすなら、Ａ１＝Ｏが成り立つ。
【００２１】
なお、ペアリング関数ｅの具体例としては、ＷｅｉｌペアリングやＴａｔｅペアリングなどを挙げることができる（例えば、参考文献２「Alfred. J. Menezes，ELLIPTIC CURVE PUBLIC KEY CRYPTOSYSTEMS， KLUWER ACADEMIC PUBLISHERS， ISBN0-7923-9368-6，pp. 61-81」等参照）。また、ペアリング関数が効率的に計算可能な非超特異楕円曲線（non-supersingular curve）の生成方法については、参考文献３「A. Miyaji, M. Nakabayashi, S.Takano, "New explicit conditions of elliptic curve Traces for FR-Reduction," IEICE Trans. Fundamentals, vol. E84-A, no05, pp. 1234-1243, May 2001」、参考文献４「P.S.L.M. Barreto, B. Lynn, M. Scott, "Constructing elliptic curves with prescribed embedding degrees," Proc. SCN '2002, LNCS 2576, pp.257-267, Springer-Verlag. 2003」、参考文献５「R. Dupont, A. Enge, F. Morain, "Building curves with arbitrary small MOV degree over finite prime fields," http://eprint.iacr.org/2002/094/」などに開示されている。また、ペアリング関数をコンピュータ上で計算するためのアルゴリズムとしては、周知のMiller のアルゴリズム（参考文献６「V. S. Miller, “Short Programs for functions on Curves,” [online]，1986，[2008年6月13日検索],インターネット＜http://crypto.stanford.edu/miller/miller.pdf＞」などが存在する。
【００２２】
Ｐ１，Ｐ２：ｅ（Ｐ１，Ｐ２）≠１を満たす有限集合Ｅ［ｐ］の元。
＜Ｐ１＞：Ｐ１を生成元とする巡回群。
＜Ｐ２＞：Ｐ２を生成元とする巡回群。
ＩＤｅｎｃｏｄｅ：任意のビット列を＜Ｐ１＞に移す衝突困難な関数｛０，１｝＊→＜Ｐ１＞。ＩＤｅｎｃｏｄｅの例は以下の通りである。
【００２３】
《ＩＤｅｎｃｏｄｅの例１》関数Ｈ：｛０，１｝＊→Ｆｑを衝突困難な関数とする。このような関数は、例えばＳＨＡ−１などのハッシュ関数の出力を一定の方法で有限体Ｆｑの元に対応させることで得られる。ｃを自然数で、＃Ｅ＝ｃ・ｐとなるものとする。ｃは通常cofactorと呼ばれる。以上の準備の下で、以下のアルゴリズムを実行する関数をＩＤｅｎｃｏｄｅとする。
【００２４】
処理１．ｒａｎ←０
処理２．入力ｉｓに対してｘ１＝Ｈ（ｉｓ｜ｒａｎ）を計算する。
処理３．ｙ１∈Ｆｑに関して、（ｘ１，ｙ１）∈Ｅとなる条件から導かれる２次方程式を解く。解ｙ１が存在するならば、処理５に進む。
処理４．ｒａｎ←ｒａｎ＋１として処理２に戻る。
処理５．点（ｘ１，ｙ１）∈Ｅをｃ倍してその結果を出力する。＃Ｅ＝ｃ・ｐであり、楕円曲線Ｅ上の任意の点をｃ・ｐ倍すると無限遠点Ｏとなるため、点（ｘ１，ｙ１）∈Ｅをｃ倍した点はＥ［ｐ］の元となる。
【００２５】
《ＩＤｅｎｃｏｄｅの例２》＜Ｐ１＞の元をＤ個選択し、それらをそれぞれ０以上Ｄ−１以下の整数ｄに対応付け、選択された＜Ｐ１＞の各元をＳＰｄ∈＜Ｐ１＞とする。また、入力された任意のビット列に対してＤビットのハッシュ値を出力とするハッシュ関数Ｈ０を用意する。入力された任意のビット列にハッシュ関数Ｈ０を作用させて得られたＤビットのビット列の上位からｄビット目をｈｄ∈｛０，１｝とする。そして、入力された任意のビット列に対してΣｄ＝０Ｄ−１ｈｄ・ＳＰｄを出力する関数をＩＤｅｎｃｏｄｅとする。
【００２６】
Ｍｒｅｃ：署名対象となるメッセージの復元部分である任意のビット長のリカバリーメッセージＭｒｅｃ∈｛０，１｝＊。なお、メッセージの復元部分とは、メッセージのうち一旦秘匿され、署名検証装置で復元される情報を意味する。つまり、リカバリーメッセージＭｒｅｃは、秘匿される署名対象のビット列である。
【００２７】
Ｍｃｌｒ：署名対象となるメッセージの非復元部分である任意のビット長のクリアーメッセージＭｃｌｒ∈｛０，１｝＊。なお、メッセージの非復元部分とは、メッセージのうち秘匿されることなく署名検証装置に開示される情報を意味する。つまり、クリアーメッセージＭｃｌｒは秘匿されない署名対象のビット列である。
【００２８】
ｅｎｃｏｄｅ：任意のビット長のビット列を入力ビット長に応じたビット長のビット列に変換する関数｛０，１｝＊→｛０，１｝＊。ただし、ｅｎｃｏｄｅの出力ビット長をＬ（Ｌは１以上の整数）とする。ｅｎｃｏｄｅの例は後述する。
【００２９】
ｄｅｃｏｄｅ：ｅｎｃｏｄｅの逆関数。
ｒｅｃ：署名検証装置によって復元されるビット列である復元署名対象情報ｒｅｃ＝ｅｎｃｏｄｅ（Ｍｒｅｃ）。
ｒｏｕｎｄｄｏｗｎ｛＊｝: ＊の小数点以下を切り捨てる関数。
ｌｅｎｇｔｈ（＊）: ＊のビット長を求める関数。その出力ビット長は一定である。
ｄｅｌｅｔｅ｛δ，ε｝:εのビットを先頭からδビットだけ削除する関数。
【００３０】
Ｈ１：任意のビット長のビット列をＮビットのビット列に変換するハッシュ関数｛０，１｝＊→｛０，１｝Ｎ。ただし、Ｎは１以上の整数。なお、ハッシュ関数の具体例としては、ＳＨＡ−１やそれを利用した一方向性関数を例示できる。
Ｈ２：出力長可変のハッシュ関数Ｈ２：｛０，１｝＊×Ｎ→｛０，１｝＊である。任意のＬ∈Ｎについて、任意のω∈｛０，１｝＊に対する出力値Ｈ２（ω，Ｌ）は長さＬのビット列となる。なお、以下では、Ｈ２（ω，Ｌ）をＨ２（ω）と表記する。
Ｈ３：ハッシュ関数。
【００３１】
ｂ｜ｃ：ビット列ｂとビット列ｃとのビット結合値。
ｂ（＋）ｃ：ｂとｃとの排他的論理和。
Ｚ／ｐＺ：ｐを法とする剰余類。各実施形態では、その代表元をＺ／ｐＺと表現する。また、代表元の一例は、０以上ｐ−１以下の整数である。
（Ｚ／ｐＺ）＼｛０｝：Ｚ／ｐＺから０を除いた集合。各実施形態では、１以上ｐ−１以下の整数を（Ｚ／ｐＺ）＼｛０｝とする。
ｍｓ：ＩＤベース暗号のマスター秘密鍵ｍｓ∈Ｚ／ｐＺ。なお、ＩＤベース暗号については、例えば、参考文献７「D. Boneh and M. Franklin, "Identify-based encryption from the Weil pairing", Advances in Cryptology 0 CRYTPO '01, volume 2139 of LNCS, pages 213-229. Springer, 2001.」などに開示されている。
【００３２】
ｍｐ：ＩＤベース暗号のマスター公開鍵ｍｐ＝ｍｓ・Ｐ２∈＜Ｐ２＞。
ｉｄ：署名生成装置の識別子ｉｄ∈｛０，１｝＊。
Ｐｉｄ：ｉｄに対応する楕円曲線Ｅ上の点Ｐｉｄ＝ＩＤｅｎｃｏｄｅ（ｉｄ）∈＜Ｐ１＞。
Ｓｉｄ：署名生成装置の秘密鍵Ｓｉｄ＝ｍｓ・Ｐｉｄ∈＜Ｐ１＞。
【００３３】
〔第１実施形態〕
本発明の第１実施形態を説明する。
【００３４】
＜構成＞
図１は、第１実施形態のリカバリ署名システム１を説明するためのシステム構成図である。また、図２は、第１実施形態の署名生成装置１０の詳細構成を説明するためのブロック図である。図３は、第１実施形態におけるハッシュ演算部１０ｉの詳細構成の一例を説明するためのブロック図である。図４は、第１実施形態の署名検証装置２０の詳細構成を説明するためのブロック図である。図５は、第１実施形態の管理装置３０の詳細構成を説明するためのブロック図である。
【００３５】
図１に示すように、本形態のリカバリ署名システム１は、署名を生成する署名生成装置１０と、署名を検証する署名検証装置２０と、リカバリ署名システム１を管理する第三者機関の装置である管理装置３０とを有し、それらはネットワーク４０を通じて通信可能に接続されている。なお、説明の簡略化のため、図１では署名生成装置１０及び署名検証装置２０を１つずつ記述しているが、署名生成装置１０や署名検証装置２０が２以上存在してもよい。同様に、管理装置３０が２以上存在してもよい。
【００３６】
図２に示すように、本形態の署名生成装置１０は、メモリ１０ａ（「第１記憶部」「第２記憶部」「第６記憶部」）と、一時メモリ１０ｂと、制御部１０ｃと、入力部１０ｄと、符号化部１０ｅと、任意数選択部１０ｆと、双線形関数演算部１０ｇ（「第１双線形関数演算部」）と、ハッシュ演算部１０ｈ（「第１ハッシュ演算部」）と、ハッシュ演算部１０ｉ（「第２ハッシュ演算部」）と、排他的論理和演算部１０ｊ（「第１排他的論理和演算部」）と、ビット結合部１０ｋと、ハッシュ演算部１０ｍ（「第３ハッシュ演算部」）と、剰余演算部１０ｎと、判定部１０ｐ，１０ｒと、楕円曲線演算部１０ｑと、通信部１０ｓ（「送信部」）とを有する。また、図３に示す例では、ハッシュ演算部１０ｉは、ハッシュ回数演算部１０ｉａと、部分ハッシュ演算部１０ｉｂと、ビット結合部１０ｉｃと、ビット削除部１０ｉｄとを有する。なお、本形態の署名生成装置１０は、ＣＰＵ（Central Processing Unit）やＲＡＭ（Random Access Memory）などからなる通信手段を備えた公知のコンピュータに所定のプログラムが読み込まれて構成される。ここで、メモリ１０ａや一時メモリ１０ｂは、例えば、ＲＡＭ、レジスタ、補助記憶装置、或いはこれらを結合した記憶領域である。また、制御部１０ｃと、符号化部１０ｅと、任意数選択部１０ｆと、双線形関数演算部１０ｇと、ハッシュ演算部１０ｈ，１０ｉ，１０ｍと、排他的論理和演算部１０ｊと、ビット結合部１０ｋと、剰余演算部１０ｎと、判定部１０ｐ，１０ｒと、楕円曲線演算部１０ｑとは、例えば、ＣＰＵが所定のプログラムを実行して構築される処理手段である。また、入力部１０ｄは、キーボード、マウス、入力ポートなどの入力インタフェースである。また、通信部１０ｓは、所定のプログラムを実行するＣＰＵの制御のみと駆動するＬＡＮカード、モデム等の通信手段である。また、署名生成装置１０は、制御部１０ｃの制御のもと各処理を実行する。さらに、特に明示しない限り、演算過程の各データは逐一一時メモリ１０ｂに読み書きされる。
【００３７】
また、図４に示すように、本形態の署名検証装置２０は、メモリ２０ａ（「第３記憶部」「第４記憶部」「第５記憶部」「第７記憶部」）と、一時メモリ２０ｂと、制御部２０ｃと、通信部２０ｄ（「受信部」）と、ハッシュ演算部２０ｅ（「第４ハッシュ演算部」）と、剰余演算部２０ｆと、識別子符号化部２０ｇと、双線形関数演算部２０ｈ（「第２双線形関数演算部」）と、判定部２０ｉと、ビット分割部２０ｊと、ハッシュ演算部２０ｋ（「第５ハッシュ演算部」）と、排他的論理和演算部２０ｍ（「第２排他的論理和演算部」）と、ハッシュ演算部２０ｎ（「第６ハッシュ演算部」）と、比較部２０ｐと、復号部２０ｑと、出力部２０ｒと、入力部２０ｓとを有する。なお、本形態の署名検証装置２０は、ＣＰＵやＲＡＭからなる通信手段を備えた公知のコンピュータに所定のプログラムが読み込まれて構成される。ここで、メモリ２０ａや一時メモリ２０ｂは、例えば、ＲＡＭ、レジスタ、補助記憶装置、或いはこれらを結合した記憶領域である。また、制御部２０ｃと、ハッシュ演算部２０ｅと、剰余演算部２０ｆと、識別子符号化部２０ｇと、双線形関数演算部２０ｈと、判定部２０ｉと、ビット分割部２０ｊと、ハッシュ演算部２０ｋと、排他的論理和演算部２０ｍと、ハッシュ演算部２０ｎと、比較部２０ｐと、復号部２０ｑとは、例えば、ＣＰＵが所定のプログラムを実行して構築される処理手段である。また、通信部２０ｄは、所定のプログラムを実行するＣＰＵの制御のみと駆動するＬＡＮカード、モデム等の通信手段である。また、出力部２０ｒは、ディスプレイ、出力ポートなどの出力インタフェースであり、入力部２０ｓは、キーボード、マウス、入力ポートなどの入力インタフェースである。また、署名検証装置２０は、制御部２０ｃの制御のもと各処理を実行する。さらに、特に明示しない限り、演算過程の各データは逐一一時メモリ２０ｂに読み書きされる。
【００３８】
また、図５に示すように、管理装置３０は、メモリ３０ａと、一時メモリ３０ｂと、制御部３０ｃと、マスター秘密鍵生成部３０ｄと、マスター公開鍵生成部３０ｅと、識別子符号化部３０ｆと、秘密鍵生成部３０ｇと、通信部３０ｈとを有する。本形態の管理装置３０は、ＣＰＵやＲＡＭからなる通信手段を備えた公知のコンピュータに所定のプログラムが読み込まれて構成される。
【００３９】
＜処理＞
次に本形態の処理について説明する。
［前処理］
まず、前処理として、第三者機関が、セキュリティパラメータｋ∈Ｚに対してｋビット安全性が担保されるように、楕円曲線Ｅと、＃Ｅを割り切る大きい素数ｐと、ペアリング関数ｅと、元Ｐ１，Ｐ２と、関数ＩＤｅｎｃｏｄｅと、関数ｅｎｃｏｄｅと、関数ｄｅｃｏｄｅと、ハッシュ関数Ｈ１，Ｈ２，Ｈ３とを設定する。
【００４０】
設定された楕円曲線Ｅとペアリング関数ｅと関数ｅｎｃｏｄｅとハッシュ関数Ｈ１，Ｈ２，Ｈ３は、例えば、署名生成装置１０を構成するためのプログラムに記述され、素数ｐと元Ｐ１，Ｐ２とは、例えば、署名生成装置１０のメモリ１０ａに格納され、これらは署名生成装置１０が利用可能な状態にされる。また、設定された楕円曲線Ｅとペアリング関数ｅと関数ＩＤｅｎｃｏｄｅと関数ｄｅｃｏｄｅとハッシュ関数Ｈ１，Ｈ２，Ｈ３は、例えば、署名検証装置２０を構成するためのプログラムに記述され、素数ｐと元Ｐ２とは、例えば、署名検証装置２０のメモリ２０ａに格納され、これらは署名検証装置２０が利用可能な状態にされる。さらに、設定された楕円曲線Ｅと関数ｅｎｃｏｄｅと関数ＩＤｅｎｃｏｄｅとは、例えば、管理装置３０を構成するためのプログラムに記述され、素数ｐと元Ｐ１，Ｐ２とは、例えば、管理装置３０のメモリ３０ａに格納され、これらは管理装置３０が利用可能な状態にされる。
【００４１】
また、管理装置３０のマスター秘密鍵生成部３０ｄが、マスター秘密鍵ｍｓ∈ＵＺ／ｐＺを一様ランダムに選択し、それをメモリ３０ａに安全に格納する。次に、マスター公開鍵生成部３０ｅが、メモリ３０ａからマスター秘密鍵ｍｓと元Ｐ２とを読み込み、楕円曲線Ｅ上の点である元Ｐ２を楕円曲線Ｅ上でｍｓし、その演算結果ｍｐ＝ｍｓ・Ｐ２∈＜Ｐ２＞をマスター公開鍵ｍｐとしてメモリ３０ａに格納する。このように生成されたマスター公開鍵ｍｐは、署名検証装置２０にも配信され、署名検証装置２０のメモリ２０ａに格納される。
【００４２】
［秘密鍵生成処理］
次に、管理装置３０が署名生成装置１０の秘密鍵を生成する秘密鍵生成処理を説明する。秘密鍵生成処理は、前処理において実行されてもよいし、署名生成装置１０が署名生成を行うたびに実行されてもよいし、所定の契機で定期的又は不定期的に実行されてもよい。
【００４３】
秘密鍵生成処理では、まず、署名生成装置１０の入力部１０ｄに署名生成装置１０の識別子ｉｄが入力される。識別子ｉｄの例は、署名生成装置１０のメールアドレス、ＵＲＬ、電話番号、位置情報、時刻情報、ユーザ名などである。入力された識別子ｉｄはメモリ１０ａに格納される。また、識別子ｉｄは、秘密鍵発行要求情報とともに通信部１０ｑからネットワーク４０経由で管理装置３０に送信される。これらの情報は管理装置３０の通信部３０ｈで受信され、識別子ｉｄはメモリ３０ａに格納される。次に、識別子ｉｄは識別子符号化部３０ｆに読み込まれ、識別子符号化部３０ｆは識別子ｉｄを関数ＩＤｅｎｃｏｄｅに入力し、楕円曲線Ｅ上の点Ｐｉｄ＝ＩＤｅｎｃｏｄｅ（ｉｄ）を算出する。これは有限集合Ｅ［ｐ］の元である。楕円曲線Ｅ上の点Ｐｉｄはメモリ３０ａに格納され、さらに秘密鍵生成部３０ｇに読み込まれる。秘密鍵生成部３０ｇは、楕円曲線Ｅ上の点Ｐｉｄを楕円曲線Ｅ上でｍｓ倍した署名生成装置１０の秘密鍵Ｓｉｄ＝ｍｓ・Ｐｉｄを生成し、秘密鍵Ｓｉｄをメモリ３０ａに格納する。生成された秘密鍵Ｓｉｄは通信部３０ｈに送られ、専用回線や公知の公開鍵暗号や共通鍵暗号などを用い、署名生成装置１０に安全に送信される。秘密鍵Ｓｉｄは署名生成装置１０の通信部１０ｑで受信され、メモリ１０ａに安全に格納される。
【００４４】
［署名生成処理］
次に、署名生成装置１０の署名生成処理を説明する。この処理の前提として、署名生成装置１０のメモリ１０ａに元Ｐ１，Ｐ２と素数ｐと署名生成装置１０の秘密鍵Ｓｉｄと識別子ｉｄとが格納されているものとする。
【００４５】
図６は、第１実施形態の署名生成処理を説明するためのフローチャートである。以下、この図に従って本形態の署名生成処理を説明する。
【００４６】
まず、入力部１０ｄに、署名対象となるリカバリーメッセージＭｒｅｃ及びクリアーメッセージＭｃｌｒが入力され、これらがメモリ１０ａに格納される（ステップＳ１）。次に、符号化部１０ｅが、メモリ１０ａからリカバリーメッセージＭｒｅｃを読み込み、関数ｅｎｃｏｄｅを用いて符号化し、Ｌビットの復元署名対象情報ｒｅｃ＝ｅｎｃｏｄｅ（Ｍｒｅｃ）を生成する。以下に関数ｅｎｃｏｄｅの具体例を示す。
【００４７】
［関数ｅｎｃｏｄｅの具体例の説明］
関数ｅｎｃｏｄｅは、任意の入力ビット列に対し、セキュリティパラメータｋに対応した安全性が得られるビット長の復元署名対象情報ｒｅｃを出力する可逆な関数（逆関数が存在する関数）である。セキュリティパラメータｋに対応した安全性が得られるビット長が７２ビット以上であった場合の関数ｅｎｃｏｄｅの一例は以下の通りである。
【００４８】
《ｌｅｎｇｔｈ（Ｍｒｅｃ）が７２ビット未満の場合》
ｅｎｃｏｄｅ（Ｍｒｅｃ）＝ｌｅｎｇｔｈ（Ｍｒｅｃ）|Ｍｒｅｃ|０…０  …(4)
（ただし、Ｍｒｅｃ|０…０のビット長は７２ビットである。）
【００４９】
《ｌｅｎｇｔｈ（Ｍｒｅｃ）が７２ビット以上の場合》
ｅｎｃｏｄｅ（Ｍｒｅｃ）＝０ｘｆｆ|Ｍｒｅｃ  …(5)
（ただし、０ｘｆｆは、付加ビットが追加されていないことを示すヘッダ情報である。また、０ｘｆｆのビット長ＢＬは関数ｌｅｎｇｔｈの出力ビット長ＢＬと等しい。）
この場合、関数ｄｅｃｏｄｅの演算は以下のようになる。
【００５０】
《ｒｅｃの先頭ＢＬビットが０ｘｆｆである場合》
ｒｅｃから先頭ＢＬビットを除いたビット列を出力する。
【００５１】
《ｒｅｃの先頭ＢＬビットが０ｘｆｆでない場合》
ｒｅｃの先頭ＢＬビットが０ｘｆｆでない場合には、ｒｅｃから先頭ＢＬビットに示されるビット長だけ、ｒｅｃの先頭ＢＬビットより下位のビット列を抽出して出力する（  ［関数ｅｎｃｏｄｅの具体例の説明］終わり）。
【００５２】
生成された復元署名対象情報ｒｅｃは、メモリ１０ａに格納される（ステップＳ２）。次に、任意数選択部１０ｆが乱数ｙ∈（Ｚ／ｐＺ）＼｛０｝を選択し、それをメモリ１０ａに格納する（ステップＳ３）。なお、乱数の選択は、例えば、ＳＨＡ-１等の一方向性ハッシュ関数を用いて構成される、計算量理論に基づく擬似乱数生成アルゴリズム等を用いて行う。
【００５３】
次に、双線形関数演算部１０ｇが、メモリ１０ａから元Ｐ１，Ｐ２と乱数ｙとを読み込み、ペアリング関数ｅを用いて双線形関数値Ｒ＝ｅ（Ｐ１，Ｐ２）ｙ∈μｐを算出し、双線形関数値Ｒをメモリ１０ａに格納する（ステップＳ４）。なお、ｅ（Ｐ１，Ｐ２）ｙ∈μｐは有限体Ｆｑを基礎体とする標数ｑのｍ（ｍ≧２）次の拡大体Ｆｑｍ上の演算である。拡大体Ｆｑｍの元は、有限体Ｆｑの元を係数とするαについてのｍ−１次多項式で表現できる。なお、αは有限体Ｆｑの元を係数とする既約多項式の根である。また、この既約多項式のうち最小次数のものをｆとし、拡大体Ｆｑｍの元を表現する２つの多項式をＡ（α），Ｂ（α）とすると、拡大体Ｆｑｍ上の乗算は、Ｃ（α）＝Ａ（α）・Ｂ（α） ｍｏｄ ｆ（α）と表現でき、多項式演算Ａ（α）・Ｂ（α）とｆ（α）による除算とによって計算できる。なお、多項式演算Ａ（α）・Ｂ（α）における各次数の係数間の演算は有限体Ｆｑ上の演算である。また、拡大体Ｆｑｍ上のべき乗は、このような拡大体Ｆｑｍ上の乗算をべき乗回繰り返すことを意味する。例えば、ｅ（Ｐ１，Ｐ２）３∈μｐは、ｅ（Ｐ１，Ｐ２）・ｅ（Ｐ１，Ｐ２）・ｅ（Ｐ１，Ｐ２）∈μｐを意味する。
【００５４】
次に、ハッシュ演算部１０ｈが、メモリ１０ａから復元署名対象情報ｒｅｃと双線形関数値Ｒと識別子ｉｄとを読み込み、それらの各ビット列のビット結合値α＝ｒｅｃ｜Ｒ｜ｉｄに対し、ハッシュ関数Ｈ１を作用させたＮビットのハッシュ値ｈ＝Ｈ１（α）を算出する（ステップＳ５）。生成されたハッシュ値ｈはメモリ１０ａに格納される。次に、ハッシュ演算部１０ｉが、メモリ１０ａからハッシュ値ｈのビット列と双線形関数値Ｒのビット列と識別子ｉｄのビット列とを読み込み、それらの各ビット列のビット結合値β＝ｈ｜Ｒ｜ｉｄに対し、ハッシュ関数Ｈ２を作用させたＬビットのハッシュ値ｖ＝Ｈ２（β）を算出する（ステップＳ６）。生成されたハッシュ値ｖはメモリ１０ａに格納される。以下にステップＳ６の詳細を例示する。
【００５５】
［ステップＳ６の詳細処理の例］
図７は、ステップＳ６の詳細処理を例示するためのフローチャートである。
まず、ハッシュ演算回数算出部１０ｉａ（図３）が、記憶部１０ａから復元署名対象情報ｒｅｃを読み込み、
emax=rounddown{L/length(H)}, L=length(rec)  …(6)
の演算を行ってｅｍａｘ
を一時メモリ１０ｂに格納する（ステップＳ６ａ）。なお、ＨはＳＨＡ−１等の公知のハッシュ関数を意味し、ｌｅｎｇｔｈ（Ｈ）はハッシュ関数Ｈの出力ビットのビット長を意味する。なお、Ｌが定数である場合にはｅｍａｘを事前計算しておくことも可能であり、その場合にはステップＳ６ａの処理は不要となる。
【００５６】
次に、制御部１０ｃは変数ｅに０を代入し、変数ｅを一時メモリ１０ｂに格納する（ステップＳ６ｂ）。次に、部分ハッシュ演算部１０ｉｂが、一時メモリ１０ｂから変数ｅを読み込み、記憶部１０ａからハッシュ値ｈのビット列と双線形関数値Ｒのビット列と識別子ｉｄのビット列とを読み込み、それらの各ビット列のビット結合値β＝ｈ｜Ｒ｜ｉｄに対し、ハッシュ値
H(e,β)  …(7)
を算出して一時メモリ１０ｂに格納する（ステップＳ６ｃ）。
【００５７】
次に、制御部１０ｃが、一時メモリ１０ｂからｅｍａｘと変数ｅとを読み込み、
e=emax  …(8)
を満たすか否かを判断する（ステップＳ６ｄ）。ここで、式（８）を満たさないのであれば、制御部１０ｃはｅ＋１を新たなｅとし、新たなｅを一時メモリ１０ｂに格納した後（ステップＳ６ｅ）、処理をステップＳ６ｃに戻す。一方、式（８）を満たすのであれば、制御部１０ｃはビット結合部１０ｉｃに指示を与え、ビット結合部１０ｉｃは、一時メモリ１０ｂから各ハッシュ値Ｈ（０，β），Ｈ（１，β），Ｈ（２，β），…，Ｈ（ｅｍａｘ，β）を読み込み、それらのビット結合値
HC(β)=H(0,β)|・・・|H(emax,β)  …(9)
を算出して一時メモリ１０ｂに格納する（ステップＳ６ｆ）。
【００５８】
次に、ビット削除部１０ｉｄが、一時メモリ１０ｂから、ビット結合値ＨＣ（β）を読み込み、
v=H2(β)=delete{length(HC(β))- L,HC(β)}  …(10)
を算出して記憶部１０ａに出力する（ステップＳ６ｇ）。すなわち、ＨＣ（Ｒ）の先頭の数ビットを削除して全体のビット長をＬとしたものをｖ＝Ｈ２（β）とする。
【００５９】
なお、ステップＳ６の処理方法はこれに限定されない。例えば、ｅを用いるのではなく、ハッシュチェインによってハッシュ値のビット長を拡張する方法でもよい。この場合、式（９）のＨＣ（β）は、例えば、    
HC(β)=H(β)|H(H(β))|H(H(H(β)))|…|H(H(H…(β)…))
であってもよい（［ステップＳ６の詳細処理の例］の説明終わり）。
【００６０】
次に、排他的論理和演算部１０ｊが、メモリ１０ａからハッシュ値ｖと復元署名対象情報ｒｅｃとを読み込み、それらの排他的論理和値ｘ＝ｖ（＋）ｒｅｃを算出し、排他的論理和値ｘをメモリ１０ａに格納する（ステップＳ７）。次に、ビット結合部１０ｋが、メモリ１０ａからハッシュ値ｈと排他的論理和値ｘとを読み込み、ハッシュ値ｈのビット列を第１ビット位置に配置し、排他的論理和値ｘのビット列を第２ビット位置に配置したＮ＋Ｌビットのビット結合値ｒを算出する（ステップＳ８）。なお、第１ビット位置及び第２ビット位置はどのビット位置に設定されてもよいが、署名生成装置１０で設定される第１ビット位置と、署名検証装置２０で設定される第１ビット位置とは同一であり、かつ、署名生成装置１０で設定される第２ビット位置と、署名検証装置２０で設定される第２ビット位置とは同一であるものとする。また、第１ビット位置及び第２ビット位置の設定例は以下の通りである。
【００６１】
［第１ビット位置及び第２ビット位置の設定例］
図９は、第１ビット位置及び第２ビット位置の設定例を説明する図である。
《例１》先頭Ｎビットを第１ビット位置とし、残りＬビットを第２ビット位置とする（図９（ａ））。
《例２》先頭Ｌビットを第２ビット位置とし、残りＮビットを第１ビット位置とする（図９（ｂ））。
《例３》Ｌ個の奇数ビットを第２ビット位置とし、残りのＮビットを第１ビット位置とする（図９（ｃ））。
【００６２】
なお、これらは一例であり、その他の設定も可能である（［第１ビット位置及び第２ビット位置の設定例］の説明終わり）。
【００６３】
次に、ハッシュ演算部１０ｍが、メモリ１０ａからビット結合値ｒとクリアーメッセージＭｃｌｒと識別子ｉｄとを読み込み、それらのビット結合値γ＝ｒ｜Ｍｃｌｒ｜ｉｄに対し、ハッシュ関数Ｈ３を作用させたハッシュ値ｕ＝Ｈ３（γ）を算出する（ステップＳ９）。生成されたハッシュ値ｕはメモリ１０ａに格納される。次に、剰余演算部１０ｎがメモリ１０ａからハッシュ値ｕと素数ｐとを読み込み、剰余演算ｔ＝ｕ  ｍｏｄ  ｐを行い、その演算結果をメモリ１０ａに格納する（ステップＳ１０）。次に、判定部１０ｐがメモリ１０ａから演算結果ｔを読み込み、ｔ＝０であるか否かを判定する（ステップＳ１１）。ここで、ｔ＝０であれば、処理がステップＳ３に戻され、乱数ｙを取り直して処理がやり直される。一方、ｔ＝０でなければ、楕円曲線演算部１０ｑがメモリ１０ａから演算結果ｔと元Ｐ１と乱数ｙと秘密鍵Ｓｉｄとを読み込み、元Ｐ１の楕円曲線Ｅ上でのｙ倍点ｙ・Ｐ１と、Ｓｉｄの楕円曲線Ｅ上でのｔ倍点ｔ・Ｓｉｄの楕円逆元−ｔ・Ｓｉｄとを楕円加算した楕円曲線演算値σ＝ｙ・Ｐ１−ｔ・Ｓｉｄ∈Ｅ［ｐ］を算出する（ステップＳ１２）。算出された楕円曲線演算値σはメモリ１０ａに格納される。次に、判定部１０ｒが、メモリ１０ａから楕円曲線演算値σを読み込み、それが無限遠点Ｏを示すか否かを判定する（ステップＳ１３）。ここで、楕円曲線演算値σ＝Ｏであれば、処理がステップＳ３に戻され、乱数ｙを取り直して処理がやり直される。一方、楕円曲線演算値σ＝Ｏでなければ、制御部１０ｃがメモリ１０ａから乱数ｙを削除する（ステップＳ１４）。そして、クリアーメッセージＭｃｌｒとビット結合値ｒと楕円曲線演算値σとが送信部１０ｓに送られ、送信部１０ｓは、クリアーメッセージＭｃｌｒと署名情報（ｒ，σ）とをネットワーク４０経由で署名検証装置２０に送信する（ステップＳ１５）。
【００６４】
［署名検証処理］
次に、署名検証装置２０の署名検証処理を説明する。この処理の前提として、署名検証装置２０のメモリ２０ａにマスター公開鍵ｍｐと元Ｐ２と素数ｐとが格納されているものとする。
【００６５】
図８は、第１実施形態の署名検証処理を説明するためのフローチャートである。以下、この図に従って本形態の署名検証処理を説明する。
【００６６】
まず、署名検証装置２０の通信部２０ｄが、クリアーメッセージＭｃｌｒと署名情報（ｒ’，σ’）とを受信する（ステップＳ２１）。なお、この署名情報が正当なものであれば署名情報（ｒ’，σ’）＝（ｒ，σ）であるが、この時点ではそれが不明であるため、通信部２０ｄが受信する署名情報を（ｒ’，σ’）と表現する。受信された署名情報（ｒ’，σ’）は、ビット列である第１パート情報ｒ’と、有限集合Ｅ［ｐ］の元である第２パート情報σ’とからなり、これらはメモリ２０ａに格納される。次に、入力部２０ｓに署名生成装置１０の識別子ｉｄが入力され、メモリ２０ａに格納される（ステップＳ２２）。なお、識別子ｉｄがすでにメモリ２０ａに格納されているのであれば、ステップＳ２２は省略可能である。次に、ハッシュ演算部２０ｅが、メモリ２０ａから第１パート情報ｒ’とクリアーメッセージＭｃｌｒと識別子ｉｄとを読み込み、これらのビット列のビット結合からなるビット列γ’＝ｒ’｜Ｍｃｌｒ｜ｉｄに対し、ハッシュ関数Ｈ３を作用させたハッシュ値ｕ’＝Ｈ３（γ’）を算出する（ステップＳ２３）。算出されたハッシュ値ｕ’はメモリ２０ａに格納される。次に、剰余演算部２０ｆが、メモリ２０ａからハッシュ値ｕ’と素数ｐとを読み込み、剰余演算ｔ’＝ｕ’  ｍｏｄ  ｐを行い、その演算結果をメモリ２０ａに格納する（ステップＳ２４）。次に、識別子符号化部２０ｇが、メモリ２０ａから識別子ｉｄを読み込み、識別子ｉｄを関数ＩＤｅｎｃｏｄｅに入力し、楕円曲線Ｅ上の点Ｐｉｄ＝ＩＤｅｎｃｏｄｅ（ｉｄ）を算出する（ステップＳ２５）。これは署名生成装置１０の識別子ｉｄに対応する有限集合Ｅ［ｐ］の元Ｐｉｄである。生成された楕円曲線Ｅ上の点Ｐｉｄはメモリ２０ａに格納される。次に、双線形関数演算部２０ｈが、メモリ２０ａから、第２パート情報σ’と元Ｐ２と楕円曲線Ｅ上の点Ｐｉｄとマスター公開鍵ｍｐと演算結果ｔ’を読み込み、ペアリング関数ｅを用いて双線形関数値Ｒ’＝ｅ（σ’，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ’を算出する（ステップＳ２６）。生成された双線形関数値Ｒ’はメモリ２０ａに格納される。次に、判定部２０ｉが、メモリ２０ａから双線形関数値Ｒ’を読み込み、Ｒ’＝１であるか否かを判定する（ステップＳ２７）。ここで、Ｒ’＝１であれば、制御部２０ｃは署名を拒絶し（ステップＳ３６）、処理を終了する。一方、Ｒ’＝１でなければ、次に、ビット分割部２０ｊが、メモリ２０ａから第１パート情報ｒ’を読み込み、１パート情報ｒ’の第１ビット位置のビット列ｈ’と、第１パート情報ｒ’の第２ビット位置のビット列ｘ’とを抽出し（ステップＳ２８）、それらをメモリ２０ａに格納する。なお、前述のように、第１ビット位置及び第２ビット位置は、署名生成装置１０のビット結合部１０ｋに設定されたものと同一とする。例えば、署名生成装置１０のビット結合部１０ｋで先頭Ｎビットを第１ビット位置とし、残りＬビットを第２ビット位置としていたのであれば、ビット分割部２０ｊも先頭Ｎビットを第１ビット位置とし、残りＬビットを第２ビット位置として処理を行う。次に、ハッシュ演算部２０ｋが、メモリ２０ａからハッシュ値ｈ’と双線形関数値Ｒ’と識別子ｉｄとを読み込み、それらのビット列のビット結合値β’＝ｈ’｜Ｒ’｜ｉｄに対し、ハッシュ関数Ｈ２を作用させたハッシュ値ｖ’＝Ｈ２（β’）を算出する（ステップＳ２９）。算出されたハッシュ値ｖ’はメモリ２０ａに格納される。次に、排他的論理和演算部２０ｍが、メモリ２０ａからハッシュ値ｖ’とビット列ｘ’とを読み込み、それらの排他的倫理和値を、署名対象情報の復元値ｒｅｃ’として算出し（ステップＳ３０）、算出された復元値ｒｅｃ’をメモリ２０ａに格納する。次に、ハッシュ演算部２０ｎが、メモリ２０ａから署名対象情報の復元値ｒｅｃ’と双線形関数値Ｒ’と識別子ｉｄとを読み込み、それらのビット列のビット結合値α’＝ｒｅｃ’｜Ｒ’｜ｉｄに対し、ハッシュ関数Ｈ１を作用させたハッシュ値ｈ’’＝Ｈ１（α’）を算出する（ステップＳ３１）。算出されたハッシュ値ｈ’’は、メモリ２０ａに格納される。次に、比較部２０ｐがメモリ２０ａから、ビット列ｈ’とハッシュ値ｈ’’とを読み込み、これらが等しいか否かを判定する（ステップＳ３２）。ここで、これらが等しくなければ、制御部２０ｃは署名を拒絶し（ステップＳ３６）、処理を終了する。一方、これらが等しければ、次に、復号部２０ｑがメモリ２０ａから復元値ｒｅｃ’を読み込み、それをｄｅｃｏｄｅ関数に入力し、復号値Ｍｒｅｃ’＝ｄｅｃｏｄｅ（ｒｅｃ’）を算出し、それをメモリ２０ａに格納する（ステップＳ３４）。ここで、復号値Ｍｒｅｃ’が所定のフォーマットに従ったものでなければ、制御部２０ｃは署名を拒絶し（ステップＳ３６）、処理を終了する。一方、復号値Ｍｒｅｃ’が所定のフォーマットに従ったものであれば、検証が成功ものとして、復号値Ｍｒｅｃ’が出力部２０ｒに送られ、そこから出力される（ステップＳ３５）。
【００６７】
＜本形態の特徴＞
本形態の署名生成装置１０は、ステップＳ６で、ハッシュ値ｈのビット列と双線形関数値Ｒのビット列と識別子ｉｄのビット列のビット結合値β＝ｈ｜Ｒ｜ｉｄに対し、ハッシュ関数Ｈ２を作用させたＬビットのハッシュ値ｖ＝Ｈ２（β）を求め、このハッシュ値ｖとＬビットの復元署名対象情報ｒｅｃとの排他的論理和値ｘ＝ｖ（＋）ｒｅｃを行い、復元署名対象情報ｒｅｃを最終的な署名情報に関連付けている。ここで、排他的論理和値ｘ＝ｖ（＋）ｒｅｃを行うためには、ハッシュ値ｖと復元署名対象情報ｒｅｃとのビット長を同一にする必要があるが、前述のように、任意のビット長の入力に対し、復元署名対象情報ｒｅｃと同じビット長のハッシュ値ｖを出力するハッシュ関数Ｈ２を設定することは容易である。よって、本形態では、様々なビット長の復元署名対象情報ｒｅｃ及びリカバリーメッセージＭｒｅｃに柔軟に対応可能な署名情報を生成できる。
【００６８】
また、署名検証装置２０がステップＳ２１で受信した署名情報（ｒ’，σ’）が正当であり、（ｒ’，σ’）＝（ｒ，σ）であった場合、ステップＳ２３で算出されるハッシュ値ｕ’は、
ｕ’＝Ｈ３（γ’）
＝Ｈ３（ｒ’｜Ｍｃｌｒ｜ｉｄ）
＝Ｈ３（ｒ｜Ｍｃｌｒ｜ｉｄ）
＝ｕ
となり、ステップＳ２４で算出される剰余演算結果ｔ’＝ｔとなる。そして、ステップＳ２６で算出される双線形関数値Ｒ’は、
Ｒ’＝ｅ（σ’，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ’
＝ｅ（σ，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ
＝ｅ（ｙ・Ｐ１−ｔ・Ｓｉｄ，Ｐ２）・ｅ（Ｐｉｄ，ｍｐ）ｔ    …(11)
となる。そして、ｍｐ＝ｍｓ・Ｐ２であることと、ペアリング関数の［性質３］より、式（１１）は、
Ｒ’＝ｅ（ｙ・Ｐ１−ｔ・ｍｓ・Ｐｉｄ，Ｐ２）・ｅ（Ｐｉｄ，ｍｓ・Ｐ２）ｔ
＝ｅ（ｙ・Ｐ１−ｔ・ｍｓ・Ｐｉｄ，Ｐ２）・ｅ（ｍｓ・ｔ・Ｐｉｄ，Ｐ２）
＝ｅ（ｙ・Ｐ１−ｔ・ｍｓ・Ｐｉｄ＋ｍｓ・ｔ・Ｐｉｄ，Ｐ２）
＝ｅ（ｙ・Ｐ１，Ｐ２）
＝ｅ（Ｐ１，Ｐ２）ｙ
＝Ｒ
となる。
【００６９】
ここで、本形態ではｙ≠０であるため、Ｒ’≠１とはならない（ステップＳ２７）。また、ｒ’＝ｒである場合にはｈ’＝ｈ，ｘ’＝ｘとなるため（ステップＳ２８）、β’＝βとなり、ｖ’＝ｖとなり（ステップＳ２９）、ｒｅｃ’＝ｒｅｃとなる（ステップＳ３０）。よってｈ’’＝ｈ’＝ｈとなり（ステップＳ３１，Ｓ３２）、ｒｅｃ’＝ｒｅｃからリカバリーメッセージＭｒｅｃ’＝Ｍｒｅｃが復号され、検証が成功する（ステップＳ３３〜Ｓ３５）。
【００７０】
また、この署名検証処理を行うために署名検証装置２０がクリアーメッセージＭｃｌｒ及び署名情報（ｒ’，σ’）以外に取得すべき情報は、すべての装置に共有される楕円曲線Ｅ、ペアリング関数ｅ、関数ＩＤｅｎｃｏｄｅ、関数ｄｅｃｏｄｅ、ハッシュ関数Ｈ１，Ｈ２，Ｈ３、マスター公開鍵ｍｐなどの共用パラメータと、実際に署名生成を行った署名生成装置１０の識別子ｉｄである。これらのうち、署名生成装置１０に独自の情報は識別子ｉｄのみであり、さらに、この識別子ｉｄはメールアドレス等の容易に入手可能な情報である。よって、従来のように公開鍵証明書等を必要とするＲＳＡ等の公開鍵を用いる方式に比べ、署名検証に必要な鍵の取得や管理の煩雑さが軽減できる。また、ＧＰＳ装置で検出される特定の位置情報や、時計から出力される時刻情報などを識別子ｉｄとして用いた場合には、署名検証装置２０が所定の位置に達したり、所定の時間に達したりした場合にのみ、署名検証やリカバリーメッセージＭｒｅｃの復元を可能とするといったシステムも構築可能である。
【００７１】
〔第２実施形態〕
次に、本発明の第２実施形態を説明する。第２実施形態は第１実施形態の変形例であり、クリアーメッセージＭｃｌｒを用いず、クリアーメッセージＭｃｌｒをヌル値とした形態である。以下では、第１実施形態との相違点を中心に説明し、第１実施形態と共通する事項については説明を省略する。
【００７２】
＜構成＞
図１０は、第２実施形態の署名生成装置１１０の詳細構成を説明するためのブロック図である。図１１は、第２実施形態の署名検証装置１２０の詳細構成を説明するためのブロック図である。
【００７３】
本形態のリカバリ署名システムは、第１実施形態のリカバリ署名システム１を構成する署名生成装置１０を署名生成装置１１０に置換し、署名検証装置２０を署名検証装置１２０に置換した構成である。また、署名生成装置１０と署名生成装置１１０との相違点は、ハッシュ演算部１０ｍがハッシュ演算部１１０ｍ（「第３ハッシュ演算部」）に置換された点である。また、署名検証装置２０と署名検証装置１２０との相違点は、ハッシュ演算部２０ｅがハッシュ演算部１２０ｅ（「第４ハッシュ演算部」）に置換された点である。
【００７４】
＜処理＞
次に本形態の処理について説明する。
［前処理及び秘密鍵生成処理］
第１実施形態と同じであるため説明を省略する。
【００７５】
［署名生成処理］
次に、署名生成装置１１０の署名生成処理を説明する。図１２は、第２実施形態の署名生成処理を説明するためのフローチャートである。以下、第１実施形態との相違点を中心に説明する。
【００７６】
まず、入力部１０ｄに、署名対象となるリカバリーメッセージＭｒｅｃが入力され、これがメモリ１０ａに格納される（ステップＳ１０１）。本形態ではクリアーメッセージＭｃｌｒは入力されない。その後、第１実施形態と同じ、ステップＳ２〜Ｓ８の処理が実行される。次に、ハッシュ演算部１０ｍが、メモリ１０ａからビット結合値ｒと識別子ｉｄとを読み込み、それらのビット結合値γ＝ｒ｜ｉｄに対し、ハッシュ関数Ｈ３を作用させたハッシュ値ｕ＝Ｈ３（γ）を算出する（ステップＳ１０９）。生成されたハッシュ値ｕはメモリ１０ａに格納される。その後、第１実施形態と同じ、ステップＳ１０〜Ｓ１４の処理が実行された後、ビット結合値ｒと楕円曲線演算値σとが送信部１０ｓに送られ、送信部１０ｓは、署名情報（ｒ，σ）とをネットワーク４０経由で署名検証装置１２０に送信する（ステップＳ１１５）。
【００７７】
［署名検証処理］
次に、署名検証装置１２０の署名検証処理を説明する。図１３は、第２実施形態の署名検証処理を説明するためのフローチャートである。以下、第１実施形態との相違点を中心に説明する。
【００７８】
まず、署名検証装置２０の通信部２０ｄが、署名情報（ｒ’，σ’）を受信する（ステップＳ１２１）。本形態ではクリアーメッセージＭｃｌｒは受信されない。次に、入力部２０ｓに署名生成装置１０の識別子ｉｄが入力され、メモリ２０ａに格納される（ステップＳ２２）。なお、識別子ｉｄがすでにメモリ２０ａに格納されているのであれば、ステップＳ２２は省略可能である。次に、ハッシュ演算部２０ｅが、メモリ２０ａから第１パート情報ｒ’と識別子ｉｄとを読み込み、これらのビット列のビット結合からなるビット列γ’＝ｒ’｜ｉｄに対し、ハッシュ関数Ｈ３を作用させたハッシュ値ｕ’＝Ｈ３（γ’）を算出する（ステップＳ１２３）。算出されたハッシュ値ｕ’はメモリ２０ａに格納される。その後、第１実施形態のステップＳ２４〜Ｓ３６の処理によって署名検証とリカバリーメッセージの復元とが行われる。
【００７９】
〔変形例等〕
なお、本発明は上述の各実施形態に限定されるものではない。例えば、第１実施形態では、復元署名対象情報ｒｅｃと双線形関数値Ｒと識別子ｉｄとの各ビット列のビット結合値ｒｅｃ｜Ｒ｜ｉｄをαとし、署名対象情報の復元値ｒｅｃ’と双線形関数値Ｒ’と識別子ｉｄとの各ビット列のビット結合値ｒｅｃ’｜Ｒ’｜ｉｄをα’とした。しかし、復元署名対象情報ｒｅｃと双線形関数値Ｒとの各ビット列を含むビット結合値をαとし、前記署名対象情報の復元値ｒｅｃ’と前記双線形関数値Ｒ’との各ビット列を含むビット結合値をα’とし、ビット結合値αを構成するビット列とビット結合値をα’を構成するビット列とが等しい場合にα＝α’となるのであれば、αやα’が識別子ｉｄを含まなくてもよく、その他の情報を含んでもよく、各情報がどのような順序で結合されていてもよい。
【００８０】
また、同様に第１実施形態では、β＝ｈ｜Ｒ｜ｉｄとし、β’＝ｈ’｜Ｒ’｜ｉｄとしたが、ハッシュ値ｈと双線形関数値Ｒとの各ビット列を含むビット結合値をβとし、ハッシュ値ｈ’と双線形関数値Ｒ’との各ビット列を含むビット結合値をβ’とし、ビット結合値βを構成するビット列とビット結合値β’を構成するビット列とが等しい場合にβ＝β’となるのであれば、βやβ’が識別子ｉｄを含まなくてもよく、その他の情報を含んでもよく、各情報がどのような順序で結合されていてもよい。
【００８１】
また、同様に第１実施形態では、γ＝ｒ｜Ｍｃｌｒ｜ｉｄとし、γ’＝ｒ’｜Ｍｃｌｒ｜ｉｄとしたが、ビット結合値ｒのビット列を含むビット列をγとし、署名情報の第１パート情報ｒ’のビット列を含むビット列をγ’とし、ビット結合値γを構成するビット列とビット結合値γ’を構成するビット列とが等しい場合にγ＝γ’となるのであれば、γやγ’が識別子ｉｄを含まなくてもよく、Ｍｃｌｒを含まなくてもよくてもよく（例えば、第２実施形態）、その他の情報を含んでもよく、各情報がどのような順序で結合されていてもよい。
【００８２】
また、署名検証装置２０，１２０の判定部２０ｉが、メモリ２０ａから第２パート情報σ’や剰余演算結果ｔ’を読み込み、σ’が無限遠点Ｏであるか否かや、剰余演算結果ｔ’が０であるか否かを判定し、σ’＝Ｏであったり、ｔ’＝０であったりした場合に署名情報を拒絶する構成であってもよい。特に、ｔ’＝０であった場合に署名情報を拒絶する構成とした場合、ランダムオラクルモデルを前提としない実環境での安全性が向上する。すなわち、攻撃者が０＝ｕ  ｍｏｄ  ｐ、ｕ＝Ｈ３（ｒ｜Ｍｃｌｒ｜ｉｄ）を満たす整数ｒを発見できたとする。ここで、署名検証装置２０，１２０がｔ’＝０となることを許した場合には、攻撃者は、公開情報であるＰ１のみを用い、何れかの署名生成装置に成りすまして楕円曲線演算値σ＝ｙ・Ｐ１−ｔ・Ｓｉｄ＝ｙ・Ｐ１を生成し、署名検証に合格する署名情報（ｒ，σ）を生成できてしまう。署名検証装置２０，１２０がｔ’＝０となる署名情報を排除することで、このような攻撃を防止できる。
【００８３】
また、第１，２実施形態では、（Ｚ／ｐＺ）＼｛０｝の範囲から乱数ｙを選択することとした。しかし、０を含むＺ／ｐＺから乱数ｙを選び、署名検証時にステップＳ２７の判定を行わない構成でもよい。さらには、演算効率は落ちるが、一般的な整数から乱数ｙを選ぶ構成であってもよい。また、ステップＳ１１やステップＳ１３の判定を行わない構成であってもよい。
【００８４】
また、第１，２実施形態では、ｒｅｃ＝ｅｎｃｏｄｅ（Ｍｒｅｃ）としたが、ｒｅｃ＝Ｍｒｅｃとし、ステップＳ２，Ｓ３３，Ｓ３４を実行しない構成であってもよい。また、第１，２実施形態では、剰余演算ｔ＝ｕ  ｍｏｄ  ｐやｔ’＝ｕ’  ｍｏｄ  ｐによってｔやｔ’を算出することとしたが、ｔ＝ｕ及びｔ’＝ｕ’とし、ステップＳ１０，Ｓ２４を実行しない構成であってもよい。
【００８５】
また、ステップＳ４，Ｓ１２においてＰ１の代わりに＜Ｐ１＞に属するその他の元（例えば、Ｐｉｄ）を用いてもよい。
【００８６】
また、本形態ではリカバリーメッセージのビット長がどのような値であっても署名を生成できるため、リカバリーメッセージをヌル値とすることもできる。この場合には、クリアーメッセージのみが署名対象となる。このように、本形態の構成では、署名対象の自由度が向上する。
【００８７】
また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００８８】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【００８９】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９０】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００９１】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９２】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００９３】
本発明は、電子署名を用いる様々な用途に適用可能である。
【図面の簡単な説明】
【００９４】
【図１】図１は、第１実施形態のリカバリ署名システムを説明するためのシステム構成図である。
【図２】図２は、第１実施形態の署名生成装置の詳細構成を説明するためのブロック図である。
【図３】図３は、第１実施形態におけるハッシュ演算部１０ｉの詳細構成の一例を説明するためのブロック図である。
【図４】図４は、第１実施形態の署名検証装置の詳細構成を説明するためのブロック図である。
【図５】図５は、第１実施形態の管理装置の詳細構成を説明するためのブロック図である。
【図６】図６は、第１実施形態の署名生成処理を説明するためのフローチャートである。
【図７】図７は、ステップＳ６の詳細処理を例示するためのフローチャートである。
【図８】図８は、第１実施形態の署名検証処理を説明するためのフローチャートである。
【図９】図９は、第１ビット位置及び第２ビット位置の設定例を説明する図である。
【図１０】図１０は、第２実施形態の署名生成装置の詳細構成を説明するためのブロック図である。
【図１１】図１１は、第２実施形態の署名検証装置の詳細構成を説明するためのブロック図である。
【図１２】図１２は、第２実施形態の署名生成処理を説明するためのフローチャートである。
【図１３】図１３は、第２実施形態の署名検証処理を説明するためのフローチャートである。
【符号の説明】
【００９５】
１  リカバリ署名システム
１０，１１０  署名生成装置
２０，１２０  署名検証装置
３０  管理装置
【図１】
2010002662.tif 000003
【図２】
2010002662.tif 000004
【図３】
2010002662.tif 000005
【図４】
2010002662.tif 000006
【図５】
2010002662.tif 000007
【図６】
2010002662.tif 000008
【図７】
2010002662.tif 000009
【図８】
2010002662.tif 000010
【図９】
2010002662.tif 000011
【図１０】
2010002662.tif 000012
【図１１】
2010002662.tif 000013
【図１２】
2010002662.tif 000014
【図１３】
2010002662.tif 000015