以下に添付図面を参照して、この発明にかかる通信制御装置の好適な実施形態を詳細に説明する。
GDOI(The Group Domain of Interpretation)は、マルチキャストを用いて、グループメンバの参加と離脱、および、グループ鍵の安全な配布を行うための技術である。GDOIでは、グループの作成、グループの更新、および、グループ鍵の配布を行うことができる。しかし、GDOIでは、グループメンバの更新ごとに、ほとんどすべてのメンバにおいて、階層構造を持つ鍵情報(LKH_DOWNLOAD_ARRAY)が更新される。そのため、1つの通信装置が複数のグループに所属するような場合には、単一の通信装置が複数のLKH_DOWNLOAD_ARRAYを持つことが必要となり、効率的な管理を行うことが困難である。
そこで、本実施形態では、MKB(メディアキーブロック)という技術を用いてグループ操作を行う。MKBを用いることにより、単一のデバイス鍵(LKH_DOWNLOAD_ARRAYに相当する鍵束)によって、複数グループへの所属を効率的に管理することが可能である。
例えば、グループ管理木(詳細は後述)を用いることにより、グループに属する通信装置の範囲を示す範囲情報、および、この範囲情報で示される範囲の通信装置が処理できるMKB(MKBフラグメント)が得られる。なお、MKBを用いなくてもグループに属するかを管理(判定)することは可能である。例えば、グループ管理木から生成される集合情報(詳細は後述)と範囲情報とが得られれば、グループに属するか否かを判定できる。この場合は、MKB(MKBフラグメント)は生成しなくてもよい。
MKBとは、対応するデバイス鍵を用いて処理を行うことで、メディアに記録されたコンテンツを復号するためのメディア鍵を導出可能なデータである。MKBは1以上の要素を含む。典型的なMKBは、1つのメディア鍵を1以上のデバイス鍵でそれぞれ暗号化することで生成される1以上の暗号文(要素)を含む。さらに、MKBは、各暗号文を処理するためのデバイス鍵を特定する情報を含んでも良い。MKBが含む暗号文の個数は、対応するデバイス鍵に依存して決まる。そのため、対応するデバイス鍵によっては、MKBは、非常に多くの暗号文を要素として含む場合がある。
本実施形態では、MKBを処理することで得られるメディア鍵を、グループに属する1以上の通信装置で共有されるグループ鍵として用いる。すなわち、グループに属する通信装置が保持するデバイス鍵で処理することでグループ鍵を導出できるMKBを配布する。このように、グループに属する通信装置にのみグループ鍵を配布できることを用いて、通信装置のグループ管理を実現している。メディア鍵をグループ鍵として用いるため、MKBの代わりにGKB(グループキーブロック)と表現することもできる。
MKBによってグループ管理(操作)を行う場合、あるMKBを処理してグループ鍵を取り出すことができたメンバはグループに所属する(現在所属していなければ、グループに新規参加する)という制御が行われる。また、グループ鍵の取得に失敗したメンバは当該グループに所属しない(現在所属していれば、グループから離脱する)という制御が行われる。
しかし、対象となるメンバの数が非常に大きくなった場合、グループ操作用のMKBのサイズが極めて大きくなる可能性がある。従って、そのままMKBを通信ネットワークに配布した場合、通信負荷が極めて大きくなる可能性がある。
そこで、本実施形態では、ネットワーク負荷を軽減するために、複数の暗号文を要素として含むMKBを分割して送付する。しかし、上記のようなグループ制御方法を前提とする場合、単純に暗号文ごとにMKBを分割送付しても、意図した通りのグループ制御を行うことができない場合がある。例えば、通信装置が分割されたMKBを受信して、かつ、当該MKBからグループ鍵を取得できなかった場合、当該通信装置はグループからの離脱処理を行う。しかし、実際には、当該通信装置が処理してグループ鍵を取得することができるようなMKBが後から到着する可能性があるからである。
この問題を回避するため、MKBによるグループ操作の対象となる通信装置の集合を定める情報を、当該MKBに付す。例えば、対象となる通信装置を識別する装置ID(以下、デバイスIDという)の範囲を、通信装置の集合を定める情報として利用できる。例えば、数値的に連続したデバイスIDが割り振られている場合、第1のデバイスIDと第2のデバイスIDで、第1のデバイスIDと第2のデバイスIDで特定される範囲に属するデバイスIDの集合を表すことができる。この集合には、第1のデバイスID以上、かつ、第2のデバイスID以下であるデバイスIDが属する。規則に従ってデバイスIDが割り振られていれば、上述のように、2つのデバイスIDで範囲を表し、その規則より範囲に含まれるデバイスIDを特定することや、デバイスIDがその範囲に含まれるか否かを判定することができる。通信装置の範囲を定める情報が付されたMKBを受け取った通信装置は、以下の擬似コードに示すような動作を行う。
当該通信装置自身が指定範囲に含まれているか否かチェックする;
if(集合に含まれている){
MKBを処理;
if(グループ鍵取得成功){
if(現在グループに所属){
グループ更新;
}
else{ if(現在グループに所属していない){
グループに参加;
}
}
else{
if(現在グループに所属){
グループ離脱;
}
}
}
当該通信装置自身が指定された集合(範囲)に含まれているか否かチェックする。もし、指定された集合に含まれているならば、当該通信装置が保持しているデバイス鍵によりMKBを処理し、グループ鍵の取得に成功し、かつ、グループに参加しているならば、導出したグループ鍵を用いて、参加しているグループの情報を更新する。グループ鍵の取得に成功し、かつ、グループに参加していないならば、導出したグループ鍵を用いて、グループに参加する。グループ鍵の取得に失敗し、かつ、グループに参加しているならば、グループより離脱する。
このように、本実施形態では、最初に通信装置がグループ操作の対象装置であるか否かをチェックする。そして、自身がグループ操作の対象ではない場合、グループ操作を実行しない。これにより、分割されたMKBによっても、意図しないグループ離脱動作が起きないようにすることができる。
次に、本実施形態で用いるMKBの構造について説明する。図1は、本実施形態で用いるMKBで使用されるグループ管理木の構造の一例を示す図である。図1に示すように、本実施形態では、CS(Complete Subtree)法に従う完全二分木構造のグループ管理木が用いられる。この完全二分木は、例えば対象システムのすべての通信装置をカバーする木(完全二分木Tとする)でもよいし、対象システムのすべての通信装置のうち、一部の通信装置(例えばグループ操作の対象となる通信装置)の集合のみをカバーする木(完全二分木Tの部分木T’とする)であってもよい。以下、図1では完全二分木Tが用いられるものとして説明する。
上述のように、各通信装置は、対象システムで一意なデバイスIDを持つ。完全二分木Tの葉ノードは、それぞれ1つの通信装置に対応する。従って、通信装置をグループで管理することは、葉ノードをグループで管理することに置き換えられる。
葉ノードは、対応する通信装置のデバイスIDと等しいインデックスを持つ。破線の丸で示す葉ノードは、リボーク(グループから離脱)されたノード(リボークノード)を表す。太線は、ルート(根)からリボークノードまでのパス上のエッジを表す。三角形は、リボークされていない葉ノードのみを含む部分木(部分木s)を表す。塗りつぶされたノードは、この部分木sの根ノードを表す。
完全二分木Tの各ノードには、異なる暗号鍵(ノード鍵)が割り当てられるかもしれない。各通信装置は、完全二分木Tの根ノードから対応する葉ノードに至るパス上の各ノードに割り当てられたノード鍵を含むデバイス鍵が予め設定されるかもしれない。
なお、ノード鍵の割り当て、および、デバイス鍵の設定は行わなくてもよい。例えば、上述のようにMKBを用いずにグループを管理する場合は、MKBを生成する必要はないため、ノード鍵の割り当ておよびデバイス鍵の設定は不要となる。
また、各ノードには、少なくともノードを識別する情報(ノードID)が属性として割り当てられる。ノードIDは、例えば、(d(ノードの深さ),b(ビットマップ))で表される。ノードnの深さdは(HT−Hn)で表される。ノードnは、完全二分木Tに含まれる各ノードである。HTは完全部分木Tの高さ、Hnはノードnの高さである。ノードID(d,b)で識別されるノードのインデックスindex(b,d)は、ビットマップbの先頭dビットの値で表される。
ビットマップbは、例えば図1に示すように「0」または「1」を1以上含む値である。図1で示すインデックスは、完全二分木Tの根ノードから葉ノードまでの経路について、左に進んだ場合に0を割り当て、右に進んだ場合に1を割り当てることで得られる。
グループ管理木から生成されるMKBは、例えば以下の要素を含む。iは部分木sのルートノードである。
(ノードiのインデックス,Enc(iのノード鍵,グループ鍵))
図1のグループ管理木の例では、次の4つの要素を含むMKBが生成される。これらは、ノード000、010、10、110にそれぞれ対応する。ただし、Kgはグループ鍵を表し、例えばEnc(k(000),Kg)はKgをk(000)で暗号化したデータを表す。
(000,Enc(k(000)、Kg),(010,Enc(k(010)、Kg),(10,Enc(k(10)、Kg),(110,Enc(k(110)、Kg)
本実施形態では、このような構造のMKBが、それぞれ一部の要素を含む複数のMKB(MKBフラグメント)に分割され、分割されたMKBフラグメントが通信装置に対してマルチキャスト通信またはブロードキャスト通信などにより送信される。
以下、本実施形態の詳細について説明する。図2は、本実施形態にかかる通信システムの構成の一例を示すブロック図である。図2に示すように、本実施形態の通信システムは、通信装置200a〜200fと、通信制御装置100とが、ネットワーク60で接続された構成となっている。ネットワーク60は、インターネットなどのあらゆるネットワーク形態を適用できる。各通信装置200a〜200fは、通信制御装置100と直接接続されている必要はない。
通信制御装置100は、1つに限られるものではなく、2以上の通信制御装置を備えるように構成してもよい。通信装置200a〜200fは同様の構成を備えるため、以下では単に通信装置200という場合がある。通信装置200の個数は6に限られるものではない。
図2に示すように、本実施形態では、通信制御装置100が、各通信装置200に対してグループ操作コマンドを送信する。グループ操作コマンドは、例えば、集合情報、および、範囲情報(例えばデバイスIDの範囲)を含む。グループ操作コマンドが、更新後のグループを識別するグループIDを含んでもよい。
集合情報は、グループに属する(通信装置に対応する)葉ノードのみを含む部分木(例えば図1の部分木s)を所定数含む集合を示す情報である。集合情報は、例えば、集合に含まれる部分木の葉ノードに対応づけられる通信装置がグループ鍵を導出できるように分割されたMKB(MKBフラグメント)を含んでもよい。このように、本実施形態では、MKB全体ではなく、所定数ごとに部分木sを含むように生成される集合情報に対応して分割されたMKBフラグメントを通信装置200に送信する。
範囲情報は、集合情報が示す集合に含まれる各部分木の葉ノードに割り当てられたインデックスの範囲を示す。上述のようにインデックスは対応する通信装置のデバイスIDと等しいため、範囲情報によってグループ操作の対象となる通信装置のデバイスIDの範囲が特定される。集合情報および範囲情報の生成方法の詳細は後述する。
図3は、通信制御装置100の構成例を表すブロック図である。図3に示すように、通信制御装置100は、グループ情報記憶部121と、アドレス記憶部122と、鍵記憶部123と、受付部101と、生成部102と、出力部103と、を備える。
グループ情報記憶部121は、1以上の通信装置200が所属するグループのグループIDと、グループIDで識別されるグループに属する通信装置200を識別するデバイスIDとを含むグループ情報を記憶する。つまり、グループ情報記憶部121は、グループIDと、グループIDで識別されるグループに属する通信装置200のデバイスIDとを対応付けて記憶する。
本実施形態では、グループ情報記憶部121は、予め、1以上のグループIDを記憶しているとするが、グループ情報記憶部121を備えず、外部装置より受け取ったグループ情報に基づき、グループ操作を行うようにしてもよい。
アドレス記憶部122は、1以上の通信装置200が所属するマルチキャストグループを特定する情報(マルチキャストグループID、マルチキャストアドレスなど)と、マルチキャストグループに属する通信装置200のデバイスIDとを対応づけて記憶する。マルチキャストグループは、MKBによるグループ操作の対象となるグループと独立に管理されるグループの一例である。マルチキャストアドレスは、例えば、対応する各デバイスIDの通信装置200に対してマルチキャスト通信で情報を送信するためのアドレスである。マルチキャスト通信を用いない場合(例えばブロードキャスト通信を用いる場合)、アドレス記憶部122を備えないように構成してもよい。
本実施形態では、アドレス記憶部122は、予めマルチキャストグループを特定する情報を記憶しているとするが、外部装置より受け取った情報に基づき、アドレス記憶部122に新たな情報を追加したり、既に記憶されている情報の更新を行ったりするように構成しても良い。
鍵記憶部123は、通信装置200それぞれに割り当てられるデバイス鍵を記憶する。MKBがCS法などにより生成される場合、鍵記憶部123が、木構造のノードに対応づけてデバイス鍵を記憶してもよい。上述のようにMKBを用いずにグループの管理のみを行う場合は、鍵記憶部123は備えなくてもよい。
受付部101は、通信制御装置100で用いる各種情報の入力を受け付ける。例えば、受付部101は、通信装置200などの外部装置から各種情報を受信する。受付部101は、例えば、グループ制御の要求、および、グループ制御の対象を指定する情報などを受信する。グループ制御の要求とは、グループの新規作成、グループの変更(グループに属する通信装置200の変更など)などの要求である。例えば、キーボードなどの操作部(図示せず)を用いてオペレータが入力した、操作対象となるグループのグループIDと、当該グループに入れるべき通信装置200のデバイスIDとを、受付部101が受信するように構成してもよい。なお、外部装置からグループ制御の要求を受信した場合のみでなく、通信制御装置100内でグループ制御の要否を判断し、必要と判断した場合にグループ制御を実行してもよい。
また、受付部101は、処理対象とする完全二分木構造のグループ管理木(全体木である完全二分木Tでもよいし、完全二分木Tの部分木T’であってもよい)、および、グループに属する通信装置200に対応する葉ノードのノードIDの入力を受け付ける。葉ノードは通信装置200のいずれかと対応するため、グループに属する通信装置200のデバイスIDの入力を受け付けてもよい。受付部101は、入力されたデバイスIDの通信装置200に対応する葉ノードのノードIDを得ることができる。受付部101は、完全二分木構造のグループ管理木、ノードID、グループ制御の要求、および、グループ制御の対象を指定する情報(入力情報)を生成部102に送る。
生成部102は、グループ操作に用いる情報を生成する。例えば生成部102は、上述の集合情報と範囲情報とを生成する。生成部102は、完全二分木構造のグループ管理木をトレースし、集合情報を算出しながら範囲情報を生成する。例えば生成部102は、左端の葉ノードおよび右端の葉ノードの一方から他方に向かって、ノードIDで識別される葉ノードのみをそれぞれ含む部分木(グループ管理木の部分木)を所定数(M(自然数))含む集合を示す集合情報を求める処理と、求めた集合に含まれる葉ノードのインデックスの範囲情報を求める処理と、を含むトレース処理を繰り返す。これにより、計算量をO(L)(Lは葉ノードの個数)とすることができる。生成部102による生成処理の詳細は後述する。
出力部103は、集合情報と、範囲情報とを、少なくともグループに属する葉ノードに対応づけられる通信装置200に対して出力する。上述のように、集合情報は、集合に含まれる部分木の葉ノードに対応づけられる通信装置200がグループ鍵を導出可能な鍵情報(MKBフラグメント)を含んでもよい。MKBフラグメントは、例えば上述のように(ノードiのインデックス,Enc(iのノード鍵,グループ鍵))の形式で表される。
例えば、出力部103は、集合情報と範囲情報とを含むグループ操作メッセージを、グループに属する通信装置200が属するマルチキャストグループ宛にマルチキャストで送信する。このようにグループ変更の対象ではない通信装置200にも出力部103の出力が届くことを許容することで、許容しない場合と比較して、出力部103による出力先の決定に要する計算コストを軽減できる。
また、出力部103より、更新前のグループには含まれるが、更新後のグループには含まれない通信装置200が含まれるマルチキャストグループに、上述の情報を送信するようにしてもよい。そのような通信装置200は、マルチキャストグループに属しているが、MKBを正しく処理できないため、更新後のグループから離脱を行う。このように、分割したMKBを用いて、グループの離脱を命じるコマンドを発行することができる。このようなコマンドを発行することで、通信装置200が保持すべき情報を適切に管理することができる。
また、更新後のグループに含まれない通信装置200に、上述のような、離脱を命じるコマンドを送付しなくても良い。これは、更新後のグループに含まれない通信装置200は、更新を命じるコマンドより、更新後のグループ鍵を導出できないため、更新後のグループには参加できないためである。このように構成することで、通信制御装置100が発行すべきコマンドの量を削減できる場合がある。
出力部103は、MKBによるグループ操作の対象となるグループとは独立に管理される通信装置200の集合(グループ)であって、少なくともグループが更新されたすべての通信装置200を含む通信装置200の集合に対して出力情報を出力する。ここで、通信装置200の集合とは、複数の通信装置200からなる集まりであって、グループIDが割り振られているグループとは必ずしも一致しない。通信装置200の集合の例として、あるマルチキャスト通信でデータを受信する通信装置200の集合や、ブロードキャスト通信でデータを受信する通信装置200からなる集合、つまりすべての通信装置200からなる集合、などが挙げられる。例えば、出力部103は、デバイスIDリストが含まれる通信装置200の集合、または、グループに対して、1以上のマルチキャスト通信やブロードキャスト通信により出力情報を送信してもよい。マルチキャスト通信で出力情報を送信する場合、出力部103は、例えばアドレス記憶部122に記憶されたアドレスのうち、配布対象のデバイスIDのデバイスIDに対応づけられた1以上のアドレス(マルチキャストアドレス)を宛先として、出力情報を送信する。
図4は、通信装置200の構成例を表すブロック図である。図4に示すように、通信装置200は、GID記憶部221と、グループ鍵記憶部222と、デバイス鍵記憶部223と、デバイスID記憶部224と、受信部201と、判定部202と、MKB処理部203と、グループ制御部204と、を備える。MKBを用いない場合は、グループ鍵記憶部222およびデバイス鍵記憶部223は備えなくてもよい。
GID記憶部221は、通信装置200が属するグループのグループID(GID)を記憶する。グループ鍵記憶部222は、GID記憶部221が記憶するグループIDで識別されるグループのグループ鍵を記憶する。デバイス鍵記憶部223は、通信装置200のデバイス鍵を記憶する。デバイスID記憶部224は、通信装置200のデバイスIDを記憶する。
受信部201は、通信制御装置100および他の通信装置200などの外部装置から各種情報を受信する。例えば、受信部201は、グループ操作メッセージを通信制御装置100から受信する。受信部201は、マルチキャスト通信およびブロードキャスト通信などにより出力情報を受信する。受信部201は、受信されたメッセージがグループ操作メッセージであるか判定する。グループ操作メッセージでない場合、受信されたメッセージは、当該メッセージを処理すべき他のモジュール(図示せず)に渡されて処理される。メッセージがグループ操作メッセージである場合、メッセージのデータは判定部202に送られる。
判定部202は、グループ操作メッセージに含まれる範囲情報に、デバイスID記憶部224に記憶されたデバイスIDが含まれるか否か判定する。含まれない場合、当該通信装置200は受信したグループ操作メッセージの対象機器ではないので、当該グループ操作メッセージに対する動作を中止する。含まれる場合は、当該通信装置200はグループ操作メッセージの対象であるので、グループ操作メッセージはMKB処理部203に渡される。
MKB処理部203は、範囲情報にデバイスID記憶部224に記憶されたデバイスIDが含まれると判定された場合に、グループ操作メッセージに含まれる集合情報(MKBフラグメント)と、デバイス鍵記憶部223に記憶されたデバイス鍵とからグループ鍵を生成するMKB処理を実行する。
例えば上述のようにMKBフラグメントが(ノードiのインデックス,Enc(iのノード鍵,グループ鍵))で表される場合、MKB処理部203は、Dec(ノードiのノード鍵、MKBフラグメント)によりグループ鍵を生成する。
MKB処理の結果、グループ鍵が得られた場合、当該通信装置200はGIDに示されるグループに所属することを意味する。MKB処理部203は、GIDと、取得したグループ鍵と、をグループ制御部204に送る。
なお、グループに所属するかの判定方法はこれに限られるものではない。例えばMKBフラグメントを含まない集合情報を用いる場合であれば、通信装置200のデバイスIDのビットマップとプレフィックス上位dビットが一致するノードインデックス(d、b)が集合情報に含まれていればグループに所属すると判定してもよい。
グループ制御部204は、GIDをGID記憶部221に格納し、グループ鍵をグループ鍵記憶部222に格納する。既にGIDが記憶されている場合は、グループ制御部204は、グループ操作メッセージ内のGIDで、GID記憶部221に記憶されているGIDを更新する。
一方、MKB処理の結果、グループ鍵が得られなかった場合は、当該通信装置200はGIDに示されるグループに所属しないことを意味する。従って、所属している場合は離脱する必要がある。このため、MKB処理部203は、GIDと、グループ鍵が取得できなかった旨の通知と、をグループ制御部204に送る。
グループ制御部204は、GID記憶部221とグループ鍵記憶部222とを空にする。GIDまたはグループ鍵が既に格納されている場合は、グループ制御部204はそれらを消去する。
なお、上述の各記憶部は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
また、通信制御装置100の受付部101、生成部102、および、出力部103、並びに、通信装置200の受信部201、判定部202、MKB処理部203、および、グループ制御部204は、例えば、CPU(Central Processing Unit)などの処理装置にプログラムを実行させること、すなわち、ソフトウェアにより実現してもよいし、IC(Integrated Circuit)などのハードウェアにより実現してもよいし、ソフトウェアおよびハードウェアを併用して実現してもよい。
次に、本実施形態にかかる通信制御装置100による通信制御処理について図5を用いて説明する。図5は、本実施形態における通信制御処理の一例を示すフローチャートである。
受付部101は、完全二分木T(または完全二分木Tの部分木T’)と、グループに属する通信装置200に対応する葉ノードのノードIDとを受け付ける(ステップS101)。グループに属する通信装置200のデバイスIDを受け付けて、受け付けたデバイスIDの通信装置200に対応する葉ノードのノードIDを求めてもよい。生成部102は、受け付けた完全二分木T(または部分木T’)とノードIDとをもとに、集合情報と範囲情報とを生成する生成処理を実行する(ステップS102)。生成部102は、集合情報と範囲情報とを含むグループ操作メッセージを生成する。出力部103は、グループ操作メッセージを出力する(ステップS103)。
次に、ステップS102の生成処理の詳細について説明する。生成処理では、完全二分木Tの部分木T’の根ノードRから左優先または右優先のいずれか一方で再帰的にトレース処理を実行する。左優先は、部分木T’の左端の葉ノードから右端の葉ノードに向けて順に集合情報および範囲情報を生成することを意味する。右優先は、部分木T’の右端の葉ノードから左端の葉ノードに向けて順に集合情報および範囲情報を生成することを意味する。生成部103は、左優先および右優先のいずれによって集合情報等を生成してもよい。
生成処理は、部分木T’の高々M個のノードのノードIDのリストSと、リストSに対応する葉ノードのインデックスの下限値minrおよびインデックスの上限値maxrの組(S,minr,maxr)のリストOと、を出力する。リストSが集合情報に相当し、minrおよびmaxrが範囲情報に相当する。なお、以下ではリストSにノードnのノードIDを追加することを、単にリストSにノードnを追加すると表現する場合がある。
以下では、ノードnを根ノードとする部分木の左端および右端の葉ノードのノードインデックスを返す関数をそれぞれLML(n)およびRML(n)とする。部分木T’の葉ノードの集合を集合Lとする。集合Lのうちグループに属する葉ノードの集合を集合Gとする。
生成処理は、例えば以下のステップを含む:
(S1)O=S=NULL、minr=LML(R)、maxr=RML(R)に初期化する。
(S2)現在トレース中のノードCに対し、ノードCが集合Lに含まれる場合、ノードCが集合Gに含まれる場合にはノードCをリストSに追加するとともにノードCを「CS該当」とマークする。また、ノードCが集合Gに含まれない場合にはノードCを「CS非該当」とマークする。
(S3)ノードCが集合Lに含まれず、かつ、ノードCの左右両方の子ノードが「CS非該当」とマークされた場合には、ノードCを「非CS該当」とマークする。
(S4)ノードCが集合Lに含まれず、かつ、ノードCの左右両方の子ノードが「CS該当」とマークされた場合には、ノードCを「CS該当」とマークするともに、左右両方の子ノードをリストSから削除し、ノードCをリストSに追加する。
(S5)ノードCが集合Lに含まれず、かつ、ノードCの一方の子ノードが「CS該当」で他方の子ノードが「CS非該当」とマークされた場合には、|S|>M(リストSの要素数がMより大)の場合には、リストSの先頭からM個のノードのリストをS[0:M]、左優先の場合maxr=RML(S[M−1])、右優先の場合minr=LML(S[M−1])とする。そして、(S[0:M],minr,maxr)を集合Oに追加し、S[0:M]をリストSから削除し、左優先の場合minr=maxr+1、右優先の場合maxr=minr−1に設定する。
(S6)ノードCが部分木T’の根ノードRの場合、左優先の場合maxr=RML(R)、右優先の場合minr=LML(R)として、(S,minr,maxr)を集合Oに追加する。
「CS該当」および「CS非該当」のマークは、現在トレース中のノードに対する処理を行う関数の返り値として実現してもよいし、各ノードに付随する属性の値として保持することにより実現してもよい。属性の値として保持する場合、「CS該当」および「CS非該当」に対応する値に加え、CS該当かどうかが未確定であることを示す「CS未定」に対応する値のいずれかを保持してもよい。
葉ノードのインデックスが上述のようにindex(b,d)で表される場合、ノードID(d,b)で識別されるノードnに対し、LML(n)=index(b,d)×2^(HT−d)、RML(n)=(index(b,d)+1)×2^(HT−d)−1で表される。例えば、T=T’のとき、T’の左端葉ノードのノードインデックスはLML(R)=0×2^(HT−0)=0であり、T’の右端葉ノードのノードインデックスはRML(R)=(0+1)×2^HT−1=2^HT−1である。
生成処理は、以下の情報を入力として使用する。
I:グループメンバに含まれる通信装置200のデバイスIDのリスト
T’:全体木である完全二分木Tの部分木(T’の根ノードR)
M:MKBフラグメントサイズ(MKBフラグメントに含まれるノード数)
また、生成処理は、(S,minr、maxr)のリストOを出力する。ここで、
S:MKBフラグメントに含まれるノードのリスト
minr:リストSに対する葉ノードのノードインデックスの下限値
maxr:リストSに対する葉ノードのノードインデックスの上限値
である。
図6は、生成処理の一例を示すフローチャートである。生成部102は、生成処理で使用する各パラメータを初期化する(ステップS201)。例えば、生成部102は、リストSおよびリストOを空(NULL)にし、minr=LML(R),maxr=RML(R)に設定する。
生成部102は、根ノードRに対しCheck()関数を実行する(ステップS202)。Check関数は、指定されたノードの子ノードに対して再帰的に実行され、結果としてリストOが出力される。
図7は、左優先の場合のCheck()関数の一例を示すフローチャートである。図7は、あるノードnに対する左優先のCheck()関数が呼ばれた場合の動作を示す。
まずノードnが葉ノードであるか否かが判定される(ステップS301)。葉ノードであれば(ステップS301:Yes)、ノードnのノードIDがリストIに含まれるか否かが判定される(ステップS302)。含まれる場合(ステップS302:Yes)、リストSにノードnが追加される(ステップS303)。またrvに1が設定される(ステップS304)。rvは、「CS該当」であるか「CS非該当」であるかを設定するパラメータである。図7の例では、rv=1が「CS該当」、rv=0が「CS非該当」を意味する。ノードnのノードIDがリストIに含まれない場合(ステップS302:No)、rvに0が設定される(ステップS305)。
ステップS301で、ノードnが葉ノードでないと判定された場合(ステップS301:No)、lval=Check(ノードnの左の子ノード)、rval=Check(ノードnの右の子ノード)、rv=0が設定される(ステップS306)。
次に、lval×rvalが0より大きいか否かが判定される(ステップS307)。これは、左右の子ノードの両方が「CS該当」であるかを判定することに相当する。大きい場合(ステップS307:Yes)、リストSからノードnの左の子ノードおよび右の子ノードが削除され、リストSにノードnが追加され、rvに1が設定される(ステップS308)。
lval×rvalが0より大きくない場合、すなわち、0に一致する場合(ステップS307:No)、(lval+rval)が0より大きいか否かが判定される(ステップS309)。これは、左右の子ノードのいずれか一方が「CS該当」であることを判定することに相当する。
(lval+rval)が0より大きい場合(ステップS309:Yes)、リストSの要素数がMを超えたか否かが判定される(ステップS310)。リストSの要素数がMを超えた場合(ステップS310:Yes)、maxr=RML(S[M−1])とされ、リストOに(S[0:M],minr,maxr)が追加され、minr=maxr+1とされる(ステップS311)。
ステップS308の後、ステップS311の後、(lval+rval)が0より大きくないと判定された場合(ステップS309:No)、または、リストSの要素数がMを超えていない場合(ステップS310:No)、ノードnが根ノードであるか否かが判定される(ステップS312)。
ノードnが根ノードであれば(ステップS312:Yes)、maxr=RML(R)とされ、リストOに(S,minr,maxr)が追加される(ステップS313)。ステップS304の後、ステップS305の後、ステップS313の後、または、ノードnが根ノードでない場合(ステップS312:No)、rvの値を返して(ステップS314)、Check関数が終了する。
図8は、右優先の場合のCheck()関数の一例を示すフローチャートである。右優先の場合は、ステップS411およびステップS413以外は左優先の場合のCheck()関数(図7)と同様であるため説明を省略する。
ステップS411では、minr=LML(S[M−1])とされ、リストOに(S[0:M],minr,maxr)が追加され、maxr=minr−1とされる(ステップS411)。ステップS413では、minr=LML(R)とされ、リストOに(S,minr,maxr)が追加される(ステップS413)。
図9は、左優先の場合の生成処理を表す擬似コードの例を示す図である。図9のInput I,T,RおよびMは、上記のリストI、部分木T’、部分木T’の根ノードR、MKBフラグメントサイズMに対応する。また、Output Oは、上記のリストOに対応する。また、rightmost_leaf_number(n)は、上記のRML(n)に対応する。
図10は、生成処理の処理結果の一例を示す図である。図10は、HT=3(葉ノード数8)の全体木である図1の完全部分木Tに対し、T’=Tかつ左優先の場合の生成処理の処理結果の例である。
図10の例では、以下のようなリストIが入力パラメータとして与えられる。Iの各要素はデバイスIDを2進表記したものである。
I=(000,010,100,101,110)
M=2のとき、生成処理の出力であるリストOは以下の2つのリストSを含む。
S=[(3,000),(3,010)],(minr,maxr)=(0,2)
S=[(2,10),(3,110)],(minr,maxr)=(3,7)
M=3のとき、生成処理の出力であるリストOは以下の2つのリストSを含む。
S=[(3,000),(3,010),(2,10)],(minr,maxr)=(0,5)
S=[(3,110)],(minr,maxr)=(6,7)
集合情報にMKBフラグメントを含める場合は、例えば、リストSに含まれるノードごとにEnc(iのノード鍵,グループ鍵)を算出し、当該ノードのインデックスと対応づけて出力すればよい。
以上のように、本実施形態によれば、グループに属する葉ノードのみを含む部分木を求めながら、MKBの分割(M個ずつの部分木のリストSの生成)を行うことが可能となる。このため、例えばすべての部分木が求められるまで待つことなく、生成されたMKBフラグメントを送信することができる。その結果、例えばすべての部分木を求めてからMKBをMKBフラグメントに分割する方法(後述の変形例1など)と比較して、計算量、および、MKBフラグメントの送信遅延を低減することができる。
次に、本実施形態にかかる通信装置200によるグループ制御処理について図11を用いて説明する。図11は、本実施形態におけるグループ制御処理の一例を示すフローチャートである。
受信部201は、通信制御装置100などの外部装置からメッセージを受信する(ステップS501)。受信部201は、受信したメッセージがグループ操作メッセージであるか否かを判定する(ステップS502)。グループ操作メッセージでない場合(ステップS502:No)、グループ制御処理を終了する。なお、上述のようにグループ操作メッセージ以外のメッセージは、当該メッセージを処理すべきモジュールに渡されて適切に処理される。
グループ操作メッセージである場合(ステップS502:Yes)、判定部202は、グループ操作メッセージ内の範囲情報が示す範囲に、デバイスID記憶部224に記憶されたデバイスIDが含まれるか否かを判定する(ステップS503)。
範囲情報が示す範囲にデバイスIDが含まれない場合(ステップS503:No)、グループ操作の対象外であるため、グループ制御処理を終了する。範囲情報が示す範囲にデバイスIDが含まれる場合(ステップS503:Yes)、MKB処理部203は、グループ操作メッセージ内のMKBフラグメントを処理する(ステップS504)。
MKB処理部203は、MKB(MKBフラグメント)が正しく処理されたか否かを判定する(ステップS505)。正しく処理された場合(ステップS505:Yes)、グループ制御部204は、グループ操作メッセージ内のGIDをGID記憶部221に記憶するとともに、MKB処理により得られたグループ鍵をグループ鍵記憶部222に記憶する(ステップS506)。正しく処理されなかった場合(ステップS505:No)、グループ制御部204は、グループ操作メッセージ内のGIDをGID記憶部221から削除するとともに、グループ鍵をグループ鍵記憶部222から削除する(ステップS507)。
このように、本実施形態にかかる通信制御装置では、スケーラビリティを確保しながら動的なグループ管理を実現することができる。また、グループ管理のために、MKB全体ではなく、MKBを分割した情報(MKBフラグメント)を送信するため、通信負荷を軽減することができる。このとき、グループ操作の対象となる通信装置の範囲を定める情報とともにMKBフラグメントを送信するため、意図しないグループ操作が行われることを回避できる。
(変形例1)
上記実施形態では、グループに属する葉ノードのみを含む部分木を求めながら、MKBを分割し、分割したMKB(MKBフラグメント)の範囲情報を生成した。変形例1では、先にグループに属する葉ノードのみを含むソートされた部分木のリストを求め、その後、部分木のリストを分割してMKBフラグメントを生成するとともに、MKBフラグメントの範囲情報を生成する。
図12は、変形例1の生成処理の一例を示すフローチャートである。生成部102は、左端の葉ノードおよび右端の葉ノードの一方から他方に向かって、ノードIDで識別される葉ノードのみをそれぞれ含む部分木を求める処理を繰り返して1以上の部分木を含むソートされた部分木のリストを求める(ステップS601)。ソートとは、インデックスの昇順または降順で並べることを意味する。例えば左優先の場合は、部分木のルートノードのインデックスRの左端または右端の葉ノードのノードインデックス(LML(R)またはRML(R))が昇順となるように各部分木がソートされる。右優先の場合は、部分木のルートノードの左端または右端の葉ノードのインデックス(LML(R)またはRML(R))が降順となるように各部分木がソートされる。
その後、生成部102は、求めた部分木のリストを、部分木をそれぞれ所定数(M(自然数))含む集合に分割し、集合それぞれに含まれる部分木の葉ノードに割り当てられたインデックスの範囲情報を求める(ステップS602)。
変形例1では、先に部分木のリストを求めた後に、M個の部分木を含む集合(部分木のリスト)をさらに求める。このため、計算量はO(L+L/M)(Lは葉ノードの個数)となる。
図13は、ステップS601のリスト生成処理の一例を示すフローチャートである。生成部102は、使用する各パラメータを初期化する(ステップS701)。例えば、生成部102は、リストSおよびリストOを空(NULL)に設定する。生成部102は、根ノードRに対しCheck()関数を実行する(ステップS702)。変形例1のCheck関数は、指定されたノードの子ノードに対して再帰的に実行され、結果としてリストSが出力される。
図14は、左優先の場合の変形例1のCheck()関数の一例を示すフローチャートである。図14は、あるノードnに対する左優先のCheck()関数が呼ばれた場合の動作を示す。
ステップS801からステップS807は、図7のステップS301からステップS307と同様であるため説明を省略する。
ステップS807でlval×rvalが0より大きいと判定された場合(ステップS807:Yes)、リストSからノードnの左の子ノードおよび右の子ノードが削除され、リストSにノードnが追加され、rvに1が設定される(ステップS808)。
lval×rvalが0より大きくない場合(ステップS807:No)、ステップS804の後、ステップS805の後、または、ステップS808の後、rvの値を返して(ステップS809)、Check関数が終了する。
次に、ステップS602の範囲情報算出処理の一例を説明する。範囲情報算出処理では、リスト生成処理(ステップS601)で求められたリストSを要素数MごとのリストFに分割し、リストFごとにリストFに含まれる部分木の葉ノードのインデックスの下限値minrおよびインデックスの上限値maxrの組(minr,maxr)を算出する。そして、リストF、minr、maxrの組のリストが出力される。この例では、リストFが集合情報に相当する。
i番目(1≦i≦N,Nは分割数,N=ceiling(|S|/M))のリストFのminr、maxrは以下のように算出される。
1番目のリストFのminr=0
i番目のリストFのminr=(i−1)番目のリストFのmaxr+1(i>1)
i番目のリストFのmaxr=i番目のリストFの最後の要素(部分木)の右端葉ノードのインデックス (i<N)
N番目のリストFのmaxr=T’の右端葉ノードのインデックス
図15は、左優先の場合の変形例1の生成処理を表す擬似コードの例を示す図である。変形例の場合も入力(Input I,T,R,M)および出力(Output O)は、図9と同様である。図15のfragment(S)が、範囲情報算出処理に相当する。
(変形例2)
新規の通信装置200(葉ノード)がグループに追加された場合に、生成部102が、追加後のグループに属する葉ノードのノードIDを用いて、生成処理を再度実行してもよい。また、グループから通信装置200(葉ノード)が離脱した場合に、生成部102が、削除後のグループに属する葉ノードのノードIDを用いて、生成処理を再度実行してもよい。これにより、スケーラビリティを確保しながら動的なグループ管理を実現できる。
次に、本実施形態にかかる通信制御装置のハードウェア構成について図16を用いて説明する。図16は、本実施形態にかかる通信制御装置のハードウェア構成を示す説明図である。
本実施形態にかかる通信制御装置は、CPU(Central Processing Unit)51などの制御装置と、ROM(Read Only Memory)52やRAM(Random Access Memory)53などの記憶装置と、ネットワークに接続して通信を行う通信I/F54と、各部を接続するバス61を備えている。
本実施形態にかかる装置(通信制御装置、通信装置)で実行されるプログラムは、ROM52等に予め組み込まれて提供される。
本実施形態にかかる装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施形態にかかる装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施形態にかかる装置で実行されるプログラムは、コンピュータを上述した各部として機能させうる。このコンピュータは、CPU51がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。