説明

署名生成装置、検証装置、署名生成方法及び署名生成プログラム

【課題】コンポーネントソフトウェアの完全性を効率的に確認できる署名生成装置、検証装置、署名生成方法及び署名生成プログラムを提供すること。
【解決手段】署名生成装置1は、ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶部11と、一方向性ハッシュ関数演算を行う一方向性ハッシュ関数演算部13と、ソフトウェアから演算されたハッシュ値に対して署名鍵を乗じて公開署名情報を生成する署名情報生成部14と、ソフトウェア、検証鍵及び公開署名情報を公開する公開部15と、を備え、署名情報生成部14は、ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、部品ソフトウェアの公開署名情報と、部品ソフトウェアから演算されたハッシュ値に対して署名鍵を乗じた結果と、ソフトウェアから演算されたハッシュ値に対して署名鍵を乗じた結果とを総和して、公開署名情報を生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアの完全性を確認するための署名生成装置、検証装置、署名生成方法及び署名生成プログラムに関する。
【背景技術】
【0002】
従来、コンピュータ向けのソフトウェアが数多く作成されている。これらの中には、機能が類似している物、あるいは発展的に進化した物がある。このようなソフトウェアを作成する上で、業務の効率化や開発時間の短縮を目的として、基本機能に特化した汎用的なソフトウェア等、既存のソフトウェア(以下、部品ソフトウェアと呼ぶ)を組み込んで、新たな機能を有するソフトウェア(以下、コンポーネントソフトウェアと呼ぶ)を作成する手法が採用される場合がある。また、この手法を用いるための開発環境も整備されてきている。
【0003】
ところで、ソフトウェアは、許可無く改竄されたり、ウィルスが混入されたりすることで、正常に利用できないことがある。この対策のため、電子署名を用いて、ソフトウェアが改竄されていないか、又はウィルス等の悪意のあるソフトウェアが混入されていないか否かを確認する方法が提案されている(例えば、特許文献1〜4参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平3−286334号公報
【特許文献2】特開2003−202931号公報
【特許文献3】特開2004−248045号公報
【特許文献4】特開2004−222330号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、これらの方法は、一つのソフトウェアに対して、その完全性を保証するためのものである。したがって、前述のコンポーネントソフトウェアに対して、これらの方法を適用すると、ソフトウェアが組み込まれる度に、完全性の確認及び電子署名の生成のために多くの処理が発生していた。
【0006】
本発明は、コンポーネントソフトウェアの完全性を効率的に確認できる署名生成装置、検証装置、署名生成方法及び署名生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明では、以下のような解決手段を提供する。
【0008】
(1)本発明に係る署名生成装置は、ソフトウェアの完全性を保証する公開署名情報を生成する署名生成装置であって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶部と、一方向性ハッシュ関数演算を行う第1ハッシュ演算部と、前記第1ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部と、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部と、を備え、前記署名情報生成部は、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する。
【0009】
このような構成によれば、署名生成装置は、部品ソフトウェアから得られたハッシュ値と、コンポーネントソフトウェアの署名鍵との積により、木構造において連続する2つのノード間の関係を表し、さらに部品ソフトウェアの公開署名情報を用いて、コンポーネントソフトウェアの公開署名情報を生成する。署名生成装置は、この公開署名情報により、コンポーネントソフトウェアを構成する部品ソフトウェアの木構造を表現できるので、コンポーネントソフトウェアの完全性を効率的に確認できる。
【0010】
(2)また、上記署名生成装置では、前記署名鍵は、所定の自然数からなり、前記検証鍵は、GDH(GAP−Diffie−Hellman)グループの要素である楕円曲線上の点と前記署名鍵とに基づいて生成される、当該楕円曲線上の点からなる。
【0011】
このような構成によれば、署名生成装置は、署名鍵を知らない第三者がGDHグループの要素である楕円曲線上の点から署名鍵を求めることを、計算量的に困難にすることができる。また、署名者の数(ノードの数)が増えても、生成される公開署名情報は楕円曲線上の点であるため、情報のサイズ(容量)は増大せず一定値以下に抑制され、署名生成装置は、効率的に署名情報を生成することができる。
【0012】
(3)また、上記署名生成装置では、前記公開部は、前記ソフトウェアを最上位ノードとし、前記部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する。
【0013】
このような構成によれば、署名生成装置は、コンポーネントソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する。したがって、コンポーネントソフトウェアの完全性を確認する際に、木構造を容易に把握できるので、検証の処理効率が向上する。
【0014】
(4)また、上記署名生成装置では、前記公開部は、前記第1ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値を、さらに公開する。
【0015】
このような構成によれば、署名生成装置は、部品ソフトウェアに対する一方向性ハッシュ関数演算の処理負荷を低減することができる。
【0016】
(5)本発明に係る検証装置は、上記署名生成装置により公開された前記公開署名情報を検証する検証装置であって、前記ソフトウェア又は当該ソフトウェアから演算されたハッシュ値、及び対応する検証鍵、並びに当該ソフトウェアを構成する全ての部品ソフトウェア又は当該部品ソフトウェアから演算されたハッシュ値、及び対応する検証鍵を収集する収集部と、前記収集部により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う第2ハッシュ演算部と、前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える。
【0017】
このような構成によれば、検証装置は、コンポーネントソフトウェア及び部品ソフトウェアの検証鍵とハッシュ値とに基づいて、コンポーネントソフトウェアに対する公開署名情報の正当性を検証する。よって、検証装置では、各部品ソフトウェアに対して生成される個々の署名情報等を検証することなく、検証対象であるコンポーネントソフトウェアに対して生成される公開署名情報を検証することにより、木構造における署名順序を証明することができる。すなわち、検証装置は、処理負荷を低減して検証処理を実行することができる。
【0018】
(6)本発明に係る検証装置は、上記署名生成装置により公開された前記公開署名情報を検証する検証装置であって、前記ソフトウェア及び当該ソフトウェアを構成する全ての部品ソフトウェアから演算されたハッシュ値、並びに対応する検証鍵を収集する収集部と、前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える。
【0019】
このような構成によれば、検証装置は、検証対象であるコンポーネントソフトウェア及び部品ソフトウェアに対して、一方向性ハッシュ関数演算の処理負荷を低減することができる。
【0020】
(7)本発明に係る署名生成方法は、ソフトウェアの完全性を保証する公開署名情報をコンピュータが生成する署名生成方法であって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、一方向性ハッシュ関数演算を行うハッシュ演算ステップと、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を含み、前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する。
【0021】
このような構成によれば、署名生成方法をコンピュータが実行することにより、(1)と同様の効果が期待できる。
【0022】
(8)本発明に係る署名生成プログラムは、ソフトウェアの完全性を保証する公開署名情報をコンピュータに生成させる署名生成プログラムであって、前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、一方向性ハッシュ関数演算を行うハッシュ演算ステップと、前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を実行させ、前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成させる。
【0023】
このような構成によれば、署名生成プログラムをコンピュータに実行させることにより、(1)と同様の効果が期待できる。
【発明の効果】
【0024】
本発明によれば、コンポーネントソフトウェアの完全性を効率的に確認できる。
【図面の簡単な説明】
【0025】
【図1】第1実施形態に係る署名生成装置の構成を示すブロック図である。
【図2】第1実施形態に係る検証装置の構成を示すブロック図である。
【図3】第1実施形態に係る公開署名情報を公開する方法を示すフローチャートである。
【図4】第1実施形態に係る公開署名情報の正当性を検証する方法を示すフローチャートである。
【図5】第1実施形態に係る署名生成装置の動作についての説明に供する図である。
【図6】第2実施形態に係る署名生成装置の構成を示すブロック図である。
【図7】第2実施形態に係る検証装置の構成を示すブロック図である。
【発明を実施するための形態】
【0026】
<第1実施形態>
以下、本発明の実施形態の一例である第1実施形態について説明する。本実施形態に係る署名生成装置1は、ソフトウェアの完全性を保証するための公開署名情報を生成する。ここで、署名対象がコンポーネントソフトウェアである場合、このコンポーネントソフトウェアは、1又は複数の部品ソフトウェアから構成される。これらの部品ソフトウェアは、さらに下位の部品ソフトウェアから構成される場合もある。署名生成装置1は、このように、コンポーネントソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造状に構成された各ノードにおける、ソフトウェアの完全性を保証するための公開署名情報を生成する。また、各ノードのソフトウェアに対して生成された公開署名情報は、検証装置2により正当性が検証され、ソフトウェアの完全性が確認される。
【0027】
なお、木構造とは、対称か非対称かを問わず、任意の構造を持つ木構造全てを指す。本発明は、この任意の構造を持つ木構造に対して適応可能である。
【0028】
ところで、各ノード(コンポーネントソフトウェア又は部品ソフトウェア)には、非公開の署名鍵と、公開されている検証鍵とが認証局(CA)によってそれぞれ割り当てられている。署名鍵は、所定の自然数(x)からなり、検証鍵は、GDH(GAP−Diffie−Hellman)グループ(G)の要素である楕円曲線上の点(g)と署名鍵(x)とに基づいて生成される楕円曲線上の点(v=xg)からなることが好ましい。このように構成されることにより、署名鍵(x)を知らない第三者が「v」や「g」の値から署名鍵(x)を求めることは計算量的に困難となる。
【0029】
ここで、本実施形態で採用される具体的な署名方式について説明する。署名生成装置1では、ベースとなる署名方式としてGAP−Diffie−Hellman(GDH)署名を採用する。GDH署名とは、Decision−Diffie−Hellman(DDH)問題をペアリングと呼ばれるある種のブラックボックス関数e(P,Q)を用いることで、解くことが可能であることを利用した署名である。
【0030】
次に、ペアリング演算を用いたGDH署名について説明する。楕円曲線上のDiffie−Hellman問題に関連して、GDHグループが定義されている。GDHグループについて簡単に説明する。Gをある楕円曲線上の点の集合とする。「g」を集合Gの要素としたとき、集合Gにおける楕円曲線上のDecisional Diffie−Hellman(DDH)問題とComputational Diffie−Hellman(CDH)問題が以下のように定義される。
【0031】
DDH問題:あるa、b、cという自然数があり、g、ag、bg、cgが与えられた時、c=abかどうかを判定する問題。
CDH問題:あるa、b、cという自然数があり、g、ag、bgが与えられた時、abgを計算する問題。
【0032】
このとき、DDH問題は、計算量的に簡単であるが、CDH問題は、計算量的に難問である場合、この集合GをGDHグループと定義する。
【0033】
これに対し、ある楕円曲線上の点をP,Qとし、そのP,Qによっては次にあげる性質を持つことができるペアリングと呼ばれるブラックボックス関数e(P,Q)を定義できるものが存在する。
e(P,Q+Q)=e(P,Q)e(P,Q) ・・・(1)
e(P+P,Q)=e(P,Q)e(P,Q) ・・・(2)
e(aP,bQ)=e(bP,aQ)=e(abP,Q)=e(P,abQ)=e(P,Q)ab ・・・(3)
【0034】
よって、gがペアリング演算の可能な楕円曲線上の点である場合には、上記の性質から、(3)式にg、ag、bg、cgを入力すると、
e(ag,bg)=e(g,g)ab ・・・(4)
e(g,cg)=e(g,g) ・・・(5)
となり、両者の値が一致するかどうかにより、「ab=c」であるかどうかを判定でき、gはGDHグループGの要素となりうる。
【0035】
この性質を利用してGDH署名が構成される。集合Gは、GDHグループであり、gは集合Gの要素となる点とする。また、一方向性ハッシュ関数Hを、通常使用される任意のビット長のサイズの数値データが固定のビット長のサイズの数値データに写像変換される方式とは異なり、
H:{0,1}→G
のように任意のビット長のサイズの数値データを楕円曲線上の点として表現されるGDHグループGの要素に写像変換する方式であると定義する。
【0036】
このとき、GDH署名は以下のように定義される。
鍵生成:自然数xを選び、gからv=xgを計算する。xを署名鍵、楕円曲線上の点vを検証鍵とする。
署名:署名者は、メッセージ「m∈{0,1}」に対しh=H(m)を計算し、さらに自分の署名鍵を用いてσ=xhを計算する。σをmに対する署名として公開する。
検証:検証者は、メッセージmからh=H(m)を計算し、g、v、h、σを準備する。e(g,σ)とe(v,h)を計算し、両者の値が一致したら、署名σは、正しい署名と判定する。
【0037】
このとき、hの値は集合Gの要素となるので、ある自然数yを用いてh=ygと表現できる。その結果、正しく署名が行われていれば(g,v,h,σ)=(g,xg,yg,xyg)となる。したがって、正当な署名であれば上記の検証でのペアリング演算は、e(g,σ)=e(g,xyg)=e(g,g)xy=e(xg,yg)=e(v,h)となり、値が一致することから、検証可能となる。なお、GDHグループの条件であるCDH問題の困難性から、署名鍵xを知らない第三者がg、v、hの値から署名σを導出することは不可能である。
【0038】
図1は、本実施形態に係る署名生成装置1の構成を示すブロック図である。
署名生成装置1は、記憶部11と、受信部12と、一方向性ハッシュ関数演算部13と、署名情報生成部14と、公開部15と、を備える。
【0039】
記憶部11は、自身のノード(署名者uup)が作成したソフトウェア(mup)に対応して割り当てられている署名鍵(xup)と検証鍵(vup=xupg)とを記憶する。
【0040】
受信部12は、署名対象である自身のソフトウェアが構成要素として部品ソフトウェアを有する場合、1又は複数の下位ノード(署名者ulow)が作成した部品ソフトウェア(mlow)と、これらの部品ソフトウェアに対して後述の公開部15により公開されている公開署名情報(σlow)と、を受信する。さらに、受信部12は、公開部15により同様に公開されている、部品ソフトウェアを最上位ノードとする木構造の構成を示すリストデータを受信する。
【0041】
一方向性ハッシュ関数演算部13は、受信部12により受信された部品ソフトウェア(mlow)のそれぞれと、署名対象である自身のソフトウェア(mup)とに一方向性ハッシュ関数演算を行う。
【0042】
署名情報生成部14は、部品ソフトウェアの公開署名情報(σlow)と、部品ソフトウェア(mlow)それぞれから演算されたハッシュ値(hlow=H(mlow))に自身の署名鍵(xup)により演算(楕円曲線上の乗算)を行った結果(xuplow)と、自身のソフトウェア(mup)から演算されたハッシュ値(hup=H(mup))に自身の署名鍵(xup)により演算(楕円曲線上の乗算)を行った結果(xupup)と、を総和して、自身のソフトウェアに対する公開署名情報(σup=Σlow(σlow+xuplow)+xupup)を生成する(Σlowは、直下のノード全てについての総和を示す)。
【0043】
なお、署名情報生成部14は、部品ソフトウェアがない場合、自身のソフトウェア(mup)から演算されたハッシュ値(hup)に自身の署名鍵(xup)により演算(楕円曲線上の乗算)を行った結果(xupup)のみを、自身のソフトウェアに対する公開署名情報(σup=xupup)とする。
【0044】
公開部15は、自身のソフトウェア(mup)、検証鍵(vup)、及び署名情報生成部14により生成された公開署名情報(σup)を公開する。
【0045】
このような構成によれば、署名生成装置1は、各ノードにおいて、部品ソフトウェアと部品ソフトウェアの公開署名情報とを用いて、コンポーネントソフトウェアの公開署名情報を生成する。この公開署名情報は、自身のノードに至るまでの木構造を表現し、かつ楕円曲線上の点のみで生成される。すなわち、署名者(部品ソフトウェアの数)が多くなっても、署名サイズは増大せず、一定値以下に抑制される。また、署名生成装置1は、自身のソフトウェアに対して生成した公開署名情報(σup)を、ソフトウェアの利用者(検証装置2)や、さらに上位のコンポーネントソフトウェアの作成者(署名生成装置1)へ提供できる。
【0046】
また、公開部15は、自身のソフトウェアを最上位ノードとし、部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータ(L)を、さらに公開する。
このリストデータは、例えば、
L={(u,{up1,up2,・・・},ID(m)),
(up1,{},ID(mp1)),
(up2,{},ID(mp2)),・・・}
のように、構成される。ここで、署名者uは、コンポーネントソフトウェアmの公開署名情報を生成し、mを構成する部品ソフトウェア(mp1、mp2、・・・)は、それぞれ署名者(up1、up2、・・・)によって公開署名情報が生成されている。なお、ID(mα)は、ソフトウェアmαの識別子(ID)である。
【0047】
このような構成によれば、上位のノードにおいてコンポーネントソフトウェアの公開署名情報を生成する際の処理効率や、後述の検証装置2における検証の処理効率が向上する。
【0048】
次に、署名生成装置1により公開された公開署名情報(σ)を検証する検証装置2について説明する。なお、検証装置2は、署名生成装置1と統合されていてもよい。
【0049】
図2は、本実施形態に係る検証装置2の構成を示すブロック図である。
検証装置2は、収集部21と、一方向性ハッシュ関数演算部22と、検証部23と、を備える。
【0050】
収集部21は、検証対象のソフトウェア及び対応する検証鍵と、このソフトウェアよりも下位のノードに位置する全ての部品ソフトウェア及び対応する検証鍵とを収集する。このとき、収集部21は、検証対象のソフトウェアと共に公開されているリストデータ(L)を取得し、このリストデータにより示されている木構造の構成に従って、各ノードの部品ソフトウェア及び対応する検証鍵を収集する。
【0051】
一方向性ハッシュ関数演算部22は、収集部21により収集された各ソフトウェア(m)に対して、一方向性ハッシュ関数演算を行う(h=H(m))。
【0052】
検証部23は、収集部21により収集された全てのノードのソフトウェアに対応する検証鍵と、一方向性ハッシュ関数演算部22により得られた全てのノードのソフトウェアから演算されたハッシュ値と、リストデータ(L)から得られる各ノード(署名者)の配置、及び各署名者と署名を行ったソフトウェアとの対応関係に関する情報と、に基づいて、公開署名情報(σ)の正当性を検証する。
【0053】
具体的には、検証部23は、各ノードの検証鍵とハッシュ値とから、「{Πi∈all−node(e(v,h))}{Π(e(vup,hlow))}」を計算し、この計算結果と「e(g,σ)」の値とが一致することを確認することによって、公開署名情報(σ)の正当性を検証する。なお、式中で、直結する上下関係のノードをそれぞれ、「up」(上位ノード)及び「low」(下位ノード)と表した。
【0054】
このようにして、検証装置2は、各ノードのソフトウェアに対して生成される個々の署名情報等を検証することなく、検証対象のコンポーネントソフトウェアに対して公開された公開署名情報を数値演算のみで検証できる。これにより、検証装置2は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。また、検証装置2は、コンポーネントソフトウェアを構成する各部品ソフトウェアの完全性も確認できるので、改竄やウィルスの混入等があった箇所を容易に特定できる。
【0055】
次に、署名生成装置1において、各ノードにおけるソフトウェアの公開署名情報を生成する方法と、検証装置2において、公開署名情報の正当性を検証する方法について説明する。
【0056】
署名生成装置1は、図3に示すように、記憶ステップS1と、受信ステップS2と、一方向性ハッシュ関数演算ステップS3と、署名情報生成ステップS4と、公開ステップS5とにより、各ノードにおけるソフトウェアの公開署名情報(σ)を公開する。
【0057】
記憶ステップS1において、記憶部11は、署名対象のソフトウェアに対応して、秘密情報である署名鍵と、公開情報である検証鍵とを取得して記憶する。
【0058】
受信ステップS2において、受信部12は、直下のノード(署名者ulowの部品ソフトウェア)が存在する場合に、この部品ソフトウェア(mlow)、及び直下のノードの部品ソフトウェアに対して生成された公開署名情報(σlow)を受信する。
【0059】
一方向性ハッシュ関数演算ステップS3において、一方向性ハッシュ関数演算部13は、直下のノードの部品ソフトウェア(mlow)及び自身のノードのソフトウェア(mup)に対して、それぞれ一方向性ハッシュ関数演算を行う。
【0060】
署名情報生成ステップS4において、署名情報生成部14は、自身のノードのソフトウェアから演算により得られたハッシュ値(hup)に自身の署名鍵(xup)を乗じた結果と、直下のノードがある場合に、この直下のノードの部品ソフトウェアから演算により得られたハッシュ値(hlow)に自身の署名鍵(xup)を乗じた結果と、直下のノードから受信した公開署名情報(σlow)と、を用いて自身のノードのソフトウェアに対して公開署名情報(σup)を生成する。
【0061】
公開ステップS5において、公開部15は、署名情報生成ステップS4により生成された公開署名情報、及び木構造の構成を示すリストデータを、ソフトウェア及び検証鍵と共に公開し、直上のノードの署名生成装置1又は検証装置2により参照可能とする。
【0062】
このように、署名生成装置1に係る署名生成方法によれば、木構造の各ノードにおいて、直下のノードの部品ソフトウェアから得られたハッシュ値と、自身のノードのソフトウェアから得られたハッシュ値とに対して、自身のノードに割り当てられている署名鍵によって演算を行い、さらに直下のノードの部品ソフトウェアに対して生成された公開署名情報を用いて、自身の公開署名情報を生成する。この公開署名情報は、自身のノードに至るまでの署名経路を保持し、かつ楕円曲線上の点のみで生成される。すなわち、署名者(ノードの数)が多くなっても、署名サイズは増大せず、一定値以下に抑制することができる。
【0063】
また、検証装置2は、図4に示すように、収集ステップS11と、一方向性ハッシュ関数演算ステップS12と、検証ステップS13とにより、公開署名情報(σ)の正当性を検証する。
【0064】
収集ステップS11において、収集部21は、署名が行われた全てのノードのソフトウェア(m)、及びこれら全てのノードの検証鍵(v)を収集する。
【0065】
一方向性ハッシュ関数演算ステップS12において、一方向性ハッシュ関数演算部22は、収集ステップS11により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う。
【0066】
検証ステップS13において、検証部23は、収集ステップS11により収集された全てのノードの検証鍵、全てのノードのソフトウェアから一方向性ハッシュ関数演算ステップS12により得られたハッシュ値、及びリストデータに基づいて公開署名情報(σ)の正当性を検証する。
【0067】
このようにして、検証装置2に係る検証方法では、各ノードのソフトウェアに対して生成される個々の公開署名情報等を検証することなく、検証対象のソフトウェアに対して公開された公開署名情報を数値演算のみで検証できる。これにより、検証装置2は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。
【0068】
[実施例]
ここで、木構造が3分木3階層で構成されている場合における各ノードの署名生成装置1の動作について図5を参照しながら具体的に説明する。なお、第1層は、最終コンポーネントソフトウェアの作成者かつ署名者であるルートノードである。また、第2層は、最終コンポーネントソフトウェアを構成する中間コンポーネントソフトウェアの作成者かつ署名者である中間ノードである。また、第3層は、中間コンポーネントソフトウェアを構成する部品ソフトウェアの作成者かつ署名者であるリーフノードである。
【0069】
すなわち、第1層には、一つのルートノードが配置されている。また、第2層には、三つの中間ノードが配置され、urootの直下にuからuが配置されている。また、第3層には、九つのリーフノードが配置され、uの直下にu11からu13が配置され、uの直下にu21からu23が配置され、uの直下にu31からu33が配置されている。
【0070】
また、認証局(CA)は、予め各ノードに署名鍵と検証鍵を、以下のように付与している。なお、sとtはそれぞれ、1≦s≦3、1≦t≦3となる整数の符号である。
第1層:(署名鍵,検証鍵)=(xroot,vroot)=(xroot,xrootg)
第2層:(署名鍵,検証鍵)=(x,v)=(x,xg)
第3層:(署名鍵,検証鍵)=(xst,vst)=(xst,xstg)
【0071】
第3層の九つのリーフノード(署名者ust)は、署名対象である自身の作成した部品ソフトウェア(mst)に対してハッシュ値(hst=H(mst))を求め、ハッシュ値に自身の署名鍵xstを乗じて、公開署名情報(σst=xstst)を生成する。また、リーフノード(署名者ust)は、生成した公開署名情報(σst)と、部品ソフトウェア(mst)とを公開する。
【0072】
第2層の三つの中間ノード(署名者u)は、まず署名対象である自身の作成した中間コンポーネントソフトウェア(m)から、ハッシュ値(h=H(m))を求める。
次に、中間ノード(署名者u)は、直下のリーフノード(署名者us1、us2、us3)から受信した部品ソフトウェア(ms1、ms2、ms3)から、ハッシュ値(hs1=H(ms1)、hs2=H(ms2)、hs3=H(ms3))を求める。
【0073】
さらに、中間ノード(署名者u)は、直下のリーフノードから受信した公開署名情報(σs1、σs2、σs3)を用いて、
σ=σs1+xs1+σs2+xs2+σs3+xs3
+x ・・・(6)
=xs1s1+xs1+xs2s2+xs2
+xs3s3+xs3+x ・・・(7)
を計算する。そして、中間ノード(署名者u)は、生成した公開署名情報(σ)と、中間コンポーネントソフトウェア(m)とを公開する。
【0074】
第1層のルートノード(署名者uroot)は、まず署名対象である自身の作成した最終コンポーネントソフトウェア(mroot)から、ハッシュ値(hroot=H(mroot))を求める。
次に、ルートノード(署名者uroot)は、直下の中間ノード(署名者u、u、u)から受信した中間コンポーネントソフトウェア(m、m、m)から、ハッシュ値(h=H(m)、h=H(m)、h=H(m))を求める。
【0075】
さらに、ルートノード(署名者uroot)は、直下の中間ノードから受信した公開署名情報(σ、σ、σ)を用いて、
σ=σ+xroot+σ+xroot+σ+xroot
+xrootroot ・・・(8)
=x1111+x11+x1212+x12
+x1313+x13+x+xroot
+x2121+x21+x2222+x22
+x2323+x23+x+xroot
+x3131+x31+x3232+x32
+x3333+x33+x+xroot
+xrootroot ・・・(9)
を計算する。そして、ルートノード(署名者uroot)は、生成した公開署名情報(σ)と、最終コンポーネントソフトウェア(mroot)とを公開する。
【0076】
このようにして、署名生成装置1は、木構造上において連続(隣接)する2つのノード間の関係を署名鍵とハッシュ値の積で表すことにより、木構造を表現することができる。また、ノードの数が増えても、公開されるのは、署名対象のコンポーネントソフトウェアに対して生成される公開署名情報(σ)である。この署名情報は楕円曲線上の点であるため、情報のサイズ(容量)は増大せず、一定値以下に抑制される。したがって、署名生成装置1は、効率的に署名情報を生成することができる。
【0077】
また、検証装置2は、以下の検証過程1から検証過程3により公開署名情報(σ)の正当性を検証する。
【0078】
(検証過程1)検証装置2は、署名を行った全てのノードが署名対象としたソフトウェア(mroot、m、m、m、m11、m12、m13、m21、m22、m23、m31、m32、m33)を収集し、これらに対してハッシュ値(hroot=H(mroot)、h=H(m)、h=H(m)、h=H(m)、h11=H(m11)、h12=H(m12)、h13=H(m13)、h21=H(m21)、h22=H(m22)、h23=H(m23)、h31=H(m31)、h32=H(m32)、h33=H(m33))を求める。
【0079】
(検証過程2)検証装置2は、署名を行った全てのノードの検証鍵(vroot、v、v、v、v11、v12、v13、v21、v22、v23、v31、v32、v33)を収集する。
【0080】
(検証過程3)検証装置2は、公開された公開署名情報(σ)の正当性を検証する。具体的には、検証装置2は、検証過程1で求めたハッシュ値と、収集した全てのノードの検証鍵とから、
e(v11,h11)・e(v,h11
・e(v12,h12)・e(v,h12
・e(v13,h13)・e(v,h13
・e(v,h)・e(vroot,h
・e(v21,h21)・e(v,h21
・e(v22,h22)・e(v,h22
・e(v23,h23)・e(v,h23
・e(v,h)・e(vroot,h
・e(v31,h31)・e(v,h31
・e(v32,h32)・e(v,h32
・e(v33,h33)・e(v,h33
・e(v,h)・e(vroot,h
・e(vroot,hroot) ・・・(10)
を計算し、この値とe(g,σ)の値とが一致することを確認する。検証装置2は、これらの値が一致した場合には、公開署名情報(σ)が正当であると判断する。
【0081】
ここで、(検証過程3)における「e(g,σ)」を展開すると、
e(g,σ)
=e(g,x1111)・e(g,x11
・e(g,x1212)・e(g,x12
・e(g,x1313)・e(g,x13
・e(g,x)・e(g,xroot
・e(g,x2121)・e(g,x21
・e(g,x2222)・e(g,x22
・e(g,x2323)・e(g,x23
・e(g,x)・e(g,xroot
・e(g,x3131)・e(g,x31
・e(g,x3232)・e(g,x32
・e(g,x3333)・e(g,x33
・e(g,x)・e(g,xroot
・e(g,xrootroot) ・・・(11)
=e(x11g,h11)・e(xg,h11
・e(x12g,h12)・e(xg,h12
・e(x13g,h13)・e(xg,h13
・e(xg,h)・e(xrootg,h
・e(x21g,h21)・e(xg,h21
・e(x22g,h22)・e(xg,h22
・e(x23g,h23)・e(xg,h23
・e(xg,h)・e(xrootg,h
・e(x31g,h31)・e(xg,h31
・e(x32g,h32)・e(xg,h32
・e(x33g,h33)・e(xg,h33
・e(xg,h)・e(xrootg,h
・e(xrootg,hroot) ・・・(12)
=e(v11,h11)・e(v,h11
・e(v12,h12)・e(v,h12
・e(v13,h13)・e(v,h13
・e(v,h)・e(vroot,h
・e(v21,h21)・e(v,h21
・e(v22,h22)・e(v,h22
・e(v23,h23)・e(v,h23
・e(v,h)・e(vroot,h
・e(v31,h31)・e(v,h31
・e(v32,h32)・e(v,h32
・e(v33,h33)・e(v,h33
・e(v,h)・e(vroot,h
・e(vroot,hroot) ・・・(13)
となり、署名の過程が正しく行われていれば、(10)式と一致する。よって、公開されているソフトウェア作成者の検証鍵と、全ての部品ソフトウェア、中間コンポーネントソフトウェア及び最終コンポーネントソフトウェアから求めたハッシュ値とから、公開署名情報の検証が可能となる。
【0082】
ここで、σの値に着目すると、署名者ustはhstにのみ署名処理(xststの演算)を行っており、他のh及びhrootにはこのような署名処理を行っていない。これにより、署名者ustが最初、すなわち木構造におけるリーフノードの署名者であることが分かる。
【0083】
また、「xst」の項により、この最初の署名者が署名処理したhstに対して署名処理を行っているのがユーザuであることが表されているので、この署名者uが2番目(中間ノード)の署名者であることが分かる。署名者uは同時にhに対して署名処理(x)を行っている。同様に「xroot」の項により、このhに対して署名処理を行っているのが署名者urootであることが表されているので、この署名者urootが3番目の署名者であることが分かる。
【0084】
さらに、hrootに対して署名処理を行っている署名者はなく、署名者urootで収束しているため、この3番目の署名者がルートノードであることが分かる。
【0085】
また、(11)式において、CDH問題や楕円曲線上の離散対数問題から、秘密情報である署名鍵を知らない第三者が、右辺の各項(xαβ又はxββ)を任意に取り除くことはできないため、第三者による順序の入れ替えは不可能である。すなわち、本署名方式は、木構造における署名順序を署名鍵とハッシュ値の積により表現することができる。
【0086】
また、署名者の数(ノードの数)が増えても、公開される情報は公開署名情報(σ)のみである。この公開署名情報(σ)は一つの楕円曲線上の点であるため、情報のサイズ(容量)は増大せず、一定値以下に抑制される。
【0087】
さらに、検証装置2では、検証過程3で示した数値演算のみで検証することにより、ノード間をどのような順序で署名されてきたかを証明することができる。したがって、検証装置2は、メモリコストや処理負荷を低減し、木構造で構成されているコンポーネントソフトウェアの完全性を効率的に確認することができる。
【0088】
<第2実施形態>
以下、本発明の実施形態の一例である第2実施形態について説明する。なお、第1実施形態と同様の構成については、同一の符号を付し、説明を省略又は簡略化する。
【0089】
図6は、本実施形態に係る署名生成装置1aの構成を示すブロック図である。
署名生成装置1aは、受信部12a、一方向性ハッシュ関数演算部13a及び公開部15aの構成が第1実施形態と異なる。
【0090】
すなわち、受信部12aは、直下のノードから、ソフトウェア(mlow)の代わりにハッシュ値(hlow)を受信して署名情報生成部14へ供給する。これにより、一方向性ハッシュ関数演算部13aは、直下のノードのソフトウェア(mlow)に一方向性ハッシュ関数演算を行う必要がなくなる。
【0091】
また、公開部15aは、ソフトウェア(mup)、検証鍵(vup)、公開署名情報(σup)及びリストデータ(Lup)に加えて、一方向性ハッシュ関数演算部13aにより自身の署名対象であるソフトウェアから演算されたハッシュ値を、さらに公開する。これにより、直上のノードの署名生成装置1a又は検証装置2aは、この公開されているハッシュ値を、ソフトウェアそのものの代わりに利用する。
【0092】
図7は、本実施形態に係る検証装置2aの構成を示すブロック図である。
検証装置2aは、収集部21aの構成が第1実施形態と異なる。さらに、検証装置2aは、第1実施形態における一方向性ハッシュ関数演算部22を必要としない。
【0093】
すなわち、収集部21aは、各ノードから、ソフトウェア(m)の代わりにハッシュ値(h)を受信して検証部23へ供給する。これにより、検証装置2aは、各ノードのソフトウェア(m)に一方向性ハッシュ関数演算を行う必要がなくなる。
【0094】
本実施形態によれば、署名生成装置1a及び検証装置2aにおける一方向性ハッシュ関数演算の処理負荷を低減することができる。
具体的には、第1実施形態の署名生成装置1における一方向性ハッシュ関数演算ステップS3の処理負荷が低減され、検証装置2における一方向性ハッシュ関数演算ステップS12は不要となる。
【0095】
なお、各ノードにおける署名処理では、直下のノードからソフトウェア(m)又はハッシュ値(h)のいずれかを受信すればよく、署名生成装置1a及び検証装置2a内において統一されていなくてもよい。
【0096】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、本実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本実施形態に記載されたものに限定されるものではない。
【0097】
前述の実施形態において、ペアリング関数への入力である2つの引数は、ペアリングの演算が可能な楕円曲線上の点gのスカラー倍として表されるが、この楕円曲線は、第1引数と第2引数とで共通でなくてもよい。すなわち、ペアリング関数の第1引数用と第2引数用とに、それぞれ異なる楕円曲線(G又はG)上の2点(g又はg)が与えられていてもよい。
この場合、前述の実施形態の説明におけるペアリング関数の第1引数に表れるgはgに、第2引数に表れるgはgに読み替えられる。また、楕円曲線上の点を用いて生成される前述の各種公開情報(検証鍵、ハッシュ値、公開署名情報)は、ペアリング関数の第1引数又は第2引数のいずれに入力されるかに応じて、G若しくはGのいずれかを用いて1種類、又は双方を用いて2種類生成される。
このことにより、公開情報の数、すなわち演算回数が増加する場合があるが、ペアリング関数の演算において並列して処理できるため、計算時間の短縮が期待できる。
【0098】
また、署名生成装置1(又は1a)及び検証装置2(2a)による一連の処理は、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。また、当該プログラムは、CD−ROMのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。
【符号の説明】
【0099】
1、1a 署名生成装置
2、2a 検証装置
11 記憶部
12、12a 受信部
13、13a 一方向性ハッシュ関数演算部(第1ハッシュ演算部)
14 署名情報生成部
15、15a 公開部
21、21a 収集部
22 一方向性ハッシュ関数演算部(第2ハッシュ演算部)
23 検証部

【特許請求の範囲】
【請求項1】
ソフトウェアの完全性を保証する公開署名情報を生成する署名生成装置であって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶部と、
一方向性ハッシュ関数演算を行う第1ハッシュ演算部と、
前記第1ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成部と、
前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開部と、を備え、
前記署名情報生成部は、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する署名生成装置。
【請求項2】
前記署名鍵は、所定の自然数からなり、
前記検証鍵は、GDH(GAP−Diffie−Hellman)グループの要素である楕円曲線上の点と前記署名鍵とに基づいて生成される、当該楕円曲線上の点からなる請求項1に記載の署名生成装置。
【請求項3】
前記公開部は、前記ソフトウェアを最上位ノードとし、前記部品ソフトウェアを下位ノードとする木構造の構成を示すリストデータを、さらに公開する請求項1又は請求項2に記載の署名生成装置。
【請求項4】
前記公開部は、前記第1ハッシュ演算部により前記ソフトウェアから演算されたハッシュ値を、さらに公開する請求項1から請求項3のいずれかに記載の署名生成装置。
【請求項5】
請求項1から請求項4のいずれかに記載の署名生成装置により公開された前記公開署名情報を検証する検証装置であって、
前記ソフトウェア又は当該ソフトウェアから演算されたハッシュ値、及び対応する検証鍵、並びに当該ソフトウェアを構成する全ての部品ソフトウェア又は当該部品ソフトウェアから演算されたハッシュ値、及び対応する検証鍵を収集する収集部と、
前記収集部により収集されたソフトウェアのそれぞれに対して、一方向性ハッシュ関数演算を行う第2ハッシュ演算部と、
前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える検証装置。
【請求項6】
請求項4に記載の署名生成装置により公開された前記公開署名情報を検証する検証装置であって、
前記ソフトウェア及び当該ソフトウェアを構成する全ての部品ソフトウェアから演算されたハッシュ値、並びに対応する検証鍵を収集する収集部と、
前記収集部により収集された全てのソフトウェアに対応する検証鍵、及び当該全てのソフトウェアから演算されたハッシュ値に基づいて、前記公開署名情報の正当性を検証する検証部と、を備える検証装置。
【請求項7】
ソフトウェアの完全性を保証する公開署名情報をコンピュータが生成する署名生成方法であって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、
一方向性ハッシュ関数演算を行うハッシュ演算ステップと、
前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、
前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を含み、
前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成する署名生成方法。
【請求項8】
ソフトウェアの完全性を保証する公開署名情報をコンピュータに生成させる署名生成プログラムであって、
前記ソフトウェアに対応して、非公開の署名鍵、及び公開されている検証鍵を記憶する記憶ステップと、
一方向性ハッシュ関数演算を行うハッシュ演算ステップと、
前記ハッシュ演算ステップにおいて前記ソフトウェアから演算されたハッシュ値に対して、前記署名鍵を乗じて前記公開署名情報を生成する署名情報生成ステップと、
前記ソフトウェア、前記検証鍵、及び前記公開署名情報を公開する公開ステップと、を実行させ、
前記署名情報生成ステップにおいて、前記ソフトウェアが当該ソフトウェアを構成する部品ソフトウェアを有する場合、前記部品ソフトウェアの公開署名情報と、前記部品ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果と、前記ソフトウェアから演算されたハッシュ値に対して前記署名鍵を乗じた結果とを総和して、前記公開署名情報を生成させる署名生成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2012−60621(P2012−60621A)
【公開日】平成24年3月22日(2012.3.22)
【国際特許分類】
【出願番号】特願2010−204937(P2010−204937)
【出願日】平成22年9月13日(2010.9.13)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】