(57)【要約】      （修正有）【課題】より安全性の高いサインクリプション技術を提供する。【解決手段】署名付き暗号化時、署名付き暗号化対象データに対する署名生成後、署名付き暗号化対象データに対して暗号化を行い、また署名付き暗号化データの復号および検証時に、まず復号化を行って得られた復号データの正当性を署名検証行うことで検証する。この結果、サインクリプション生成時に不当な復号および検証者のユーザ公開鍵が使われるなどの問題があった場合でも検証時に検出することができる。さらに、実際の暗号化および復号は共通鍵暗号を用いることにより、幅広い共通鍵暗号と組み合わせることが可能となり、より安全性の高いサインクリプション技術を実現することが可能となる。【選択図】図１
2011091517.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置を有するとともに任意の文字列を用いることのできる公開鍵に加えて、利用者自身が作成したユーザ公開鍵を用いて、暗号化と署名生成を同時に行うサインクリプションシステムにおける、サインクリプション生成方法であって、
制御装置による制御の元、素数ｑを選択し、位数ｑの２つの群Ｇ1、Ｇ２およびＧ1の生成元Ｐを、ペアリングｅ: Ｇ1×Ｇ1→Ｇ２を選択し、
乱数ｓを生成し、上記乱数ｓを用いてＰｐｕｂを計算し、
４つのハッシュ関数Ｈ１、Ｈ２、Ｈ３、Ｈ４を選択し、
共通鍵暗号Ｅを選択し、公開パラメータｐａｒａｍｓを
＜ｑ，Ｇ1，Ｇ２，ｅ，Ｐ，Ｐｐｕｂ，Ｈ1，Ｈ２，Ｈ３，Ｈ４，Ｅ＞，整数sをマスター鍵とし、
前記記憶装置上に保存する公開パラメータおよびマスター鍵生成処理と、
任意の文字列である上記利用者の公開鍵に対して、制御装置による制御の元、上記公開パラメータおよび上記マスター鍵を用いて、上記利用者の部分秘密鍵を生成し、
前記記憶装置上に保存する部分秘密鍵生成処理と、を特徴とするサインクリプション生成方法。
【請求項２】
前記生成した公開パラメータと、署名付き暗号化処理を行う利用者Ａの公開鍵に対して前記部分秘密鍵生成方法を用いて生成した部分秘密鍵を用いて、秘密鍵とユーザ公開鍵から構成される利用者Ａのユーザ鍵を生成し、記憶装置上に保存するユーザ鍵生成処理と、
制御装置による制御の元、前記公開パラメータと、署名付き暗号化対象データと、前記利用者Ａの公開鍵、ユーザ公開鍵および秘密鍵と、署名付き暗号化データの復号および検証者である利用者Ｂの公開鍵およびユーザ公開鍵と、に対して、乱数を生成し、前記乱数と前記公開パラメータに含まれるデータを用いてデータＵを計算し、
利用者Ｂの公開鍵から生成したハッシュ値と、前記公開パラメータに含まれるデータと、前記乱数と、からペアリングを用いてペアリング計算結果を計算し、
前記署名付き暗号化対象データと、前記Ｕと、を含むデータを用いて計算されるハッシュ値と、前記署名付き暗号化対象データと、前記Ｕと、前記ペアリング計算結果と、を含むデータを用いて計算されるハッシュ値と、利用者Ａの秘密鍵と、を用いて、前記署名付き暗号化対象データに対する署名Ｗを生成し、
前記Ｕと、前記ペアリング計算結果と、前記乱数と前記利用者Ａのユーザ公開鍵から計算したデータと、利用者Ａの公開鍵およびユーザ公開鍵と、をハッシュ関数の入力として生成したハッシュ値を共通鍵暗号の鍵として、前記署名付き暗号化対象データを、共通鍵暗号を用いることにより暗号化することで暗号化データＶを生成し、
前記Ｕ，ＶおよびＷから構成されるＣ＝（Ｕ，Ｖ，Ｗ）を署名付き暗号化結果として記憶装置上に保存する署名付き暗号化処理と、を特徴とする請求項１記載のサインクリプション生成方法。
【請求項３】
前記生成した公開パラメータと、復号および検証処理を行う利用者Ｂの公開鍵に対して部分秘密鍵生成方法を用いて生成した部分秘密鍵を用いて、秘密鍵とユーザ公開鍵から構成される利用者Ｂのユーザ鍵を生成し、記憶装置上に保存するユーザ鍵生成処理と、
制御装置による制御の元、前記公開パラメータと、前記生成した署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）と、前記利用者Ｂの公開鍵、ユーザ公開鍵および秘密鍵と、前記署名付き暗号化データの生成者である利用者Ａの公開鍵およびユーザ公開鍵と、に対して、
前記署名付き暗号化データに含まれるデータＵと、前記Ｕに加えて利用者Ｂの秘密鍵に含まれるデータを用いて計算したデータと、ペアリングを用いて前記Ｕに加えて利用者Ｂの秘密鍵に含まれるデータから計算したデータと、利用者Ａの公開鍵およびユーザ公開鍵と、をハッシュ関数の入力として生成したハッシュ値を共通鍵暗号の鍵として、
前記署名付き暗号化データに含まれるデータＶを、共通鍵暗号を用いることにより復号し、復号結果を含むデータより生成されたハッシュ値と、前記復号結果および前記ペアリング計算結果を含むデータより生成されたハッシュ値と、前記利用者Ａの公開鍵から生成したハッシュ値と、利用者Ａのユーザ公開鍵と、公開パラメータに含まれるいくつかのデータと、を用いて署名検証を行い、検証が成功すれば前記復号結果を、失敗した場合、復号および検証失敗を示すデータを、
復号および検証結果として記憶装置上に保存する復号および検証処理と、を特徴とする請求項２記載のサインクリプション生成方法。
【請求項４】
記憶装置を有するとともに任意の文字列を用いることのできる公開鍵に加えて、利用者自身が作成したユーザ公開鍵を用いて、暗号化と署名生成を同時に行うサインクリプションシステムであって、
制御装置による制御の元となる素数ｑを選択し、位数ｑの２つの群Ｇ1、Ｇ２およびＧ1の生成元Ｐを、ペアリングｅ: Ｇ1×Ｇ1→Ｇ２を選択する手段と、
乱数ｓを生成し、上記乱数ｓを用いてＰｐｕｂを計算計算する手段と、
４つのハッシュ関数Ｈ１、Ｈ２、Ｈ３、Ｈ４をする手段と、
共通鍵暗号Ｅを選択し、公開パラメータｐａｒａｍｓを
＜ｑ，Ｇ1，Ｇ２，ｅ，Ｐ，Ｐｐｕｂ，Ｈ1，Ｈ２，Ｈ３，Ｈ４，Ｅ＞，整数sをマスター鍵とする手段と、
前記記憶装置上に保存することを特徴とする公開パラメータおよびマスター鍵を生成する手段と、
任意の文字列である上記利用者の公開鍵に対して、制御装置による制御の元である上記マスター鍵を用いて、上記利用者の部分秘密鍵を生成する手段と、
前記記憶装置上に保存するする手段と、を備えたサインクリプションシステム。
【請求項５】
前記生成した公開パラメータと、署名付き暗号化処理を行う利用者Ａの公開鍵に対して部分秘密鍵生成方法を用いて生成した部分秘密鍵を用いて、秘密鍵とユーザ公開鍵から構成される利用者Ａのユーザ鍵を生成し、記憶装置上に保存する手段と、
制御装置による制御の元、前記公開パラメータと、前記署名付き暗号化対象データと、前記利用者Ａの公開鍵、ユーザ公開鍵および秘密鍵と、前記署名付き暗号化データの復号および検証者である利用者Ｂの公開鍵およびユーザ公開鍵と、に対して、乱数を生成し、前記乱数と前記公開パラメータに含まれるデータを用いてデータＵを計算する手段と、
利用者Ｂの公開鍵から生成したハッシュ値と、前記公開パラメータに含まれるデータと、前記乱数と、からペアリングを用いてペアリング計算結果を計算する手段と、
前記署名付き暗号化対象データと、前記Ｕと、を含むデータを用いて計算されるハッシュ値と、前記署名付き暗号化対象データと、前記Ｕと、前記ペアリング計算結果と、を含むデータを用いて計算されるハッシュ値と、利用者Ａの秘密鍵と、を用いて、前記署名付き暗号化対象データに対する署名Ｗを生成する手段と、
前記Ｕと、前記ペアリング計算結果と、前記乱数と前記利用者Ａのユーザ公開鍵から計算したデータと、利用者Ａの公開鍵およびユーザ公開鍵と、をハッシュ関数の入力として生成したハッシュ値を共通鍵暗号の鍵として、前記署名付き暗号化対象データを、共通鍵暗号を用いることにより暗号化することで暗号化データＶを生成する手段と、
前記Ｕ，ＶおよびＷから構成されるＣ＝（Ｕ，Ｖ，Ｗ）を署名付き暗号化結果として記憶装置上に保存する手段と、を備えたことを特徴とする請求項４記載のサインクリプションシステム。
【請求項６】
前記生成した公開パラメータと、復号および検証処理を行う利用者Ｂの公開鍵に対して部分秘密鍵生成方法を用いて生成した部分秘密鍵を用いて、秘密鍵とユーザ公開鍵から構成される利用者Ｂのユーザ鍵を生成し、記憶装置上に保存する手段と、
制御装置による制御の元、前記公開パラメータと、前記生成した署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）と、前記利用者Ｂの公開鍵、ユーザ公開鍵および秘密鍵と、前記署名付き暗号化データの生成者である利用者Ａの公開鍵およびユーザ公開鍵と、に対して、
前記署名付き暗号化データに含まれるデータＵと、前記Ｕに加えて利用者Ｂの秘密鍵に含まれるデータを用いて計算したデータと、ペアリングを用いて前記Ｕに加えて利用者Ｂの秘密鍵に含まれるデータから計算したデータと、利用者Ａの公開鍵およびユーザ公開鍵と、をハッシュ関数の入力として生成したハッシュ値を共通鍵暗号の鍵として、
前記署名付き暗号化データに含まれるデータＶを、共通鍵暗号を用いることにより復号し、復号結果を含むデータより生成されたハッシュ値と、前記復号結果および前記ペアリング計算結果を含むデータより生成されたハッシュ値と、前記利用者Ａの公開鍵から生成したハッシュ値と、利用者Ａのユーザ公開鍵と、公開パラメータに含まれるいくつかのデータと、を用いて署名検証を行い、検証が成功すれば前記復号結果を、失敗した場合、復号および検証失敗を示すデータを、
復号および検証結果として記憶装置上に保存する手段と、を備えたことを特徴とする請求項５記載のサインクリプションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術としての暗号および署名技術に関するものであり、特に、暗号化と署名を同時に行うサインクリプション技術に関するものである。
【背景技術】
【０００２】
任意の文字列を公開鍵として用いることのできるＩＤベース方式によるサインクリプションがある。サインクリプションとは、暗号化と署名（認証）とを同時に行うことで、それぞれの処理に含まれる共通化可能な処理を共有し、処理の無駄を省くことで高速処理を可能とするものである。
【０００３】
ＩＤベースサインクリプションを実現するシステムは、公開鍵の認証を行う認証局の代わりに、秘密鍵生成センタを備える。秘密鍵生成センタでは、システムで共通に用いる公開パラメータを定め、各利用者が公開鍵として選択する任意の文字列であるＩＤ（例えば、電子メールアドレス）に対して、秘密鍵生成センタが外部にもれないよう厳重に保管するマスター鍵を用いて公開鍵毎に秘密鍵を生成し、当該利用者に配布する。秘密鍵生成センタでは、利用者が選択するＩＤ（公開鍵） と生成した秘密鍵とを対応づけて管理する。公開鍵の選定方法については、システム内でルール化しておく。
【０００４】
ＩＤベースサインクリプションには任意の文字列であるＩＤを公開鍵とすることができるという利点を持つ反面、公開鍵から秘密鍵を生成する際に秘密鍵生成センタの管理するマスター鍵を用いる必要があるため、マスター鍵の漏洩や秘密鍵生成センタによるマスター鍵不正利用により署名付き暗号化データの偽造や正規の受信者以外の検証および復号などの問題が生じる可能性がある。
【０００５】
この問題に対して、秘密鍵生成センタに依存しないＩＤベースサインクリプションが提案されている。この方式では秘密鍵の生成を従来の秘密鍵生成センタにおいて、マスター鍵を用いて生成する部分秘密鍵と、利用者が独自に生成する部分とに分割、公開鍵についてもＩＤに加えて利用者が利用者独自の秘密鍵を用いて生成するユーザ公開鍵を用いることにより、秘密鍵生成センタの管理するマスター鍵を悪用したとしても署名付き暗号化データの偽造および復号ができないようにしている。
【０００６】
これらは、ペアリングと呼ばれる双線形写像の性質を応用して実現される（例えば、非特許文献１ 参照。） 。
【０００７】
ペアリングとは、位数がｑの２つの群をＧ1 、Ｇ２  とした時、Ｇ1×Ｇ1 からＧ２ への双線形写像ｅで以下の性質を満たすもののことである。
1．   任意のＰ，Ｑ∈Ｇ1および整数ａｂに対してｅは
ｅ（ａＰ，ｂＱ）＝ｅ（Ｐ，Ｑ）ａｂを満たす。
２．  任意のＰ，Ｑ∈Ｇ1に対してｅ（Ｐ，Ｑ）≠  1（1はＧ２の単位元）を満たす。
３．  すべてのＰ， Ｑ∈Ｇ1に対してｅ（Ｐ，Ｑ）を効率的に計算できる。
具体的なペアリングとして、有限体上の楕円曲線上で定義されるＷｅｉｌペアリングおよびＴａｔｅペアリングなどが知られている。
【０００８】
まず、非特許文献１に開示されている、秘密鍵生成センタに依存しないＩＤベースサインクリプションについて説明する。
【０００９】
以下、本明細書において、秘密鍵生成センタに依存しないＩＤベースサインクリプションをサインクリプションと呼称する。
【００１０】
サインクリプションは、以下の５つの処理より構成される。１）、２）は、部分秘密鍵生成センタでの処理であり、３）は送信側および受信側の処理、４）は送信側の処理、５）は受信側の処理である。
１）公開パラメータおよびマスター鍵生成：システムで共通に用いる群やペアリングを含む公開パラメータの生成およびマスター鍵の生成を行う。公開パラメータは、外部に公開する。なお、システム全体の安全性を確保するため、マスター鍵は、システムの利用者を含む外部に漏洩しないように厳重に保管する。
２）部分秘密鍵生成：利用者のメールアドレス等、利用者と対応付けることができる文字列に対して、公開パラメータおよびマスター鍵を用いて、部分秘密鍵を生成する。利用者と対応付けられる文字列が公開鍵となる。
３）ユーザ鍵生成：公開パラメータおよび部分秘密鍵を用いて、ユーザ秘密鍵とユーザ公開鍵を生成する。
４）署名付き暗号化：公開パラメータ、署名付き暗号化データ生成者のユーザ秘密鍵、署名付き暗号文復号および検証者の公開鍵およびユーザ公開鍵を用いて、署名付き暗号化対象データの署名および暗号化を行い、署名付き暗号化データを生成する。
５）復号および検証：公開パラメータ、署名付き暗号化データ生成者の公開鍵およびユーザ公開鍵、署名付き暗号化データ復号および検証者の公開鍵、ユーザ公開鍵およびユーザ秘密鍵を用いて、署名付き暗号化データの復号および署名検証を行う。
【００１１】
次に上記１）から５）の各処理における、入力、出力、および処理について説明する。
【００１２】
以下、本明細書において、正整数nに対して｛０，１｝ｎはｎビットバイナリ系列を、｛０，１｝＊は全てのバイナリ系列を、ＸＯＲはビット毎の排他的論理和をそれぞれ表す。
公開パラメータおよびマスター鍵生成：
入力：正整数ｋ（セキュリティパラメータ）
出力：公開パラメータｐａｒａｍｓ、マスター鍵s
処理手順：
１．  ｋビットの素数ｑを選択する。
２．  位数ｑの２つの群Ｇ1、Ｇ２およびＧ1の生成元Ｐを選択する。
３．  ペアリングｅ: Ｇ1×Ｇ1 → Ｇ２を選択する。
４．  ０＜ｓ＜ｑを満たす整数sをランダムに生成しマスター鍵とする。
５．  Ｐｐｕｂ←ｓＰを計算する。
６．  ４つのハッシュ関数Ｈ1、Ｈ２、Ｈ３、Ｈ４を選択する。
それぞれのハッシュ関数は以下に示す入出力を持つ。
Ｈ１:｛０，１｝＊ → Ｇ1
Ｈ２:｛０，１｝＊ →｛０，１｝ｎ
Ｈ３:｛０，１｝＊ → Ｇ1
Ｈ４:｛０，１｝＊ → Ｇ1
７．公開パラメータｐａｒａｍｓ＝
＜ｑ，Ｇ1，Ｇ２，ｅ，Ｐ，Ｐpｕｂ，Ｈ1，Ｈ２，Ｈ３，Ｈ４＞を出力する。
８．マスター鍵ｓを出力する。
２）部分秘密鍵生成：
入力：公開パラメータｐａｒａｍｓ、マスター鍵ｓ、利用者の公開鍵として用いる任意の文字列ＩＤ（ＩＤ∈｛０，１｝＊）
出力：ＩＤに対応する部分秘密鍵ＤＩＤ
処理手順：
１．  ＱＩＤ ←  Ｈ1（ＩＤ）を計算する。
２．  ＤＩＤ ←ｓＱＩＤを計算する。
３．  部分秘密鍵ＤＩＤを出力する。
３）ユーザ鍵生成：
入力：公開パラメータｐａｒａｍｓ、ＩＤに対応する部分秘密鍵ＤＩＤ
出力：ＩＤに対応する秘密鍵ＳＩＤおよび公開鍵ＰＫＩＤ
処理手順：
１．  ０＜xＩＤ＜ｑを満たす整数xＩＤをランダムに選択する。
２．    ＳＩＤ ←（xＩＤ，ＤＩＤ）とおく。
３．    ＳＩＤをＩＤに対応する秘密鍵として出力する。
４．    ＰＫＩＤ ←  xＩＤＰを計算する。
５．    ＰＫＩＤをＩＤに対応する公開鍵として出力する。
４）署名付き暗号化：
入力：公開パラメータｐａｒａｍｓ、署名付き暗号化データ生成者である利用者Ａの公開鍵ＩＤＡ、ユーザ公開鍵ＰＫＩＤＡ、秘密鍵ＳＩＤＡ＝（ｘＩＤＡ，ＤＩＤＡ）、署名付き暗号化データ検証者である利用者Ｂの公開鍵ＩＤＢ、
ユーザ公開鍵ＰＫＩＤＢ、署名付き暗号化対象データＭ
出力：署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）
処理手順：
１．  ０＜ｒ＜ｑを満たす整数ｒをランダムに選択する。
２．  Ｕ ←ｒＰを計算する。
３．  ＱＩＤＢ ←  Ｈ1（ＩＤＢ）を計算する。
４．  Ｔ ←  ｅ（Ｐｐｕｂ，ＱＩＤＢ）ｒを計算する。
５．   Ｊ ←ｒＰＫＩＤＢを計算する。
６．  ｈ ←  Ｈ２（Ｕ，Ｔ，Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算する。ここでｈのビット長はＭのビット長と同じとする。
７．  ｈをマスク値として用いて、Ｖ ←  Ｍ ＸＯＲ ｈを計算する（暗号化）。
８．  Ｈ ←  Ｈ３（Ｕ，Ｖ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
９．  Ｉ ←  Ｈ４（Ｕ，Ｖ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
１０．  Ｗ ←  ＤＩＤＡ ＋ｒＨ＋xＩＤＡＩを計算する（署名生成）。
１１．  署名付き暗号化データＣ ←  （Ｕ，Ｖ，Ｗ）を出力する。
署名付き暗号化データ復号および検証：
入力：公開パラメータｐａｒａｍｓ、署名付き暗号化データ生成者ＡのＩＤ（公開鍵）、ＩＤＡ 、ユーザ公開鍵ＰＫＩＤＡ、署名付き暗号化データ検証者ＢのＩＤ（公開鍵）、ＩＤＢ、ユーザ公開鍵ＰＫＩＤＢ、秘密鍵ＳＩＤＢ＝（xＩＤＢ，ＤＩＤＢ）、署名付き暗号化データＣ＝（Ｕ， Ｖ， Ｗ）
出力：復号データＭ（署名検証成功時）またはＩｎｖａｌｉｄ（署名検証失敗時）
処理手順：
１．  Ｈ ←  Ｈ３（Ｕ，Ｖ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
２．  Ｉ ←  Ｈ４（Ｕ，Ｖ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
３．  ＱＩＤＡ ←  Ｈ1（ＩＤＡ）を計算する。
４．  ｅ（Ｐｐｕｂ，ＱＩＤＡ）ｅ（Ｕ，Ｈ）ｅ（ＰＫＩＤＡ，Ｉ） ＝ ｅ（Ｐ，Ｗ）が成立するかどうか判定することで署名検証を行い、成立すればステップ５に進み、成立しなければＩｎｖａｌｉｄを出力し終了する。
５．  Ｔ ←  ｅ（ＤＩＤＢ，Ｕ）を計算する。
６．  J ←  xＩＤＢＵを計算する。
７．  ｈ ←  Ｈ２（Ｕ，Ｔ，Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算する。ここでＨのビット長はＶのビット長と同じとする。
８．  ｈをマスク値として用いて、Ｍ ←  Ｖ ＸＯＲ ｈを計算する。
９．  復号データＭを出力する。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】Ｍ．  Ｂａｒｂｏｓａ  ａｎｄ  Ｐ．  Ｆａｒｓｈｉｍ．  Ｃｅｒｔｉｆｉｃａｔｅｌｅｓｓ  ｓｉｇｎｃｒｙｐｔｉｏｎ．  Ｉｎ  ＡＣＭ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ，  Ｃｏｍｐｕｔｅｒ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｓｅｃｕｒｉｔｙ−ＡＳＩＡＣＣＳ  ２００８，  ｐｐ．  ３６９−３７２，  Ｔｏｋｙｏ，  Ｊａｐａｎ，  ２００８．
【発明の概要】
【発明が解決しようとする課題】
【００１４】
利用者Ａを署名付き暗号化データ生成者、利用者Ｂを署名付き暗号化データ復号および検証者として、発明が解決しようとする課題について説明を行う。
上記において説明したサインクリプションでは、署名付き暗号化時において、まず利用者Ｂの公開鍵およびユーザ公開鍵を用いて、署名付き暗号化対象データの暗号化を行った後、署名付き暗号化対象データそのものに対してではなく暗号化データに対して、利用者Ａの秘密鍵、公開鍵およびユーザ公開鍵を用いて署名を行うことで署名付き暗号化データを生成し、署名付き暗号化データ復号および検証時において、利用者Ａの公開鍵およびユーザ公開鍵を用いて署名付き暗号化データに含まれる暗号化データに対する署名検証後、利用者Ｂの秘密鍵、公開鍵およびユーザ公開鍵を用いて、暗号化データの復号を行い、元のデータを復元する。
このため、例えば署名付き暗号化時に署名付き暗号化データ復号および検証者である利用者Ｂが生成した正規のユーザ公開鍵と異なるユーザ公開鍵を用いて、署名付き暗号化データを生成し、利用者Ｂ自身が正しい手続きで作成した正規のユーザ公開鍵を用いて、署名付き暗号化データ復号および検証を行う場合、生成および復号および検証時に用いる利用者Ｂのユーザ公開鍵は異なるが、署名検証時において、利用者Ｂのユーザ公開鍵を用いる必要がないこと、復号された暗号化データに対して、ではなく署名付き暗号化データに含まれる暗号化データに対して、検証が行われることから問題なく署名検証が可能となるが、その後、行われる暗号化データの復号では作成時と異なる利用者Ｂのユーザ公開鍵が使われるため間違ったデータが復号されるが、検出する手段が無いためそのまま出力されてしまうという問題を持つ。
さらに署名生成時に作成される２種類のハッシュ値を作成する際の入力が同じで違いが明確ではないという問題もある。
また、署名付き暗号化時の暗号化はデータ長と同じ長さのマスク値を生成しデータと排他的論理和を行う方法に限定されており、例えばＡＥＳなど他の共通鍵暗号と組み合わせる手段が提供されていない。
本発明は、上述の問題を鑑みて本発明がなされたのであり、本発明は、より安全性のサインクリプションシステムおよび方法を実現することを目的とする。
【課題を解決するための手段】
【００１５】
本発明はサインクリプションを実現するにあたり、安全性を高めたものである。
【００１６】
具体的には、任意の文字列を用いることのできる公開鍵に加えて、利用者自身が作成したユーザ公開鍵を用いて、暗号化と署名生成を同時に行うサインクリプションシステムであって、システム全体で用いる公開パラメータおよびマスター鍵を生成する公開パラメータおよびマスター鍵生成方法と、サインクリプションの利用者からの要求に応じて、前記公開パラメータおよびマスター鍵を用いて、利用者の公開鍵に対する部分秘密鍵を生成する部分秘密鍵生成方法と、前記公開パラメータと、前記部分秘密鍵生成方法を用いて生成した部分秘密鍵を用いて、利用者が生成する秘密鍵とユーザ公開鍵から構成されるユーザ鍵を生成するユーザ鍵生成方法と、前記公開パラメータと署名付き暗号化データ生成者の公開鍵、秘密鍵およびユーザ公開鍵に加えて、署名付き暗号化データ受信者の公開鍵およびユーザ公開鍵を用いて、署名付き暗号化対象データに対して、署名付き暗号化データを生成する署名付き暗号化方法と、前記公開パラメータと署名付き暗号化データ復号および検証者の公開鍵、秘密鍵およびユーザ公開鍵に加えて、署名付き暗号化データ生成者の公開鍵およびユーザ公開鍵を用いて、署名付き暗号化データの復号および検証を行う復号および検証方法を備え、前記署名付き暗号化方法において、署名付き暗号化対象のデータに対してまず署名を行った後に前記データを暗号化することと、暗号化時に前記公開パラメータ生成方法を用いて、公開パラメータ生成時に選択した共通鍵暗号を用いることと、前記復号および検証方法において、復号および検証対象の署名付き暗号化データに含まれる暗号化データをまず復号し、復号されたデータに対して署名検証を行うことと、復号時に前記共通鍵暗号を用いることを特徴とするサインクリプションシステムを提供する。
【発明の効果】
【００１７】
本発明によれば、署名付き暗号化時に対象データに対して署名が生成された後、データの暗号化が行われるため、不正な復号および検証者の公開鍵、ユーザ公開鍵を用いて署名付き暗号化データを作成した場合、復号および検証時に正規の復号および検証者の公開鍵およびユーザ公開鍵を用いることで、間違った復号データが復号され、その間違った復号データに対して署名検証を行うため検証時にエラーとなり間違った署名付き暗号化を行った事の検出が可能となる。
また暗号化および復号で用いる共通鍵暗号を幅広く選択可能となることから、より高い安全性を確保することが可能となる。
以上より、安全性の高いサインクリプションの実現が可能となる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本実施形態のサインクリプションシステム１０１の全体構成である。
【図２】図２は、本実施形態のサインクリプションシステム１０１を構成する部分秘密鍵発行装置１０２、署名付き暗号化装置１０３および復号および検証装置１０４を構築する際に用いることのできる、一般的な構成を有する情報処理装置２０１の機能構成図である。
【図３】図３は、本実施形態の部分秘密鍵発行装置１０２において、実際の処理を行う部分秘密鍵生成処理部１０６の、機能構成を示す図である。
【図４】図４は、本実施形態の部分秘密鍵発行装置１０２の構築に用いた情報処理装置２０１のＣＰＵ２０２の処理を説明するフローチャートである。
【図５】図５は、図４のステップ４０２において説明している公開パラメータおよびマスター鍵生成処理を説明するフローチャートである。
【図６】図６は、図４のステップ４０３において説明している部分秘密鍵生成処理を説明するフローチャートである。
【図７】図７は、本実施形態の署名付き暗号化装置１０３において実際の処理を行う署名付き暗号化処理部１０７の、機能構成を示す図である。
【図８】図８は、本実施形態の署名付き暗号化装置１０３の構築に用いた情報処理装置２０１のＣＰＵ２０２の処理を説明するフローチャートである。
【図９】図９は、図８のステップ８０２において説明しているユーザ鍵生成処理の詳細を説明するフローチャートである。
【図１０】図１０は、図８のステップ８０３において説明している署名付き暗号化処理の詳細を説明するフローチャートである。
【図１１】図１１は、本実施形態の復号および検証装置１０４において、実際の処理を行う復号および検証処理部１０８の、機能構成を示す図である。
【図１２】図１２は、本実施形態の復号および検証装置１０４の構築に用いた情報処理装置２０１のＣＰＵ２０２の処理を説明するフローチャートである。
【図１３】図１３は、図１２のステップ１２０２において説明しているユーザ鍵生成処理の詳細を説明するフローチャートである。
【図１４】図１４は図１２のステップ１２０３において説明している署名付き暗号化データ復号および検証処理の詳細を説明するためのフローチャートである。
【発明を実施するための形態】
【００１９】
以下、本発明を適用した実施形態について、図を用いて説明する。
【００２０】
本実施形態のサインクリプションシステムでは、前記従来例に対して以下の改良を加えている。
１） 公開パラメータ生成時に、入力のセキュリティパラメータに正整数ｌを追加、さらにｌビット共通鍵暗号Ｅの選択処理を追加し、Ｅを公開パラメータに加える。
２） 署名付き暗号化時の暗号化と署名生成の順序および署名生成対象を暗号化データから署名付き暗号化対象データに変更し、署名付き暗号化対象データに対する署名生成後、署名付き暗号化対象データの暗号化を行うようにする。
３）署名付き暗号化時において、ハッシュ関数Ｈ３およびＨ４の入力要素の暗号化データＶを署名付き暗号化対象データＭに変更する。
４）署名付き暗号化時において、暗号化の際に用いるＴをハッシュ関数Ｈ４の入力要素に加える。
５）署名付き暗号化時において、ハッシュ関数Ｈ２の出力結果をマスク値として用いるのではなく共通鍵暗号Ｅの鍵として用いることで暗号化を行うように変更する。
６）署名付き暗号化データ復号および検証時の署名検証と復号の順序を変更し、暗号化データを復号した後、復号データに対する署名検証を行うように変更する。
７）署名付き暗号化対象データ復号および検証時において、ハッシュ関数Ｈ３およびＨ４の入力要素の暗号化データＶを復号データＭに変更する。
８）署名付き暗号化データ復号および検証時において、復号の際に用いるＴをハッシュ関数Ｈ４の入力要素に加える。
９）署名付き暗号化データ復号および検証時において、ハッシュ関数Ｈ２の出力結果をマスク値として用いるのではなく共通鍵暗号Ｅの鍵として用いることで復号を行うように変更する。
【００２１】
すなわち、本実施形態における処理手順は以下のとおりとなる。
公開パラメータおよびマスター鍵生成：
入力：正整数ｋ，ｌ（セキュリティパラメータ）
出力：公開パラメータｐａｒａｍｓ、マスター鍵ｓ
処理手順：
１．  ｋビットの素数ｑを選択する。
２．  位数ｑの２つの群Ｇ1、Ｇ２およびＧ1の生成元Ｐを選択する。
３．  ペアリングｅ:Ｇ1×Ｇ1 → Ｇ２を選択する。
４．  ０＜ｓ＜ｑを満たす整数ｓをランダムに生成する。
５．  Ｐｐｕｂ ←ｓＰを計算する。
６．  ４つのハッシュ関数Ｈ1、Ｈ２、Ｈ３、Ｈ４を選択する。
それぞれのハッシュ関数は以下に示す入出力を持つ。
Ｈ１:｛０，１｝＊ → Ｇ1
Ｈ２:｛０，１｝＊ → ｛０，１｝l
Ｈ３:｛０，１｝＊ → Ｇ1
Ｈ４:｛０，１｝＊ → Ｇ1
７．  暗号化関数ＥＮＣおよび復号関数ＤＥＣから構成されるｌビット共通鍵暗号Ｅ＝{ＥＮＣ， ＤＥＣ}を選択する。
８．  ｐａｒａｍｓ＝＜ｑ，Ｇ1，Ｇ２，ｅ，Ｐ，Ｐｐｕｂ，Ｈ1，Ｈ２，Ｈ３，Ｈ４，Ｅ＞を公開パラメータとする。
９．  sをマスター鍵とする。
【００２２】
部分秘密鍵生成：
入力：公開パラメータｐａｒａｍｓ、マスター鍵ｓ、利用者の公開鍵として用いる任意の文字列ＩＤ（ＩＤ∈｛０，１｝＊）
出力：ＩＤに対応する部分秘密鍵ＤＩＤ
処理手順：
１．ＱＩＤ ←  Ｈ1（ＩＤ）を計算する。
２．ＤＩＤ ←  ｓＱＩＤを計算し部分秘密鍵とする。
【００２３】
ユーザ鍵生成：
入力：公開パラメータｐａｒａｍｓ、ＩＤに対応する部分秘密鍵ＤＩＤ
出力：ＩＤに対応する秘密鍵ＳＩＤおよびユーザ公開鍵ＰＫＩＤ
処理手順：
１．    ０＜ｘＩＤ＜ｑを満たす整数xＩＤをランダムに選択する。
２．ＳＩＤ ←（xＩＤ，ＤＩＤ）と置き、ＳＩＤを秘密鍵とする。
３．ＰＫＩＤ ←  xＩＤＰを計算し、ＰＫＩＤを公開鍵とする。
【００２４】
署名付き暗号化：
入力：公開パラメータｐａｒａｍｓ、署名付き暗号化データ生成である利用者Ａの公開鍵ＩＤＡ 、ユーザ公開鍵ＰＫＩＤＡ、秘密鍵ＳＩＤＡ＝（xＩＤＡ，ＤＩＤＡ）、署名付き暗号化データ検証者である利用者Ｂの公開鍵ＩＤＢ、
ユーザ公開鍵ＰＫＩＤＢ、署名付き暗号化対象データＭ
出力：署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）
処理手順：
１．    ０＜ｒ＜ｑを満たす整数ｒをランダムに生成する。
２．   Ｕ ←  ｒＰを計算する。
３．   ＱＩＤＢ ←  Ｈ1（ＩＤＢ）を計算する。
４．   Ｔ ←  ｅ（Ｐｐｕｂ，ＱＩＤＢ）ｒを計算する。
５．   Ｈ ←  Ｈ３（Ｍ，Ｕ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
６．   Ｉ ←  Ｈ４（Ｍ，Ｕ，Ｔ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
７．   Ｗ ←  ＤＩＤＡ＋ｒＨ＋xＩＤＡＩ を計算しＭに対する署名を生成する。
８．   Ｊ ←  ｒＰＫＩＤＢを計算する。
９．    ＳＫ ←  Ｈ２（Ｕ，Ｔ，Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算する。
１０． ＳＫを共通鍵暗号Ｅの鍵としてとしてＶ ←  ＥＮＣ（ＳＫ，Ｍ）を計算しＭに対する暗号化データＶを求める。
１１．  Ｃ＝（Ｕ，Ｖ，Ｗ）を署名付き暗号化データとする。
【００２５】
復号および検証：
入力：公開パラメータｐａｒａｍｓ、署名付き暗号化データ生成者である利用者Ａの公開鍵ＩＤＡ 、公開鍵ＰＫＩＤＡ、署名付き暗号化データ検証者である利用者Ｂの公開鍵ＩＤＢ、ユーザ公開鍵ＰＫＩＤＢ、秘密鍵ＳＩＤＢ＝（xＩＤＢ，ＤＩＤＢ）、署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）
出力：復号データＭ（署名検証成功時）またはＩｎｖａｌｉｄ（署名検証失敗時）
処理手順：
１．  Ｔ ←  ｅ（ＤＩＤＢ，Ｕ）を計算する。
２．  J ←  xＩＤＢＵを計算する。
３．  ＳＫ ←  Ｈ２（Ｕ，Ｔ，Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算する。
４．  共通鍵暗号Ｅの共通鍵をＳＫとしてＭ ←  ＤＥＣ（ＳＫ， Ｖ）を計算し復号データＭを求める。
５．  Ｈ ←  Ｈ３（Ｍ，Ｕ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
６．  Ｉ ←  Ｈ４（Ｍ，Ｕ，Ｔ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
７．  ＱＩＤＡ ←  Ｈ1（ＩＤＡ）を計算する。
８．  ｅ（Ｐｐｕｂ，ＱＩＤＡ）ｅ（Ｕ，Ｈ）ｅ（ＰＫＩＤＡ，Ｉ）＝ｅ（Ｐ，Ｗ）が成立するかどうかを判定することで署名検証を行い、成立すればステップ１０に進み、成立しなければステップ９に進む。
９．復号および検証結果をＩｎｖａｌｉｄ（復号および検証失敗）とし、終了する。
１０．復号および検証結果を復号データＭとし、終了する。
【００２６】
以下、上記処理を実現する本実施形態のサインクリプションシステムについて説明する。図１は、本実施形態のサインクリプションシステムの全体構成である。
【００２７】
本図に示すように、本実施形態のサインクリプションシステム１０１は、部分秘密鍵発行装置１０２と、署名付き暗号化装置１０３と、復号および検証装置１０４とを備える。部分秘密鍵発行装置１０２、署名付き暗号化装置１０３、および、復号および検証装置１０４は、通信回線１０９、１１１、１１２および安全な通信回線１１０，１１３により接続されている。また、署名付き暗号化装置１０３の利用者をＡ 、復号および検証装置１０４の利用者をＢとする。両者を区別する必要が無い場合は、利用者と呼ぶ。
【００２８】
これらの各装置を用いた本実施形態での署名付き暗号化、署名付き暗号化データの復号および検証の概略について説明する。本実施形態では、公開鍵として、所定のルールによって定められた利用者と対応付けられるＩＤ（ＩＤ∈｛０，１｝＊）、例えば電子メールアドレスなど、を用いるものとする。
【００２９】
まず、部分秘密鍵発行装置１０２において、サインクリプションシステム１０１全体で用いられる公開パラメータおよびマスター鍵を生成し、公開パラメータを公開する。
【００３０】
署名付き暗号化を行う場合、署名付き暗号化装置１０３において、まず、部分秘密鍵発行装置１０２において公開されている公開パラメータおよび予め部分秘密鍵発行装置１０２より発行を受けた自身の公開鍵（利用者ＡのＩＤ）に対応する部分秘密鍵を用いて秘密鍵およびユーザ公開鍵を生成し、通信回線などを通じてユーザ公開鍵を送信相手である利用者Ｂに送付する。送信相手の利用者Ｂについても復号および検証装置１０４において、利用者Ａの場合と同様に秘密鍵およびユーザ公開鍵を生成し、利用者Ａは送信相手の公開鍵（利用者ＢのＩＤ）およびユーザ公開鍵、公開パラメータ、および、自身の公開鍵に対応する秘密鍵およびユーザ公開鍵を用いて、署名付き暗号化対象データに対して署名付き暗号化データを生成し、送出する。復号および検証装置１０４では、公開パラメータ、利用者Ａの公開鍵およびユーザ公開鍵、利用者Ｂの秘密鍵、公開鍵およびユーザ公開鍵を用いて、署名付き暗号化装置１０３から受け取った署名付き暗号化データを復号するとともに検証する。
【００３１】
以下、各装置の詳細について説明する。
【００３２】
部分秘密鍵発行装置１０２は、実際の生成処理を行う部分秘密鍵生成処理部１０６を持ち、サインクリプションシステム１０１において共通に用いる公開パラメータおよびマスター鍵の作成および保管、外部に漏れないように厳重に保管されたマスター鍵を用いることによる部分秘密鍵の生成、公開パラメータの公開を行う。
【００３３】
部分秘密鍵発行装置１０２は一般的な構成を有する情報処理装置２０１上に構築することが可能である。以下この構成について説明する。
【００３４】
部分秘密鍵発行装置１０２は、図２に示すようなバス２０９で接続されたＣＰＵ（Central Processing Unit）２０２と、ＲＡＭ（Random Access Memory）などのメモリ２０３と、ＨＤやその他の外部記憶装置２０７と、キーボードなどの入力装置２０４と、ディスプレイなどの出力装置２０５と、ネットワークからの入出力を処理するネットワーク接続装置２０６と、ＤＶＤ−Ｒドライブ等可搬性の記憶媒体からの入出力を処理する外部入出力装置２０６と、入力装置２０４や、出力装置２０５や、ネットワーク接続装置２０６や、外部入出力装置２０７や、外部記憶装置２０８とのインタフェース２０９とを備えた、一般的な構成を有する情報処理装置２０１として構築することができる。
【００３５】
部分秘密鍵発行装置１０２において、公開パラメータおよびマスター鍵生成処理、部分秘密鍵生成処理を実際に行う、部分秘密鍵生成処理部１０６は、ＣＰＵ２０２が、メモリ２０３にロードされたプログラム（コードモジュールともいう）を実行することで、情報処理装置２０１上に具現化される。また、これらの処理で必要となる一時記憶や生成データはメモリ２０３や、外部記憶装置２０８に必要に応じて記憶される。
【００３６】
また、前記したプログラムは、予め外部記憶装置２０８に記憶され、必要に応じてメモリ２０３上にロードされ、ＣＰＵ２０２により実行される。なお、このプログラムは、可搬性の記憶媒体、例えばＣＤ−ＲＯＭなどを介して、必要に応じて、メモリ２０３にロードされてもよい。また、プログラムは、一旦、ＣＤ−ＲＯＭなどの可搬性の記憶媒体から外部入出力装置２０７を介してＨＤなどにインストールされた後、必要に応じて、このＨＤからメモリ２０３にロードされてもよい。さらに、プログラムは、ネットワーク接続装置を介して、ネットワーク１０５上の情報処理装置２０１が伝送信号により、一旦ＨＤにダウンロードされてからメモリ２０３にロードされてもよいし、あるいは、直接、ネットワーク１０５経由でネットワーク接続装置２０６を介して、メモリ２０３にロードされてもよい。
【００３７】
次に、部分秘密鍵発行装置１０２が一般的な構成を有する情報処理装置２０１上に構築されているものとして情報処理装置２０１の動作の概略について説明する。
情報処理装置２０１において実際の処理を行う、公開パラメータおよびマスター鍵を生成処理、部分秘密鍵生成処理を行う部分秘密鍵生成処理部１０６は、プログラムがメモリ２０３上にロードされＣＰＵ２０２上で動作すること具現化されているものとする。またネットワーク１０５からの入出力は、ネットワーク接続装置２０６を、可搬性の記憶媒体を用いたデータの入出力は、外部入出力装置２０７を、それぞれ介して行うものとする。
【００３８】
なお、部分秘密鍵生成処理部１０６は後述の図３に示される構造を持つ。
情報処理装置２０１では、上述のようにサインクリプションシステム１０１全体で用いられる公開パラメータおよびマスター鍵を生成し、生成した公開パラメータを公開する。そして、部分秘密鍵の発行を要求する部分秘密鍵発行要求を受け付けると、当該利用者用の部分秘密鍵を生成し、要求元の利用者に発行する。
【００３９】
具体的には、情報処理装置２０１は、入力装置２０４より公開パラメータおよびマスター鍵生成依頼と生成に必要なセキュリティパラメータの入力を受け付け、それらのデータをメモリ２０３にロードし、メモリ２０３上に公開パラメータおよびマスター鍵を生成する。生成した公開パラメータおよびマスター鍵は必要に応じて外部記憶装置２０８等の記憶装置に保管する。このとき、マスター鍵は、例えば、マスター鍵の保管場所へのアクセスに対しアクセス制限を設定する等、外部に一切漏れないよう厳重に保管する。公開パラメータは、ネットワーク１０５経由、もしくは可搬性の記憶媒体を用いて、利用者に配布する。なお、公開パラメータおよびマスター鍵は、部分秘密鍵生成処理部１０６を用いて、後述する図６に示す処理に従って生成される。
【００４０】
次に、情報処理装置２０１は、利用者から部分秘密鍵の発行を要求する秘密鍵発行要求を利用者の公開鍵ＩＤとともに、入力装置２０４またはネットワーク１０５を経由して入力を受け付けると、それらのデータをメモリ上にロードし、公開鍵ＩＤと、予め外部記憶装置２０８よりメモリ２０３上にロードされている公開パラメータおよびマスター鍵と、を用いて部分秘密鍵をメモリ２０３上に生成する。部分秘密鍵生成結果は要求元の利用者に安全な通信方法を用いてネットワーク１０５経由で、もしくは可搬性の記憶媒体に保存し、配布する。部分秘密鍵は、部分秘密鍵生成処理部１０６を用いて、後述する図８に示す処理に従って生成される。本実施形態では、本人認証に用いる利用者のＩＤを、公開鍵として用いていて説明するが、公開鍵として用いる文字列は任意であり、これに限られない。
【００４１】
なお、本実施形態では、安全な通信方法として、例えば、S S L通信などの暗号化通信によるもの、部分秘密鍵送受信専用の通信回線によるものなどが考えられる。
【００４２】
次に署名付き暗号化装置１０３について説明を行う。
署名付き暗号化装置１０３は利用者Ａのユーザ公開鍵生成および署名付き暗号化を行うものである。
【００４３】
署名付き暗号化装置１０３は、ＣＰＵ（Central Processing Unit）２０２と、ＲＡＭ（Random Access Memory）などのメモリ２０３と、ＨＤやその他の外部記憶装置２０８と、キーボードなどの入力装置２０４と、ディスプレイなどの出力装置２０５と、ネットワーク１０５からの入出力を処理するネットワーク接続装置２０６と、ＤＶＤ−Ｒドライブ等可搬性の記憶媒体からの入出力を処理する外部入出力装置２０７と、外部記憶装置２０８や、入力装置２０４や、出力装置２０５や、ネットワーク接続装置２０６や、外部入出力装置２０７や、外部記憶装置２０８とのインタフェース２０９とを備えた、一般的な構成を有する情報処理装置２０１として構築することができる。
【００４４】
署名付き暗号化装置１０３において、ユーザ鍵生成処理、署名付き暗号化処理を実際に行う、署名付き暗号化処理部１０７は、ＣＰＵ２０２が、メモリ２０３にロードされたプログラム（コードモジュールともいう）を実行することで、情報処理装置２０１上に具現化される。また、これらの処理で必要となる一時記憶や生成データはメモリ２０３や、外部記憶装置２０８に必要に応じて記憶される。
【００４５】
また、前記したプログラムは、予め外部記憶装置２０８に記憶され、必要に応じてメモリ２０３上にロードされ、ＣＰＵ２０４により実行される。なお、このプログラムは、可搬性の記憶媒体、例えばＣＤ−ＲＯＭなどより外部入出力装置２０７を介して、メモリ２０３にロードされてもよい。また、プログラムは、一旦、ＣＤ−ＲＯＭなどの可搬性の記憶媒体から外部入出力装置２０７を介してＨＤなどにインストールされた後、必要に応じて、このＨＤからメモリ２０３にロードされてもよい。さらに、プログラムは、ネットワーク接続装置を介して、ネットワーク１０５上の情報処理装置２０１が伝送信号により、一旦ＨＤにダウンロードされてからメモリ２０３にロードされてもよいし、あるいは、直接、ネットワーク１０５経由でネットワーク接続装置２０６を介して、メモリ２０３にロードされてもよい。
【００４６】
次に、署名付き暗号化装置１０３が一般的な構成を有する情報処理装置２０１上に構築されているものとして情報処理装置２０１の動作の概略について説明する。情報処理装置２０１において実際の処理を行う、署名付き暗号化処理部１０７は、メモリ２０３上にロードされＣＰＵ２０２上で動作することで具現化されているものとする。またネットワーク１０５からの入出力は、ネットワーク接続装置２０６を、可搬性の記憶媒体を用いたデータの入出力は、外部入出力装置２０７を、それぞれ介して行うものとする。  なお、署名付き暗号化処理部１０７は後述の図７に示される構造を持つ。
次に、情報処理装置２０１の動作について説明する。情報処理装置２０１は利用者Ａの依頼により利用者のユーザ鍵生成処理又は署名付き暗号化処理を行う。具体的な処理は以下のとおりである。
【００４７】
署名付き暗号化処理に先立ち、情報処理装置２０１は、部分秘密鍵発行装置１０２で公開されている公開パラメータを、外部記憶装置２０８に既に保管されている場合、外部記憶装置２０８よりメモリ２０３にロードし、保管されていない場合、ネットワークまたは可搬性の記憶媒体を利用することで入手しメモリ２０３にロードする、また必要に応じて外部記憶装置２０８に保管する。
【００４８】
情報処理装置２０１の利用者Ａは部分秘密鍵発行装置１０２に部分秘密鍵の発行を依頼し部分秘密鍵を入手する。
【００４９】
発行済の部分秘密鍵が、外部記憶装置２０８に保管されていれば、外部記憶装置２０８よりメモリ２０３にロードし、そうでない場合、可搬性の記憶媒体または、安全なネットワーク通信を利用して、部分秘密鍵を入手しメモリ２０３にロードし、必要に応じて外部記憶装置２０８に保管する。なお、本実施形態では、安全なネットワーク通信の方法として、例えば、ＳＳＬ通信などの暗号化通信によるもの、部分秘密鍵送受信専用の通信回線によるものなどが考えられる。
【００５０】
次に利用者Ａは入力装置２０４を介して、ユーザ鍵生成処理または署名付き暗号化処理を依頼する。
【００５１】
ユーザ鍵生成処理が依頼された場合、署名付き暗号化プログラムは、ユーザ鍵生成処理を実行し、その演算結果を公開鍵と合わせてメモリ２０３に記憶すると共に、必要に応じて外部記憶装置２０８等の記憶装置に保存するとともに、必要に応じてネットワーク１０５を、または可搬性の記憶媒体を、介して他の利用者に公開鍵およびユーザ公開鍵を配布する。なお、ユーザ鍵生成処理は、後述する図９に示す処理に従って行われる。
【００５２】
署名付き暗号化処理が選択された場合、利用者Ａの公開鍵、秘密鍵およびユーザ公開鍵をメモリ２０３に外部記憶装置２０８よりロードする。次に、送付先である利用者Ｂの公開鍵およびユーザ公開鍵が外部記憶装置２０８に保管されていれば、それらをメモリ２０３にロードし保管されていなければ、ネットワーク２０５または可搬性の記録媒体等を介して入手しメモリ２０３にロードし、必要に応じて外部記憶装置２０９に保管する。
利用者Ｂの公開鍵およびユーザ公開鍵、利用者Ａの公開鍵、ユーザ公開鍵および秘密鍵を用いて、署名付き暗号化プログラムは、予めメモリ２０３上にロードされている署名付き暗号化対象データに対して署名付き暗号化処理を実行し、その演算結果をメモリ２０３に記憶すると共に、必要に応じて外部記憶装置２０８等の記憶装置に保管する。利用者Ｂへの送付は外部入出力装置２０７を介して演算結果を保管した可搬性の記憶媒体、またはネットワーク接続装置を介してネットワーク１０５経由で配布する。なお、署名付き暗号化処理は、後述する図１１に示す処理に従って行われる。
【００５３】
次に復号および検証装置１０４について説明を行う。
検証および復号装置１０４は利用者Ｂのユーザ公開鍵生成および署名付き暗号化データに対して復号および検証処理を行うものである。
【００５４】
復号および検証装置１０４は、ＣＰＵ（Central Processing Unit）２０２と、ＲＡＭ（Random Access Memory）などのメモリ２０３と、ＨＤやその他の外部記憶装置２０８と、キーボードなどの入力装置２０４と、ディスプレイなどの出力装置２０５と、ネットワーク１０５からの入出力を処理するネットワーク接続装置２０６と、ＤＶＤ−Ｒドライブ等可搬性の記憶媒体からの入出力を処理する外部入出力装置２０７と、外部記憶装置２０８や、入力装置２０４や、出力装置２０５や、ネットワーク接続装置２０６や、外部入出力装置２０７や、外部記憶装置２０８とのインタフェース２０９とを備えた、一般的な構成を有する情報処理装置２０１として構築することができる。
【００５５】
復号および検証装置１０４において、ユーザ鍵生成処理、検証および復号処理を行う復号および検証処理部１０８はＣＰＵ２０２が、メモリ２０３にロードされたプログラム（コードモジュールともいう）を実行することで、情報処理装置２０１上に具現化される。また、これらの処理で必要となる一時記憶や生成データはメモリ２０３や、外部記憶装置２０８に必要に応じて記憶される。
【００５６】
また、前記したプログラムは、予め外部記憶装置２０８に記憶され、必要に応じてメモリ２０３上にロードされ、ＣＰＵ２０４により実行される。なお、このプログラムは、可搬性の記憶媒体、例えばＣＤ−ＲＯＭなどより外部入出力装置を介して、必要に応じて、可搬性の記憶媒体からメモリ２０３にロードされてもよい。また、プログラムは、一旦、ＣＤ−ＲＯＭなどの可搬性の記憶媒体から外部入出力装置２０７を介してＨＤなどにインストールされた後、必要に応じて、このＨＤからメモリ２０３にロードされてもよい。さらに、プログラムは、ネットワーク接続装置を介して、ネットワーク１０５上の情報処理装置２０１が伝送信号により、一旦ＨＤにダウンロードされてからメモリ２０３にロードされてもよいし、あるいは、直接、ネットワーク１０５経由でネットワーク接続装置２０６を介して、メモリ２０３にロードされてもよい。
【００５７】
次に、復号および検証装置１０４が一般的な構成を有する情報処理装置２０１上に構築されているものとして情報処理装置２０１の動作の概略について説明する。
情報処理装置２０１において実際の処理を行う、ユーザ鍵生成処理、検証および復号処理を行う復号および検証処理部１０８はメモリ２０３上にロードされＣＰＵ２０２上で動作することで具現化されているものとする。またネットワーク１０５からの入出力は、ネットワーク接続装置２０６を、可搬性の記憶媒体を用いたデータの入出力は、外部入出力装置２０７を、それぞれ介して行うものとする。
【００５８】
なお、復号および検証処理部１０８は後述の図１１に示される構造を持つ。
復号および検証処理に先立ち、情報処理装置２０１は、部分秘密鍵発行装置１０２で公開されている公開パラメータを、外部記憶装置２０８に既に保管されている場合、外部記憶装置２０８よりメモリ２０３にロードし、保管されていない場合、ネットワーク１０５または可搬性の記憶媒体を利用して入手しメモリ２０３にロードし、必要に応じて外部記憶装置２０８に保管する。
【００５９】
復号および検証装置１０４の利用者Ｂは部分秘密鍵発行装置１０２に部分秘密鍵の発行を依頼し部分秘密鍵を入手する。
発行済の部分秘密鍵が、外部記憶装置２０８に保管されていれば、外部記憶装置２０８よりメモリ２０３にロードし、そうでない場合、可搬性の記憶媒体または、安全なネットワーク通信を利用して、部分秘密鍵を入手しメモリ２０３にロードし、必要に応じて外部記憶装置２０８に保管する。なお、本実施形態では、安全なネットワーク通信の方法として、例えば、ＳＳＬ通信などの暗号化通信によるもの、部分秘密鍵送受信専用の通信回線によるものなどが考えられる。
【００６０】
次に利用者Ｂは入力装置２０１を介してユーザ鍵生成処理または復号および検証処理を依頼する。
ユーザ鍵生成処理が依頼された場合、復号および検証プログラムはユーザ鍵生成処理を実行し、その演算結果を公開鍵と合わせて、外部記憶装置２０８に保存するとともに、必要に応じてネットワーク１０５を、または可搬性の記憶媒体を、介して他の利用者に公開鍵およびユーザ公開鍵を配布する。なお、ユーザ鍵生成処理は、後述する図１３に示す処理に従って行われる。
【００６１】
復号および検証処理が選択された場合、利用者Ｂの公開鍵、ユーザ公開鍵および秘密鍵をメモリ２０３に外部記憶装置２０８よりロードする。次に、送付である利用者Ａの公開鍵およびユーザ公開鍵が外部記憶装置２０８に保管されていれば、それらをメモリ２０３にロードし保管されていなければ、ネットワーク１０５または可搬性の記録媒体等を介して入手しメモリ２０３にロードし、必要に応じて外部記憶装置２０８に保管する。
利用者Ｂの公開鍵およびユーザ公開鍵、利用者Ａの公開鍵、ユーザ公開鍵および秘密鍵を用いて、復号および検証プログラムは予めメモリ２０３にロードされている復号および検証対象データに対して、署名付き暗号化処理を実行し、その演算結果をメモリ２０３に記憶すると共に、必要に応じて外部記憶装置２０８等の記憶装置に保管する。なお、復号および検証処理は、後述する図１４に示す処理に従って行われる。
【００６２】
以上、本実施形態のサインクリプションシステム１０１を構成する各装置の機能の詳細について説明した。
【００６３】
次に、図３〜１４を用いて本実施形態のサインクリプションシステム１０１による、公開パラメータ等の生成、署名付き暗号化、復号および検証の各処理の詳細を、それぞれの装置が一般的な構成を有する情報処理装置２０１上に構築されているとした場合、メモリ２０３上にロードされＣＰＵ２０２上で動作するプログラムによる処理として説明する。
【００６４】
まず、部分秘密鍵発行装置１０２を一般的な構成を有する情報処理装置２０１上に構築した場合の処理について説明を行う。
【００６５】
図３は、部分秘密鍵発行装置１０２において、公開パラメータ、マスター鍵、および部分秘密鍵を生成する部分秘密鍵生成処理部１０６の、機能構成の概要を示す図である。情報処理装置２０１において、部分秘密鍵生成処理部１０６は、プログラムがメモリ２０３上にロードされＣＰＵ２０２上で動作することにより具現化される。
【００６６】
本図に示すように、部分秘密鍵生成処理部１０６はＣＰＵ２０２による制御の元、公開パラメータ、マスター鍵、および部分秘密鍵を生成する際に必要となる演算機能を実現する演算機能部３０１と、処理に必要な入力データおよび出力データを保持するためにメモリ２０３上に確保される入出力データ保持部３０２とを備える。
【００６７】
演算機能部３０１は、乱数を生成する乱数生成機能３０３と、群演算や楕円曲線上の演算などを行う基本演算機能３０４と、素数を選択する素数選択機能３０５と、群を選択する群選択機能３０６と、ペアリングを選択するペアリング選択機能３０７と、ハッシュ関数を選択するハッシュ関数選択機能３０８と、ハッシュ値を計算するハッシュ関数演算機能３０９と、共通鍵暗号を選択する共通鍵暗号選択機能３１０とを備える。
【００６８】
入出力データ保持部３０２は、セキュリティパラメータを保持するセキュリティパラメータ保持領域３１１、公開パラメータを保持する公開パラメータ保持領域３１２、マスター鍵を保持するマスター鍵保持領域３１３、利用者の公開鍵等、部分秘密鍵生成に必要となるデータを保持する利用者公開鍵保持領域３１４、部分秘密鍵生成結果を保持する利用者部分秘密鍵生成結果保持領域３１５を備える。
入出力データ保持部３０２に属する各保持領域３１１から３１５は、プログラム起動時に予め確保されても良いし、ＣＰＵ２０２による制御の元、必要に応じて動的に確保し不必要となった時点で動的に開放しても良い。
【００６９】
図４は、公開パラメータ、マスター鍵、および、部分秘密鍵を生成する際の、ＣＰＵ２０２の処理を説明するためのフローチャートである。以下において、公開パラメータおよびマスター鍵を生成する処理を公開パラメータおよびマスター鍵生成処理、部分秘密鍵を生成する処理を部分秘密鍵生成処理と呼ぶ。
＜ステップ４０１＞
ＣＰＵ２０２による制御の元、処理の選択を受け付ける。公開パラメータおよびマスター鍵生成処理が選択された場合ステップ４０２に進み、部分秘密鍵生成処理が選択された場合ステップ４０３に進む。
＜ステップ４０２＞
公開パラメータおよびマスター鍵生成処理を行い終了する。詳細は、図５を用いて後述する。
＜ステップ４０３＞
部分秘密鍵生成処理を行った後に処理を終了する。詳細は、図６を用いて後述する。
【００７０】
次に、上記図４のステップ４０２における公開パラメータおよびマスター鍵生成処理を説明する。図５は、公開パラメータおよびマスター鍵生成処理を説明するためのフローチャートである。
＜ステップ５０１＞
セキュリティパラメータである正整数ｋ、ｌを取得しセキュリティパラメータ保持領域３１１に保存する。
＜ステップ５０２＞
素数選択機能３０５を用いて、ｋビットの素数ｑを選択する。
＜ステップ５０３＞
群選択機能３０６を用いて位数ｑの２つの群Ｇ1、Ｇ２をおよびＧ1の生成元Ｐを選択する。
＜ステップ５０４＞
ペアリング選択機能３０７を用いてペアリングｅ: Ｇ1×Ｇ1 → Ｇ２を選択する。
＜ステップ５０５＞
乱数生成機能３０３を用いて０＜s＜ｑを満たす整数sをランダムに生成する。
＜ステップ５０６＞
基本演算機能３０４を用いてＰｐｕｂ ←ｓＰを計算する。
＜ステップ５０７＞
ハッシュ関数選択機能３０８を用いて４つのハッシュ関数Ｈ１、Ｈ２、Ｈ３、Ｈ４を選択する。
それぞれのハッシュ関数は以下に示す入出力を持つ。
Ｈ１:｛０，１｝＊ → Ｇ1
Ｈ２:｛０，１｝＊ → ｛０，１｝l
Ｈ３:｛０，１｝＊ → Ｇ1
Ｈ４:｛０，１｝＊ → Ｇ1
＜ステップ５０８＞
共通鍵暗号選択機能３１０を用いて、暗号化関数ＥＮＣおよび復号関数ＤＥＣから構成されるｌビット共通鍵暗号Ｅ＝{ＥＮＣ，ＤＥＣ}を選択する。
＜ステップ５０９＞
ｐａｒａｍｓ＝＜ｑ，Ｇ1，Ｇ２，ｅ，Ｐ，Ｐｐｕｂ，Ｈ1，Ｈ２，Ｈ３，Ｈ４，Ｅ＞を公開パラメータとし、公開パラメータ保持領域３１２に保存する。
＜ステップ５１０＞
整数sをマスター鍵とし、マスター鍵保持領域３１３に保存する。
次に、上記図４のステップ４０３における部分秘密鍵生成処理を説明する。図６は、部分秘密鍵生成処理を説明するためのフローチャートである。
＜ステップ６０１＞
公開パラメータｐａｒａｍｓを取得し公開パラメータ保持領域３１２に保存する。
＜ステップ６０２＞
マスター鍵sを取得し、マスター鍵保持領域３１３に保存する。
＜ステップ６０３＞
部分秘密鍵を要求する利用者の公開鍵ＩＤ（ＩＤ∈｛０，１｝＊）を取得し利用者公開鍵保持領域３１４に保存する。
＜ステップ６０４＞
ハッシュ関数演算機能３０９を用いて、ＱＩＤ ←  Ｈ1（ＩＤ）を計算する。
＜ステップ６０５＞
基本演算機能３０４を用いて、ＤＩＤ ←  sＱＩＤを計算する。
＜ステップ６０６＞
ＤＩＤを利用者の部分秘密鍵とし、利用者部分秘密鍵生成結果保持領域３１５に保存する。
【００７１】
次に、署名付き暗号化装置１０３を一般的な構成を有する情報処理装置２０１上に構築した場合の処理について説明を行う。
図７は、署名付き暗号化装置１０３において、ユーザ鍵生成処理および、署名付き暗号化処理を行う、署名付き暗号化処理部１０７の、機能構成の概要を示す図である。情報処理装置２０１において、署名付き暗号化処理部１０７は、プログラムがメモリ２０３上にロードされＣＰＵ２０２上で動作することにより具現化される。
【００７２】
本図に示すように、署名付き暗号化処理部１０７はＣＰＵ２０２による制御の元、ユーザ鍵生成処理および、署名付き暗号化処理を行う際に必要となる演算機能を実現する演算機能部７０１と、処理に必要な入力データおよび出力データを保持するためにメモリ２０３上に確保される入出力データ保持部７０２とを備える。
【００７３】
演算機能部７０１は、乱数を生成する乱数生成機能７０３と、群演算や楕円曲線上の演算などを行う基本演算機能７０４と、ハッシュ値を計算するハッシュ関数演算機能７０５と、共通鍵暗号を用いた暗号化を行う共通鍵暗号演算機能７０６とを備える。
【００７４】
入出力データ保持部７０２は、公開パラメータを保持する公開パラメータ保持領域７０７、利用者Ａの公開鍵を保持する利用者Ａ公開鍵保持領域７０８と、利用者Ａのユーザ公開鍵を保持する利用者Ａユーザ公開鍵保持領域７０９と、利用者Ａの部分秘密鍵を保持する利用者Ａ部分秘密鍵保持領域７１０と、利用者Ａの秘密鍵を保持する利用者Ａ秘密鍵保持領域７１１と、利用者Ｂの公開鍵を保持する利用者Ｂ公開鍵保持領域７１２と、利用者Ｂのユーザ公開鍵を保持する利用者Ｂユーザ公開鍵保持領域７１３と、署名付き暗号化対象データを保持する署名付き暗号化対象データ保持領域７１４と、署名付き暗号化データを保持する署名付き暗号化データ保持領域７１５とを備える。入出力データ保持部７０２に属する各保持領域７０７から７１５は、プログラム起動時に予め確保されても良いし、ＣＰＵ２０２による制御の元、必要に応じて動的に確保し不必要となった時点で動的に開放しても良い。
【００７５】
図８は、ユーザ鍵の生成、署名付き暗号化の各処理を行う際のＣＰＵ２０２の処理を説明するためのフローチャートである。
＜ステップ８０１＞
ＣＰＵ２０２による制御の元、処理の指示を受け付ける。処理は、ユーザ鍵生成、署名付き暗号化の２つの処理から選択される。ユーザ鍵生成処理が選択された場合はステップ８０２に、署名付き暗号化処理が選択された場合はステップ８０３に進む。
＜ステップ８０２＞
ユーザ鍵生成処理を行う。ユーザ鍵生成処理の詳細は、図９を用いて後述する。
＜ステップ８０３＞
署名付き暗号化処理を行う。署名付き暗号化処理の詳細は、図１０を用いて後述する。
【００７６】
次に、上記図８のステップ８０２におけるユーザ鍵生成処理を説明する。図９は、ユーザ鍵生成処理を説明するためのフローチャートである。以下、利用者Ａの公開鍵をＩＤＡとして処理を説明する。
＜ステップ９０１＞
公開パラメータｐａｒａｍｓを取得し、公開パラメータ保持領域７０７に保存する。
＜ステップ９０２＞
利用者Ａの部分秘密鍵ＤＩＤＡを取得し、利用者Ａ部分秘密鍵保持領域７１０に保存する。
＜ステップ９０３＞
乱数生成機能７０３を用いて、０＜xＩＤＡ＜ｑを満たす整数xＩＤＡをランダムに生成する。
＜ステップ９０４＞
基本演算機能７０４を用いて、ＰＫＩＤＡ ←  xＩＤＡＰを計算する。
＜ステップ９０５＞
ＳＩＤＡ ＝（xＩＤＡ，ＤＩＤＡ）を利用者Ａの公開鍵ＩＤＡに対応する秘密鍵とし、利用者Ａ秘密鍵保持領域７１１に保存する。
＜ステップ９０６＞
ＰＫＩＤＡをＩＤＡに対応するユーザ公開鍵とし、利用者Ａユーザ公開鍵保持領域７０８において保存する。
【００７７】
次に、上記図８のステップ８０３における署名付き暗号化処理を説明する。図１０は、署名付き暗号化処理を説明するためのフローチャートである。
＜ステップ１００１＞
公開パラメータｐａｒａｍｓを取得し、公開パラメータ保持領域７０７に保存する。
＜ステップ１００２＞
署名付き暗号化処理の依頼者である利用者Ａの公開鍵ＩＤＡ、ユーザ公開鍵
ＰＫＩＤＡおよび秘密鍵ＳＩＤＡ＝（xＩＤＡ，ＤＩＤＡ）を取得し、それぞれ利用者Ａ公開鍵保持領域７０８、利用者Ａユーザ公開鍵保持領域７０９および利用者Ａ秘密鍵保持領域７１１に保存する。
＜ステップ１００３＞
署名付き暗号化データの受信者である利用者Ｂの公開鍵ＩＤＢおよびユーザ公開鍵ＰＫＩＤＢを取得し、それぞれ利用者Ｂ公開鍵保持領域７１２および、利用者Ｂユーザ公開鍵保持領域７１３に保存する。
＜ステップ１００４＞
利用者Ａより指定された署名付き暗号化対象データＭを取得し署名付き暗号化対象データ保持領域７１４に保存する。
＜ステップ１００５＞
乱数生成機能７０３を用いて、０＜ｒ＜ｑを満たす整数ｒをランダムに生成する。
＜ステップ１００６＞
基本演算機能７０４を用いて、Ｕ ←ｒＰを計算する。
＜ステップ１００７＞
ハッシュ関数演算機能７０４を用いて、ＱＩＤＢ ←  Ｈ1（ＩＤＢ）を計算する。
＜ステップ１００８>
基本演算機能７０４を用いて、ペアリングの計算を行い
Ｔ ←ｅ（Ｐｐｕｂ，ＱＩＤＢ）ｒを計算する。
＜ステップ１００９＞
ハッシュ関数演算機能７０５を用いて、署名付き暗号化対象データＭを含む入力に対してハッシュ値Ｈ ←  Ｈ３（Ｍ，Ｕ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
＜ステップ１０１０＞
ハッシュ関数演算機能７０５を用いて署名付き暗号化対象データＭおよびステップ１００８におけるペアリング演算結果Ｔを含む入力に対して
ハッシュ値Ｉ←  Ｈ４（Ｍ，Ｕ，Ｔ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
＜ステップ１０１１＞
基本演算機能７０４を用いてＷ ←  ＤＩＤＡ＋ｒＨ＋xＩＤＡＩ を計算しＭに対する署名を生成する。
＜ステップ１０１２＞
基本演算機能７０４を用いて、Ｊ←ｒＰＫＩＤＢを計算する。
＜ステップ１０１３＞
ハッシュ関数演算機能７０５を用いて、共通鍵暗号で用いる鍵
ＳＫ ←  Ｈ２（Ｕ，Ｔ，Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算し、共通鍵暗号で用いるｌビットの鍵ＳＫを求める。
＜ステップ１０１４＞
共通鍵暗号演算機能７０６を用いて、共通鍵暗号Ｅの共通鍵をＳＫとして
Ｖ ←  ＥＮＣ（ＳＫ，Ｍ）を計算しＭの暗号化データＶを生成する。
＜ステップ１０１５＞
Ｃ＝（Ｕ，Ｖ，Ｗ）を署名付き暗号化データとし署名付き暗号化データ保持領域７１５に保存する。
【００７８】
次に、復号および検証装置１０４を一般的な構成を有する情報処理装置２０１上に構築した場合の処理について説明を行う。
【００７９】
図１１は、復号および検証装置１０３において、ユーザ鍵生成処理および、復号および検証処理を行う、復号および検証処理部１０８の、機能構成の概要を示す図である。情報処理装置２０１において、復号および検証処理部１０８は、プログラムがメモリ２０３上にロードされＣＰＵ２０２上で動作することにより具現化される。
【００８０】
本図に示すように、復号および検証処理部１０８はＣＰＵ２０２による制御の元、ユーザ鍵生成処理および、復号および検証処理を行う際に必要となる演算機能を実現する演算機能部１１０１と、処理に必要な入力データおよび出力データを保持するためにメモリ２０３上に確保される入出力データ保持部１１０２とを備える。
【００８１】
演算機能部１１０１は、乱数を生成する乱数生成機能１１０３と、群演算や楕円曲線上の演算などを行う基本演算機能１１０４と、ハッシュ値を計算するハッシュ関数演算機能１１０５と、共通鍵暗号を用いた復号を行う共通鍵暗号演算機能１１０６とを備える。
【００８２】
入出力データ保持部１１０２は、公開パラメータを保持する公開パラメータ保持領域１１０７、利用者Ｂの公開鍵を保持する利用者Ｂ公開鍵保持領域１１０８と、利用者Ａのユーザ公開鍵を保持する利用者Ｂユーザ公開鍵保持領域１１０９と、利用者Ａの部分秘密鍵を保持する利用者Ｂ部分秘密鍵保持領域１１１０と、利用者Ｂの秘密鍵を保持する利用者Ｂ秘密鍵保持領域１１１１と、利用者Ａの公開鍵を保持する利用者Ａ公開鍵保持領域１１１２と、利用者Ａのユーザ公開鍵を保持する利用者Ａユーザ公開鍵保持領域１１１３と、署名付き暗号化データを保持する署名付き暗号化データ保持領域１１１４と、復号および検証結果を保持する復号および検証保持領域１１１５とを備える。入出力データ保持部１１０２に属する各保持領域１１０７から１１１５は、プログラム起動時に予め確保されても良いし、ＣＰＵ２０２による制御の元、必要に応じて動的に確保し不必要となった時点で動的に開放しても良い。
【００８３】
図１２は、ユーザ鍵の生成、復号および検証の各処理を行う際のＣＰＵ２０２の処理を説明するためのフローチャートである。
＜ステップ１２０１＞
ＣＰＵ２０２による制御の元、処理の指示を受け付ける。処理は、ユーザ鍵生成処理、復号および検証処理の２つの処理から選択される。ユーザ鍵生成処理が選択された場合はステップ１２０２に、復号および検証処理が選択された場合はステップ１２０３に進む。
＜ステップ１２０２＞
ユーザ鍵生成処理を行う。ユーザ鍵生成処理の詳細は、図１３を用いて後述する。
＜ステップ１２０３＞
復号および検証処理を行う。復号および検証処理の詳細は、図１４を用いて後述する。
【００８４】
次に、上記図１２のステップ１２０２で行われるユーザ鍵生成処理について説明する。図１３は、ユーザ鍵生成処理を説明するためのフローチャートである。    
以下、利用者Ｂの公開鍵をＩＤＢとして処理を説明する。
＜ステップ１３０１＞
公開パラメータｐａｒａｍｓを取得し公開パラメータ保持領域１１０７に保存する。
＜ステップ１３０２＞
利用者Ｂの部分秘密鍵ＤＩＤＢを取得し利用者Ｂ部分秘密鍵保持領域１１１０に保存する。
＜ステップ１３０３＞
乱数生成機能１１０３を用いて、０＜xＩＤＢ＜ｑを満たす整数xＩＤＢをランダムに生成する。
＜ステップ１３０４＞
基本演算機能１１０４を用いて、ＰＫＩＤＢ ←  xＩＤＢＰを計算する。
＜ステップ１３０５＞
ＳＩＤＢ ＝（xＩＤＢ，ＤＩＤＢ）を利用者Ｂの公開鍵ＩＤＢに対応する秘密鍵とし、利用者Ｂ秘密鍵保持領域１１１１に保存する。
＜ステップ１３０６＞
ＰＫＩＤＢをＩＤＢに対応するユーザ公開鍵とし、利用者Ｂユーザ公開鍵保持領域１１０９において保存する。
【００８５】
次に、上記図１２のステップ１２０３における復号および検証処理を説明する。図１４は、復号および検証処理を説明するためのフローチャートである。
＜ステップ１４０１＞
公開パラメータｐａｒａｍｓを取得し公開パラメータ保持領域１１０７に保存する。
＜ステップ１４０２＞
復号および検証処理の依頼者である利用者Ｂの公開鍵ＩＤＢ、ユーザ公開鍵
ＰＫＩＤＢおよび秘密鍵ＳＩＤＢ＝（xＩＤＢ，ＤＩＤＢ）を取得し、それぞれ利用者Ｂ公開鍵保持領域１１０８、利用者Ｂユーザ公開鍵保持領域１１０９および利用者Ｂ秘密鍵保持領域１１１１に保存する。
＜ステップ１４０３＞
署名付き暗号化データの生成者である利用者Ａの公開鍵ＩＤＡおよびユーザ公開鍵ＰＫＩＤＡを取得し、それぞれ利用者Ａ公開鍵保持領域１１１２および、利用者Ａユーザ公開鍵保持領域１１１３に保存する。
＜ステップ１４０４＞
利用者Ｂより指定された署名付き暗号化データＣ＝（Ｕ，Ｖ，Ｗ）を取得し署名付き暗号化データ保持領域１１１４に保存する。
＜ステップ１４０５＞
基本演算機能１１０４を用いて、ペアリングの計算を行うことで、
Ｔ←ｅ（ＤＩＤＢ，Ｕ）を計算する。
＜ステップ１４０６＞
基本演算機能１１０４を用いて、J ←  xＩＤＢＵを計算する。
＜ステップ１４０７＞
ハッシュ関数演算機能１１０５を用いて、共通鍵暗号で用いる鍵
ＳＫ ←  Ｈ２（Ｕ， Ｔ， Ｊ，ＩＤＢ，ＰＫＩＤＢ）を計算し、共通鍵暗号で用いるｌビットの鍵ＳＫを求める。
＜ステップ１４０８＞
共通鍵暗号演算機能１１０６を用いて、共通鍵暗号Ｅの共通鍵をＳＫとして
Ｍ ←ＤＥＣ（ＳＫ，Ｖ）を計算することで、暗号化データＶを復号し復号データＭを求める。
＜ステップ１４０９＞
ハッシュ関数演算機能１１０５を用いて、復号データＭを含む入力に対して、
Ｈ ←  Ｈ３（Ｍ，Ｕ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
＜ステップ１４１０＞
ハッシュ関数演算機能１１０５を用いて、復号データＭおよびステップ１４０５におけるペアリング演算結果Ｔを含む入力に対して、
Ｉ ←  Ｈ４（Ｍ，Ｕ，Ｔ，ＩＤＡ，ＰＫＩＤＡ）を計算する。
＜ステップ１４１１＞
ハッシュ関数演算機能１１０５を用いて、ＱＩＤＡ ←  Ｈ1（ＩＤＡ）を計算する。
＜ステップ１４１２＞
基本演算機能１１０４を用いて
ｅ（Ｐｐｕｂ，ＱＩＤＡ）ｅ（Ｕ，Ｈ）ｅ（ＰＫＩＤＡ，Ｉ） ＝ ｅ（Ｐ，Ｗ）が成立するかどうかを判定することで署名検証を行い、成立すればステップ１４１４に進み、成立しなければステップ１４１３に進む。
＜ステップ１４１３＞
復号および検証結果をＩｎｖａｌｉｄ（復号および検証失敗）とし、復号および検証結果保持領域１１１５に保存し終了する。
＜ステップ１４１４>
復号および検証結果を復号データＭとし、復号および検証結果保持領域１１１５に保存し終了する。
【符号の説明】
【００８６】
101:サインクリプションシステム、102:部分秘密鍵発行装置、103:署名付き暗号化装置、104:復号および検証装置、105:ネットワーク、106:部分秘密鍵生成処理部、107:署名付き暗号化処理部、108:復号および検証処理部、201:情報処理装置、202:ＣＰＵ、203:メモリ、204:入力装置、205:出力装置、206:ネットワーク接続装置、207:外部入出力装置、208:外部記憶装置、209:インタフェース、210:バス、301:演算機能部、302:入出力データ保持部、303:乱数生成機能、304:基本演算機能、305:素数選択機能、306:群選択機能、307:ペアリング選択機能、308:ハッシュ関数選択機能、309:ハッシュ関数演算機能、310:共通鍵暗号選択機能、311:セキュリティパラメータ保持領域、312:公開パラメータ保持領域、313:マスター鍵保持領域、314:利用者公開鍵保持領域、315:利用者部分秘密鍵生成結果保持領域、701:演算機能部、702:入出力データ保持部、703:乱数生成機能、704:基本演算機能、705:ハッシュ関数演算機能、706:共通鍵暗号演算機能、707:公開パラメータ保持領域、708:利用者Ａ公開鍵保持領域、709:利用者Ａユーザ公開鍵保持領域、710:利用者Ａ部分秘密鍵保持領域、711:利用者Ａ秘密鍵保持領域、712:利用者Ｂ公開鍵保持領域、713:利用者Ｂユーザ公開鍵保持領域、714:署名付き暗号化対象データ保持領域、715:署名付き暗号化データ保持領域、1101:演算機能部、1102:入出力データ保持部、1103:乱数生成機能、1104:基本演算機能、1105:ハッシュ関数演算機能、1106:共通鍵暗号演算機能、1107:公開パラメータ保持領域、1108:利用者Ｂ公開鍵保持領域、1109:利用者Ｂユーザ公開鍵保持領域、1110:利用者Ｂ部分秘密鍵保持領域、1111:利用者Ｂ秘密鍵保持領域、1112:利用者Ａ公開鍵保持領域、1113:利用者Ａユーザ公開鍵保持領域、1114:署名付き暗号化データ保持領域、1115:復号および検証結果保持領域、
【図１】
2011091517.tif 000003
【図２】
2011091517.tif 000004
【図３】
2011091517.tif 000005
【図４】
2011091517.tif 000006
【図５】
2011091517.tif 000007
【図６】
2011091517.tif 000008
【図７】
2011091517.tif 000009
【図８】
2011091517.tif 000010
【図９】
2011091517.tif 000011
【図１０】
2011091517.tif 000012
【図１１】
2011091517.tif 000013
【図１２】
2011091517.tif 000014
【図１３】
2011091517.tif 000015
【図１４】
2011091517.tif 000016