(57)【特許請求の範囲】
【請求項１】
ソフトウェアの完全性を保証する公開署名情報を生成する署名生成装置であって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶部と、
一方向性ハッシュ関数演算を行う第１ハッシュ演算部と、
前記第１ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部と、
前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部と、を備え、
前記署名情報生成部は、前記ソフトウェアが既に公開されている１又は複数の部品ソフトウェアから構成される場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する署名生成装置。
【請求項２】
前記署名鍵は、所定の自然数からなり、
前記検証鍵は、ＧＤＨ（ＧＡＰ−Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）グループの要素である楕円曲線上の点と前記署名鍵とに基づいて生成される、当該楕円曲線上の点からなる請求項１に記載の署名生成装置。
【請求項３】
前記公開部は、前記ソフトウェアを最上位ノードとし、前記部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する請求項１又は請求項２に記載の署名生成装置。
【請求項４】
前記公開部は、前記第１ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値を、さらに公開する請求項１から請求項３のいずれかに記載の署名生成装置。
【請求項５】
請求項１から請求項４のいずれかに記載の署名生成装置により公開された前記公開署名情報を検証する検証装置であって、
前記ソフトウェア又は当該ソフトウェアから演算されたハッシュ値、及び対応する検証鍵、並びに当該ソフトウェアを構成する全ての部品ソフトウェア又は当該部品ソフトウェアから演算されたハッシュ値、及び対応する検証鍵を収集する収集部と、
前記収集部により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う第２ハッシュ演算部と、
前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える検証装置。
【請求項６】
請求項４に記載の署名生成装置により公開された前記公開署名情報を検証する検証装置であって、
前記ソフトウェア及び当該ソフトウェアを構成する全ての部品ソフトウェアから演算されたハッシュ値、並びに対応する検証鍵を収集する収集部と、
前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える検証装置。
【請求項７】
ソフトウェアの完全性を保証する公開署名情報をコンピュータが生成する署名生成方法であって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を前記コンピュータの記憶部に記憶する記憶ステップと、
前記コンピュータを、一方向性ハッシュ関数演算を行う第１ハッシュ演算部として機能させるハッシュ演算ステップと、
前記コンピュータを、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部として機能させる署名情報生成ステップと、
前記コンピュータを、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部として機能させる公開ステップと、を含み、
前記署名情報生成ステップにおいて、前記ソフトウェアが既に公開されている１又は複数の部品ソフトウェアから構成される場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する署名生成方法。
【請求項８】
ソフトウェアの完全性を保証する公開署名情報をコンピュータに生成させる署名生成プログラムであって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を前記コンピュータの記憶部に記憶する記憶ステップと、
前記コンピュータを、一方向性ハッシュ関数演算を行う第１ハッシュ演算部として機能させるハッシュ演算ステップと、
前記コンピュータを、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部として機能させる署名情報生成ステップと、
前記コンピュータを、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部として機能させる公開ステップと、を実行させ、
前記署名情報生成ステップにおいて、前記ソフトウェアが既に公開されている１又は複数の部品ソフトウェアから構成される場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成させる署名生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの完全性を確認するための署名生成装置、検証装置、署名生成方法及び署名生成プログラムに関する。
【背景技術】
【０００２】
従来、コンピュータ向けのソフトウェアが数多く作成されている。これらの中には、機能が類似している物、あるいは発展的に進化した物がある。このようなソフトウェアを作成する上で、業務の効率化や開発時間の短縮を目的として、基本機能に特化した汎用的なソフトウェア等、既存のソフトウェア（以下、部品ソフトウェアと呼ぶ）を組み込んで、新たな機能を有するソフトウェア（以下、コンポーネントソフトウェアと呼ぶ）を作成する手法が採用される場合がある。また、この手法を用いるための開発環境も整備されてきている。
【０００３】
ところで、ソフトウェアは、許可無く改竄されたり、ウィルスが混入されたりすることで、正常に利用できないことがある。この対策のため、電子署名を用いて、ソフトウェアが改竄されていないか、又はウィルス等の悪意のあるソフトウェアが混入されていないか否かを確認する方法が提案されている（例えば、特許文献１〜４参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−２８６３３４号公報
【特許文献２】特開２００３−２０２９３１号公報
【特許文献３】特開２００４−２４８０４５号公報
【特許文献４】特開２００４−２２２３３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、これらの方法は、一つのソフトウェアに対して、その完全性を保証するためのものである。したがって、前述のコンポーネントソフトウェアに対して、これらの方法を適用すると、ソフトウェアが組み込まれる度に、完全性の確認及び電子署名の生成のために多くの処理が発生していた。
【０００６】
本発明は、コンポーネントソフトウェアの完全性を効率的に確認できる署名生成装置、検証装置、署名生成方法及び署名生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では、以下のような解決手段を提供する。
【０００８】
（１）本発明に係る署名生成装置は、ソフトウェアの完全性を保証する公開署名情報を生成する署名生成装置であって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶部と、一方向性ハッシュ関数演算を行う第１ハッシュ演算部と、前記第１ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部と、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部と、を備え、前記署名情報生成部は、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する。
【０００９】
このような構成によれば、署名生成装置は、部品ソフトウェアから得られたハッシュ値と、コンポーネントソフトウェアの署名鍵との積により、木構造において連続する２つのノード間の関係を表し、さらに部品ソフトウェアの公開署名情報を用いて、コンポーネントソフトウェアの公開署名情報を生成する。署名生成装置は、この公開署名情報により、コンポーネントソフトウェアを構成する部品ソフトウェアの木構造を表現できるので、コンポーネントソフトウェアの完全性を効率的に確認できる。
【００１０】
（２）また、上記署名生成装置では、前記署名鍵は、所定の自然数からなり、前記検証鍵は、ＧＤＨ（ＧＡＰ−Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）グループの要素である楕円曲線上の点と前記署名鍵とに基づいて生成される、当該楕円曲線上の点からなる。
【００１１】
このような構成によれば、署名生成装置は、署名鍵を知らない第三者がＧＤＨグループの要素である楕円曲線上の点から署名鍵を求めることを、計算量的に困難にすることができる。また、署名者の数（ノードの数）が増えても、生成される公開署名情報は楕円曲線上の点であるため、情報のサイズ（容量）は増大せず一定値以下に抑制され、署名生成装置は、効率的に署名情報を生成することができる。
【００１２】
（３）また、上記署名生成装置では、前記公開部は、前記ソフトウェアを最上位ノードとし、前記部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する。
【００１３】
このような構成によれば、署名生成装置は、コンポーネントソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する。したがって、コンポーネントソフトウェアの完全性を確認する際に、木構造を容易に把握できるので、検証の処理効率が向上する。
【００１４】
（４）また、上記署名生成装置では、前記公開部は、前記第１ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値を、さらに公開する。
【００１５】
このような構成によれば、署名生成装置は、部品ソフトウェアに対する一方向性ハッシュ関数演算の処理負荷を低減することができる。
【００１６】
（５）本発明に係る検証装置は、上記署名生成装置により公開された前記公開署名情報を検証する検証装置であって、前記ソフトウェア又は当該ソフトウェアから演算されたハッシュ値、及び対応する検証鍵、並びに当該ソフトウェアを構成する全ての部品ソフトウェア又は当該部品ソフトウェアから演算されたハッシュ値、及び対応する検証鍵を収集する収集部と、前記収集部により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う第２ハッシュ演算部と、前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える。
【００１７】
このような構成によれば、検証装置は、コンポーネントソフトウェア及び部品ソフトウェアの検証鍵とハッシュ値とに基づいて、コンポーネントソフトウェアに対する公開署名情報の正当性を検証する。よって、検証装置では、各部品ソフトウェアに対して生成される個々の署名情報等を検証することなく、検証対象であるコンポーネントソフトウェアに対して生成される公開署名情報を検証することにより、木構造における署名順序を証明することができる。すなわち、検証装置は、処理負荷を低減して検証処理を実行することができる。
【００１８】
（６）本発明に係る検証装置は、上記署名生成装置により公開された前記公開署名情報を検証する検証装置であって、前記ソフトウェア及び当該ソフトウェアを構成する全ての部品ソフトウェアから演算されたハッシュ値、並びに対応する検証鍵を収集する収集部と、前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える。
【００１９】
このような構成によれば、検証装置は、検証対象であるコンポーネントソフトウェア及び部品ソフトウェアに対して、一方向性ハッシュ関数演算の処理負荷を低減することができる。
【００２０】
（７）本発明に係る署名生成方法は、ソフトウェアの完全性を保証する公開署名情報をコンピュータが生成する署名生成方法であって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、一方向性ハッシュ関数演算を行うハッシュ演算ステップと、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を含み、前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する。
【００２１】
このような構成によれば、署名生成方法をコンピュータが実行することにより、（１）と同様の効果が期待できる。
【００２２】
（８）本発明に係る署名生成プログラムは、ソフトウェアの完全性を保証する公開署名情報をコンピュータに生成させる署名生成プログラムであって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、一方向性ハッシュ関数演算を行うハッシュ演算ステップと、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を実行させ、前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成させる。
【００２３】
このような構成によれば、署名生成プログラムをコンピュータに実行させることにより、（１）と同様の効果が期待できる。
【発明の効果】
【００２４】
本発明によれば、コンポーネントソフトウェアの完全性を効率的に確認できる。
【図面の簡単な説明】
【００２５】
【図１】第１実施形態に係る署名生成装置の構成を示すブロック図である。
【図２】第１実施形態に係る検証装置の構成を示すブロック図である。
【図３】第１実施形態に係る公開署名情報を公開する方法を示すフローチャートである。
【図４】第１実施形態に係る公開署名情報の正当性を検証する方法を示すフローチャートである。
【図５】第１実施形態に係る署名生成装置の動作についての説明に供する図である。
【図６】第２実施形態に係る署名生成装置の構成を示すブロック図である。
【図７】第２実施形態に係る検証装置の構成を示すブロック図である。
【発明を実施するための形態】
【００２６】
＜第１実施形態＞
以下、本発明の実施形態の一例である第１実施形態について説明する。本実施形態に係る署名生成装置１は、ソフトウェアの完全性を保証するための公開署名情報を生成する。ここで、署名対象がコンポーネントソフトウェアである場合、このコンポーネントソフトウェアは、１又は複数の部品ソフトウェアから構成される。これらの部品ソフトウェアは、さらに下位の部品ソフトウェアから構成される場合もある。署名生成装置１は、このように、コンポーネントソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造状に構成された各ノードにおける、ソフトウェアの完全性を保証するための公開署名情報を生成する。また、各ノードのソフトウェアに対して生成された公開署名情報は、検証装置２により正当性が検証され、ソフトウェアの完全性が確認される。
【００２７】
なお、木構造とは、対称か非対称かを問わず、任意の構造を持つ木構造全てを指す。本発明は、この任意の構造を持つ木構造に対して適応可能である。
【００２８】
ところで、各ノード（コンポーネントソフトウェア又は部品ソフトウェア）には、非公開の署名鍵と、公開されている検証鍵とが認証局（ＣＡ）によってそれぞれ割り当てられている。署名鍵は、所定の自然数（ｘ）からなり、検証鍵は、ＧＤＨ（ＧＡＰ−Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）グループ（Ｇ）の要素である楕円曲線上の点（ｇ）と署名鍵（ｘ）とに基づいて生成される楕円曲線上の点（ｖ＝ｘｇ）からなることが好ましい。このように構成されることにより、署名鍵（ｘ）を知らない第三者が「ｖ」や「ｇ」の値から署名鍵（ｘ）を求めることは計算量的に困難となる。
【００２９】
ここで、本実施形態で採用される具体的な署名方式について説明する。署名生成装置１では、ベースとなる署名方式としてＧＡＰ−Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ（ＧＤＨ）署名を採用する。ＧＤＨ署名とは、Ｄｅｃｉｓｉｏｎ−Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ（ＤＤＨ）問題をペアリングと呼ばれるある種のブラックボックス関数ｅ（Ｐ，Ｑ）を用いることで、解くことが可能であることを利用した署名である。
【００３０】
次に、ペアリング演算を用いたＧＤＨ署名について説明する。楕円曲線上のＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ問題に関連して、ＧＤＨグループが定義されている。ＧＤＨグループについて簡単に説明する。Ｇをある楕円曲線上の点の集合とする。「ｇ」を集合Ｇの要素としたとき、集合Ｇにおける楕円曲線上のＤｅｃｉｓｉｏｎａｌ  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ（ＤＤＨ）問題とＣｏｍｐｕｔａｔｉｏｎａｌ  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ（ＣＤＨ）問題が以下のように定義される。
【００３１】
ＤＤＨ問題：あるａ、ｂ、ｃという自然数があり、ｇ、ａｇ、ｂｇ、ｃｇが与えられた時、ｃ＝ａｂかどうかを判定する問題。
ＣＤＨ問題：あるａ、ｂ、ｃという自然数があり、ｇ、ａｇ、ｂｇが与えられた時、ａｂｇを計算する問題。
【００３２】
このとき、ＤＤＨ問題は、計算量的に簡単であるが、ＣＤＨ問題は、計算量的に難問である場合、この集合ＧをＧＤＨグループと定義する。
【００３３】
これに対し、ある楕円曲線上の点をＰ，Ｑとし、そのＰ，Ｑによっては次にあげる性質を持つことができるペアリングと呼ばれるブラックボックス関数ｅ（Ｐ，Ｑ）を定義できるものが存在する。
ｅ（Ｐ，Ｑ１＋Ｑ２）＝ｅ（Ｐ，Ｑ１）ｅ（Ｐ，Ｑ２）  ・・・（１）
ｅ（Ｐ１＋Ｐ２，Ｑ）＝ｅ（Ｐ１，Ｑ）ｅ（Ｐ２，Ｑ）  ・・・（２）
ｅ（ａＰ，ｂＱ）＝ｅ（ｂＰ，ａＱ）＝ｅ（ａｂＰ，Ｑ）＝ｅ（Ｐ，ａｂＱ）＝ｅ（Ｐ，Ｑ）ａｂ  ・・・（３）
【００３４】
よって、ｇがペアリング演算の可能な楕円曲線上の点である場合には、上記の性質から、（３）式にｇ、ａｇ、ｂｇ、ｃｇを入力すると、
ｅ（ａｇ，ｂｇ）＝ｅ（ｇ，ｇ）ａｂ  ・・・（４）
ｅ（ｇ，ｃｇ）＝ｅ（ｇ，ｇ）ｃ  ・・・（５）
となり、両者の値が一致するかどうかにより、「ａｂ＝ｃ」であるかどうかを判定でき、ｇはＧＤＨグループＧの要素となりうる。
【００３５】
この性質を利用してＧＤＨ署名が構成される。集合Ｇは、ＧＤＨグループであり、ｇは集合Ｇの要素となる点とする。また、一方向性ハッシュ関数Ｈを、通常使用される任意のビット長のサイズの数値データが固定のビット長のサイズの数値データに写像変換される方式とは異なり、
Ｈ：｛０，１｝＊→Ｇ
のように任意のビット長のサイズの数値データを楕円曲線上の点として表現されるＧＤＨグループＧの要素に写像変換する方式であると定義する。
【００３６】
このとき、ＧＤＨ署名は以下のように定義される。
鍵生成：自然数ｘを選び、ｇからｖ＝ｘｇを計算する。ｘを署名鍵、楕円曲線上の点ｖを検証鍵とする。
署名：署名者は、メッセージ「ｍ∈｛０，１｝＊」に対しｈ＝Ｈ（ｍ）を計算し、さらに自分の署名鍵を用いてσ＝ｘｈを計算する。σをｍに対する署名として公開する。
検証：検証者は、メッセージｍからｈ＝Ｈ（ｍ）を計算し、ｇ、ｖ、ｈ、σを準備する。ｅ（ｇ，σ）とｅ（ｖ，ｈ）を計算し、両者の値が一致したら、署名σは、正しい署名と判定する。
【００３７】
このとき、ｈの値は集合Ｇの要素となるので、ある自然数ｙを用いてｈ＝ｙｇと表現できる。その結果、正しく署名が行われていれば（ｇ，ｖ，ｈ，σ）＝（ｇ，ｘｇ，ｙｇ，ｘｙｇ）となる。したがって、正当な署名であれば上記の検証でのペアリング演算は、ｅ（ｇ，σ）＝ｅ（ｇ，ｘｙｇ）＝ｅ（ｇ，ｇ）ｘｙ＝ｅ（ｘｇ，ｙｇ）＝ｅ（ｖ，ｈ）となり、値が一致することから、検証可能となる。なお、ＧＤＨグループの条件であるＣＤＨ問題の困難性から、署名鍵ｘを知らない第三者がｇ、ｖ、ｈの値から署名σを導出することは不可能である。
【００３８】
図１は、本実施形態に係る署名生成装置１の構成を示すブロック図である。
署名生成装置１は、記憶部１１と、受信部１２と、一方向性ハッシュ関数演算部１３と、署名情報生成部１４と、公開部１５と、を備える。
【００３９】
記憶部１１は、自身のノード（署名者ｕｕｐ）が作成したソフトウェア（ｍｕｐ）に対応して割り当てられている署名鍵（ｘｕｐ）と検証鍵（ｖｕｐ＝ｘｕｐｇ）とを記憶する。
【００４０】
受信部１２は、署名対象である自身のソフトウェアが構成要素として部品ソフトウェアを有する場合、１又は複数の下位ノード（署名者ｕｌｏｗ）が作成した部品ソフトウェア（ｍｌｏｗ）と、これらの部品ソフトウェアに対して後述の公開部１５により公開されている公開署名情報（σｌｏｗ）と、を受信する。さらに、受信部１２は、公開部１５により同様に公開されている、部品ソフトウェアを最上位ノードとする木構造の構成を示すリストデータを受信する。
【００４１】
一方向性ハッシュ関数演算部１３は、受信部１２により受信された部品ソフトウェア（ｍｌｏｗ）のそれぞれと、署名対象である自身のソフトウェア（ｍｕｐ）とに一方向性ハッシュ関数演算を行う。
【００４２】
署名情報生成部１４は、部品ソフトウェアの公開署名情報（σｌｏｗ）と、部品ソフトウェア（ｍｌｏｗ）それぞれから演算されたハッシュ値（ｈｌｏｗ＝Ｈ（ｍｌｏｗ））に自身の署名鍵（ｘｕｐ）により演算（楕円曲線上の乗算）を行った結果（ｘｕｐｈｌｏｗ）と、自身のソフトウェア（ｍｕｐ）から演算されたハッシュ値（ｈｕｐ＝Ｈ（ｍｕｐ））に自身の署名鍵（ｘｕｐ）により演算（楕円曲線上の乗算）を行った結果（ｘｕｐｈｕｐ）と、を総和して、自身のソフトウェアに対する公開署名情報（σｕｐ＝Σｌｏｗ（σｌｏｗ＋ｘｕｐｈｌｏｗ）＋ｘｕｐｈｕｐ）を生成する（Σｌｏｗは、直下のノード全てについての総和を示す）。
【００４３】
なお、署名情報生成部１４は、部品ソフトウェアがない場合、自身のソフトウェア（ｍｕｐ）から演算されたハッシュ値（ｈｕｐ）に自身の署名鍵（ｘｕｐ）により演算（楕円曲線上の乗算）を行った結果（ｘｕｐｈｕｐ）のみを、自身のソフトウェアに対する公開署名情報（σｕｐ＝ｘｕｐｈｕｐ）とする。
【００４４】
公開部１５は、自身のソフトウェア（ｍｕｐ）、検証鍵（ｖｕｐ）、及び署名情報生成部１４により生成された公開署名情報（σｕｐ）を公開する。
【００４５】
このような構成によれば、署名生成装置１は、各ノードにおいて、部品ソフトウェアと部品ソフトウェアの公開署名情報とを用いて、コンポーネントソフトウェアの公開署名情報を生成する。この公開署名情報は、自身のノードに至るまでの木構造を表現し、かつ楕円曲線上の点のみで生成される。すなわち、署名者（部品ソフトウェアの数）が多くなっても、署名サイズは増大せず、一定値以下に抑制される。また、署名生成装置１は、自身のソフトウェアに対して生成した公開署名情報（σｕｐ）を、ソフトウェアの利用者（検証装置２）や、さらに上位のコンポーネントソフトウェアの作成者（署名生成装置１）へ提供できる。
【００４６】
また、公開部１５は、自身のソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータ（Ｌ）を、さらに公開する。
このリストデータは、例えば、
Ｌ＝｛（ｕｐ，｛ｕｐ１，ｕｐ２，・・・｝，ＩＤ（ｍｐ）），
（ｕｐ１，｛｝，ＩＤ（ｍｐ１）），
（ｕｐ２，｛｝，ＩＤ（ｍｐ２）），・・・｝
のように、構成される。ここで、署名者ｕｐは、コンポーネントソフトウェアｍｐの公開署名情報を生成し、ｍｐを構成する部品ソフトウェア（ｍｐ１、ｍｐ２、・・・）は、それぞれ署名者（ｕｐ１、ｕｐ２、・・・）によって公開署名情報が生成されている。なお、ＩＤ（ｍα）は、ソフトウェアｍαの識別子（ＩＤ）である。
【００４７】
このような構成によれば、上位のノードにおいてコンポーネントソフトウェアの公開署名情報を生成する際の処理効率や、後述の検証装置２における検証の処理効率が向上する。
【００４８】
次に、署名生成装置１により公開された公開署名情報（σ）を検証する検証装置２について説明する。なお、検証装置２は、署名生成装置１と統合されていてもよい。
【００４９】
図２は、本実施形態に係る検証装置２の構成を示すブロック図である。
検証装置２は、収集部２１と、一方向性ハッシュ関数演算部２２と、検証部２３と、を備える。
【００５０】
収集部２１は、検証対象のソフトウェア及び対応する検証鍵と、このソフトウェアよりも下位のノードに位置する全ての部品ソフトウェア及び対応する検証鍵とを収集する。このとき、収集部２１は、検証対象のソフトウェアと共に公開されているリストデータ（Ｌ）を取得し、このリストデータにより示されている木構造の構成に従って、各ノードの部品ソフトウェア及び対応する検証鍵を収集する。
【００５１】
一方向性ハッシュ関数演算部２２は、収集部２１により収集された各ソフトウェア（ｍｉ）に対して、一方向性ハッシュ関数演算を行う（ｈｉ＝Ｈ（ｍｉ））。
【００５２】
検証部２３は、収集部２１により収集された全てのノードのソフトウェアに対応する検証鍵と、一方向性ハッシュ関数演算部２２により得られた全てのノードのソフトウェアから演算されたハッシュ値と、リストデータ（Ｌ）から得られる各ノード（署名者）の配置、及び各署名者と署名を行ったソフトウェアとの対応関係に関する情報と、に基づいて、公開署名情報（σ）の正当性を検証する。
【００５３】
具体的には、検証部２３は、各ノードの検証鍵とハッシュ値とから、「｛Πｉ∈ａｌｌ−ｎｏｄｅ（ｅ（ｖｉ，ｈｉ））｝｛Π（ｅ（ｖｕｐ，ｈｌｏｗ））｝」を計算し、この計算結果と「ｅ（ｇ，σ）」の値とが一致することを確認することによって、公開署名情報（σ）の正当性を検証する。なお、式中で、直結する上下関係のノードをそれぞれ、「ｕｐ」（上位ノード）及び「ｌｏｗ」（下位ノード）と表した。
【００５４】
このようにして、検証装置２は、各ノードのソフトウェアに対して生成される個々の署名情報等を検証することなく、検証対象のコンポーネントソフトウェアに対して公開された公開署名情報を数値演算のみで検証できる。これにより、検証装置２は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。また、検証装置２は、コンポーネントソフトウェアを構成する各部品ソフトウェアの完全性も確認できるので、改竄やウィルスの混入等があった箇所を容易に特定できる。
【００５５】
次に、署名生成装置１において、各ノードにおけるソフトウェアの公開署名情報を生成する方法と、検証装置２において、公開署名情報の正当性を検証する方法について説明する。
【００５６】
署名生成装置１は、図３に示すように、記憶ステップＳ１と、受信ステップＳ２と、一方向性ハッシュ関数演算ステップＳ３と、署名情報生成ステップＳ４と、公開ステップＳ５とにより、各ノードにおけるソフトウェアの公開署名情報（σ）を公開する。
【００５７】
記憶ステップＳ１において、記憶部１１は、署名対象のソフトウェアに対応して、秘密情報である署名鍵と、公開情報である検証鍵とを取得して記憶する。
【００５８】
受信ステップＳ２において、受信部１２は、直下のノード（署名者ｕｌｏｗの部品ソフトウェア）が存在する場合に、この部品ソフトウェア（ｍｌｏｗ）、及び直下のノードの部品ソフトウェアに対して生成された公開署名情報（σｌｏｗ）を受信する。
【００５９】
一方向性ハッシュ関数演算ステップＳ３において、一方向性ハッシュ関数演算部１３は、直下のノードの部品ソフトウェア（ｍｌｏｗ）及び自身のノードのソフトウェア（ｍｕｐ）に対して、それぞれ一方向性ハッシュ関数演算を行う。
【００６０】
署名情報生成ステップＳ４において、署名情報生成部１４は、自身のノードのソフトウェアから演算により得られたハッシュ値（ｈｕｐ）に自身の署名鍵（ｘｕｐ）を乗じた結果と、直下のノードがある場合に、この直下のノードの部品ソフトウェアから演算により得られたハッシュ値（ｈｌｏｗ）に自身の署名鍵（ｘｕｐ）を乗じた結果と、直下のノードから受信した公開署名情報（σｌｏｗ）と、を用いて自身のノードのソフトウェアに対して公開署名情報（σｕｐ）を生成する。
【００６１】
公開ステップＳ５において、公開部１５は、署名情報生成ステップＳ４により生成された公開署名情報、及び木構造の構成を示すリストデータを、ソフトウェア及び検証鍵と共に公開し、直上のノードの署名生成装置１又は検証装置２により参照可能とする。
【００６２】
このように、署名生成装置１に係る署名生成方法によれば、木構造の各ノードにおいて、直下のノードの部品ソフトウェアから得られたハッシュ値と、自身のノードのソフトウェアから得られたハッシュ値とに対して、自身のノードに割り当てられている署名鍵によって演算を行い、さらに直下のノードの部品ソフトウェアに対して生成された公開署名情報を用いて、自身の公開署名情報を生成する。この公開署名情報は、自身のノードに至るまでの署名経路を保持し、かつ楕円曲線上の点のみで生成される。すなわち、署名者（ノードの数）が多くなっても、署名サイズは増大せず、一定値以下に抑制することができる。
【００６３】
また、検証装置２は、図４に示すように、収集ステップＳ１１と、一方向性ハッシュ関数演算ステップＳ１２と、検証ステップＳ１３とにより、公開署名情報（σ）の正当性を検証する。
【００６４】
収集ステップＳ１１において、収集部２１は、署名が行われた全てのノードのソフトウェア（ｍｉ）、及びこれら全てのノードの検証鍵（ｖｉ）を収集する。
【００６５】
一方向性ハッシュ関数演算ステップＳ１２において、一方向性ハッシュ関数演算部２２は、収集ステップＳ１１により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う。
【００６６】
検証ステップＳ１３において、検証部２３は、収集ステップＳ１１により収集された全てのノードの検証鍵、全てのノードのソフトウェアから一方向性ハッシュ関数演算ステップＳ１２により得られたハッシュ値、及びリストデータに基づいて公開署名情報（σ）の正当性を検証する。
【００６７】
このようにして、検証装置２に係る検証方法では、各ノードのソフトウェアに対して生成される個々の公開署名情報等を検証することなく、検証対象のソフトウェアに対して公開された公開署名情報を数値演算のみで検証できる。これにより、検証装置２は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。
【００６８】
［実施例］
ここで、木構造が３分木３階層で構成されている場合における各ノードの署名生成装置１の動作について図５を参照しながら具体的に説明する。なお、第１層は、最終コンポーネントソフトウェアの作成者かつ署名者であるルートノードである。また、第２層は、最終コンポーネントソフトウェアを構成する中間コンポーネントソフトウェアの作成者かつ署名者である中間ノードである。また、第３層は、中間コンポーネントソフトウェアを構成する部品ソフトウェアの作成者かつ署名者であるリーフノードである。
【００６９】
すなわち、第１層には、一つのルートノードが配置されている。また、第２層には、三つの中間ノードが配置され、ｕｒｏｏｔの直下にｕ１からｕ３が配置されている。また、第３層には、九つのリーフノードが配置され、ｕ１の直下にｕ１１からｕ１３が配置され、ｕ２の直下にｕ２１からｕ２３が配置され、ｕ３の直下にｕ３１からｕ３３が配置されている。
【００７０】
また、認証局（ＣＡ）は、予め各ノードに署名鍵と検証鍵を、以下のように付与している。なお、ｓとｔはそれぞれ、１≦ｓ≦３、１≦ｔ≦３となる整数の符号である。
第１層：（署名鍵，検証鍵）＝（ｘｒｏｏｔ，ｖｒｏｏｔ）＝（ｘｒｏｏｔ，ｘｒｏｏｔｇ）
第２層：（署名鍵，検証鍵）＝（ｘｓ，ｖｓ）＝（ｘｓ，ｘｓｇ）
第３層：（署名鍵，検証鍵）＝（ｘｓｔ，ｖｓｔ）＝（ｘｓｔ，ｘｓｔｇ）
【００７１】
第３層の九つのリーフノード（署名者ｕｓｔ）は、署名対象である自身の作成した部品ソフトウェア（ｍｓｔ）に対してハッシュ値（ｈｓｔ＝Ｈ（ｍｓｔ））を求め、ハッシュ値に自身の署名鍵ｘｓｔを乗じて、公開署名情報（σｓｔ＝ｘｓｔｈｓｔ）を生成する。また、リーフノード（署名者ｕｓｔ）は、生成した公開署名情報（σｓｔ）と、部品ソフトウェア（ｍｓｔ）とを公開する。
【００７２】
第２層の三つの中間ノード（署名者ｕｓ）は、まず署名対象である自身の作成した中間コンポーネントソフトウェア（ｍｓ）から、ハッシュ値（ｈｓ＝Ｈ（ｍｓ））を求める。
次に、中間ノード（署名者ｕｓ）は、直下のリーフノード（署名者ｕｓ１、ｕｓ２、ｕｓ３）から受信した部品ソフトウェア（ｍｓ１、ｍｓ２、ｍｓ３）から、ハッシュ値（ｈｓ１＝Ｈ（ｍｓ１）、ｈｓ２＝Ｈ（ｍｓ２）、ｈｓ３＝Ｈ（ｍｓ３））を求める。
【００７３】
さらに、中間ノード（署名者ｕｓ）は、直下のリーフノードから受信した公開署名情報（σｓ１、σｓ２、σｓ３）を用いて、
σｓ＝σｓ１＋ｘｓｈｓ１＋σｓ２＋ｘｓｈｓ２＋σｓ３＋ｘｓｈｓ３
＋ｘｓｈｓ  ・・・（６）
＝ｘｓ１ｈｓ１＋ｘｓｈｓ１＋ｘｓ２ｈｓ２＋ｘｓｈｓ２
＋ｘｓ３ｈｓ３＋ｘｓｈｓ３＋ｘｓｈｓ  ・・・（７）
を計算する。そして、中間ノード（署名者ｕｓ）は、生成した公開署名情報（σｓ）と、中間コンポーネントソフトウェア（ｍｓ）とを公開する。
【００７４】
第１層のルートノード（署名者ｕｒｏｏｔ）は、まず署名対象である自身の作成した最終コンポーネントソフトウェア（ｍｒｏｏｔ）から、ハッシュ値（ｈｒｏｏｔ＝Ｈ（ｍｒｏｏｔ））を求める。
次に、ルートノード（署名者ｕｒｏｏｔ）は、直下の中間ノード（署名者ｕ１、ｕ２、ｕ３）から受信した中間コンポーネントソフトウェア（ｍ１、ｍ２、ｍ３）から、ハッシュ値（ｈ１＝Ｈ（ｍ１）、ｈ２＝Ｈ（ｍ２）、ｈ３＝Ｈ（ｍ３））を求める。
【００７５】
さらに、ルートノード（署名者ｕｒｏｏｔ）は、直下の中間ノードから受信した公開署名情報（σ１、σ２、σ３）を用いて、
σ＝σ１＋ｘｒｏｏｔｈ１＋σ２＋ｘｒｏｏｔｈ２＋σ３＋ｘｒｏｏｔｈ３
＋ｘｒｏｏｔｈｒｏｏｔ  ・・・（８）
＝ｘ１１ｈ１１＋ｘ１ｈ１１＋ｘ１２ｈ１２＋ｘ１ｈ１２
＋ｘ１３ｈ１３＋ｘ１ｈ１３＋ｘ１ｈ１＋ｘｒｏｏｔｈ１
＋ｘ２１ｈ２１＋ｘ２ｈ２１＋ｘ２２ｈ２２＋ｘ２ｈ２２
＋ｘ２３ｈ２３＋ｘ２ｈ２３＋ｘ２ｈ２＋ｘｒｏｏｔｈ２
＋ｘ３１ｈ３１＋ｘ３ｈ３１＋ｘ３２ｈ３２＋ｘ３ｈ３２
＋ｘ３３ｈ３３＋ｘ３ｈ３３＋ｘ３ｈ３＋ｘｒｏｏｔｈ３
＋ｘｒｏｏｔｈｒｏｏｔ  ・・・（９）
を計算する。そして、ルートノード（署名者ｕｒｏｏｔ）は、生成した公開署名情報（σ）と、最終コンポーネントソフトウェア（ｍｒｏｏｔ）とを公開する。
【００７６】
このようにして、署名生成装置１は、木構造上において連続（隣接）する２つのノード間の関係を署名鍵とハッシュ値の積で表すことにより、木構造を表現することができる。また、ノードの数が増えても、公開されるのは、署名対象のコンポーネントソフトウェアに対して生成される公開署名情報（σ）である。この署名情報は楕円曲線上の点であるため、情報のサイズ（容量）は増大せず、一定値以下に抑制される。したがって、署名生成装置１は、効率的に署名情報を生成することができる。
【００７７】
また、検証装置２は、以下の検証過程１から検証過程３により公開署名情報（σ）の正当性を検証する。
【００７８】
（検証過程１）検証装置２は、署名を行った全てのノードが署名対象としたソフトウェア（ｍｒｏｏｔ、ｍ１、ｍ２、ｍ３、ｍ１１、ｍ１２、ｍ１３、ｍ２１、ｍ２２、ｍ２３、ｍ３１、ｍ３２、ｍ３３）を収集し、これらに対してハッシュ値（ｈｒｏｏｔ＝Ｈ（ｍｒｏｏｔ）、ｈ１＝Ｈ（ｍ１）、ｈ２＝Ｈ（ｍ２）、ｈ３＝Ｈ（ｍ３）、ｈ１１＝Ｈ（ｍ１１）、ｈ１２＝Ｈ（ｍ１２）、ｈ１３＝Ｈ（ｍ１３）、ｈ２１＝Ｈ（ｍ２１）、ｈ２２＝Ｈ（ｍ２２）、ｈ２３＝Ｈ（ｍ２３）、ｈ３１＝Ｈ（ｍ３１）、ｈ３２＝Ｈ（ｍ３２）、ｈ３３＝Ｈ（ｍ３３））を求める。
【００７９】
（検証過程２）検証装置２は、署名を行った全てのノードの検証鍵（ｖｒｏｏｔ、ｖ１、ｖ２、ｖ３、ｖ１１、ｖ１２、ｖ１３、ｖ２１、ｖ２２、ｖ２３、ｖ３１、ｖ３２、ｖ３３）を収集する。
【００８０】
（検証過程３）検証装置２は、公開された公開署名情報（σ）の正当性を検証する。具体的には、検証装置２は、検証過程１で求めたハッシュ値と、収集した全てのノードの検証鍵とから、
ｅ（ｖ１１，ｈ１１）・ｅ（ｖ１，ｈ１１）
・ｅ（ｖ１２，ｈ１２）・ｅ（ｖ１，ｈ１２）
・ｅ（ｖ１３，ｈ１３）・ｅ（ｖ１，ｈ１３）
・ｅ（ｖ１，ｈ１）・ｅ（ｖｒｏｏｔ，ｈ１）
・ｅ（ｖ２１，ｈ２１）・ｅ（ｖ２，ｈ２１）
・ｅ（ｖ２２，ｈ２２）・ｅ（ｖ２，ｈ２２）
・ｅ（ｖ２３，ｈ２３）・ｅ（ｖ２，ｈ２３）
・ｅ（ｖ２，ｈ２）・ｅ（ｖｒｏｏｔ，ｈ２）
・ｅ（ｖ３１，ｈ３１）・ｅ（ｖ３，ｈ３１）
・ｅ（ｖ３２，ｈ３２）・ｅ（ｖ３，ｈ３２）
・ｅ（ｖ３３，ｈ３３）・ｅ（ｖ３，ｈ３３）
・ｅ（ｖ３，ｈ３）・ｅ（ｖｒｏｏｔ，ｈ３）
・ｅ（ｖｒｏｏｔ，ｈｒｏｏｔ）  ・・・（１０）
を計算し、この値とｅ（ｇ，σ）の値とが一致することを確認する。検証装置２は、これらの値が一致した場合には、公開署名情報（σ）が正当であると判断する。
【００８１】
ここで、（検証過程３）における「ｅ（ｇ，σ）」を展開すると、
ｅ（ｇ，σ）
＝ｅ（ｇ，ｘ１１ｈ１１）・ｅ（ｇ，ｘ１ｈ１１）
・ｅ（ｇ，ｘ１２ｈ１２）・ｅ（ｇ，ｘ１ｈ１２）
・ｅ（ｇ，ｘ１３ｈ１３）・ｅ（ｇ，ｘ１ｈ１３）
・ｅ（ｇ，ｘ１ｈ１）・ｅ（ｇ，ｘｒｏｏｔｈ１）
・ｅ（ｇ，ｘ２１ｈ２１）・ｅ（ｇ，ｘ２ｈ２１）
・ｅ（ｇ，ｘ２２ｈ２２）・ｅ（ｇ，ｘ２ｈ２２）
・ｅ（ｇ，ｘ２３ｈ２３）・ｅ（ｇ，ｘ２ｈ２３）
・ｅ（ｇ，ｘ２ｈ２）・ｅ（ｇ，ｘｒｏｏｔｈ２）
・ｅ（ｇ，ｘ３１ｈ３１）・ｅ（ｇ，ｘ３ｈ３１）
・ｅ（ｇ，ｘ３２ｈ３２）・ｅ（ｇ，ｘ３ｈ３２）
・ｅ（ｇ，ｘ３３ｈ３３）・ｅ（ｇ，ｘ３ｈ３３）
・ｅ（ｇ，ｘ３ｈ３）・ｅ（ｇ，ｘｒｏｏｔｈ３）
・ｅ（ｇ，ｘｒｏｏｔｈｒｏｏｔ）  ・・・（１１）
＝ｅ（ｘ１１ｇ，ｈ１１）・ｅ（ｘ１ｇ，ｈ１１）
・ｅ（ｘ１２ｇ，ｈ１２）・ｅ（ｘ１ｇ，ｈ１２）
・ｅ（ｘ１３ｇ，ｈ１３）・ｅ（ｘ１ｇ，ｈ１３）
・ｅ（ｘ１ｇ，ｈ１）・ｅ（ｘｒｏｏｔｇ，ｈ１）
・ｅ（ｘ２１ｇ，ｈ２１）・ｅ（ｘ２ｇ，ｈ２１）
・ｅ（ｘ２２ｇ，ｈ２２）・ｅ（ｘ２ｇ，ｈ２２）
・ｅ（ｘ２３ｇ，ｈ２３）・ｅ（ｘ２ｇ，ｈ２３）
・ｅ（ｘ２ｇ，ｈ２）・ｅ（ｘｒｏｏｔｇ，ｈ２）
・ｅ（ｘ３１ｇ，ｈ３１）・ｅ（ｘ３ｇ，ｈ３１）
・ｅ（ｘ３２ｇ，ｈ３２）・ｅ（ｘ３ｇ，ｈ３２）
・ｅ（ｘ３３ｇ，ｈ３３）・ｅ（ｘ３ｇ，ｈ３３）
・ｅ（ｘ３ｇ，ｈ３）・ｅ（ｘｒｏｏｔｇ，ｈ３）
・ｅ（ｘｒｏｏｔｇ，ｈｒｏｏｔ）  ・・・（１２）
＝ｅ（ｖ１１，ｈ１１）・ｅ（ｖ１，ｈ１１）
・ｅ（ｖ１２，ｈ１２）・ｅ（ｖ１，ｈ１２）
・ｅ（ｖ１３，ｈ１３）・ｅ（ｖ１，ｈ１３）
・ｅ（ｖ１，ｈ１）・ｅ（ｖｒｏｏｔ，ｈ１）
・ｅ（ｖ２１，ｈ２１）・ｅ（ｖ２，ｈ２１）
・ｅ（ｖ２２，ｈ２２）・ｅ（ｖ２，ｈ２２）
・ｅ（ｖ２３，ｈ２３）・ｅ（ｖ２，ｈ２３）
・ｅ（ｖ２，ｈ２）・ｅ（ｖｒｏｏｔ，ｈ２）
・ｅ（ｖ３１，ｈ３１）・ｅ（ｖ３，ｈ３１）
・ｅ（ｖ３２，ｈ３２）・ｅ（ｖ３，ｈ３２）
・ｅ（ｖ３３，ｈ３３）・ｅ（ｖ３，ｈ３３）
・ｅ（ｖ３，ｈ３）・ｅ（ｖｒｏｏｔ，ｈ３）
・ｅ（ｖｒｏｏｔ，ｈｒｏｏｔ）  ・・・（１３）
となり、署名の過程が正しく行われていれば、（１０）式と一致する。よって、公開されているソフトウェア作成者の検証鍵と、全ての部品ソフトウェア、中間コンポーネントソフトウェア及び最終コンポーネントソフトウェアから求めたハッシュ値とから、公開署名情報の検証が可能となる。
【００８２】
ここで、σの値に着目すると、署名者ｕｓｔはｈｓｔにのみ署名処理（ｘｓｔｈｓｔの演算）を行っており、他のｈｓ及びｈｒｏｏｔにはこのような署名処理を行っていない。これにより、署名者ｕｓｔが最初、すなわち木構造におけるリーフノードの署名者であることが分かる。
【００８３】
また、「ｘｓｈｓｔ」の項により、この最初の署名者が署名処理したｈｓｔに対して署名処理を行っているのがユーザｕｓであることが表されているので、この署名者ｕｓが２番目（中間ノード）の署名者であることが分かる。署名者ｕｓは同時にｈｓに対して署名処理（ｘｓｈｓ）を行っている。同様に「ｘｒｏｏｔｈｓ」の項により、このｈｓに対して署名処理を行っているのが署名者ｕｒｏｏｔであることが表されているので、この署名者ｕｒｏｏｔが３番目の署名者であることが分かる。
【００８４】
さらに、ｈｒｏｏｔに対して署名処理を行っている署名者はなく、署名者ｕｒｏｏｔで収束しているため、この３番目の署名者がルートノードであることが分かる。
【００８５】
また、（１１）式において、ＣＤＨ問題や楕円曲線上の離散対数問題から、秘密情報である署名鍵を知らない第三者が、右辺の各項（ｘαｈβ又はｘβｈβ）を任意に取り除くことはできないため、第三者による順序の入れ替えは不可能である。すなわち、本署名方式は、木構造における署名順序を署名鍵とハッシュ値の積により表現することができる。
【００８６】
また、署名者の数（ノードの数）が増えても、公開される情報は公開署名情報（σ）のみである。この公開署名情報（σ）は一つの楕円曲線上の点であるため、情報のサイズ（容量）は増大せず、一定値以下に抑制される。
【００８７】
さらに、検証装置２では、検証過程３で示した数値演算のみで検証することにより、ノード間をどのような順序で署名されてきたかを証明することができる。したがって、検証装置２は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。
【００８８】
＜第２実施形態＞
以下、本発明の実施形態の一例である第２実施形態について説明する。なお、第１実施形態と同様の構成については、同一の符号を付し、説明を省略又は簡略化する。
【００８９】
図６は、本実施形態に係る署名生成装置１ａの構成を示すブロック図である。
署名生成装置１ａは、受信部１２ａ、一方向性ハッシュ関数演算部１３ａ及び公開部１５ａの構成が第１実施形態と異なる。
【００９０】
すなわち、受信部１２ａは、直下のノードから、ソフトウェア（ｍｌｏｗ）の代わりにハッシュ値（ｈｌｏｗ）を受信して署名情報生成部１４へ供給する。これにより、一方向性ハッシュ関数演算部１３ａは、直下のノードのソフトウェア（ｍｌｏｗ）に一方向性ハッシュ関数演算を行う必要がなくなる。
【００９１】
また、公開部１５ａは、ソフトウェア（ｍｕｐ）、検証鍵（ｖｕｐ）、公開署名情報（σｕｐ）及びリストデータ（Ｌｕｐ）に加えて、一方向性ハッシュ関数演算部１３ａにより自身の署名対象であるソフトウェアから演算されたハッシュ値を、さらに公開する。これにより、直上のノードの署名生成装置１ａ又は検証装置２ａは、この公開されているハッシュ値を、ソフトウェアそのものの代わりに利用する。
【００９２】
図７は、本実施形態に係る検証装置２ａの構成を示すブロック図である。
検証装置２ａは、収集部２１ａの構成が第１実施形態と異なる。さらに、検証装置２ａは、第１実施形態における一方向性ハッシュ関数演算部２２を必要としない。
【００９３】
すなわち、収集部２１ａは、各ノードから、ソフトウェア（ｍｉ）の代わりにハッシュ値（ｈｉ）を受信して検証部２３へ供給する。これにより、検証装置２ａは、各ノードのソフトウェア（ｍｉ）に一方向性ハッシュ関数演算を行う必要がなくなる。
【００９４】
本実施形態によれば、署名生成装置１ａ及び検証装置２ａにおける一方向性ハッシュ関数演算の処理負荷を低減することができる。
具体的には、第１実施形態の署名生成装置１における一方向性ハッシュ関数演算ステップＳ３の処理負荷が低減され、検証装置２における一方向性ハッシュ関数演算ステップＳ１２は不要となる。
【００９５】
なお、各ノードにおける署名処理では、直下のノードからソフトウェア（ｍｉ）又はハッシュ値（ｈｉ）のいずれかを受信すればよく、署名生成装置１ａ及び検証装置２ａ内において統一されていなくてもよい。
【００９６】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、本実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本実施形態に記載されたものに限定されるものではない。
【００９７】
前述の実施形態において、ペアリング関数への入力である２つの引数は、ペアリングの演算が可能な楕円曲線上の点ｇのスカラー倍として表されるが、この楕円曲線は、第１引数と第２引数とで共通でなくてもよい。すなわち、ペアリング関数の第１引数用と第２引数用とに、それぞれ異なる楕円曲線（Ｇ１又はＧ２）上の２点（ｇ１又はｇ２）が与えられていてもよい。
この場合、前述の実施形態の説明におけるペアリング関数の第１引数に表れるｇはｇ１に、第２引数に表れるｇはｇ２に読み替えられる。また、楕円曲線上の点を用いて生成される前述の各種公開情報（検証鍵、ハッシュ値、公開署名情報）は、ペアリング関数の第１引数又は第２引数のいずれに入力されるかに応じて、Ｇ１若しくはＧ２のいずれかを用いて１種類、又は双方を用いて２種類生成される。
このことにより、公開情報の数、すなわち演算回数が増加する場合があるが、ペアリング関数の演算において並列して処理できるため、計算時間の短縮が期待できる。
【００９８】
また、署名生成装置１（又は１ａ）及び検証装置２（２ａ）による一連の処理は、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。また、当該プログラムは、ＣＤ−ＲＯＭのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。
【符号の説明】
【００９９】
１、１ａ  署名生成装置
２、２ａ  検証装置
１１  記憶部
１２、１２ａ  受信部
１３、１３ａ  一方向性ハッシュ関数演算部（第１ハッシュ演算部）
１４  署名情報生成部
１５、１５ａ  公開部
２１、２１ａ  収集部
２２  一方向性ハッシュ関数演算部（第２ハッシュ演算部）
２３  検証部
【図１】
0005597075.tif 000002
【図２】
0005597075.tif 000003
【図３】
0005597075.tif 000004
【図４】
0005597075.tif 000005
【図５】
0005597075.tif 000006
【図６】
0005597075.tif 000007
【図７】
0005597075.tif 000008