説明

多重署名システム及び検証システム及び多重署名方法及び多重署名プログラム

【課題】木構造を表現でき、かつ効率的な順序付き電子署名を行うことができる回覧システム及び多重署名方法及び多重書名プログラムを提供すること。
【解決手段】ツリー構造上、少なくとも1階層以上で構成されている一又は複数の下位のノードBと、最上位のノードCとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において、検証鍵情報又は順序付き多重署名情報を演算により算出する。そして、多重署名システムAは、一階層下のノードで算出されたそれぞれの検証鍵情報と順序付き多重署名情報を一階層上のノードで総和し、最上位のノードCを示す検証鍵情報を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報として公開し、最上位のノードCを示す署名情報を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報として公開する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子署名を利用した電子データの多重署名システム及び検証システム及び多重署名方法及び多重署名プログラムに関する。
【背景技術】
【0002】
現在、さまざまな電子情報がネットワークやメディアを介して送信されている。会社やコミュニティーのような組織においても、報告書やレポート、稟議書、連絡簿等さまざまな情報が電子化され、社員又はメンバー間でネットワークを経由して回覧されている。
【0003】
その情報の発信源あるいは閲覧済みであることを保証する仕組みとして電子署名がある。この電子署名を利用することにより、特定の人しか知りえない署名鍵と電子情報を入力値として署名の演算を行い、検証者が検証鍵と言われる公開された情報と署名されたデータを入力値として検証演算を行うことで、その特定の人がそのデータの発信源であることを確認することが可能となる。ここで、検証鍵から署名鍵を導出することは、計算量的に不可能であることから、他の人がその特定者に成りすまして署名を行うことができないため、その署名の正当性が保証される。
【0004】
また、組織における電子情報の回覧においては、複数の人が介在して署名を行うケースが想定され、例えば、電子データの回覧や会社における承認システムがそれに該当する。複数人の署名を行う方式としては、それぞれの署名者を検証できる多重署名(例えば、非特許文献1を参照。)や、特定のグループに所属している人の誰かが署名したことを保証できるグループ署名(例えば、特許文献1を参照。)が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−166687号公報
【特許文献2】特開平09−270787号公報
【特許文献3】特開2002−040935号公報
【非特許文献】
【0006】
【非特許文献1】新保 淳、「多重署名に適したElGamal署名の一変形方式」、暗号と情報セキュリティシンポジウム(CSS)、SCIS94−2C、電子情報通信学会、1994
【発明の概要】
【発明が解決しようとする課題】
【0007】
ここで、これらの多重署名やグループ署名では署名者がすべて等価な関係で表現され、一例として示した多重署名システムにおいて電子データがどのように流通してきたか、あるいは回覧状況をグループ毎で確認することをこの署名方式だけで表現することができない。
【0008】
これに対し、順序や上下関係で証明される方式としては順序付き多重署名方式(例えば、特許文献2、3を参照。)があげられる。これにより署名者の順番が保証され、個人の上下関係が表現できる。しかしながら、これらは、各署名者の前と後の使用者が一人ずつのみの場合のみで行える方式であり、例えば、使用者のつながりが木構造(ツリー構造)で構成されている場合、既存の署名方式ではその木構造を表現することができない。
【0009】
本発明は、上記課題を解決するため、木構造を表現でき、かつ効率的な順序付き電子署名を行うことができる多重署名システム及び検証システム及び多重署名方法及び多重署名プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明では、以下のような解決手段を提供する。
【0011】
(1)本発明に係る多重署名システムは、上記課題を解決するために、複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う多重署名システムであって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、前記ツリー構造における下位のノードは、電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算部と、前記下位ノード一方向性ハッシュ関数演算部により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成部と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成部と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成部とを備え、前記順序付き多重署名情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、前記検証鍵情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、前記下位のノードの上位であって、前記ツリー構造における最上位のノードは、電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算部と、前記最上位ノード一方向性ハッシュ関数演算部により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成部と、自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成部とを備え、前記公開順序付き多重署名情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、前記公開検証鍵情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする。
【0012】
このような構成によれば、多重署名システムは、ツリー構造上、少なくとも1階層以上で構成されている一又は複数の下位のノードと、最上位のノードとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードで順序付き多重署名情報及び/又は検証鍵情報を演算により生成する。そして、多重署名システムは、最上位のノードを示す検証鍵情報を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報として公開し、また、最上位のノードを示す署名情報を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報として公開する。
【0013】
よって、多重署名システムは、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができる。
【0014】
(2)また、上記多重署名システムでは、前記固有署名鍵は、所定の自然数からなり、前記固有検証鍵は、GDH(GAP−Diffie−Hellman)グループのGの要素であるgと前記固有検証鍵とに基づいて生成される楕円曲線上の点からなることを特徴とする。
【0015】
このように構成されることにより、多重署名システムは、固有署名鍵を知らない第三者がg等の値から固有署名鍵を求めることは計算量的に困難にすることができる。
【0016】
(3)本発明に係る検証システムは、上記課題を解決するために、(1)に記載の多重署名システムにより生成された公開対象の順序付き多重署名情報を検証する検証システムにおいて、電子データに一方向性ハッシュ関数演算を行う検証ノード一方向性ハッシュ関数演算部と、前記電子データの署名を行ったすべてのノードの固有検証鍵を収集する収集部と、前記収集部により収集された前記すべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証する第1の検証部と、前記第1の検証部により正当性が検証された前記公開対象の検証鍵情報に基づいて前記公開対象の順序付き多重署名情報の正当性を検証する第2の検証部とを備えることを特徴とする。
【0017】
このように構成される検証システムは、第1の検証部によりすべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証し、第2の検証部により第1の検証部で正当性が検証された公開対象の検証鍵情報に基づいて、公開対象の順序付き多重署名情報の正当性を検証する。
【0018】
したがって、検証システムでは、すべてのノードの固有検証鍵に基づいて、公開対象の検証鍵情報の正当性を検証し、また、正当性が検証された公開対象の検証鍵情報と、公開対象の順序付き多重署名情報の値が一致するか否かを判定することにより、公開対象の順序付き多重署名情報の正当性を検証することができる。
【0019】
(4)本発明に係る多重署名方法は、上記課題を解決するために、複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う多重署名方法であって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、前記ツリー構造における下位のノードは、電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算工程と、前記下位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成工程と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成工程と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成工程とを備え、前記順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、前記検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、前記下位のノードの上位であって、前記ツリー構造における最上位のノードは、電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算工程と、前記最上位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成工程と、自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成工程とを備え、前記公開順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、前記公開検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする。
【0020】
このような構成によれば、多重署名方法は、ツリー構造上、少なくとも1階層以上で構成されている一又は複数の下位のノードと、最上位のノードとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードで順序付き多重署名情報及び/又は検証鍵情報を演算により生成する。そして、多重署名方法は、最上位のノードを示す検証鍵情報を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報として公開し、また、最上位のノードを示す署名情報を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報として公開する。
【0021】
よって、多重署名方法は、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができる。
【0022】
(5)本発明に係る多重署名プログラムは、上記課題を解決するために、複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う方法をコンピュータによって実現するための多重署名プログラムであって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算工程と、前記下位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成工程と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成工程と、前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成工程とが前記ツリー構造における下位のノードによって実行され、前記順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、前記検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算工程と、前記最上位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成工程と、自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成工程とが前記下位のノードの上位であって、前記ツリー構造における最上位のノードによって実行され、前記公開順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、前記公開検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする。
【0023】
このような構成によれば、多重署名プログラムは、ツリー構造上、少なくとも1階層以上で構成されている一又は複数の下位のノードと、最上位のノードとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードで順序付き多重署名情報及び/又は検証鍵情報を演算により生成する。そして、多重署名プログラムは、最上位のノードを示す検証鍵情報を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報として公開し、また、最上位のノードを示す署名情報を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報として公開する。
【0024】
よって、多重署名プログラムは、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができる。
【発明の効果】
【0025】
本発明によれば、木構造を表現でき、かつ効率的な順序付き電子署名を行うことができる。
【図面の簡単な説明】
【0026】
【図1】本発明に係る多重署名システムを構成するツリー構造における下位のノードの構成を示すブロック図である。
【図2】本発明に係る多重署名システムを構成するツリー構造における最上位のノードの構成を示すブロック図である。
【図3】本発明に係る多重署名システムを構成する検証ノードの構成を示すブロック図である。
【図4】固有署名情報と、自身のノードに固有の順序付き多重署名情報と、自身のノードに固有の検証鍵情報を生成する方法についての説明に供するフローチャートである。
【図5】公開対象の順序付き多重署名情報と、公開対象の検証鍵情報を生成する方法についての説明に供するフローチャートである。
【図6】公開対象の順序付き多重署名情報の正当性を検証する方法についての説明に供するフローチャートである。
【図7】ツリー構造が3分木3階層で構成されている場合における多重署名システムの動作についての説明に供する図である。
【発明を実施するための形態】
【0027】
以下、本発明の実施形態の一例について図1から図3を参照しながら説明する。本発明の実施形態に係る多重署名システムAは、複数のノードがツリー構造状に構成され、当該複数のノード間で効率的な順序付き電子署名を行うシステムである。また、各ノードには、予め重複しない固有署名鍵と固有検証鍵が認証局(CA)によってそれぞれ割り当てられている。また、固有署名鍵は、所定の自然数(x)からなり、固有検証鍵は、GDH(GAP−Diffie−Hellman)グループのGの要素である「g」と固有署名鍵(x)とに基づいて生成される楕円曲線上の点(v=xg)からなることが好ましい。このように構成されることにより、固有署名鍵(x)を知らない第三者が「v」と「g」との値から固有署名鍵(x)を求めることは計算量的に困難となる。
【0028】
ツリー構造における下位のノードB(以下、ノードBという。)は、図1に示すように、記憶部B1と、下位ノード一方向性ハッシュ関数演算部B2と、固有署名情報生成部B3と、順序付き多重署名情報生成部B4と、検証鍵情報生成部B5とを備える。なお、順序付き多重署名情報生成部B4及び検証鍵情報生成部B5は、ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合に機能し、自身の直下に一又は複数の下位のノードが存在しない場合には機能しない。また、ノードBは、リーフノードを含む概念である。
【0029】
記憶部B1は、自身に割り当てられている固有署名鍵(x)と固有検証鍵(v)を記憶する。下位ノード一方向性ハッシュ関数演算部B2は、回覧されてきた電子データ(M)に一方向性ハッシュ関数演算を行う。固有署名情報生成部B3は、下位ノード一方向性ハッシュ関数演算部B2により演算されたハッシュ値(h=H(M))に自身の固有署名鍵(x)により演算を行い固有署名情報(uniσ=xh)を生成する。
ここで、下位ノード一方向性ハッシュ関数演算部B2による演算においては、一方向性ハッシュ関数Hを、通常使用される任意のビット長のサイズの数値データを固定のビット長のサイズの数値データに写像変換される方式とは異なり、
H:{0,1}*→G
のように任意のビット長のサイズの数値データを楕円曲線上の点として表現されるGDHグループGの要素に写像変換する方式であると定義する(例えば、sをSHA−1(plaintext)のように通常使用される一方向性ハッシュ関数としたとき、sgとして表される式は、ここで定義する一方向性ハッシュ関数Hの条件を満たす)。また、集合Gは、GDH(GAP−Diffie−Hellman)グループを示し、gは、集合Gの要素となる点を示している。なお、一方向性ハッシュ関数Hについての詳細は後述する。
【0030】
順序付き多重署名情報生成部B4は、ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵(x)により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成する。
【0031】
ここで、ツリー構造において、自身よりも2階層以下の層にも一又は複数のノードが存在する場合には、ノードBは、1階層下のノードから順序付き多重署名情報(σ)を受信する。具体的には、ノードBの1階層下のノードは、一又は複数の直下のノード(ノードBから見ると2階層以下のノードに相当する)によって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成し、生成した順序付き多重署名情報(σ)を直上のノードBに送信する。
【0032】
したがって、順序付き多重署名情報生成部B4は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の順序付き多重署名情報(σ)を含んで自身のノードに固有の順序付き多重署名情報(σ)を生成する。
【0033】
検証鍵情報生成部B5は、ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成する。
【0034】
ここで、ツリー構造において、自身よりも2階層以下の層にも一又は複数のノードが存在する場合には、ノードBは、1階層下のノードから検証鍵情報(vm)を受信する。具体的には、ノードBの1階層下のノードは、一又は複数の直下のノード(ノードBから見ると2階層以下のノードに相当する)から受信した一又は複数の固有検証鍵の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成し、生成した検証鍵情報(vm)を直上のノードBに送信する。
【0035】
したがって、検証鍵情報生成部B5は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の検証鍵情報(vm)を含んで自身のノードに固有の検証鍵情報(vm)を生成する。
【0036】
また、ツリー構造においてノードBの最上位に属するノードC(以下、最上位のノードCという)は、図2に示すように、記憶部C1と、最上位ノード一方向性ハッシュ関数演算部C2と、公開順序付き多重署名情報生成部C3と、公開検証鍵情報生成部C4とを備える。また、最上位のノードとは、ルートノードを示す概念である。
【0037】
記憶部C1は、割り当てられている固有署名鍵xと固有検証鍵vを記憶する。最上位ノード一方向性ハッシュ関数演算部C2は、電子データに一方向性ハッシュ関数演算を行う。
【0038】
公開順序付き多重署名情報生成部C3は、最上位ノード一方向性ハッシュ関数演算部C2により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報(σ)を生成する。
【0039】
ここで、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、最上位のノードCは、1階層下のノードから順序付き多重署名情報(σ)を受信する。具体的には、最上位のノードCの1階層下のノード(例えば、ノードB)は、一又は複数の直下のノード(最上位のノードCから見ると2階層以下のノードに相当する)よって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成し、生成した順序付き多重署名情報(σ)を最上位のノードCに送信する。
【0040】
したがって、公開順序付き多重署名情報生成部C3は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の順序付き多重署名情報(σ)を含んで公開対象の順序付き多重署名情報(σ)を生成する。
【0041】
公開検証鍵情報生成部C4は、自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報(v)を生成する。
【0042】
ここで、ツリー構造において、自身よりも2階層以下の層にも一又は複数のノードが存在する場合には、最上位のノードCは、1階層下のノードから検証鍵情報を受信する。具体的には、最上位のノードCの1階層下のノード(例えば、ノードB)は、一又は複数の直下のノード(最上位のノードCから見ると2階層以下のノードに相当する)の固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成し、生成した検証鍵情報(vm)を最上位のノードCに送信する。
【0043】
したがって、公開検証鍵情報生成部C4は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報(vm)を含んで公開対象の検証鍵情報(v)を生成する。
【0044】
このようにして、多重署名システムAは、ツリー構造上、少なくとも1階層以上で構成されている一又は複数のノードBと、最上位のノードCとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードが順序付き多重署名情報(σ)及び/又は検証鍵情報(vm)を演算により生成する。そして、多重署名システムAは、一階層下のノードで生成されたそれぞれの検証鍵情報と順序付き多重署名情報を一階層上のノードで総和し(各ノードの検証鍵情報の総和をΣvmとし、各ノードの順序付き多重署名情報の総和をΣσとする)、最上位のノードCを示す検証鍵情報(vroot=xrootg)を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報(v)として公開し、また、最上位のノードCを示す署名情報(σroot=xrooth)を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報(σ)として公開する。
【0045】
よって、多重署名システムAは、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができ、また、ツリー構造においてノードの数が増えても、公開されるのは、最上位のノードCで生成される公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)であり、これらは楕円曲線上の点であるため、各情報のサイズ(容量)は増大せず、一定値以下に抑制することができ、効率的に順序付き電子署名を生成することができる。
【0046】
つぎに、公開対象の検証鍵情報に基づいて、公開対象の順序付き多重署名情報を検証する検証システムについて説明する。なお、以下では、検証システムとしての検証ノードDに構成と動作について説明する。検証ノードDは、図3に示すように、検証ノード一方向性ハッシュ関数演算部D1と、収集部D2と、第1の検証部D3と、第2の検証部D4とを備える。
【0047】
検証ノード一方向性ハッシュ関数演算部D1は、電子データ(M)に一方向性ハッシュ関数演算を行う(h=H(M))。収集部D2は、電子データの署名を行ったすべてのノードの固有検証鍵を収集する。第1の検証部D3は、収集部D2により収集されたすべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証する。第2の検証部D4は、第1の検証部D3により正当性が検証された公開対象の検証鍵情報に基づいて公開対象の順序付き多重署名情報の正当性を検証する。
【0048】
具体的には、第1の検証部D3は、収集部D2によって収集したすべてのノードの固有検証鍵から、「e(g,vroot)(Πe(v,v))」を計算し、この計算結果と「e(g,vroot+Σvm)」の値が一致することを確認することによって、公開対象の検証鍵情報の正当性を検証する。
【0049】
また、第2の検証部D4は、第1の検証部D3によって正当性が確認された「vroot+Σvm」を利用して、「e(g,vroot+Σσ)」と「e(vroot+Σvm,h)」を計算し、両者が一致するか否かを確認することによって、「σroot+Σσ」の正当性を検証する。
【0050】
このようにして検証ノードDは、第1の検証部D3によりすべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証し、第2の検証部D4により第1の検証部D3により正当性が検証された公開対象の検証鍵情報に基づいて、公開対象の順序付き多重署名情報の正当性を検証する。
【0051】
したがって、検証ノードDは、すべてのノードの固有検証鍵に基づいて、公開対象の検証鍵情報の正当性を検証し、また、正当性が検証された公開対象の検証鍵情報と、公開対象の順序付き多重署名情報の値が一致するか否かを判定することにより、公開対象の順序付き多重署名情報の正当性を検証するので、第1の検証部D3と第2の検証部D4に負荷をかけずに検証作業を実行することができる。なお、検証ノードDは、検証専用のノードであっても良いし、ツリー構造上に配置されるいずれかのノードであっても良い。
【0052】
つぎに、多重署名システムAにおいて、ノードBと最上位のノードCにより公開対象の順序付きの多重署名情報と検証鍵情報を生成する方法と、検証システムにおいて、検証ノードDにより公開対象の順序付きの多重署名情報の正当性を検証する方法について、図4から図6に示すフローチャートを参照しながら説明する。
【0053】
ノードBは、図4に示すように、下位ノード一方向性ハッシュ関数演算工程ST1と、固有署名情報生成工程ST2と、順序付き多重署名情報生成工程ST3と、検証鍵情報生成工程ST4とにより、固有署名情報(uniσ)と、自身のノードに固有の順序付き多重署名情報(σ)と、自身のノードに固有の検証鍵情報(vm)を生成する。
【0054】
下位ノード一方向性ハッシュ関数演算工程ST1において、下位ノード一方向性ハッシュ関数演算部B2は、電子データ(M)に一方向性ハッシュ関数演算を行う。
【0055】
固有署名情報生成工程ST2において、固有署名情報生成部B3は、下位ノード一方向性ハッシュ関数演算工程ST1により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報(uniσ)を生成する。
【0056】
順序付き多重署名情報生成工程ST3において、順序付き多重署名情報生成部B4は、ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成する。
【0057】
ここで、本工程では、順序付き多重署名情報生成部B4は、2階層以下の層にも一又は複数のノードが存在する場合には、1階層下のノードから順序付き多重署名情報(σ)を受信する。具体的には、ノードBの1階層下のノードは、一又は複数の直下のノード(ノードBから見ると2階層以下のノードに相当する)によって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成し、生成した順序付き多重署名情報(σ)を直上のノードBに送信する。
【0058】
したがって、順序付き多重署名情報生成部B4は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の順序付き多重署名情報(σ)を含んで自身のノードに固有の順序付き多重署名情報(σ)を生成する。
【0059】
検証鍵情報生成工程ST4において、検証鍵情報生成部B5は、ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成する。
【0060】
ここで、本工程では、検証鍵情報生成部B5は、2階層以下の層にも一又は複数のノードが存在する場合には、1階層下のノードから検証鍵情報(vm)を受信する。具体的には、ノードBの1階層下のノードは、一又は複数の直下のノード(ノードBから見ると2階層以下のノードに相当する)から受信した一又は複数の固有検証鍵の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成し、生成した検証鍵情報(vm)を直上のノードBに送信する。
【0061】
したがって、検証鍵情報生成部B5は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の検証鍵情報(vm)を含んで自身のノードに固有の検証鍵情報(vm)を生成する。
【0062】
また、最上位のノードCは、図5に示すように、最上位ノード一方向性ハッシュ関数演算工程ST11と、公開順序付き多重署名情報生成工程ST12と、公開検証鍵情報生成工程ST13とにより、公開対象の順序付き多重署名情報(σ)と、公開対象の検証鍵情報(v)を生成する。
【0063】
最上位ノード一方向性ハッシュ関数演算工程ST11において、最上位ノード一方向性ハッシュ関数演算部C2は、電子データ(M)に一方向性ハッシュ関数演算を行う。
【0064】
公開順序付き多重署名情報生成工程ST12において、公開順序付き多重署名情報生成部C3は、最上位ノード一方向性ハッシュ関数演算工程ST11により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報(σ)を生成する。
【0065】
ここで、本工程では、公開順序付き多重署名情報生成部C3は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、1階層下のノードから順序付き多重署名情報(σ)を受信する。具体的には、最上位のノードCの1階層下のノード(例えば、ノードB)は、一又は複数の直下のノード(最上位のノードCから見ると2階層以下のノードに相当する)よって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成し、生成した順序付き多重署名情報(σ)を最上位のノードCに送信する。
【0066】
したがって、公開順序付き多重署名情報生成部C3は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードから受信した一又は複数の順序付き多重署名情報(σ)を含んで公開対象の順序付き多重署名情報(σ)を生成する。
【0067】
公開検証鍵情報生成工程ST13において、公開検証鍵情報生成部C4は、自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報(v)を生成する。
【0068】
ここで、本工程では、公開検証鍵情報生成部C4は、ツリー構造において、自身よりも2階層以下の層にも一又は複数のノードが存在する場合には、1階層下のノードから検証鍵情報を受信する。具体的には、最上位のノードCの1階層下のノード(例えば、ノードB)は、一又は複数の直下のノード(最上位のノードCから見ると2階層以下のノードに相当する)の固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成し、生成した検証鍵情報(vm)を最上位のノードC1に送信する。
【0069】
したがって、公開検証鍵情報生成部C4は、ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報(vm)を含んで公開対象の検証鍵情報(v)を生成する。
【0070】
このようにして、多重署名システムAに係る多重署名方法によれば、ツリー構造上、少なくとも1階層以上で構成されている一又は複数のノードBと、最上位のノードCとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードが順序付き多重署名情報(σ)又は/及び検証鍵情報(vm)を演算により生成する。そして、多重署名システムAに係る多重署名方法は、一階層下のノードで算出されたそれぞれの検証鍵情報と順序付き多重署名情報を一階層上のノードで総和し(各ノードの検証鍵情報の総和をΣvmとし、各ノードの順序付き多重署名情報の総和をΣσとする)、最上位のノードCを示す検証鍵情報(vroot=xrootg)を各ノードの検証鍵情報の総和に加算したものを、ツリー構造全体の検証鍵情報として公開し、最上位のノードCを示す署名情報(σroot=xrooth)を各ノードの順序付き多重署名情報の総和に加算したものを、ツリー構造全体の順序付き多重署名情報として公開する。
【0071】
よって、多重署名システムAに係る多重署名方法によれば、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができ、また、ノードの数が増えても、公開されるのは、最上位のノードCで生成される公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)であり、これらは楕円曲線上の点であるため、各情報のサイズ(容量)は増大せず、一定値以下に抑制することができ、効率的に順序付き電子署名を生成することができる。
【0072】
また、検証ノードDは、図6に示すように、検証ノード一方向性ハッシュ関数演算工程ST21と、収集工程ST22と、第1の検証工程ST23と、第2の検証工程ST24とにより、公開対象の順序付き多重署名情報(σ)の正当性を検証する。
【0073】
検証ノード一方向性ハッシュ関数演算工程ST21において、検証ノード一方向性ハッシュ関数演算部D1は、電子データ(M)に一方向性ハッシュ関数演算を行う。
【0074】
収集工程ST22において、収集部D2は、電子データ(M)の署名を行ったすべてのノードの固有検証鍵を収集する。
【0075】
第1の検証工程ST23において、第1の検証部D3は、収集工程ST22により収集されたすべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証する。
【0076】
第2の検証工程ST24において、第2の検証部D4は、第1の検証工程ST23により正当性が検証された公開対象の検証鍵情報に基づいて公開対象の順序付き多重署名情報の正当性を検証する。
【0077】
このようにして、第1の検証工程ST23によりすべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証し、第2の検証工程ST24により第1の検証工程ST23により正当性が検証された公開対象の検証鍵情報に基づいて、公開対象の順序付き多重署名情報の正当性を検証する。
【0078】
したがって、検証ノードDでは、すべてのノードの固有検証鍵に基づいて、公開対象の検証鍵情報の正当性を検証し、また、正当性が検証された公開対象の検証鍵情報と、公開対象の順序付き多重署名情報の値が一致するか否かを判定することにより、公開対象の順序付き多重署名情報の正当性を検証するので、第1の検証工程ST23と第2の検証工程ST24に負荷をかけずに検証作業を実行することができる。
【0079】
<署名方式について>
つぎに、上述した本発明によって採用される具体的な署名方式について説明する。多重署名システムAでは、ベースとなる署名方式としてGAP−Diffie−Hellman(GDH)署名を採用する。GDH署名とは、Decision−Diffie−Hellman(DDH)問題をペアリングと呼ばれるある種のブラックボックス関数e(P,Q)を用いることで、解くことが可能であることを利用した署名である。
【0080】
つぎに、ペアリング演算を用いたGDH署名について説明する。楕円曲線上のDiffie−Hellman問題に関連して、GDHグループが定義されている。GDHグループについて簡単に説明する。Gをある楕円曲線上の点の集合とする。「g」を集合Gの要素としたとき、集合Gにおける楕円曲線上のDecisional Diffie−Hellman(DDH)問題とComputational Diffie−Hellman(CDH)問題が以下のように定義される。
【0081】
DDH問題:あるa、b、cという自然数があり、g、ag、bg、cgが与えられた時、c=abかどうかを判定する問題
CDH問題:あるa、b、cという自然数があり、g、ag、bgが与えられた時、abgを計算する問題
【0082】
このとき、DDH問題は、計算量的に簡単であるが、CDH問題は、計算量的に難問である場合、この集合GをGDHグループと定義する。
【0083】
これに対し、ある楕円曲線上の点をP,Qとし、そのP,Qによっては次にあげる性質を持つことができるペアリングと呼ばれるブラックボックス関数e(P,Q)を定義できるものが存在する。
e(aP,bQ)=e(bP,aQ)=e(abP,Q)=e(P,abQ)=e(P,Q)ab・・・(1)
【0084】
よって、gがペアリング演算が可能な楕円曲線上の点である場合には、上記の性質から、(1)式にg、ag、bg、cgを入力すると、
e(ag,bg)=e(g,g)ab・・・(2)
e(g,cg)=e(g,g)・・・(3)
となり、両者の値が一致するかどうかにより、「ab=c」であるかどうかを判定でき、gはGDHグループGの要素となりうる。
【0085】
この性質を利用してGDH署名が構成される。集合Gは、GDHグループであり、gは集合Gの要素となる点とする。また、一方向性ハッシュ関数Hを、通常使用される任意のビット長のサイズの数値データを固定のビット長のサイズの数値データに写像変換される方式とは異なり、
H:{0,1}*→G
のように任意のビット長のサイズの数値データを楕円曲線上の点として表現されるGDHグループGの要素に写像変換する方式であると定義する(例えば、sをSHA−1(plaintext)のように通常使用される一方向性ハッシュ関数としたとき、sgとして表される式は、ここで定義する一方向性ハッシュ関数Hの条件を満たす)。
【0086】
このとき、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)を計算し、両者の値が一致したら、署名σは、正しい署名と判定する。
【0087】
このとき、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の値から署名σを導出することは不可能である。
【0088】
<実施例>
ここで、ツリー構造が3分木3階層で構成されている場合における多重署名システムAの動作について図7を参照しながら具体的に説明する。なお、以下では、第1層を最上位のノードC(ルートノード)であるとし、第2層をノードB1とし、第3層をノードB2(リーフノード)とする。また、最上位のノードCは、一つのノードで配置され、ノードB1は、三つのノード(ノードCの直下にノード1からノード3が配置されている)で配置され、ノードB2は、九つのノード(ノード1の直下にノード11からノード13が配置され、ノード2の直下にノード21からノード23が配置され、ノード3の直下にノード31からノード33が配置されている)で配置されている。
【0089】
また、認証局(CA)は、予め各ノードに重複しない固有署名鍵(以下、署名鍵という。)と固有検証鍵(以下、検証鍵という。)を付与している。例えば、最上位のノードCには、他のノードとは重複しない署名鍵と検証鍵が以下のように付与されている。
ノードC:(署名鍵,検証鍵)=(xroot,vroot)=(xroot,xrootg)
【0090】
ノード1からノード3には、それぞれ他のノードとは重複しない署名鍵と検証鍵が以下のように付与されている。
ノード1:(署名鍵,検証鍵)=(x,v)=(x,xg)
ノード2:(署名鍵,検証鍵)=(x,v)=(x,xg)
ノード3:(署名鍵,検証鍵)=(x,v)=(x,xg)
【0091】
ノード11からノード33には、それぞれ他のノードとは重複しない署名鍵と検証鍵が以下のように付与されている。
ノード11:(署名鍵,検証鍵)=(x11,v11)=(x11,x11g)
ノード12:(署名鍵,検証鍵)=(x12,v12)=(x12,x12g)
ノード13:(署名鍵,検証鍵)=(x13,v13)=(x13,x13g)
ノード21:(署名鍵,検証鍵)=(x21,v21)=(x21,x21g)
ノード22:(署名鍵,検証鍵)=(x22,v22)=(x22,x22g)
ノード23:(署名鍵,検証鍵)=(x23,v23)=(x23,x23g)
ノード31:(署名鍵,検証鍵)=(x31,v31)=(x31,x31g)
ノード32:(署名鍵,検証鍵)=(x32,v32)=(x32,x32g)
ノード33:(署名鍵,検証鍵)=(x33,v33)=(x33,x33g)
【0092】
ノードB2のユーザu11(ノード11)は、電子データ(M)に対してハッシュ値(h=H(m))を求め、ハッシュ値に自身の署名鍵x11により演算を行い固有署名情報(uniσ11=x11h)を生成する。また、ユーザu11(ノード11)は、自身の検証鍵(v11)と、固有署名情報(uniσ11)とを直上のノード11に送信する。
【0093】
なお、他のノードB2のユーザu12(ノード12)からユーザu33(ノード33)も同様に固有署名情報を生成し、生成した固有署名情報と自身の検証鍵とを直上のノードに送信する。
【0094】
ノードB1のユーザu(ノード1)は、直下のユーザ(ユーザu11(ノード11)、ユーザu12(ノード12)、ユーザu13(ノード13))から受信したそれぞれの固有署名情報((uniσ11)、(uniσ12)、(uniσ13))に対して自身の署名鍵(x)により演算を行い、自身のノードに固有の順序付き多重署名情報(σ)を生成する((4)式及び(5)式を参照)。
σ=x(uniσ11)+x(uniσ12)+x(uniσ13)・・・(4)
=(x11+x12+x13)h・・・(5)
【0095】
ユーザu(ノード1)は、電子データ(M)に対してハッシュ値(h=H(m))を求め、ハッシュ値に自身の署名鍵xにより演算を行い固有署名情報(uniσ=xh)を生成する。
【0096】
また、ユーザu(ノード1)は、直下のユーザ(ユーザu11(ノード11)、ユーザu12(ノード12)、ユーザu13(ノード13))から受信したそれぞれの検証鍵((v11)、(v12)、(v13))に対して、自身の署名鍵(x)により演算を行い、自身のノードに固有の検証鍵情報(vm)を生成する((6)式及び(7)式を参照)。
vm=x(v11)+x(v12)+x(v13)・・・(6)
=(x11+x12+x13)g・・・(7)
【0097】
また、ユーザu(ノード1)は、自身の検証鍵(v)と、固有署名情報(uniσ)と、順序付き多重署名情報(σ)と、検証鍵情報(vm)とを直上のノード(本実施例では、最上位のノードC)に送信する。
【0098】
なお、他のノードB1のユーザu(ノード2)及びユーザu(ノード3)も同様に固有署名情報と、順序付き多重署名情報と、検証鍵情報とを生成し、自身の検証鍵と、固有署名情報と、順序付き多重署名情報と、検証鍵情報とを直上のノード(本実施例では、最上位のノードC)に送信する。
【0099】
最上位のノードC(ユーザuroot)は、電子データ(M)に一方向性ハッシュ関数演算を行い、そのハッシュ値に自身の署名鍵(xroot)により演算を行って得られた演算値(xrooth)と、直下のユーザ(ユーザu(ノード1)、ユーザu(ノード2)、ユーザu(ノード3))から受信したそれぞれの固有署名情報((uniσ)、(uniσ)、(uniσ))に対して、自身の署名鍵(xroot)により演算を行って得られた演算値と、直下のユーザから受信したそれぞれの順序付き多重署名情報((σ)、(σ)、(σ))とからなる公開対象の順序付き多重署名情報(σ)を生成する((8)式及び(9)式を参照。)。
σ=xrooth+xroot(uniσ)+σ+xroot(uniσ)+σ+xroot(uniσ)+σ・・・(8)
=(xroot+xroot+xroot+xroot+x11+x12+x13+x21+x22+x23+x31+x32+x33)h・・・(9)
【0100】
また、最上位のノードC(ユーザuroot)は、自身の検証鍵(vroot=xrootg)と、直下のユーザ(ユーザu(ノード1)、ユーザu(ノード2)、ユーザu(ノード3))から受信したそれぞれの検証鍵((v)、(v)、(v))に対して、自身の署名鍵(xroot)により演算を行って得られた演算値と、直下のユーザから受信したそれぞれの検証鍵情報((vm)、(vm)、(vm))とからなる公開対象の検証鍵情報(v)を生成する((10)式及び(11)式を参照)。
v=xrootg+xroot(v)+vm+xroot(v)+vm+xroot(v)+vm・・・(10)
=(xroot+xroot+xroot+xroot+x11+x12+x13+x21+x22+x23+x31+x32+x33)g・・・(11)
【0101】
最上位のノードCは、生成した多重署名情報(σ)と検証鍵情報(v)を公開情報として公開する。
【0102】
このようにして、多重署名システムAは、ツリー構造上、少なくとも1階層以上で構成されている一又は複数のノードBと、最上位のノードCとによって構成され、ツリー構造上において連続(隣接)する二つのノード間において上位のノードが順序付き多重署名情報(σ)及び/又は検証鍵情報(vm)を演算により生成する。そして、多重署名システムAは、一階層下のノードで生成されたそれぞれの検証鍵情報を一階層上のノードで総和(Σvm)し、また、同様に順序付き多重署名情報を一階層上のノードで総和(Σσ)して、最上位のノードCを示す検証鍵情報(vroot=xrootg)を各ノードの検証鍵情報の総和(Σvm)に加算したものを、ツリー構造全体の検証鍵情報として公開し、また、最上位のノードCを示す署名情報(σroot=xrooth)を各ノードの順序付き多重署名情報の総和(Σσ)に加算したものを、ツリー構造全体の順序付き多重署名情報(σ)として公開する。
【0103】
よって、多重署名システムAは、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができ、また、ノードの数が増えても、公開されるのは、最上位のノードCで生成される公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)であり、これらは楕円曲線上の点であるため、各情報のサイズ(容量)は増大せず、一定値以下に抑制することができ、効率的に順序付き電子署名を生成することができる。
【0104】
また、検証ノードDは、以下の検証過程1から検証過程4により公開対象の順序付き多重署名情報(σ)の正当性を検証する。
【0105】
(検証過程1)検証ノードDは、電子データ(M)に対してハッシュ値(h=H(m))を求める。
(検証過程2)検証ノードDは、電子データの署名を行ったすべてのノードの検証鍵を収集する。
(検証過程3)検証ノードDは、最上位のノードCによって公開された検証鍵情報(v)の正当性を検証する。具体的には、検証ノードDは、収集したすべてのノードの検証鍵から(12)式及び(13)式に示す演算を行い、(13)式と「e(g,v)」とが一致することを確認し、これらの値が一致した場合には、公開対象の検証鍵情報(v)が正当であると判断する。
【数1】

【0106】
(検証過程4)検証ノードDは、正当性が検証された公開対象の検証鍵情報(v)に基づいて公開対象の順序付き多重署名情報(σ)の正当性を検証する。検証ノードDは、具体的には、「e(g,σ)」と「e(v,h)」を計算し、これらの値が一致することを確認し、これらの一致した場合には、公開対象の順序付き多重署名情報(σ)が正当であると判断する。
【0107】
ここで、(検証過程3)における「e(g,v)」の演算過程について説明する。
なお、便宜上「x」は、(14)式と置く。
x=xroot+xroot+xroot+xroot
+x11+x12+x13
+x21+x22+x23
+x31+x32+x33 ・・・(14)
【0108】
【数2】

【0109】
なお、署名の過程が正しく行われていれば、(13)式と(19)式は、一致する。
また、検証鍵情報(v)を一つの検証鍵と見なせば、(検証過程4)による検証は、GDH署名の検証と同じ検証を行っていることになり、多重署名の検証が可能となる。
【0110】
また、(14)式に着目すると、右辺第1項は、最上位のノードCの署名鍵「xroot」のみで構成されている。よって、第1層(最上位のノードC)の署名者は、ユーザurootであることが分かる。
【0111】
また、最上位のノードCの署名鍵「xroot」は、右辺第2項、右辺第3項及び右辺第4項に含まれており、これを積として構成している値が「x」、「x」、「x」であることから、第2層(ノードB1)の署名者は、ユーザu、ユーザu、ユーザuであることが分かる。
【0112】
また、第2層(ノードB1)のユーザuの署名鍵「x」の値と積を構成している値が「x11」、「x12」、「x13」であることから、ノード1の直下のノード(第3層)の署名者は、ユーザu11、ユーザu12、ユーザu13であることが分かる。また、同様にして、ノード2の直下のノードの署名者は、ユーザu21、ユーザu22、ユーザu23であり、ノード3の直下のノードの署名者は、ユーザu31、ユーザu32、ユーザu33であることが分かる。
【0113】
このようにして、検証ノードDは、ツリー構造上、どのような上下関係の下に署名されてきたのかを把握することができ、その結果として、ツリー構造上のユーザの配置を把握することができる。
【0114】
また、(14)式については、CDH問題や楕円曲線上の離散対数問題から秘密情報である署名鍵を知らない第三者が、右辺の各項(x)を任意に入れ替えることができないため、第三者による順序の入れ替えは不可能である。
【0115】
検証ノードDが採用する本検証方式は、ツリー構造上において連続(隣接)する2つのノード間の関係を署名鍵の積で表し、それを上位のノードで加算することにより、ツリー構造を表現することができる。
【0116】
また、ノードの数が増えても、公開されるのは、最上位のノードCで生成される公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)であり、これらは楕円曲線上の点であるため、各情報のサイズ(容量)は増大せず、一定値以下に抑制することができ、効率的に順序付き電子署名を生成することができる。
【0117】
また、本実施例においては、3分木3階層によるツリー構造によって説明したが、これに限らず、3分木3階層以外の多分木多階層によるツリー構造においても適用可能である。
【0118】
また、ノードの数が増えても、公開されるのは、最上位のノードCで生成される公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)であり、これらは楕円曲線上の点であるため、各情報のサイズ(容量)は増大せず、一定値以下に抑制することができ、効率的に順序付き電子署名を生成することができる。
【0119】
また、多重署名システムAは、コンテンツの管理に利用することができる。映画の制作には、複数の工程があり、各工程ごとに制作者が存在する。例えば、映画の統括者(プロデューサ)を最上位のノードC(ルートノード)とし、監督等の各制作者を下位のノードBとして配置する。
【0120】
多重署名システムAは、完成したコンテンツを電子データ(M)として、各ノードに回覧する。各ノードでは、コンテンツの内容を確認し、ツリー構造上において自身が配置されている位置に基づいた順序付きの電子署名を行い、直上のノードに必要な情報を送信する。そして、最上位のノードCは、直下のノードから送信されてきた各種情報に基づいて公開対象の検証鍵情報(v)と順序付き多重署名情報(σ)を生成する。
【0121】
また、検証ノードDは、公開対象の検証鍵情報(v)の正当性と、公開対象の順序付き多重署名情報(σ)の正当性を確認する。
【0122】
このようにして、検証ノードDは、検証ノードDにおいて公開対象の順序付き多重署名情報(σ)の正当性が確認されることによって、完成したコンテンツが各制作者に正しく回覧されて確認されたことを証明することができる。このようにして、多重署名システムAは、コンテンツの管理を行うことができる。
【0123】
また、上述で説明した多重署名システムA及び検証システムによる一連の処理は、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータ等にインストールされる。また、当該プログラムは、CD−ROMのようなリムーバブルメディアに記録されてユーザに配布されても良いし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されても良い。
【符号の説明】
【0124】
A 回覧システム
B 下位のノード
B1 記憶部
B2 下位ノード一方向性ハッシュ関数演算部
B3 固有署名情報生成部
B4 順序付き多重署名情報生成部
B5 検証鍵情報生成部
C 最上位のノード
C1 記憶部
C2 最上位ノード一方向性ハッシュ関数演算部
C3 公開順序付き多重署名情報生成部
C4 公開検証鍵情報生成部
D 検証ノード
D1 検証ノード一方向性ハッシュ関数演算部
D2 収集部
D3 第1の検証部
D4 第2の検証部

【特許請求の範囲】
【請求項1】
複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う多重署名システムであって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、
前記ツリー構造における下位のノードは、
電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算部と、
前記下位ノード一方向性ハッシュ関数演算部により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成部と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成部と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成部とを備え、
前記順序付き多重署名情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、
前記検証鍵情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、
前記下位のノードの上位であって、前記ツリー構造における最上位のノードは、
電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算部と、
前記最上位ノード一方向性ハッシュ関数演算部により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成部と、
自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成部とを備え、
前記公開順序付き多重署名情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、
前記公開検証鍵情報生成部は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする多重署名システム。
【請求項2】
前記固有署名鍵は、所定の自然数からなり、
前記固有検証鍵は、GDH(Decision−Diffie−Hellman)グループのGの要素であるgと前記固有検証鍵とに基づいて生成される楕円曲線上の点からなることを特徴とする請求項1に記載の多重署名システム。
【請求項3】
請求項1に記載の多重署名システムにより生成された公開対象の順序付き多重署名情報を検証する検証システムにおいて、
電子データに一方向性ハッシュ関数演算を行う検証ノード一方向性ハッシュ関数演算部と、
前記電子データの署名を行ったすべてのノードの固有検証鍵を収集する収集部と、
前記収集部により収集された前記すべてのノードの固有検証鍵に基づいて公開対象の検証鍵情報の正当性を検証する第1の検証部と、
前記第1の検証部により正当性が検証された前記公開対象の検証鍵情報に基づいて前記公開対象の順序付き多重署名情報の正当性を検証する第2の検証部とを備えることを特徴とする検証システム。
【請求項4】
複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う多重署名方法であって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、
前記ツリー構造における下位のノードは、
電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算工程と、
前記下位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成工程と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成工程と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成工程とを備え、
前記順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、
前記検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、
前記下位のノードの上位であって、前記ツリー構造における最上位のノードは、
電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算工程と、
前記最上位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成工程と、
自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成工程とを備え、
前記公開順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、
前記公開検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする多重署名方法。
【請求項5】
複数のノードがツリー構造状に構成され、当該複数のノード間で順序付きの多重署名を行う方法をコンピュータによって実現するための多重署名プログラムであって、各ノードには予め重複しない固有署名鍵と固有検証鍵がそれぞれ割り当てられており、
電子データに一方向性ハッシュ関数演算を行う下位ノード一方向性ハッシュ関数演算工程と、
前記下位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行い固有署名情報を生成する固有署名情報生成工程と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードによって生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行い、自身のノードに固有の順序付き多重署名情報を生成する順序付き多重署名情報生成工程と、
前記ツリー構造において、自身の直下に一又は複数の下位のノードが存在する場合には、当該一又は複数の下位のノードの固有検証鍵の各々に対して、自身の署名鍵により演算を行い、自身のノードに固有の検証鍵情報を生成する検証鍵情報生成工程とが前記ツリー構造における下位のノードによって実行され、
前記順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記自身のノードに固有の順序付き多重署名情報を生成し、
前記検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記自身のノードに固有の検証鍵情報を生成し、
電子データに一方向性ハッシュ関数演算を行う最上位ノード一方向性ハッシュ関数演算工程と、
前記最上位ノード一方向性ハッシュ関数演算工程により演算されたハッシュ値に自身の固有署名鍵により演算を行って得られた演算値と、直下の一又は複数の下位のノードにより生成された一又は複数の固有署名情報の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の順序付き多重署名情報を生成する公開順序付き多重署名情報生成工程と、
自身の検証鍵と、直下の一又は複数の下位のノードの固有検証鍵の各々に対して、自身の固有署名鍵により演算を行って得られた演算値とからなる公開対象の検証鍵情報を生成する公開検証鍵情報生成工程とが前記下位のノードの上位であって、前記ツリー構造における最上位のノードによって実行され、
前記公開順序付き多重署名情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の順序付き多重署名情報を含んで前記公開対象の順序付き多重署名情報を生成し、
前記公開検証鍵情報生成工程は、前記ツリー構造において、自身よりも2階層以下の層にも一又は複数の下位のノードが存在する場合には、直下の一又は複数の下位のノードにより生成された一又は複数の検証鍵情報を含んで前記公開対象の検証鍵情報を生成することを特徴とする多重署名プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2011−29785(P2011−29785A)
【公開日】平成23年2月10日(2011.2.10)
【国際特許分類】
【出願番号】特願2009−171392(P2009−171392)
【出願日】平成21年7月22日(2009.7.22)
【出願人】(000208891)KDDI株式会社 (2,700)
【Fターム(参考)】