説明

通信装置、サーバ装置、通信プログラム、及びデータ

【課題】コンテンツ配信システムにおいて配信されるピースを不正に改ざんするノードを特定可能とする通信装置を提供すること。
【解決手段】他の通信装置を識別する第1装置識別情報およびピースを含む第1署名対象情報と、第1署名対象情報に対して生成された第1電子署名と、を受信するデータ受信部514と、通信装置を識別する第2装置識別情報と、通信装置に割り当てられた非公開鍵と、を記憶する固有情報格納部510と、第1署名対象情報と第1電子署名と第2装置識別情報とを含む第2署名対象情報に対する第2電子署名を、非公開鍵を用いて生成する電子署名生成部521と、第2署名対象情報と第2電子署名とを送信するデータ送信部515とを備えた。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信装置、サーバ装置及びデータに関する。
【背景技術】
【0002】
例えば、P2P(peer to peer)を利用してデータを配信する配信方式(P2P配信という)は、巨大なストレージと大きな通信帯域とを有するデータ配信サーバを必要とせず、コストメリットの大きい配信方式である。また、データの配信を受けるノードにおいては、複数のノードからのデータの供給が期待されるため、ダウンロードやアップロードにおける帯域幅を活かした高速なデータ取得が期待される。このようにP2Pデータ配信には大きなメリットがあるが、一方で、著作権保護などデータセキュリティの観点から安全性に不安があった。P2P配信に限らず、著作権保護などのデータセキュリティを考える上で一般的な前提として次のことを仮定する。全ての端末機器又はノードがハッキングされることはないということである。この前提を否定した場合、端末機器は秘密とすべきデータを保持したり、秘密とすべき処理を行ったりすることができなくなり、殆どのセキュリティ技術やセキュリティ確保の為の工夫が成立しない。
【0003】
さて、P2P配信において、暗号化されたデータを配信し、データの配信を受けるノードが当該データ(配信データという)を復号するための復号鍵を取得するコンテンツ配信システムがある。このようなシステムのP2P配信においてデータセキュリティ上の大きな問題点は、配信データと当該配信データを復号するための復号鍵との組み合わせが単一であったり数が少なかったりすることである。この場合、あるノードがハッキングされ、復号鍵が暴露されたとする。この場合、この復号鍵は殆どの配信データを復号するために使用できることになる。この問題を解決する一つの方法は、配信データをノード毎に個別化することである。
【0004】
P2P配信において配信データをノード毎に個別化する技術としては、例えば、特許文献1に示されるMarkingの方式が知られている。この方式では、配信データをピースに分割した上で、鍵の行列で暗号化を施して暗号化ピースを生成する。その結果として、行列状に暗号化された暗号化ピースからなるピース群が生成される。そしてこのようなピース群はP2Pネットワークを介して配信される。当該P2Pネットワークに接続される1つのノードは、各ピースについて行列状に暗号化された複数の暗号化ピースの中から1つの暗号化ピースを取得することになる。結果として、配信データを構成する各ピースが各々暗号化された暗号化ピースの組み合わせは、ノード毎に統計的に一意になることが期待される。
【0005】
【特許文献1】USP 7165050
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかし、上述の特許文献1の技術においては、各暗号化ピースの組み合わせがノード毎に一意であることはあくまで統計的に期待されるだけである。各暗号化ピースの組み合わせをノード毎に一意にすることを実現するには、例えば、以下の2つの方法が考えられる。1つは、暗号化ピースの配信方法に工夫を施すという方法である。また、1つは、各暗号化ピースを復号するための復号鍵を保持する鍵サーバが復号鍵の配信を制限するという方法である。例えば、配信されたピース群をノードは復号するために、各暗号化ピースの組み合わせを鍵サーバに申告して復号鍵を取得するシステムがある。このシステムにおいて、復号鍵の再配信によるリプレイアタックを阻止するためには、既に取得された復号鍵と重複が多い暗号化ピースの組み合わせを、鍵サーバがリジェクトするという方法がある。しかしいずれの方法であっても、暗号化ピースの配信効率を時として著しく低下させ、P2Pネットワークの利点を十分活かすことができなくなる恐れがある。また、前者の方法では、データの保護とデータの配信方法との独立性が損なわれ、そのことがシステム構築上の大きな制約となる恐れがある。
【0007】
また、P2P配信では、受信したピースが不正に改ざんされていないことを検証することが望ましい。一般的にはピースの完全性をチェックする方法として、配信データの提供者が配信データのピース毎にハッシュ値を計算して、全てのピースのハッシュ値の束(ハッシュテーブル)を利用する方法がある。しかし、このような方法では、ピースの完全性をチェックすることができるが、ピースを不正に改ざんするノードを特定することが困難である。
【0008】
本発明は、上記に鑑みてなされたものであって、コンテンツ配信システムにおいて配信されるピースを不正に改ざんするノードを特定可能とする通信装置、サーバ装置、通信プログラム及びデータを提供することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するために、本発明の一実施形態は、データの一部であるピースを送信する通信装置であって、他の通信装置を識別する第1装置識別情報と前記ピースとを含む第1署名対象情報、および、前記第1署名対象情報に対して生成された第1電子署名を受信する受信手段と、前記通信装置を識別する第2装置識別情報と、前記通信装置に割り当てられた非公開鍵と、を記憶する記憶手段と、前記第1署名対象情報と前記第1電子署名と前記記憶手段に記憶された前記第2装置識別情報とを含む第2署名対象情報に対する第2電子署名を、前記記憶手段に記憶された前記非公開鍵を用いて生成する署名生成手段と、前記第2署名対象情報と前記第2電子署名とを送信する送信手段と、を備えることを特徴とする。
【0010】
また、本発明の一実施形態は、上記装置で実行することができるプログラムである。
【0011】
また、本発明の一実施形態は、データの一部であるピースを送信する複数の通信装置と接続されたサーバ装置であって、前記通信装置は、前記ピースを含む署名対象情報と、前記署名対象情報に対して他の通信装置が生成した電子署名とを含む新たな署名対象情報に対して新たな電子署名を生成し、生成した前記署名対象情報と生成した前記電子署名とを送信し、前記署名対象情報と、前記署名対象情報に対して生成された前記電子署名とを含む、前記電子署名の検証要求を前記通信装置から受信する受信手段と、前記検証要求に含まれる前記署名対象情報と、前記検証要求に含まれる前記電子署名を生成した前記通信装置に割り当てられた公開鍵とを用いて前記電子署名を検証する検証手段と、検証されなかった前記電子署名を含む前記署名対象情報に対する前記電子署名を生成した前記通信装置を、不正な通信装置として検出する検出手段と、を備えることを特徴とする。
【0012】
また、本発明の一実施形態は、配信データの一部であるピースの配信を仲介する通信装置から送信されるデータであって、前記ピースの配信を仲介した複数の通信装置のそれぞれを識別する装置識別情報と前記ピースとを含む署名対象情報、および、前記署名対象情報に対して複数の前記通信装置それぞれが生成した複数の電子署名を含む、ことを特徴とする。
【0013】
また、本発明の一実施形態は、配信データの一部であるピースの配信を仲介する通信装置からサーバ装置へ送信されるデータであって、前記ピースを含む署名対象情報、前記署名対象情報に対して前記署名対象情報を送信した複数の前記通信装置それぞれによって生成された複数の電子署名、および、前記署名対象情報を送信した複数の前記通信装置を識別する装置識別情報と前記署名対象情報を送信した複数の前記通信装置に割り当てられた公開鍵との少なくとも一方を対応づけた、前記電子署名の検証要求を含む、ことを特徴とする。
【発明の効果】
【0014】
本発明によれば、コンテンツ配信システムにおいて配信されるピースを不正に改ざんするノードを特定可能になるという効果を奏する。
【発明を実施するための最良の形態】
【0015】
以下に添付図面を参照して、この発明にかかる通信装置、サーバ装置、通信プログラム及びデータの最良な実施の形態を詳細に説明する。
【0016】
(1)構成
<コンテンツ配信システムの構成>
図1は、本実施の形態にかかるデータ配信システムの構成を示す図である。本実施の形態にかかるデータ配信システムにおいては、複数のノード50,51A〜51BがP2PネットワークNTを介して接続されている。図示しないがこの他のノードもP2PネットワークNTを介して接続され得る。また、各ノード50,51A〜51Bは鍵サーバ53と接続されている。各ノード50,51A〜51Bは、各ノードに一意に割り当てられた割当情報として公開鍵証明書と、公開鍵証明書に記載された公開鍵の対となるピースの電子署名生成に使用される非公開鍵と、ピースの暗号化に使用される秘密鍵を保持している。公開鍵証明書には、少なくとも装置識別情報であるノードIDと、電子署名を検証するための公開鍵が含まれている。公開鍵証明書(Public Key Certificate)については、例えば文献ISO/IEC 9594-8に記載されている。各ノード50,51A〜51Bに割り当てられた公開鍵証明書を各々pkc_0、pkc_1、pkc_2とし、非公開鍵を各々sk_0、sk_1、sk_2とし、公開鍵証明書に含まれるノードIDを各々ID #0、ID #1、ID #2とし、公開鍵証明書に含まれる公開鍵を各々pk_0、pk_1、pk_2とし、秘密鍵を各々s_0、s_1、s_2とする。尚、各ノード50,51A〜51Bのうちノード50は、データの配信の基点となる配信開始ノードであり、配信対象のデータ(配信データという)を保持している。配信データは、平文である場合も既に暗号化された暗号文である場合もある。例えば、当該配信データは、暗号化として何らかのDRM(Digital Right Management) Systemによって保護されたビデオデータであっても良い。鍵サーバ53は、各ノード50,51A〜51Bに各々割り当てられたノードIDと、秘密鍵を保持している。さらに鍵サーバ53は、各ノード50,51A〜51Bに各々割り当てられた公開鍵証明書を保持していてもよい。尚、以降、ノード51A〜51Bを各々区別する必要がない場合、単にノード51と記載する。
【0017】
ここで、各ノード50,51と、鍵サーバ53との各装置のハードウェア構成について説明する。各装置は各々、装置全体を制御するCPU(Central Processing Unit)等の制御装置と、各種データや各種プログラムを記憶するROM(Read Only Memory)やRAM(Random Access Memory)等の記憶装置と、各種データや各種プログラムを記憶するHDD(Hard Disk Drive)やCD(Compact Disk)ドライブ装置等の外部記憶装置と、これらを接続するバスとを備えており、通常のコンピュータを利用したハードウェア構成となっている。また、各装置には各々、情報を表示する表示装置と、ユーザの指示入力を受け付けるキーボードやマウス等の入力装置と、外部装置の通信を制御する通信I/F(interface)とが有線又は無線により接続される。
【0018】
なお、装置識別情報とは、データ配信システムにおける各ノードに割り当てられた情報であって、各ノードを識別できればどのような情報であっても良く、例えば、ノードID、通信装置のMAC(Media Access Control)アドレス、通信機器のCPU固有なシリアルナンバー、などである。
【0019】
また、電子署名とは、デジタル文書の正当性を保証するために当該デジタル文書に付けられる署名情報であれば良く、例えば、RSA署名、DSA(Digital Signature Algorithm)、ElGamal署名、Schnorr署名、Cramer−Shoup署名、ECDSA(Elliptic Curve DSA)、楕円ElGamal署名、楕円Schnorr署名などのアルゴリズムで生成された署名情報である。
【0020】
<配信開始ノードの構成>
次に、上述したハードウェア構成において、配信開始ノードであるノード50のCPUが記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。図2は、ノード50の機能的構成を例示する図である。ノード50は、固有情報格納部500と、乱数生成部501と、一時対称鍵生成部502と、ピース暗号化部503と、ピース化部504と、データ送信部505と、送信要求受付部506と、電子署名生成部507を有する。尚、固有情報格納部500は、例えばノード50のHDDなどの外部記憶装置に記憶領域として確保されるものである。乱数生成部501と、一時対称鍵生成部502と、ピース暗号化部503と、ピース化部504と、データ送信部505と、送信要求受付部506と、電子署名生成部507との実体は、ノード50のCPUのプログラム実行時にRAMなどの記憶装置上に生成されるものである。尚、ノード50の外部記憶装置には、配信データが予め記憶されている。
【0021】
固有情報格納部500は、当該ノード50に割り当てられた公開鍵証明書と非公開鍵及び秘密鍵を記憶する。公開鍵証明書には、少なくとも当該ノード51に割り当てられたノードID及び公開鍵が含まれている。ピース化部504は、配信データを複数のピースに分割する。分割する際のデータサイズは特に限定されないが、予め定められているものとする。送信要求受付部506は、ピース化部504が分割したピースを要求するピース要求を他のノード51から受信する。乱数生成部501は、送信要求受付部506がピース要求を受信した場合、その発生毎に異なり得る一時情報である乱数を生成する。一時情報とは、使い捨ての値であって、ノードで生成される度に異なる値となれば良く、乱数の他、たとえば、タイムスタンプや通信のシーケンス番号やノードに固有のカウンタ値やTime Variant Parameterである。Time Variant Parameterについては、文献ISO9798-1が詳しい。
【0022】
一時対称鍵生成部502は、乱数生成部501が生成した乱数r_0と、固有情報格納部500に記憶された秘密鍵s_0とを用いて関数Fにより一時対称鍵k_0を生成する。これを式により表すと以下の(1)式のように表される。
k_0=F(s_0, r_0) ・・・(1)
【0023】
尚、関数Fは一方向性関数あるいは共通鍵暗号あるいは擬似乱数生成器であり、入力値である秘密鍵と乱数の両方を知らないものが、出力値である一時対称鍵を推測できないものである。一時対称鍵とは、関数Fの出力値であって、関数Fの入力と出力値との関係が一意に定められれば良い。関数Fとしては、例えばSHA−1やSHA256といったハッシュ関数であっても良く、AESやHierocryptといった共通鍵暗号方式であっても良く、Mersenne twisterといった疑似乱数生成器であってもよい。ハッシュ関数には、乱数と秘密鍵を結合した値が入力されても良い。共通鍵暗号方式では、乱数を秘密鍵で暗号化しても良く、秘密鍵を乱数で暗号化しても良く、乱数を秘密鍵で復号しても良く、秘密鍵を乱数で復号しても良い。疑似乱数生成器には、乱数と秘密鍵を結合した値が入力されても良い。
【0024】
ピース暗号化部503は、一時対称鍵生成部502が生成した一時対称鍵k_0を用いてピースPを暗号化して、暗号化ピースE(k_0)Pを出力する。尚、一時対称鍵は暗号化に用いられる暗号鍵でもあり、暗号化ピースに対して行われている暗号化を解くための復号鍵にもなる。電子署名生成部507は、非公開鍵sk_0を用いて関数SIGNにより暗号化ピースE(k_0)Pと公開鍵証明書pkc_0と乱数r_0に対して電子署名sig_0を生成する。電子署名の生成を式で表すと以下の(2)式のようになる。
sig_0=SIGN(sk_0, E(k_0)P || pkc_0 || r_0 ) ・・・(2)
【0025】
ここで、記号||はデータ結合を意味する。また、上記(2)式では署名生成対象データの結合順番の1例を示しており、署名検証を行うものが当該署名生成対象データの結合順番を把握できる仕組みになっていれば、結合順番はどのようになっていてもよい。
【0026】
関数SIGNとしてはRSA署名、DSA(Digital Signature Algorithm)、ElGamal署名、Schnorr署名、Cramer−Shoup署名、ECDSA(Elliptic Curve DSA)、楕円ElGamal署名、楕円Schnorr署名などの電子署名方式における署名生成アルゴリズムを用いても良い。データ送信部505は、ピース要求を送信した他のノード51に対して、固有情報格納部500に記憶されている公開鍵証明書と、乱数生成部501が生成した乱数と、ピース暗号化部503が出力した暗号化ピースと、電子署名生成部507が生成した電子署名とを送信する。
【0027】
<配信開始ノード以外のノードの構成>
次に、配信開始ノード以外であるノード51のCPUが記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。図3は、ノード51の機能的構成を例示する図である。ノード51は、固有情報格納部510と、乱数生成部511と、一時対称鍵生成部512と、ピース暗号化部513と、データ受信部514と、データ送信部515と、送信要求受付部516と、データ格納部517と、送信要求送信部518と、鍵要求送信部519と、ピース復号部520と、電子署名生成部521と、電子署名検証部522と、ピース検証要求送信部523とを有する。尚、固有情報格納部510とデータ格納部517とは、例えばノード51のHDDなどの外部記憶装置に記憶領域として確保されるものである。乱数生成部511と、一時対称鍵生成部512と、ピース暗号化部513と、データ受信部514と、データ送信部515と、送信要求受付部516と、送信要求送信部518と、鍵要求送信部519と、ピース復号部520と、電子署名生成部521と、電子署名検証部522と、ピース検証要求送信部523との実体は、ノード51のCPUのプログラム実行時にRAMなどの記憶装置上に生成されるものである。
【0028】
固有情報格納部510は、当該ノード51に割り当てられた公開鍵証明書と非公開鍵と秘密鍵とを記憶する。公開鍵証明書には、少なくとも当該ノード51に割り当てられたノードID及び公開鍵が含まれている。送信要求受付部516の構成は上述のノード50の有する送信要求受付部506の構成と同様である。送信要求送信部518は、ピースを要求するピース要求をノード50又は他のノード51に対して送信する。データ受信部514は、送信要求送信部518がピース要求を送信した相手であるノード50又は他のノード51から、ピースが暗号化された暗号化ピースと、当該暗号化ピースの送信を仲介した少なくとも1つの他のノード50,51に割り当てられた各公開鍵証明書を含む公開鍵証明書列と、当該他のノード50,51が生成した各乱数を含む乱数列と、当該他のノード50,51が生成した各電子署名を含む電子署名列とを受信する。電子署名検証部522は、受信した暗号化ピースE(k_i-1)・・・E(k_0)Pと公開鍵証明書列pkc_0,・・・,pkc_i-1と乱数列r_0,・・・r_i-1と電子署名列sig_0,・・・,sig_i-1とが正当かどうかを、データ送信者の公開鍵証明書に含まれる公開鍵pk_i-1を用いて、以下の(3)式で表される関数VERIFYによりデータ送信者が生成した電子署名を検証する。なおE(k_i-1)・・・E(k_0)P、pkc_i-1、r_i-1、sig_i-1、およびpk_i-1とは、それぞれ、配信経路上でi番目に暗号化ピースの配信を仲介するノード51で計算される暗号化ピース、当該ノード51の公開鍵証明書、当該ノード51が生成した乱数、当該ノード51が生成した電子署名、および当該ノード51の公開鍵証明書に含まれる公開鍵を意味する。そして、i=0のときの各データE(k_0)P、pkc_0、r_0、sig_0、およびpk_0は、配信開始ノードであるノード50で計算される暗号化ピース、ノード50の公開鍵証明書、ノード50が生成した乱数、ノード50が生成した電子署名、およびノード50の公開鍵証明書に含まれる公開鍵である。
検証成功/失敗=VERIFY(pk_i-1, E(k_i-1)・・・E(k_0)P || pkc_0 || r_0 || sig_0 || ・・・ || pkc_i-1 || r_i-1, sig_i-1) ・・・(3)
【0029】
例えば、ノード50から最初に暗号化ピースを受信したノード51では、以下の(4)式でノード50が生成した電子署名を検証する。
検証成功/失敗=VERIFY(pk_0, E(k_0)P || pkc_0 || r_0, sig_0) ・・・(4)
【0030】
関数VERIFYとしては、署名生成時に使用した関数SIGNと対になる署名検証アルゴリズムを用いる。例えば、SIGNとしてRSA署名生成アルゴリズムを用いた場合には、VERIFYとしてRSA署名検証アルゴリズムを用いる。
【0031】
電子署名の検証に成功した場合、データ格納部517は、データ受信部514が受信した公開鍵証明書列、乱数列、電子署名列及び暗号化ピースを対応付けて記憶する。検証に失敗した場合、データ受信部514が受信した公開鍵証明書列、乱数列、電子署名列及び暗号化ピースを破棄する。
【0032】
送信要求受付部516がピース要求を他のノード51から受信した場合、乱数生成部511は、乱数を生成する。一時対称鍵生成部512は、乱数生成部511が生成した乱数と、固有情報格納部510に記憶された秘密鍵とを用いて上述した関数Fにより一時対称鍵を生成する。ピース暗号化部513は、一時対称鍵生成部512が生成した一時対称鍵を用いて、データ格納部517に記憶されている1つの暗号化ピースを更に暗号化して、新たな暗号化ピースを出力する。電子署名生成部521は、固有情報格納部510に記憶された非公開鍵を用いて、ピース暗号化部513が出力した新たな暗号化ピースと、当該暗号化ピースに対応づけられてデータ格納部517に記憶された公開鍵証明書列に加え固有情報格納部510に記憶された公開鍵証明書を含む新たな公開鍵証明書列と、当該暗号化ピースに対応づけられてデータ格納部517に記憶された乱数列に加え乱数生成部511が生成した乱数を含む新たな乱数列と、当該暗号化ピースに対応づけられてデータ格納部517に記憶された電子署名列とに対して、新たな電子署名を生成する。
【0033】
データ送信部515は、送信要求受付部516が受信したピース要求を送信した他のノード51に対して、以下のデータを送信する。すなわち、送信対象の暗号化ピースに対応付けられてデータ格納部517に記憶された公開鍵証明書列に加え固有情報格納部510に記憶された公開鍵証明書を含む新たな公開鍵証明書列と、当該暗号化ピースに対応付けられてデータ格納部517に記憶された乱数列に加え乱数生成部511が生成した乱数を含む新たな乱数列と、ピース暗号化部513が出力した新たな暗号化ピースと、当該暗号化ピースに対応付けられてデータ格納部517に記憶された電子署名列に加え電子署名生成部521が生成した電子署名を含む新たな電子署名列とである。尚、データ格納部517に暗号化ピースが記憶されていない場合には、送信要求受付部516がピース要求を受信したとしても、ピース暗号化部513は暗号化ピースを出力せず、データ送信部515は暗号化ピースを送信しない。
【0034】
ここで、ノード50,51から送信される公開鍵証明書列、乱数列、暗号化ピース及び電子署名列について具体的に説明する。尚、ノード50から1つの暗号化ピースに対してこれと共に送信される公開鍵証明書、乱数及び電子署名は各々1つであるが、ここでは説明の便宜上、これらを公開鍵証明書列、乱数列及び電子署名列と各々記載する場合がある。暗号化ピースの配信経路としてここではノード50からノード51A、更にノード51Aからノード51Bに暗号化ピースを送信し、ノード51Bから鍵サーバ53に鍵要求を送信する場合について説明する。例えば、あるピースPについてノード51Aからのピース要求に応じて、ノード50が、乱数r_0と秘密鍵s_0とを用いて一時対称鍵k_0を生成し、これを用いてピースPを暗号化して暗号化ピースE(k_0)Pを出力したとする。さらに、ノード50は、乱数r_0と暗号化ピースE(k_0)Pと公開鍵証明書pkc_0とを含む情報(署名対象情報)に対する電子署名sig_0を、非公開鍵sk_0を用いて生成したとする。
【0035】
なお、署名対象情報とは、電子署名を生成する対象となる情報をいう。上述のように、ノード50の場合は、ノード50で生成した乱数r_0と、ノード50で暗号化した暗号化ピースE(k_0)Pと、ノード50の公開鍵証明書pkc_0とが署名対象情報に含まれる。配信経路上でi番目に暗号化ピースの配信を仲介するノード51の場合は、公開鍵証明書列pkc_0、・・・、pkc_iと、乱数列r_0、・・・、r_iと、暗号化ピースE(k_i)・・・E(k_0)Pと、電子署名列sig_0、・・・、sig_i-1とが署名対象情報に含まれる。
【0036】
そして、ノード50が、当該暗号化ピースE(k_0)Pを公開鍵証明書pkc_0、乱数r_0及び電子署名sig_0と共にノード51Aに送信したとする。図4は、ノード50からノード51Aに送信される情報を模式的に示す図である。当該ノード51Aは、電子署名sig_0が、暗号化ピースE(k_0)Pと公開鍵証明書pkc_0及び乱数r_0に対する正当な署名かどうかを、公開鍵証明書pkc_0に含まれる公開鍵pk_0を用いて電子署名検証部522において確認する。当該電子署名検証の結果が検証成功だった場合、当該ノード51Aは、これらの公開鍵証明書pkc_0、乱数r_0、暗号化ピースE(k_0)P及び電子署名sig_0を対応付けてデータ格納部517に記憶することになる。尚、データ格納部517は、公開鍵証明書と当該公開鍵証明書が割り当てられたノードが生成した乱数と当該公開鍵証明書が割り当てられたノードが生成した電子署名との対応関係を保持した状態で各公開鍵証明書列、各乱数列及び各電子署名列を記憶する。一方、当該電子署名検証の結果が検証失敗だった場合、当該ノード51Aは、当該公開鍵証明書pkc_0と乱数r_0と暗号化ピースE(k_0)P及び電子署名sig_0を破棄する。
【0037】
そして、当該ノード51Aが、ノード51Bからのピース要求に応じてピースPに対する暗号化ピースを送信する場合、乱数r_1を生成し、これと秘密鍵s_1とを用いて一時対称鍵k_1を生成し、これを用いて暗号化ピースE(k_0)Pを更に暗号化して暗号化ピースE(k_1)E(k_0)Pを出力したとする。E(k_1)E(k_0)Pは、順に一時対称鍵k_0、k_1でピースPを多重に暗号化したものを示す。さらに、ノード51Aは、公開鍵証明書列pkc_0、pkc_1と乱数列r_0、r_1と暗号化ピースE(k_1)E(k_0)Pと電子署名sig_0とを含む署名対象情報に対する電子署名sig_1を、非公開鍵sk_1を用いて生成したとする。このとき、ノード51Aは、ノード51Bに対して、データ格納部517に記憶されている、ノード50に割り当てられた公開鍵証明書pkc_0に加え固有情報格納部510に記憶されている、自身に割り当てられた公開鍵証明書pkc_1と、データ格納部517に記憶されている乱数r_0に加え自身が生成した乱数r_1と、暗号化ピースE(k_1)E(k_0)Pと、データ格納部517に記憶されている電子署名sig_0に加え自身が生成した電子署名sig_1とを送信する。図5は、ノード51Aからノード51Bに送信される情報を模式的に示す図である。ノード51Bは、電子署名sig_1が、暗号化ピースE(k_1)(k_0)Pと公開鍵証明書列pkc_0、pkc_1と乱数列r_0、r_1及び電子署名sig_0に対する正当な署名かどうかを、公開鍵証明書pkc_1に含まれる公開鍵pk_1を用いて電子署名検証部522において確認する。当該電子署名検証の結果が検証成功だった場合、これらの公開鍵証明書列pkc_0、pkc_1、乱数列r_0、r_1、暗号化ピースE(k_1)E(k_0)P及び電子署名列sig_0、sig_1を対応付けてデータ格納部517に記憶する。
【0038】
また、鍵サーバ53に全てのノードの公開鍵証明書が格納されている場合には、受信した公開鍵証明書からノードIDを取り出して、当該ノードIDを公開鍵証明書の代わりに送信することで、ノード間で送られるデータを削減できる。すなわち、ノード51Aは、ノード51Bに対して、データ格納部517に記憶されている、ノード50に割り当てられた公開鍵証明書pkc_0に含まれているノードID「ID #0」に加え固有情報格納部510に記憶されている、自身に割り当てられた公開鍵証明書pkc_1と、データ格納部517に記憶されている乱数r_0に加え自身が生成した乱数r_1と、暗号化ピースE(k_1)E(k_0)Pと、データ格納部517に記憶されている電子署名sig_0に加え自身が生成した電子署名sig_1とを送信する。図6は、鍵サーバ53に全てのノードの公開鍵証明書が格納されている場合のノード51Aからノード51Bに送信される情報を模式的に示す図である。ノード51Bは、電子署名sig_1が、暗号化ピースE(k_1)(k_0)PとノードID列「ID #0」と公開鍵証明書pkc_1と乱数列r_0、r_1及び電子署名sig_0に対する正当な署名かどうかを、公開鍵証明書pkc_1に含まれる公開鍵pk_1を用いて電子署名検証部522において確認する。当該電子署名検証の結果が検証成功だった場合、これらのノードID列「ID #0」、公開鍵証明書pkc_1、乱数列r_0、r_1、暗号化ピースE(k_1)E(k_0)P及び電子署名列sig_0、sig_1を対応付けてデータ格納部517に記憶する。
【0039】
鍵要求送信部519は、データ格納部517に記憶された暗号化ピースを復号するための復号鍵を要求する鍵要求を鍵サーバ53に送信する。ここで鍵要求送信部519は、当該暗号化ピースに対応してデータ格納部517に記憶されている公開鍵証明書列から取り出されたノードID列及び乱数列を鍵要求に含めて鍵サーバ53に送信する。例えば、ノード51Bが、ノード51Aが暗号化を行った場合に出力された図6に示した暗号化ピースE(k_1)E(k_0)Pを復号するための復号鍵を要求する鍵要求を鍵サーバ53に送信する場合、ノード51Bの鍵要求送信部519は、ノードID列「ID #0、ID #1」と、乱数列r_0、r_1とを含む鍵要求を送信する。図7は、ノード51Bから鍵サーバ53に送信される情報を模式的に示す図である。このように、ノード51は、暗号化ピースを復号するための復号鍵を鍵サーバ53に要求する際に、当該暗号化ピースの配信経路を示すものとして、配信開始ノードであるノード50を基点として当該暗号化ピースの配信を仲介する各ノード50,51の各ノードIDを含むノードID列及び当該各ノード50,51が生成した各乱数を含む乱数列を鍵サーバ53に送信する。尚、これらの送信に際し、鍵要求送信部519は、各ノードIDと当該各ノードIDが割り当てられたノードが生成した乱数との対応関係を保持した状態で送信する。
【0040】
ピース復号部520は、鍵要求送信部519が送信した鍵要求に応じて鍵サーバ53から送信された一時対称鍵列を復号鍵として受信し、当該一時対称鍵列を用いて暗号化ピースを復号する。例えば、上述の例では、ノード51Aが暗号化を行っていた場合には、ノード51Bは、図7に示したノードID列及び乱数列を含む鍵要求に応じて鍵サーバ53から送信された一時対称鍵列k_0、k_1を受信する。ここで、即ち、ピースに対して少なくとも1回以上行われている各暗号化を解くための各復号鍵が受信される。図8は、鍵サーバ53からノード51Bに送信される情報を模式的に示す図である。同図に示される一時対称鍵列によりピースPが復号される。尚、鍵サーバ53がどのように一時対称鍵列を生成するのかは後述する。
【0041】
尚、ノード51が、複数のピースのそれぞれについてどのような順番やタイミングでどのノードから取得するかは特に限定されないが、以上のようにして、ノード51は、複数のピースのそれぞれが暗号化された各暗号化ピースをピース要求によって他のノード50,51から取得する。また、ノード51は、各暗号化ピースについて鍵要求によって各一時対称鍵を鍵サーバ53から受信し、各暗号化ピースを復号することにより、上述の配信データを得る。
【0042】
ピース検証要求送信部523は、受信した復号鍵を用いて正しく復号できなかったピースが存在した場合、あるいは復号鍵を受信する前に暗号化ピースが正しく復号可能かどうかを判断したいピースが存在した場合、鍵サーバ53に対して、ピースの検証要求を送信する。なお、正しく復号できなかったピースが存在した場合は、図9に示すようにハッシュ値でピースを検証する方法を用いることもできる。図9を用いてピースが正しく復号できたかどうかを調べる方法の1例を説明する。例えば配信データの提供者が、配信データのピース毎のハッシュ値をあらかじめ計算して、ハッシュ値列(ハッシュテーブル)を準備しておき、各ノードが復号された配信データを入手したときに、当該配信データのハッシュ値とハッシュテーブルのハッシュ値を比較することで、ピースが正しく復号できたかどうかを調べることができる。ピース検証要求送信部523は、データ格納部517に記憶された暗号化ピースの検証を依頼するための検証要求を鍵サーバ53に送信する。ここでピース検証要求送信部523は、検証対象暗号化ピースと共に当該暗号化ピースに対応してデータ格納部517に記憶されている公開鍵証明書列と乱数列及び電子署名列をピース検証要求に含めて鍵サーバ53に送信する。
【0043】
例えば、ノード51Bが、ノード51Aが暗号化を行った場合に出力された図5に示した暗号化ピースE(k_1)E(k_0)Pを検証するための検証要求を鍵サーバ53に送信する場合、ノード51Bのピース検証要求送信部523は、公開鍵証明書列pkc_0、pkc_1と、乱数列r_0、r_1と、暗号化ピースE(k_1)E(k_0)Pと、電子署名列sig_0、sig_1とを含むピース検証要求を送信する。図10は、ノード51Bから鍵サーバ53に送信される情報を模式的に示す図である。このように、ノード51は、暗号化ピースを検証するための検証要求を鍵サーバ53に要求する際に、当該暗号化ピースの配信経路を示すものとして、配信開始ノードであるノード50を基点として当該暗号化ピースの配信を仲介する各ノード50,51の各公開鍵証明書を含む公開鍵証明書列、当該各ノード50,51が生成した各乱数を含む乱数列及び当該各ノード50,51が生成した各電子署名を含む電子署名列を鍵サーバ53に送信する。尚、これらの送信に際し、ピース検証要求送信部523は、各公開鍵証明書と当該各公開鍵証明書が割り当てられたノードが生成した乱数と当該各公開鍵証明書が割り当てられたノードが生成した電子署名との対応関係を保持した状態で送信する。
【0044】
また、鍵サーバ53に全てのノードの公開鍵証明書が格納されている場合には、ピース検証要求送信部523は、データ格納部517に記憶された暗号化ピースの検証を依頼するための検証要求を鍵サーバ53に送信する。このときピース検証要求送信部523は、当該暗号化ピースに対応してデータ格納部517に記憶されているノードID列と乱数列及び電子署名列をピース検証要求に含めて鍵サーバ53に送信する。例えば、ノード51Bが、ノード51Aが暗号化を行った場合に出力された図6に示した暗号化ピースE(k_1)E(k_0)Pを検証するための検証要求を鍵サーバ53に送信する場合、ノード51Bのピース検証要求送信部523は、公開鍵証明書pkc_1からノードID「ID #1」を取り出した後に、ノードID列「ID #0、ID #1」と、乱数列r_0、r_1と、暗号化ピースE(k_1)E(k_0)Pと、電子署名列sig_0、sig_1とを含むピース検証要求を送信する。
【0045】
図11は、鍵サーバ53に全てのノードの公開鍵証明書が格納されている場合における、ノード51Bから鍵サーバ53に送信される情報を模式的に示す図である。このように、ノード51は、暗号化ピースを検証するための検証要求を鍵サーバ53に要求する際に、当該暗号化ピースの配信経路を示すものとして、配信開始ノードであるノード50を基点として当該暗号化ピースの配信を仲介する各ノード50,51の各ノードID列、当該各ノード50,51が生成した各乱数を含む乱数列及び当該各ノード50,51が生成した各電子署名を含む電子署名列を鍵サーバ53に送信する。尚、これらの送信に際し、ピース検証要求送信部523は、各ノードIDと当該各ノードIDが割り当てられたノードが生成した乱数と当該ノードIDが割り当てられたノードが生成した電子署名との対応関係を保持した状態で送信する。
【0046】
データ受信部514は、ピース検証要求送信部523が送信したピース検証要求に応じて鍵サーバ53から送信されたピース検証結果を受信して、当該検証結果が検証失敗であった場合には対応する暗号化ピースを破棄し、再度他のノード51から暗号化ピースの取得を試みる。
【0047】
<鍵サーバの構成>
次に、鍵サーバ53のCPUが記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。図12は、鍵サーバ53の機能的構成を例示する図である。鍵サーバ53は、秘密鍵格納部530と、データ受信部531と、公開鍵証明書格納部532と、一時対称鍵生成部533と、データ送信部534と、電子署名検証部535と、ピース検証要求受付部536と、ピース復号部537と、不正ノードリスト格納部538とを有する。尚、秘密鍵格納部530と公開鍵証明書格納部532及び不正ノードリスト格納部538とは、例えば鍵サーバ53のHDDなどの外部記憶装置に記憶領域として確保されるものである。データ受信部531と、一時対称鍵生成部533と、データ送信部534と、電子署名検証部535と、ピース検証要求受付部536と、ピース復号部537との実体は、鍵サーバ53のCPUのプログラム実行時にRAMなどの記憶装置上に生成されるものである。
【0048】
秘密鍵格納部530は、各ノード50,51に割り当てられた秘密鍵を、各ノード50,51に割り当てられた公開鍵証明書あるいは公開鍵証明書に含まれるノードIDと対応付けて記憶する。データ受信部531は、上述したノードID列及び乱数列を含む鍵要求をノード51から受信する。
【0049】
公開鍵証明書格納部532は、鍵サーバ53に全てのノードの公開鍵証明書を格納するように構成する場合に備えられる。公開鍵証明書を格納せずにノードIDを備えるように構成する場合は、鍵サーバ53は公開鍵証明書格納部532を備える必要はない。公開鍵証明書格納部532は、各ノード50,51に割り当てられた公開鍵証明書を記憶する。当該公開鍵証明書格納部532に全ノードの公開鍵証明書が記憶されていると、ノード間のデータ転送量や、後述するピース検証要求におけるデータ転送量を削減できる。
【0050】
一時対称鍵生成部533は、データ受信部531が受信した鍵要求に含まれる各ノードIDに対応づけられて秘密鍵格納部530に記憶されている秘密鍵s_i(0≦i≦j-1:jはピースの暗号化回数、以下同様)を読み出し、当該秘密鍵と当該鍵要求に含まれる乱数列に含まれる各乱数r_i(0≦i≦j-1)を用いて、関数Fにより復号鍵k_iを生成する。これを式により表すと以下の(5)式のように表される。尚、関数Fは上述のノード50又はノード51が一時対称鍵を生成する際に用いたものと同じである。従って、ここでは、乱数と秘密鍵とを用いて当該関数Fにより一時対称鍵を復元することになる。
k_i = F(s_i, r_i) ・・・(5)
【0051】
データ送信部534は、一時対称鍵生成部533が復号鍵として生成した一時対称鍵を、データ受信部531が受信した鍵要求を送信したノード51に対して送信する。例えば、上述の例では、ノード51Aが暗号化を行っていた場合には、鍵サーバ53は、図7に示されるノードID列及び乱数列を含む鍵要求に応じて、図8に示されるように、各乱数r_0、r_1に対して一時対称鍵k_0、k_1を得て、これをノード51Bに対して送信する。当該ピースについて行われた全ての暗号化のそれぞれを復号するための各対称鍵がノード51Bに対して送信されることにより、ノード51Bは当該暗号化ピースの暗号化を完全に復号することができる。
【0052】
ピース検証要求受付部536は、上述した公開鍵証明書列と乱数列と暗号化ピースと電子署名列とを含むピース検証要求をノード51から受信する。例として、図10で示されるピース検証要求を受信したとすると、一時対称鍵生成部533は、鍵要求を受信したときと同様の処理で復号鍵k_0、k_1を生成する。電子署名検証部535は、公開鍵証明書列に含まれる各公開鍵pk_0、pk_1を用いて電子署名列sig_0、sig_1の検証を実施し、ピース復号部537はE(k_1)(k_0)Pの復号を実施する。電子署名の検証および暗号化ピースの復号の手順は以下の通りである。まず、公開鍵pk_1を用いて、暗号化ピースE(k_1)E(k_0)Pと公開鍵証明書列pkc_0、pkc_1と乱数列r_0、r_1と電子署名sig_0とを含む署名対象情報に対する電子署名sig_1を以下の(6)式のように関数VERIFYにより検証する。
検証結果=VERIFY(pk_1, E(k_1)(k_0)P || pkc_0 || r_0 || sig_0 || pck_1 || r_1, sig_1) ・・・(6)
【0053】
上記(6)式の検証に失敗した場合には、不正ノードリスト格納部538に記憶された不正ノードリストに、ピース検証要求受付部536が受信したピース検証要求を送信したノード51のノードIDが追記されて、データ送信部534が「検証失敗」を当該ノード51に対して送信する。上記の検証に成功した場合には、一時対称鍵k_1を用いて暗号化ピースを復号し、公開鍵pk_0を用いて、暗号化ピースE(k_0)Pと公開鍵証明書列pkc_0と乱数列r_0とを含む署名対象情報に対する電子署名sig_0を以下の(7)式のように関数VERIFYにより検証する。
検証結果=VERIFY(pk_0, E(k_0)P || pkc_0 || r_0, sig_0) ・・・(7)
【0054】
上記(7)式の検証に失敗した場合には、不正ノードリスト格納部538に記憶された不正ノードリストに、公開鍵証明書pkc_1に含まれるノードIDが追記されて、データ送信部534が「検証失敗」を当該ノード51に対して送信する。上記の検証に成功した場合には、データ送信部534が「検証成功」を当該ノード51に対して送信する。
【0055】
また、鍵サーバ53に全てのノードの公開鍵証明書が格納されている場合には、ピース検証要求受付部536は、図11に示す検証依頼を受信する。当該検証依頼には、ノードID列が含まれており、鍵サーバ53は公開鍵証明書格納部に記録されている公開鍵証明書の中から当該ノードIDに対応する公開鍵証明書pkc_i(0≦i≦j-1)を取り出す。その後のピース検証処理は、上述の図10に示す検証依頼を受信した場合と同様である。
【0056】
(2)動作
<配信開始ノード:配信処理>
次に、本実施の形態にかかるデータ配信システムで行われる処理の手順について説明する。まず、配信開始ノードであるノード50が行う配信処理の手順について図13を用いて説明する。ノード50は、配信データを複数のピースに分割する(ステップS1)。そして、ノード50は、ピースを要求するピース要求を他のノード51から受信すると(ステップS2:YES)、乱数r_0を生成する(ステップS3)。次いで、ノード50は、乱数r_0と固有情報格納部500に記憶された秘密鍵s_0とを用いて関数Fにより一時対称鍵k_0を生成する(ステップS4)。そして、ノード50は、ステップS4で生成した一時対称鍵を用いて、送信対象となるピースPを暗号化して、暗号化ピースE(k_0)Pを出力する(ステップS5)。尚、送信対象となるピースをどのように決定するかは特に限定されない。さらに、ノード50は、固有情報格納部500に記憶された非公開鍵sk_0を用いて、ステップS5で生成された暗号化ピースE(k_0)Pとノード50自身の公開鍵証明書pkc_0とステップS3で生成された乱数r_0とを含む署名対象情報に対する電子署名sig_0を生成する(ステップS6)。そして、ノード50は、ステップS2で受信されたピース要求を送信した他のノード51に対して、例えば図4に示されるように、固有情報格納部500に記憶されている公開鍵証明書pkc_0と、ステップS3で生成した乱数r_0と、ステップS5で出力した暗号化ピースE(k_0)Pと、ステップS6で生成した電子署名sig_0とを送信する(ステップS7)。その後ステップS2に戻り、ノード50は、新たなピース要求の受信を待機する。尚、ステップS2で受信されるピース要求は、同一のノード51であるとは限らず、当該ピース要求によって要求されるピースPは、同一のピースであるとは限らない。また、ステップS3で生成する乱数は基本的にステップS3の処理毎に異なる。
【0057】
<受信処理>
次に、ノード51がノード50又は他のノード51から暗号化ピースを受信する受信処理の手順について図14を用いて説明する。ノード51は、ピースを要求するピース要求をノード50又は他のノード51に対して送信する(ステップS10)。そして、ノード51は、ステップS10でピース要求を送信した相手であるノード50又は他のノード51から、公開鍵証明書列と、乱数列と、暗号化ピースと、電子署名列とを受信する(ステップS11)。次いで、送信した相手であるノード50又は他のノード51が生成した電子署名の検証を行なう(ステップS12)。ステップS12の検証に成功すると(ステップS13:YES)、ノード51は、ステップS11で受信した公開鍵証明書列、乱数列、暗号化ピース及び電子署名列を対応付けて記憶する(ステップS14)。一方、ステップ12の検証に失敗すると(ステップS13:NO)、ノード51は、ステップS11で受信した公開鍵証明書列、乱数列、暗号化ピース及び電子署名列を破棄する(ステップS15)。
【0058】
尚、ノード51がノード50にピース要求を送信した場合は、ステップS11ではピースPについて図4に示される公開鍵証明書列と、乱数列と、暗号化ピースと電子署名列とを受信する。ここで、図示はしないが、P2PネットワークNTに接続されるノードであって、fを1以上の整数として、f番目にピースPを受信するノードについて一般化して説明する。説明の便宜上、当該ノードのノードIDをID# fとする。ノードID「ID# f」が割り当てられたノードは、(f -1)番目のノードID「ID# (f-1)」が割り当てられたノードから、図15に示されるように、ピースPについて、公開鍵証明書列pkc_0、・・・、pkc_{f-1}と、乱数列r_0、・・・、r_{f-1}と、暗号化ピースE(k_{f-1})・・・E(k_0)Pと、電子署名列sig_0・・・、sig_{f-1}とを受信する。このとき、公開鍵証明書列に含まれるノードID「ID #0、・・・、ID #(f-1)」によって、暗号化ピースがどのノードによって暗号化されて送信されたかが各々特定されるため、暗号化ピースの配信経路が示されることになる。
【0059】
<配信開始ノード以外のノード:配信処理>
次に、配信開始ノード以外のノード51が行う配信処理の手順について図16を用いて説明する。ノード51は、ピースを要求するピース要求を他のノード51から受信すると(ステップS20:YES)、乱数を生成する(ステップS21)。そしてノード51は、ステップS21で生成した乱数と、固有情報格納部510に記憶された秘密鍵とを用いて関数Fにより一時対称鍵を生成する(ステップS22)。次いでノード51は、ステップS22で生成した一時対称鍵を用いて、あるピースPが暗号化された暗号化ピースであってデータ格納部517に記憶されている暗号化ピースを更に暗号化して、新たな暗号化ピースを出力する(ステップS23)。そして、固有情報格納部510に記憶された非公開鍵を用いて、関数SIGNにより公開鍵証明書列と乱数列と暗号化ピースと電子署名列とを含む署名対象情報に対する電子署名を生成する(ステップS24)。その後ノード51は、ステップS20で受信されたピース要求を送信した他のノード51に対して、送信対象である暗号化ピースに対応付けられてデータ格納部517に記憶された公開鍵証明書に加え固有情報格納部510に記憶された公開鍵証明書を含む新たな公開鍵証明書列と、当該暗号化ピースに対応付けられてデータ格納部517に記憶された乱数列に加えステップS21で生成した乱数を含む新たな乱数列と、ステップS23で出力した新たな暗号化ピースと、当該暗号化ピースに対応付けられてデータ格納部517に記憶された電子署名列に加えステップS24で生成した電子署名を含む電子署名列とを送信する(ステップS25)。
【0060】
<復号処理>
次に、ノード51が鍵サーバ53から復号鍵を取得しこれを用いて暗号化ピースを復号する復号処理の手順について図17を用いて説明する。ノード51は、データ格納部517に記憶された暗号化ピースに対応付けられている公開鍵証明書列及び乱数列を読み出し(ステップS30)、公開鍵証明書に含まれるノードIDを元にノードID列を取得する(ステップS31)。そして、当該暗号化ピースを復号するための復号鍵を要求すると共に、ステップS31で取得したノードID列及びデータ格納部517から読み出した乱数列を含む鍵要求を鍵サーバ53に送信する(ステップS32)。次いで、ノード51は、ステップS32で送信された鍵要求に応じて鍵サーバ53から送信された一時対称鍵を復号鍵として受信し(ステップS33)、当該一時対称鍵を用いて暗号化ピースを復号する(ステップS34)。
【0061】
例えば、上述したノードID「ID #f」が割り当てられたノードは、鍵サーバ53に対して、図18に示されるように、ピースPについて、ノードID列「ID #0、・・・、ID #(f-1)」と、乱数列r_0、・・・、r_{f-1}とを送信する。そして、当該ノードは、鍵サーバ53から、図19に示されるように、ピースPについて、一時対称鍵k_0、・・・、k_{f-1}を受信し、これらを用いて暗号化ピースE(k_{f-1})・・・E(k_0)Pを復号して、ピースPを得る。このようにして、各ノード51は、各ピースについて行われている暗号化を解くための一時対称鍵を全て得ることにより、当該ピースについて行われている暗号化を解くことができ、当該暗号化ピースを完全に復号することが可能になる。このようにして、各ノード51は、複数のピースのそれぞれが暗号化された各暗号化ピースについて鍵要求によって各一時対称鍵を鍵サーバ53から受信し、各暗号化ピースを復号することにより、上述の配信データを得ることができる。
【0062】
<ピース検証要求処理>
次に、ノード51が鍵サーバ53にピース検証要求を送信し、ピース検証結果を受信する手順について図20を用いて説明する。ノード51は、データ格納部517に記憶された暗号化ピースと、暗号化ピースに対応付けられている公開鍵証明書列と乱数列及び電子署名列を読み出し(ステップS40)、暗号化ピースと公開鍵証明書列と乱数列及び電子署名列を含むピース検証要求を鍵サーバ53に送信する(ステップS41)。次いで、ノード51は、ステップS41で送信されたピース検証要求に応じて鍵サーバ53から送信されたピース検証結果を受信し(ステップS42)、検証結果が成功であった場合は処理を終了する(ステップS43:YES)。一方、検証結果が失敗であった場合(ステップS43:NO)は、当該暗号化ピースと、当該暗号化ピースに対応づけられている公開鍵証明書列と乱数列及び電子署名列を廃棄する(ステップS44)。
【0063】
例えば、上述したノードID「ID #f」が割り当てられたノードは、鍵サーバ53に対して、図15に示されるように、あるピースPについて、公開鍵証明書列pkc_0、・・・、pkc_{f-1}と、乱数列r_0、・・・、r_{f-1}と暗号化ピースE(k_{f-1})、・・・、E(k_0)P及び電子署名列sig_0、・・・、sig_{f-1}を送信する。そして当該ノードは、鍵サーバ53から、ピース検証結果(成功もしくは失敗)を受信する。
【0064】
<鍵サーバ:鍵送信処理>
次に、鍵サーバ53がノード51からの鍵要求に応じて復号鍵を送信する鍵送信処理の手順について図21を用いて説明する。鍵サーバ53は、暗号化ピースを復号するための復号鍵を要求されると共に、ノードID列及び乱数列を含む鍵要求をノード51から受信すると(ステップS50:YES)、受信した鍵要求に含まれるノードID列に含まれる各ノードIDに対応付けられて秘密鍵格納部530に記憶されている秘密鍵をノードID毎に読み出す(ステップS51)。そして鍵サーバ53は、全てのノードIDに対する乱数と、ステップS51で読み出した秘密鍵とを用いてノードID毎に関数Fにより一時対称鍵を復号鍵として生成する(ステップS52)。次いで、鍵サーバ53は、ステップS52で復号鍵として生成した一時対称鍵を、ステップS50で受信した鍵要求を送信したノード51に対して送信する(ステップS53)。
【0065】
例えば、鍵サーバ53は、上述したノードID「ID #f」が割り当てられたノードに対して、ピースPについて、図18に示されるようなノードID列及び乱数列を含む鍵要求に応じて、図19に示されるような一時対称鍵k_0、・・・、k_{f-1}を送信する。
【0066】
<鍵サーバ:ピース検証処理>
次に、鍵サーバ53がノード51からのピース検証要求に応じてピースを検証し、検証結果を送信するピース検証処理の手順について図22を用いて説明する。鍵サーバ53は、ピースの検証を要求されると共に、公開鍵証明書列と乱数列と暗号化ピースと電子署名列とを含むピース検証要求をノード51から受信すると(ステップS600:YES)、受信したピース検証要求に含まれる公開鍵証明書列に含まれる各ノードIDに対応づけられて秘密鍵格納部530に記憶されている秘密鍵をノードID毎に読み出す(ステップS601)。そして鍵サーバ53は、全てのノードIDに対する乱数と、ステップS601で読み出した秘密鍵とを用いてノードID毎に関数Fにより一時対称鍵k_0、・・・、k_{f-1}を復号鍵として生成する(ステップS602)。ここで、fをピース検証要求に含まれる暗号化ピースの暗号化回数すなわち暗号化ピースの転送回数とする。fは、例えば公開鍵証明書列、乱数列、および電子署名列などの各データ列に含まれるデータの個数として求めることができる。次いで鍵サーバ53は、i=f-1として(ステップS603)、以下のステップS604〜S607をi=0となるまで繰り返す。まず鍵サーバ53は、ピース検証要求に含まれる公開鍵証明書列pkc_0、・・・、pkc_iと乱数列r_0、・・・、r_iと暗号化ピースE(k_i)・・・E(k_0)Pと電子署名列sig_0、・・・、sig_{i-1}とに対して、電子署名sig_iが正当な署名であるかどうかを、公開鍵証明書pkc_iに含まれる公開鍵pk_iを用いて関数VERIFYにより検証する(ステップS604)。ステップS604の検証結果が検証成功となったとき(ステップS605:YES)は、暗号化ピースE(k_i)E(k_{i-1})・・・E(k_0)Pを一時対称鍵k_iを用いて復号して、暗号化ピースE(k_{i-1})・・・E(k_0)Pを得る(ステップS606)。次いで鍵サーバ53は、i=i-1とし(ステップS607)、i=0となった場合(ステップS608:YES)は、公開鍵証明書pkc_0と乱数r_0と暗号化ピースE(k_0)Pとに対して、電子署名sig_0が正当な署名であるかどうかを、公開鍵証明書pkc_0に含まれる公開鍵pk_0を用いて関数VERIFYにより検証する(ステップS609)。ステップS609の検証結果が検証成功となったとき(ステップS610:YES)、鍵サーバ53はステップS600で受信したピース検証要求を送信したノード51に対して、検証成功を送信する(ステップS612)。鍵サーバ53は、ステップS604の検証結果が検証失敗となったとき(ステップS605:NO)及び、ステップS609の検証結果が検証失敗となったとき(ステップS610:NO)は、不正ノードリスト格納部538に記録された不正ノードリストに、pkc_{i+1}に含まれているノード51のノードIDを追記し(ステップS611)、データ送信部534が「検証失敗」を当該ノード51に対して送信する(ステップS613)。また、鍵サーバ53は、ステップS607でi=0とならなかった場合(ステップS608:NO)は、ステップS604以降の処理をステップS608でi=0となるまで繰り返す。
【0067】
次に、鍵サーバ53が全てのノードの公開鍵証明書を公開鍵証明書格納部532に記憶されており、かつ図23に示されるように、ピース検証要求にノードID列が含まれていた場合の処理を、図24を用いて説明する。鍵サーバ53は、ピースの検証を要求されると共に、ノードID列と乱数列と暗号化ピースと電子署名列とを含むピース検証要求をノード51から受信すると(ステップS700:YES)、受信したピース検証要求に含まれるノードID列に含まれる各ノードIDに対応づけられて秘密鍵格納部530に記憶されている秘密鍵をノードID毎に読み出し、受信したピース検証要求に含まれるノードID列に含まれる各ノードIDに対応づけられて公開鍵証明書格納部532に記憶されている公開鍵証明書をノードID毎に読み出す(ステップS701)。まず鍵サーバ53は、全てのノードIDに対する乱数と、ステップS701で読み出した秘密鍵とを用いてノードID毎に関数Fにより一時対称鍵k_0、・・・、k_{f-1}を復号鍵として生成する(ステップS702)。ここで、fをピース検証要求に含まれる暗号化ピースの暗号化回数すなわち暗号化ピースの転送回数とする。次いで鍵サーバ53は、i=f-1として(ステップS703)、以下のステップS704〜S707をi=0となるまで繰り返す。そして鍵サーバ53は、ステップS701で読み出された公開鍵証明書列pkc_0、・・・、pkc_iとピース検証要求に含まれる乱数列r_0、・・・、r_iと暗号化ピースE(k_i)・・・E(k_0)P及び電子署名列sig_0、・・・、sig_{i-1}に対して、電子署名sig_iが正当な署名であるかどうかを、公開鍵証明書pkc_iに含まれる公開鍵pk_iを用いて関数VERIFYにより検証する(ステップS704)。ステップS704の検証結果が検証成功となったとき(ステップS705:YES)は、暗号化ピースE(k_i)E(k_{i-1})・・・E(k_0)Pを一時対称鍵k_iを用いて復号して、暗号化ピースE(k_{i-1})・・・E(k_0)Pを得る(ステップS706)。次いで鍵サーバ53は、i=i-1とし(ステップS707)、i=0となった場合(ステップS708:YES)は、公開鍵証明書pkc_0と乱数r_0及び暗号化ピースE(k_0)Pに対して、電子署名sig_0が正当な署名であるかどうかを、公開鍵証明書pkc_0に含まれる公開鍵pk_0を用いて関数VERIFYにより検証する(ステップS709)。ステップS709の検証結果が検証成功となったとき(ステップS710:YES)、鍵サーバ53はステップS700で受信したピース検証要求を送信したノード51に対して、検証成功を送信する(ステップS712)。鍵サーバ53は、ステップS704の検証結果が検証失敗となったとき(ステップS705:NO)及び、ステップS709の検証結果が検証失敗となったとき(ステップS710:NO)は、不正ノードリスト格納部538に記録された不正ノードリストに、pkc_{i+1}に含まれているノード51のノードIDを追記し(ステップS711)、データ送信部534が「検証失敗」を当該ノード51に対して送信する(ステップS713)。また、鍵サーバ53は、ステップS707でi=0とならなかった場合(ステップS708:NO)は、ステップS704以降の処理をステップS708でi=0となるまで繰り返す。
【0068】
不正ノードリストは、鍵サーバ53から各ノード50,51に定期的にあるいは不定期に配布されてもよい。また、各ノード50,51が、鍵サーバ53に定期的にあるいは不定期に要求して不正ノードリストを入手しても良い。各ノード50、51は入手した不正ノードリストの情報を元に、暗号化ピースの送受信を一部制限してもよい。例えば、不正ノードリストを持つノード51に他のノードからのピース要求を受信したときに、当該他のノードのノードIDが不正ノードリストに記載されていた場合に、ピース要求を拒否してもよい。また、不正ノードリストを持つノード51が他のノードにピース要求をする際に、当該他のノードのノードIDが不正ノードリストに記載されていた場合には、当該他のノードに対してピース要求を行なわないことにしてもよい。
【0069】
以上のような構成によれば、ある不正ノードが暗号化ピースを不正に改ざんした場合、鍵サーバは暗号化ピースを転送するごとに生成された電子署名を用いて当該暗号化ピースを検証することで当該不正ノードを特定することが可能となる。
【図面の簡単な説明】
【0070】
【図1】第1の実施の形態にかかるデータ配信システムの構成を示す図である。
【図2】同実施の形態にかかる配信開始ノードの機能的構成を例示する図である。
【図3】同実施の形態にかかる配信開始ノード以外のノードの機能的構成を例示する図である。
【図4】同実施の形態にかかる配信開始ノードから配信開始ノード以外のノードに送信される情報を模式的に示す図である。
【図5】同実施の形態にかかるノードから他のノードに送信される情報を模式的に示す図である。
【図6】同実施の形態にかかるノードから他のノードに送信される情報を模式的に示す図である。
【図7】同実施の形態にかかるノードから鍵サーバに送信される情報を模式的に示す図である。
【図8】同実施の形態にかかる鍵サーバからノードに送信される情報を模式的に示す図である。
【図9】ハッシュ値を用いたピース検証方法の一例を示す図である。
【図10】同実施の形態にかかるノードから鍵サーバに送信される情報を模式的に示す図である。
【図11】同実施の形態にかかるノードから鍵サーバに送信される情報を模式的に示す図である。
【図12】同実施の形態にかかる鍵サーバの機能的構成を例示する図である。
【図13】同実施の形態にかかる配信開始ノードであるノードが行う配信処理の手順を示すフローチャートである。
【図14】同実施の形態にかかるノードが配信開始ノード又は他のノードから暗号化ピースを受信する受信処理の手順を示すフローチャートである。
【図15】同実施の形態にかかるノードに受信される情報を模式的に示す図である。
【図16】同実施の形態にかかる配信開始ノード以外のノードが行う配信処理の手順を示すフローチャートである。
【図17】同実施の形態にかかるノードが鍵サーバから復号鍵を取得しこれを用いて暗号化ピースを復号する復号処理の手順を示すフローチャートである。
【図18】同実施の形態にかかるノードが送信する情報を模式的に示す図である。
【図19】同実施の形態にかかるノードが受信する一時対称鍵を模式的に示す図である。
【図20】同実施の形態にかかるノードが鍵サーバにピース検証要求を送信し、ピース検証結果を受信するピース検証要求処理の手順を示すフローチャートである。
【図21】同実施の形態にかかる鍵サーバがノードからの鍵要求に応じて復号鍵を送信する鍵送信処理の手順を示すフローチャートである。
【図22】同実施の形態にかかる鍵サーバがノードからのピース検証要求に応じてピースを検証し、検証結果を送信するピース検証処理の手順を示すフローチャートである。
【図23】同実施の形態にかかるノードから鍵サーバに送信される情報を模式的に示す図である。
【図24】同実施の形態にかかる鍵サーバがノードからのピース検証要求に応じてピースを検証し、検証結果を送信するピース検証処理の手順を示すフローチャートである。
【符号の説明】
【0071】
50,51,51A,51B ノード
53 鍵サーバ
500 固有情報格納部
501 乱数生成部
502 一時対称鍵生成部
503 ピース暗号化部
504 ピース化部
505 データ送信部
506 送信要求受付部
507 電子署名生成部
510 固有情報格納部
511 乱数生成部
512 一時対称鍵生成部
513 ピース暗号化部
514 データ受信部
515 データ送信部
516 送信要求受付部
517 データ格納部
518 送信要求送信部
519 鍵要求送信部
520 ピース復号部
521 電子署名生成部
522 電子署名検証部
523 ピース検証要求送信部
530 秘密鍵格納部
531 データ受信部
532 公開鍵証明書格納部
533 一時対称鍵生成部
534 データ送信部
535 電子署名検証部
536 ピース検証要求受付部
537 ピース復号部
538 不正ノードリスト格納部
NT P2Pネットワーク

【特許請求の範囲】
【請求項1】
データの一部であるピースを送信する通信装置であって、
他の通信装置を識別する第1装置識別情報と前記ピースとを含む第1署名対象情報、および、前記第1署名対象情報に対して生成された第1電子署名を受信する受信手段と、
前記通信装置を識別する第2装置識別情報と、前記通信装置に割り当てられた非公開鍵と、を記憶する記憶手段と、
前記第1署名対象情報と前記第1電子署名と前記記憶手段に記憶された前記第2装置識別情報とを含む第2署名対象情報に対する第2電子署名を、前記記憶手段に記憶された前記非公開鍵を用いて生成する署名生成手段と、
前記第2署名対象情報と前記第2電子署名とを送信する送信手段と、
を備えることを特徴とする通信装置。
【請求項2】
前記受信手段は、前記第1装置識別情報と前記他の通信装置によって暗号化された前記ピースである第1暗号化ピースとを含む前記第1署名対象情報、前記第1電子署名、および、前記他の通信装置が暗号化する際に生成した第1一時情報を受信し、
その生成毎に異なり得る第2一時情報を生成する一時情報生成手段と、
前記第2一時情報を用いて一時対称鍵を生成する鍵生成手段と、
前記一時対称鍵を用いて前記第1暗号化ピースを更に暗号化した第2暗号化ピースを出力する暗号化手段と、をさらに備え、
前記署名生成手段は、前記第1暗号化ピースを前記第2暗号化ピースで置換した前記第1署名対象情報と前記第1電子署名と前記記憶手段に記憶された前記第2装置識別情報とを含む第2署名対象情報に対する第2電子署名を、前記記憶手段に記憶された前記非公開鍵を用いて生成し、
前記送信手段は、前記第2署名対象情報と、前記第2電子署名と、前記第1一時情報と、前記第2一時情報と、を送信すること、
を特徴とする請求項1に記載の通信装置。
【請求項3】
前記第1署名対象情報は、前記第1装置識別情報と前記他の通信装置に割り当てられた公開鍵とを含む公開鍵証明書と、前記第1暗号化ピースとを含むこと、
を特徴とする請求項2に記載の通信装置。
【請求項4】
前記受信手段は、さらに、前記第1電子署名を生成するときに用いられた非公開鍵に対応する公開鍵を受信し、
前記公開鍵と前記第1署名対象情報とを用いて前記第1電子署名を検証する検証手段をさらに備え、
前記署名生成手段は、前記第1電子署名が正しいことが検証されたときに、前記第2署名対象情報に対する前記第2電子署名を、前記記憶手段に記憶された前記非公開鍵を用いて生成すること、
を特徴とする請求項1に記載の通信装置。
【請求項5】
前記受信手段は、前記ピースの送信を仲介した複数の前記他の通信装置それぞれを識別する複数の前記第1装置識別情報と前記ピースとを含む前記第1署名対象情報と、前記ピースを送信するごとに複数の前記他の通信装置のそれぞれが生成した複数の前記第1電子署名と、を受信し、
前記送信手段は、さらに、電子署名を検証可能なサーバ装置に対して、前記第1署名対象情報と、前記第1電子署名とを含む、前記第1電子署名の検証要求を送信し、
前記受信手段は、さらに、前記検証要求に対する応答として前記第1電子署名の検証結果を前記サーバ装置から受信すること、
を特徴とする請求項1に記載の通信装置。
【請求項6】
データの一部であるピースを送信する複数の通信装置と接続されたサーバ装置であって、
前記通信装置は、前記ピースを含む署名対象情報と、前記署名対象情報に対して他の通信装置が生成した電子署名とを含む新たな署名対象情報に対して新たな電子署名を生成し、生成した前記署名対象情報と生成した前記電子署名とを送信し、
前記署名対象情報と、前記署名対象情報に対して生成された前記電子署名とを含む、前記電子署名の検証要求を前記通信装置から受信する受信手段と、
前記検証要求に含まれる前記署名対象情報と、前記検証要求に含まれる前記電子署名を生成した前記通信装置に割り当てられた公開鍵とを用いて前記電子署名を検証する検証手段と、
検証されなかった前記電子署名を含む前記署名対象情報に対する前記電子署名を生成した前記通信装置を、不正な通信装置として検出する検出手段と、
を備えることを特徴とするサーバ装置。
【請求項7】
前記通信装置を識別する装置識別情報と、前記通信装置のそれぞれに割り当てられた前記公開鍵とを対応づけて記憶する記憶手段をさらに備え、
前記受信手段は、前記署名対象情報と、前記電子署名と、前記署名対象情報を送信した複数の前記通信装置の前記装置識別情報と、を対応づけて含む前記検証要求を受信し、
前記検証手段は、前記検証要求に含まれる前記署名対象情報と、前記検証要求に含まれる前記装置識別情報に対応する前記記憶手段の前記公開鍵とを用いて、前記電子署名を検証すること、
を特徴とする請求項6に記載のサーバ装置。
【請求項8】
前記受信手段は、前記署名対象情報と、前記電子署名と、前記署名対象情報を送信した複数の前記通信装置に割り当てられた前記公開鍵と、を対応づけて含む前記検証要求を受信し、
前記検証手段は、前記検証要求に含まれる前記署名対象情報と、前記検証要求に含まれる前記公開鍵とを用いて、前記電子署名を検証すること、
を特徴とする請求項6に記載のサーバ装置。
【請求項9】
前記通信装置のそれぞれに割り当てられた秘密情報と、前記通信装置を識別する装置識別情報とを各々対応付けて記憶する記憶手段をさらに備え、
前記検証要求は、さらに、複数の前記通信装置それぞれが生成した生成毎に異なり得る情報であって、前記ピースを暗号化する暗号鍵を生成するための複数の一時情報を対応づけた前記装置識別情報を含み、
前記署名対象情報は、複数の前記通信装置により前記一時情報を用いて生成された複数の暗号鍵によって、複数の前記通信装置が前記署名対象情報を送信するごとに暗号化されており、
前記検証手段は、前記検証要求に含まれる前記一時情報と、前記検証要求に含まれる前記装置識別情報に対応する前記記憶手段の前記秘密情報とを用いて暗号鍵を生成し、生成した暗号鍵によって前記署名対象情報を復号し、復号した前記署名対象情報と、前記公開鍵とを用いて前記電子署名を検証すること、
を特徴とする請求項6に記載のサーバ装置。
【請求項10】
データの一部であるピースを送信する通信装置を、
他の通信装置を識別する第1装置識別情報と前記ピースとを含む第1署名対象情報、および、前記第1署名対象情報に対して生成された第1電子署名を受信する受信手段と、
前記通信装置を識別する第2装置識別情報と前記通信装置に割り当てられた非公開鍵とを記憶する記憶手段に記憶された前記第2装置識別情報と前記第1署名対象情報と前記第1電子署名とを含む第2署名対象情報に対する第2電子署名を、前記記憶手段に記憶された前記非公開鍵を用いて生成する署名生成手段と、
前記第2署名対象情報と前記第2電子署名とを送信する送信手段と、
として機能させるための通信プログラム。
【請求項11】
配信データの一部であるピースの配信を仲介する通信装置から送信されるデータであって、
前記ピースの配信を仲介した複数の通信装置のそれぞれを識別する装置識別情報と前記ピースとを含む署名対象情報、および、前記署名対象情報に対して複数の前記通信装置それぞれが生成した複数の電子署名を含む、
ことを特徴とするデータ。
【請求項12】
配信データの一部であるピースの配信を仲介する通信装置からサーバ装置へ送信されるデータであって、
前記ピースを含む署名対象情報、前記署名対象情報に対して前記署名対象情報を送信した複数の前記通信装置それぞれによって生成された複数の電子署名、および、前記署名対象情報を送信した複数の前記通信装置を識別する装置識別情報と前記署名対象情報を送信した複数の前記通信装置に割り当てられた公開鍵との少なくとも一方を対応づけた、前記電子署名の検証要求を含む、
ことを特徴とするデータ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2010−141619(P2010−141619A)
【公開日】平成22年6月24日(2010.6.24)
【国際特許分類】
【出願番号】特願2008−316306(P2008−316306)
【出願日】平成20年12月11日(2008.12.11)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】