以下、本発明の実施の形態を図面を参照して説明する。
実施の形態1.
図1は、本発明による暗号通信システムの第1の実施の形態を示すブロック図である。第1の実施の形態の暗号通信システムは、認証サーバ4と、グループ管理サーバ(鍵提供装置)5と、プログラム制御により動作する計算機(情報処理装置)2−1〜2−4とを備える。認証サーバ4、グループ管理サーバ5、および各計算機2−1〜2−4は、通信ネットワーク(以下、単にネットワークと記す。)1に接続される。各計算機2−1〜2−4は、アドホックにネットワーク1に接続される。すなわち、各計算機は、他の計算機と通信を行うときに一時的にネットワークに接続され、他の計算機との通信が終了した後にはネットワーク1との接続を断とする。図1では、4台の計算機2−1〜2−4を例示したが、計算機の台数は特に限定されない。
ネットワーク1に接続される計算機2−1〜2−4のうちの少なくとも一部あるいは全部は、同一のグループを形成する。グループを形成しない(すなわち、グループに属さない)計算機がネットワーク1に接続されていてもよい。ただし、グループに属さない計算機であっても、後述する鍵情報共有部と、鍵情報解析部とを備え、他の計算機との間で鍵情報を共有する。
なお、複数の情報処理装置(計算機)それぞれが共通の情報を保持することも、「共有」に該当するものとする。従って、計算機同士が鍵情報を送受信して、各計算機それぞれが鍵情報を保持することも鍵情報の共有に該当する。
各計算機2−1〜2−4は、それぞれの計算機自身のみが保持するように定められた秘密鍵を保持する。計算機2−1は、秘密鍵Apを保持する。同様に、計算機2−2〜2−4は、それぞれ、秘密鍵Bp、秘密鍵Cp、秘密鍵Dpを保持する。また、同様に、グループ管理サーバ5は、グループ管理サーバ5のみが保持するように定められた秘密鍵αpを保持する。これらの各秘密鍵Ap,Bp,Cp,Dp,αpは、公開鍵と対になって、暗号通信を行うときに用いられる。各計算機2−1〜2−4およびグループ管理サーバ5が保持する各秘密鍵Ap,Bp,Cp,Dp,αpに対応する公開鍵をそれぞれAu,Bu,Cu,Du,αuとする。
各計算機2−1〜2−4は、各計算機の秘密鍵の他に、グループ管理サーバ5が保持する秘密鍵αpに対応する公開鍵αuも保持する。
認証サーバ4は、各計算機2−1〜2−4やグループ管理サーバ5を認証するためのCA(Certificate Authority )であり、各計算機2−1〜2−4およびグループ管理サーバ5の公開鍵Au,Bu,Cu,Du,αuを保持する。これらの公開鍵は、公開鍵証明書という形態でもよい。
グループ管理サーバ5は、秘密鍵αpの他に、グループを形成する各計算機(すなわち、グループに属する各計算機)同士で送受信する通信データの暗号化および復号に用いる共有暗号鍵(グループ鍵)を保持する。図1では、共有暗号鍵g1を示しているが、グループ管理サーバ5は、共有暗号鍵を更新して提供してもよい。共有暗号鍵の更新タイミングは特に限定されないが、例えば、グループに変更があった場合、すなわちグループに計算機が追加されて登録された場合やグループに属する計算機として登録されていた計算機がグループから除外された場合等に共有暗号鍵を更新すればよい。ここで、グループに属する計算機の登録とは、後述のステップS1の処理で示すように、グループに属する各計算機を、他の計算機と区別できる状態でグループ管理サーバが記憶することを意味する。以下の説明では、グループ管理サーバ5が計算機に共有暗号鍵g1を提供する場合を例にして説明する。また、グループ管理サーバ5は、セキュリティ性能向上の観点から、共有暗号鍵を暗号化するためのKEK(Key Encryption Key:鍵暗号化鍵)を保持して、KEKを共有暗号鍵g1の共有に利用してもよい。ただし、図1ではKEKを省略している。さらに、グループ管理サーバ5は、各計算機の公開鍵Au,Bu,Cu,Duを取得して(例えば、ネットワーク1を介して認証サーバ4から受信して)、保持する。なお、各計算機2−1〜2−4がそれぞれ公開鍵を保持し、グループ管理サーバ5が各計算機2−1〜2−4からそれぞれ公開鍵を受信して保持してもよい。
また、グループ管理サーバ5は、各計算機を識別可能な識別情報を、各計算機毎に記憶する。以下、各計算機を識別可能な識別情報をピアIDと記す。例えば、各計算機の公開鍵証明書のIDをピアIDとしてもよい。また、例えば、各計算機の公開鍵と同一のデータをピアIDとしてもよい。また、各計算機に対して個別にネットワーク内におけるIDを割り当てている場合には、そのIDをピアIDとしてもよい。ピアIDは、各計算機を識別することができる情報であれば、特に限定されない。
図2は、グループ管理サーバの構成例を示すブロック図である。グループ管理サーバ5は、制御部31と、記憶装置32と、ネットワークインタフェース部33と、入力部34とを備える。制御部31は、記憶装置32が記憶する鍵提供プログラムに従って動作する。記憶装置32は、鍵提供プログラムの他に、秘密鍵αp、共有暗号鍵(グループ鍵)g1、各計算機2−1〜2−4のピアIDを記憶している。また、図示を省略しているが、記憶装置32は、認証サーバ4(各計算機でもよい。)から受信した各計算機の公開鍵Au,Bu,Cu,Duを、ピアIDと対応付けて記憶する。ネットワークインタフェース部33は、ネットワーク1とのインタフェースである。入力部34は、例えば、キーボードやマウス等の入力デバイスであるが、情報を入力可能な装置であれば、入力部34の態様は限定されない。入力部34には、グループを形成する各計算機の情報が入力される。
また、後述の鍵情報を生成する態様として、グループに属する各計算機の鍵(公開鍵でも共通鍵でもよいが、本実施の形態においては公開鍵)で共有暗号鍵(グループ鍵)を暗号化する態様や、KEKで共有暗号鍵(グループ鍵)を暗号化する態様がある。KEKで共有暗号鍵を暗号化する場合には、記憶装置32は、共有暗号鍵を暗号化するためのKEKも記憶する。
グループ管理サーバ5の制御部31は、各計算機の公開鍵を取得する。また、制御部31は、共有暗号鍵g1をグループに属する各計算機の鍵(公開鍵でも共通鍵でもよいが、本実施の形態においては公開鍵)で暗号化したデータ、もしくは共有暗号鍵g1をKEKで暗号化したデータと、ピアIDとを含む情報(以下、鍵情報と記す。)を生成する。鍵情報については、図5を参照して後述する。グループ管理サーバ5の制御部31は、ネットワーク1に接続しているいずれか1台の計算機に鍵情報を送信すればよい。なお、この鍵情報を受信した計算機は、ネットワーク1に接続されている全計算機(グループに属しているか否かを問わない。)との間で鍵情報を共有する。
次に、計算機(情報処理装置)について説明する。ここでは、計算機2−1を例にして説明するが、他の計算機2−2〜2−4についても同様である。計算機2−1は、鍵情報共有部7−1と、鍵情報解析部8−1とを備える。
鍵情報共有部7−1は、グループ管理サーバ5から鍵情報を受信すると、その鍵情報を他の各計算機の鍵情報共有部7−2〜7−4との間で共有する。例えば、鍵情報共有部7−1は、グループ管理サーバ5から受信した鍵情報を、他の各計算機の鍵情報共有部7−2〜7−4に送信してもよい。この場合、鍵情報共有部7−1は、ブロードキャスト送信によって、他の各計算機の鍵情報共有部7−2〜7−4に鍵情報を送信してもよい。あるいは、鍵情報共有部が、グループ管理サーバ5から受信した鍵情報のコピーを作成してコピーを他の1台の計算機に送信し、その後、鍵情報(鍵情報のコピー)を受信した計算機の鍵情報共有部が鍵情報のコピーを作成してそのコピーを他の1台の計算機に送信するという動作を繰り返してもよい(すなわち、各計算機の鍵情報共有部がバケツリレー的に鍵情報を転送して、各計算機が鍵情報を保持してもよい。)また、KaZaA 、Gnutellaなどのピアツーピアのファイル共有システムを利用して、鍵情報を他の各計算機の鍵情報共有部と共有してもよい。また、DHT(Distributed Hash Table)によって鍵情報を他の各計算機の鍵情報共有部と共有してもよい。ここでは、鍵情報共有部7−1を例にして説明したが、他の計算機の鍵情報共有部7−2〜7−4についても同様である。
鍵情報解析部8−1は、鍵情報に基づいて、自装置(本例では、計算機2−1)がグループに属している計算機であるか否かを判定する。そして、自装置がグループに属している計算機であると判定した場合、鍵情報および自装置が保持している秘密鍵(本例では、秘密鍵Ap)を用いて、共有暗号鍵g1を復号する。この復号処理については後述する。ここでは、鍵情報解析部8−1を例にして説明したが、他の計算機の鍵情報解析部8−2〜8−4についても同様である。
図3は、計算機(情報処理装置)の構成例を示すブロック図である。ここでは、計算機2−1を例にして説明するが、他の計算機についても同様である。計算機2−1は、制御部41と、記憶装置42と、ネットワークインタフェース部43とを備える。制御部41は、記憶装置42が記憶する情報処理プログラムに従って、鍵情報共有部および鍵情報解析部としての動作を行う。すなわち、図1に示した鍵情報共有部および鍵情報解析部は、情報処理プログラムに従って動作する制御部41によって実現される。また、記憶装置42は、情報処理プログラムの他に、自装置の秘密鍵およびグループ管理サーバ5の公開鍵を記憶する。ネットワークインタフェース部43は、ネットワーク1とのインタフェースである。
次に、動作について説明する。
図4は、グループ管理サーバから計算機に共有暗号鍵を提供するときの処理経過の例を示すフローチャートである。まず、グループ管理サーバ5は、グループ管理者からの入力に基づき、グループに属する各計算機を選定する(ステップS1)。換言すれば、グループに属する各計算機を、他の計算機と区別できる状態で記憶する。例えば、ステップS1では、グループ管理者から、入力部34を介して、グループに属する各計算機のピアIDが入力される。そして、グループ管理サーバ5の制御部31は、入力された各ピアIDを記憶装置32に記憶させることにより、グループに属する各計算機を、他の計算機と区別できる状態にすればよい。あるいは、各ピアが自らの公開鍵証明書をグループ管理サーバに送付することによって申請し、その証明書内のピアIDを記憶することによって、他の計算機と区別できる状態にしてもよい。ここでは、ステップS1において、入力部34を介して、グループに属する各計算機のピアIDが入力され、制御部31がそのピアIDを記憶装置32に記憶(登録)させるものとする。以下の説明において、グループに属する各計算機(グループを形成する各計算機)をグループメンバと記すことがある。
続いて、グループ管理サーバ5の制御部31は、グループメンバの公開鍵を取得する(ステップS2)。例えば、ステップS1で、グループ管理者からの入力に基づき、計算機2−1〜2−4が同一グループのグループメンバであると選定したとする。このとき、グループ管理サーバ5の制御部31は、認証サーバ4に各グループメンバの公開鍵Au,Bu,Cu,Duを要求し、認証サーバ4が予め記憶している公開鍵Au,Bu,Cu,Duを認証サーバ4から受信してもよい。あるいは、個々の計算機2−1〜2−4が予め自装置の公開鍵を記憶装置42(図3参照。)記憶しておき、グループ管理サーバ5の制御部31が各計算機2−1〜2−4に対して公開鍵を要求して、各計算機2−1〜2−4から公開鍵を受信してもよい。グループ管理サーバ5の制御部31は、ステップS2において受信した各公開鍵Au,Bu,Cu,Duを、各計算機のピアIDと対応付けて記憶装置32に記憶させる。
また、例えば、ステップS1において、計算機2−2,2−4の2台の計算機をグループメンバとして選定したならば、制御部31は、ステップS2で、その2台の公開鍵をグループ管理サーバ5(あるいは計算機2−2,2−4)から取得すればよい。
次に、グループ管理サーバ5の制御部31は、グループメンバのピアIDと、共有暗号鍵g1を暗号化したデータとを含む鍵情報を生成する(ステップS3)。既に説明したように、鍵情報を生成する態様として、共有暗号鍵をグループに属する各計算機の鍵で暗号化する態様や、共有暗号鍵をKEKで暗号化する態様がある。ここでは、共有暗号鍵をKEKで暗号化する場合を例にして説明する。図5は、鍵情報の例を示す説明図である。図5は、計算機2−2,2−4の2台の計算機がグループメンバである場合の鍵情報の例を示している。また、ここでは、計算機2−1,2−4のピアIDをそれぞれ“2 ”、“4 ”とする。
また、図5は、鍵情報をXML(extensible markup language)で記述した場合の例を示している。図5に示す例では、key タグの間に、計算機に提供(送信)した鍵情報のバージョンを示す各バージョン情報が記述される。個々のバージョン情報は、version タグの間に記述される。図5に示す鍵情報は、最初にグループが形成されたときのバージョン情報のみを示していて、そのバージョン情報に対して“1 ”という情報を付している(図5に示す2行目の記載を参照。)。以降、グループメンバに変更があった場合、すなわちグループに計算機が追加されてその計算機のピアIDが追加登録(追加記憶)された場合や、グループに属する計算機としてピアIDが登録(記憶)されていた計算機がグループから除外されてそのピアIDが削除された場合に、制御部31は、共有暗号鍵を更新し、2番目以降のバージョン情報(<version=2>...</version>、<version=3>...</version>等のversion タグとともに記述される情報)を追記していく。各バージョン情報では、version タグとともに、バージョン情報の順番を示す数値(“1 ”、“2 ”、“3 ”、・・・)が記述される。制御部31は、共有暗号鍵を更新したときには、更新した共有暗号鍵を暗号化したデータの記述を含むバージョン情報を追記する。ここでは、グループメンバ変更時に共有暗号鍵を更新する場合を示したが、既に説明したように、共有暗号鍵の更新タイミングは特に限定されない。
最初にステップS3に移行したときには、制御部31は、図5に示すように、1番目のバージョン情報(<version=1>...</version>)のみを記述する。グループメンバ変更に伴い、再度ステップS1以降の動作を開始し、再度ステップS3に移行したときには、バージョン情報が追記される。
バージョン情報内において、enc_gkタグとともに記述される情報は、グループ管理サーバ5が計算機に提供する共有暗号鍵をKEKで暗号化したデータである。制御部31は、鍵情報を生成するとき、計算機に提供する共有暗号鍵g1をKEKで暗号化し、その暗号化したデータをバージョン情報内に、enc_gkタグとともに記述する。ただし、通常、共有暗号鍵をKEKで暗号化した結果得られるデータは、文字コードとして表せない。そこで、制御部31は、共有暗号鍵をKEKで暗号化した結果得られるデータを、例えばBASE64などで変換(エンコード)し、その変換後のデータをenc_gkタグとともに記述する。
バージョン情報内において、kek タグとともに記述される情報は、各グループメンバのピアIDと、KEKを暗号化したデータとの組み合わせである。図5は、計算機2−2,2−4の2台の計算機がグループメンバである場合の鍵情報の例を示しているので、計算機2−2のピアID“2 ”と、KEKを暗号化したデータとの組み合わせが記述され、また、計算機2−4のピアID“4 ”と、KEKを暗号化したデータとの組み合わせが記述されている。また、KEKの暗号化は、ピアIDから特定される公開鍵(より具体的には、ピアIDから特定される計算機の公開鍵)によって行われる。すなわち、図5に例示したピアID“2 ”の右隣の記述は、ピアID“2 ”によって特定される計算機2−2の公開鍵BuでKEKを暗号化したデータを示している。また、図5に例示したピアID“4 ”の右隣の記述は、ピアID“4 ”によって特定される計算機2−4の公開鍵DuでKEKを暗号化したデータを示している。
制御部31は、鍵情報を生成するとき、グループメンバのピアIDとしてステップS1で記憶したピアIDから特定される計算機の公開鍵を用いて、KEKを暗号化する。ただし、KEKを暗号化したデータも、通常、文字コードとして表せない。そこで、制御部31は、KEKを公開鍵で暗号化した結果得られるデータを、例えばBASE64などで変換(エンコード)する。そして、その変換後のデータと、公開鍵の特定に用いたピアIDとの組み合わせを、kek タグとともに記述すればよい。制御部31は、グループを形成する各計算機毎に同様の処理を行い、kek タグとともに、ピアIDとKEKの変換後のデータとの組み合わせをそれぞれ記述していけばよい。
signタグの間には、key タグで記述された情報(<key> から</key>までの記述)に対する署名データが記述される。図5に示す例では、1行目から6行目までの記述に対する署名データが記述される。制御部31は、例えば、以下のように署名データを作成すればよい。制御部31は、key タグで記述された情報(<key> から</key>までの記述)に対して、例えば、SHA−1等のハッシュ関数を用いてダイジェスト計算を行い、その結果得られるダイジェスト値(ハッシュ値)を、秘密鍵αpによって暗号化する。この暗号化によって得られたデータを、例えばBASE64などで変換(エンコード)し、その変換結果が署名データとして、signタグの間に記述する。
ただし、上記の署名データの作成動作は一例であり、制御部31は、他の方法で署名データを作成してもよい。例えば、署名方法として、XML署名の標準的な方法を適用してもよい。また、署名付与の際にXML正規化を行ってもよい。
制御部31は、以上のようにして、鍵情報を作成する(ステップS3)。
以上の説明では、共有暗号鍵をKEKで暗号化して鍵情報を作成する場合について説明した。次に、鍵情報作成処理(ステップS3)において、グループに属する各計算機の鍵で共有暗号鍵を暗号化する場合について説明する。この場合、KEKは用いない。また、enk_gkタグおよび共有暗号鍵をKEKで暗号化した情報(図5に示す例では3行目に相当する情報)は、鍵情報に含まれない。また、ピアIDと、そのピアIDによって特定される公開鍵で共有暗号鍵を暗号化したデータとの組み合わせが、kek タグとともに記述される。
グループに属する各計算機の鍵で共有暗号鍵を暗号化する場合、制御部31は、グループメンバのピアIDとしてステップS1で記憶したピアIDから特定される計算機の公開鍵を用いて共有暗号鍵を暗号化し、その暗号化したデータと、公開鍵の特定に用いたピアIDとの組み合わせをkek タグとともに記述すればよい。なお、共有暗号鍵を公開鍵で暗号化したデータは、通常、文字コードとして表せない。そこで、制御部31は、共有暗号鍵を公開鍵で暗号化したデータを、例えばBASE64などで変換(エンコード)する。そして、制御部31は、その変換後のデータと、公開鍵の特定に用いたピアIDとの組み合わせをkek タグとともに記述すればよい。制御部31は、グループを形成する各計算機毎に同様の処理を行い、kek タグとともに、ピアIDと共有暗号鍵の変換後のデータとの組合せをそれぞれ記述していけばよい。また、制御部31は、enk_gkタグの情報は鍵情報に記述しない。その他の処理に関しては、共有暗号鍵をKEKで暗号化する場合と同様である。
グループ管理サーバ5による鍵情報生成処理(ステップS3)の後、全計算機(ネットワーク1に接続されている全計算機であり、グループメンバであるか否かは問わない。)は、ステップS3で生成された鍵情報を共有する(ステップS4)。ステップS4では、まず、グループ管理サーバ5の制御部31が、ステップS3で生成した鍵情報を、ネットワーク1に接続されている各計算機のうちのいずれか1台に送信する。この計算機は、グループを形成する計算機であっても、他の計算機であってもよい。このとき、グループを特定するようなIDとグループ鍵のバージョン番号を含んだものを鍵情報のファイルindexにして送信することによって、最新の鍵情報を検索できるようにする工夫をしておくことが望ましい。グループ管理サーバ5の制御部31は、各計算機(図1に示す例では計算機2−1〜2−4)に対し、ネットワーク1を介して応答要求を送信し、応答があった計算機を現在ネットワーク1に接続されている計算機と判定すればよい。そして、ネットワーク1に接続されていると判定した計算機のうちのいずれか1台に鍵情報を送信すればよい。なお、ここで述べたネットワーク1に接続されている計算機の判定方法は例示であり、他の方法により、ネットワーク1に接続されている計算機を判定してもよい。グループ管理サーバ5から鍵情報を受信した1台の計算機は、全計算機(ネットワーク1に接続されている全計算機)との間で鍵情報を共有する。
例えば、グループ管理サーバ5から鍵情報を受信した計算機の鍵情報共有部(より具体的には、図3に示す制御部41)が、ネットワーク1に接続されている各計算機(自装置は除く。また、グループメンバであるか否かは問わない。)に対して、鍵情報をブロードキャスト送信してもよい。また、例えば、グループ管理サーバ5から鍵情報を受信した計算機の鍵情報共有部が、受信した鍵情報のコピーを作成してそのコピーを他の1台の計算機に送信し、その後、鍵情報(鍵情報のコピー)を受信した計算機の鍵情報共有部が鍵情報のコピーを作成してそのコピーを他の1台の計算機に送信するという動作を繰り返してもよい。すなわち、ネットワーク1に接続されている各計算機(グループメンバであるか否かは問わない。)がバケツリレー的に鍵情報を転送して、各計算機が鍵情報を保持してもよい。また、例えば、KaZaA 、Gnutellaなどのファイル共有システムを利用して、鍵情報を他の各計算機の鍵情報共有部と共有してもよい。このようなファイル共有システムを利用する場合、全ピアはネットワーク接続時、もしくは特定のグループにアクセス制御された暗号化データ作成時または取得時に、新規もしくは更新された鍵情報の有無を確認する。そして、検索の結果、更新されたまたは新規に作成された鍵情報をすべてダウンロードする。また、DHT(Distributed Hash Table)によって鍵情報を他の各計算機の鍵情報共有部と共有してもよい。DHTを利用する場合、全ピアはネットワーク接続時、もしくは特定のグループにアクセス制御された暗号化データ作成時または取得時に、上記鍵情報のファイルindexのハッシュ値に対応するデータが存在するかどうか確認することによって、新規もしくは更新された鍵情報の有無を確認する。そして、検索の結果、更新されたまたは新規に作成された鍵情報をすべてダウンロードする。
ステップS4の後、ファイルを共有した各計算機の鍵情報解析部(より具体的には図3に示す制御部41)は、それぞれ鍵情報の署名を検証する(ステップS5)。すなわち、鍵情報が、ステップS3においてグループ管理サーバ5によって生成されたときの状態から改竄されていないことを検証する。例えば、グループ管理サーバ5が、上述のようにハッシュ関数を用いてkey タグで記述された情報からダイジェスト値を計算し、そのダイジェスト値を秘密鍵αpで暗号化し、その暗号化データを変換(エンコード)したデータを署名データとしているものとする。また、この変換はBASE64による変換であるものとする。本例の場合、各計算機の鍵情報解析部は、鍵情報の署名データを変換(デコード)して、BASE64による変換前の状態に戻し、デコード後のデータを公開鍵αu(秘密鍵αpと対になる公開鍵)で復号する。また、各計算機の鍵情報解析部は、グループ管理サーバ5が用いたハッシュ関数と同一のハッシュ関数を用いて、鍵情報に含まれるkey タグで記述された情報から、ダイジェスト値を計算する。この計算により得られたダイジェスト値と、公開鍵αuで復号した結果が同一であれば、各計算機の鍵情報解析部は、鍵情報は改竄されていないと判定する。
続いて、各計算機の鍵情報解析部(より具体的には図3に示す制御部41)は、自装置がグループメンバであるか否かを判定する(ステップS6)。ステップS6では、各計算機の鍵情報解析部は、鍵情報内でkek タグとともに記述されたピアIDの中に、自装置のピアIDが含まれていれば、自装置がグループメンバであると判定する。また、鍵情報内でkek タグとともに記述されたピアIDの中に、自装置のピアIDが含まれていなければ、自装置がグループメンバではないと判定する。ステップS6において、自装置がグループメンバであると判定した場合、ステップS7に移行する。
ステップS7では、鍵情報解析部は、共有暗号鍵の復号を行う。ステップS3においてKEKで共有暗号鍵を暗号化した場合と、グループに属する各計算機の鍵で共有暗号鍵を暗号化した場合にそれぞれ分けてステップS7の処理について説明する。まず、ステップS3においてKEKで共有暗号鍵を暗号化した場合のステップS7の処理について説明する。
ステップS7に移行した場合、鍵情報解析部は、自装置のピアIDと組み合わされたデータ(ここではKEKの暗号化データ)を、自装置の秘密鍵で復号する。このとき、ピアIDと組み合わされたデータが、BASE64などで変換(エンコード)されているデータである場合には、そのデータをデコードしてBASE64などによる変換前の状態に戻す。そして、そのデータを、自装置の秘密鍵で復号する。この結果、鍵情報解析部は、KEKを得ることができる。続いて、鍵情報解析部は、そのKEKを用いて、共有暗号鍵g1の暗号化データ(図5に示す例では、enc_gkタグとともに記述されたデータ)を復号して、共有暗号鍵を得る。この場合にも、enc_gkタグとともに記述されたデータが、BASE64などで変換(エンコード)されているデータであるならば、そのデータをデコードしてBASE64などによる変換前の状態に戻して、そのデコード後のデータをKEKにより復号して、共有暗号鍵を得る。
計算機2−2を例にして、ステップS7の動作を説明する。また、鍵情報に記述された共有暗号鍵やKEKの暗号化データは、BASE64を用いてエンコードされているものとする。ステップS7に移行した場合、鍵情報解析部8−2は、自装置(計算機2−2)のピアID“2 ”と組み合わされたデータを変換(デコード)して、BASE64による変換前のデータに戻す。そして、そのデータを自装置の秘密鍵Bpで復号してKEKを得る。また、鍵情報解析部8−2は、共有暗号鍵の暗号化データを変換(デコード)して、BASE64による変換前のデータに戻す。そして、そのデータをKEKで復号して共有暗号鍵を得る。個々では、計算機2−2を例にしたが、他の計算機の場合も同様である。
次に、ステップS3においてグループに属する各計算機の鍵で共有暗号鍵を暗号化した場合のステップS7の処理について説明する。ステップS7に移行した場合、鍵情報解析部は、自装置のピアIDと組み合わされたデータ(ここでは共有暗号鍵の暗号化データ)を、自装置の秘密鍵で復号する。このとき、ピアIDと組み合わされたデータが、BASE64などで変換(エンコード)されているデータである場合には、そのデータをデコードしてBASE64などによる変換前の状態に戻す。そして、そのデータを、自装置の秘密鍵で復号する。この結果、鍵情報解析部は、共有暗号鍵を得る。
ステップS7での復号処理によって暗号化データを共有暗号鍵に変換した後、処理を終了する。その後、グループメンバのうちネットワーク1に接続されている計算機同士で暗号化通信を行う場合には、共有暗号鍵で通信データを暗号化して送信し、また、受信したデータを共有暗号鍵で復号すればよい。
また、ステップS6において、自装置がグループメンバでないと判定した場合、処理を終了する。例えば、計算機2−1(ピアIDは“1 ”とする。)が、図5に例示する鍵情報を他の計算機と共有したとする。この場合、計算機2−1は、ステップS5の検証を行い鍵情報が改竄されていないことを確認したとしても、ステップS6では、自装置がグループメンバでないと判定する。図5に例示する鍵情報には、計算機2−2,2−4のピアIDのみが記述され、計算機2−1のピアIDは記述されていないからである。このように、自装置がグループメンバでないと判定した計算機は、ステップS7に移行せずに、処理を終了する。
上述の図4に例示する処理によって、グループに属するか否かによらず、ネットワーク1に接続されている全計算機は鍵情報を共有する。ネットワーク1に接続されている全計算機は鍵情報を共有した後、暗号通信システムは、ネットワーク1に接続されている少なくとも1台の計算機が鍵情報を保持可能な状態を維持する。例えば、計算機がネットワーク1との接続を断とする際には、その計算機は、ネットワーク1に接続されている他の計算機に鍵情報を送信してからネットワーク1との接続を断としてもよい。
そして、ネットワーク1に接続されていなかった計算機がネットワーク1に接続された場合、その計算機は、鍵情報を保持している計算機から鍵情報を受信する。例えば、ネットワーク1に接続されていなかった計算機がネットワークに接続されたときに、その計算機が、以前からネットワーク1に接続されていた計算機に鍵情報を要求し、鍵情報を保持している計算機がその要求に応じて鍵情報を送信してもよい。この結果、ネットワーク1に接続された計算機は鍵情報を受信することができ、ネットワーク1に接続される計算機が増えたときにも各計算機で鍵情報を共有することができる。また、ネットワーク1に接続されていなかった計算機がネットワーク1に接続された場合、その計算機は、例えばDHTによって、既にネットワーク1に接続されていた計算機との間で鍵情報を共有してもよい。また、ネットワーク1に接続されて他の計算機と鍵情報を共有した計算機は、ステップS5(図4参照。)以降の処理を行い、自身がグループメンバであれば、共有暗号鍵を復号すればよい。
また、一部の計算機は、他の計算機とグループ管理サーバ5の中継を行ってもよい。この場合、中継を行う計算機(以下、中継装置と記す。)は、他の計算機と共有する鍵情報を記憶する。そして、中継装置ではない他の計算機(以下、非中継装置と記す。)が、ネットワーク1に接続されていない状態から、ネットワーク1に接続された状態になった場合、中継装置に鍵情報を要求してもよい。中継装置は、この要求に応じて鍵情報を非中継装置に送信し、非中継装置はその鍵情報を受信する。従って、ネットワーク1に接続されていない状態から、ネットワーク1に接続された状態になった個々の非中継装置は、グループ管理サーバ5との間で鍵情報を得るための通信を行わない。そして、中継装置が、いわばキャッシュとしての役割を果たす。個々の非中継装置は、グループ管理サーバ5との間で鍵情報を得るための通信を行わないので、中継装置のそのような通信の中継を行う必要がない。従って、中継装置の負荷を抑えることができる。なお、各計算機は、木構造のネットワークのノードとして配置され、複数の中継装置が配置されてもよい。
また、上記の説明では、鍵情報を生成する装置をグループ管理サーバ5として示した。常時電源がオンとされ、常時ネットワーク1に接続されるサーバではなく、計算機2−1〜2−4と同様の鍵情報共有部と鍵情報解析部とを有する計算機が、上述のグループ管理サーバ5と同様に鍵情報を生成して、グループ管理サーバ5と同様の処理を行ってもよい。このときは、図4のステップS3において、発行する共通暗号鍵g1の一意性を保障するために、一意性が保証されているグループサーバ機能を有する計算機のピアIDと、この計算機が自ら生成したグループを区別するためのIDと、グループ鍵のバージョンと、この計算機が生成した乱数をseedとして鍵を生成する鍵生成器を利用して鍵を生成するとよい。例えば、この鍵生成器として、これらのデータを全てビット連結し、このデータに対してハッシュ計算をする処理などを利用することができる。さらに、このグループ管理サーバ機能を有する計算機(鍵情報を生成する計算機)の電源がオフとなっているか、鍵情報を生成する計算機がネットワーク1と接続されていないこともあるため、以下のような処理が必要である。まず、ネットワーク1に接続されていなかった計算機がネットワーク1に接続されたときには、その計算機が、ネットワーク1に接続されているいずれかの計算機に鍵情報を要求すればよい。そして、鍵情報の要求を受けた計算機は、共有している鍵情報を、要求に応じてそのまま送信すればよい。この結果、ネットワーク1に接続されていない状態からネットワーク1に接続された状態になった計算機は、鍵情報を受信する。その計算機は、鍵情報を受信したならば、上述のステップS5以降の処理を行い、自装置がグループメンバであると判定したならば(ステップS6のYes)、共有暗号鍵の復号(ステップS7)を実行すればよい。また、自装置がグループメンバでないと判定したならば(ステップS6のNo)、ステップS7に移行せずに処理を終了すればよい。
次に、本実施の形態の効果について説明する。
本実施の形態では、グループ管理サーバ5が鍵情報を、ネットワーク1に接続されている各計算機のうちのいずれか1台に送信し、その計算機が鍵情報を他の計算機と共有する。従って、グループを形成する計算機それぞれが非同期にネットワークに接続される場合であっても、アドホックに接続される各計算機が、共有暗号鍵(グループ鍵)を共有できる。
また、鍵情報には、KEKで暗号化した共有暗号鍵の暗号化データと、グループに属する計算機の公開鍵で暗号化したKEKの暗号化データを含めている。従って、その公開鍵と対になる秘密鍵を有していない計算機は共有暗号鍵を復号することができない。従って、グループメンバ同士のみで共有暗号鍵を用いた安全な暗号化通信を行うことができる。ステップS3でKEKを用いずに、グループに属する各計算機の公開鍵で共有暗号鍵を暗号化する場合では、鍵情報に、グループに属する計算機の公開鍵で暗号化した共有暗号鍵の暗号化データを含めている。この場合も、その公開鍵と対になる秘密鍵を有していない計算機は共有暗号鍵を復号できないので、安全な暗号化通信を実現できる。
また、グループ管理サーバ5が鍵情報を送信するときには、1台の計算機に鍵情報を送信し、その計算機が他の計算機と鍵情報を共有する。そして、グループ管理サーバ5は、鍵情報を送信した後には、処理を行う必要がない。よって、グループを形成する計算機の数が増加しても、グループ管理サーバ5の処理負荷はそれほど増加しない。すなわち、計算機数の増加によるグループ管理サーバの負荷の増加を抑えることができる。
また、グループ管理サーバ5が鍵情報を送信するときには、1台の計算機に鍵情報を送信するだけで、グループ管理サーバ5は各グループメンバと個々に通信を行う必要がない。よって、各計算機とグループ管理サーバ5との通信を中継する計算機を設ける場合であっても、その計算機はいわばキャッシュとしての役割を果たし、鍵情報を記憶し、個々の計算機から鍵情報の要求があると記憶した鍵情報を送信するだけなので、各計算機とグループ管理サーバ5との通信を中継する必要がない。よって、通信を中継する計算機を設ける場合であっても、その計算機の処理負荷の増加を抑えることができる。例えば、末端のセンサノードとサーバとの間の通信を中継するセンサノードに本発明を適用する場合であっても、通信を中継するセンサノードの処理負荷の増加を抑えることができる。
また、グループ管理サーバ5は、鍵情報に署名データを付加しているので、鍵情報が信頼できない計算機に配布されてしまったとしても、不正な改竄が行われたか否かを検証することができる。
第1の実施の形態において、鍵情報生成手段および鍵情報送信手段は、グループ管理サーバ5の制御部31によって実現される。鍵情報共有手段および復号手段は、計算機の制御部41によって実現される。また、公開鍵記憶手段は、グループ管理サーバ5の記憶装置32によって実現される。秘密鍵記憶手段は、計算機の記憶装置42によって実現される。
実施の形態2.
本発明の第2の実施の形態の構成は、第1の実施の形態と同様である。ただし、本実施の形態では、各グループには予めグループID(各グループを識別するための識別情報)が定められる。そして、グループに属する各計算機は、自身の属するグループのグループIDを記憶装置42(図3参照。)に記憶する。
また、第2の実施の形態の暗号通信システムが備える各計算機は、第1の実施の形態と同様に、共有暗号鍵(グループ鍵)を共有する。各計算機が共有暗号鍵を共有する動作は第1の実施の形態と同様である。ただし、各計算機の鍵情報解析部(図3に示す制御部41)は、ステップS6(図4参照。)において、自装置がグループメンバであると判定した場合、鍵情報(図4に示すステップS4で共有した鍵情報)とグループIDとを対応付けて記憶装置42に記憶する。
なお、各グループ毎に計算機が鍵情報を共有する場合、グループ毎に、ステップS1(図4参照。)以降の処理を行えばよい。また、ステップS1では、グループ毎に、グループに属する計算機のピアIDを登録すればよい(図2に示す記憶装置32に記憶させればよい)。
また、本実施の形態において、ネットワーク1に接続されていなかった計算機がネットワーク1に接続された場合、その計算機は、後述するステップS13の動作で鍵情報を取得することにより、他の計算機と鍵情報を共有すればよい。
以下、第2の実施の形態の暗号通信システムが備える各計算機で行う暗号化通信について説明する。図6は、各計算機が暗号化通信を行う際に送受信する通信データのフォーマットの例を示す説明図である。図6に示すように、暗号化通信で送受信される通信データには、flagと、暗号化データと、グループIDと、鍵のバージョンと、Key_Locationとが含まれる。
flagは、通信データの属性を記載したデータである。flagには、通信データのヘッダとして、暗号化データのバイト数および開始位置、グループIDのバイト数および開始位置、鍵のバージョンのバイト数および開始位置、Key_Locationのバイト数および開始位置が含まれていてもよい。
暗号化データは、通信内容(送信データ)を共有暗号鍵(グループ鍵)で暗号化したデータである。
グループIDは、通信データを送受信する各計算機が属するグループのグループIDである。
鍵のバージョンとは、鍵情報に含まれるバージョン情報であって、通信内容の暗号化に用いた共有暗号鍵が復号されたバージョン情報の番号である。図5に例示する鍵情報の場合、version タグとともに記述された数値が、鍵のバージョンとして通信データに含められる。
Key_Locationは、計算機が鍵情報を取得するための情報である。例えば、鍵情報のURI(Uniform Resource Indicator)をKey_Locationとしてもよい。この場合、例えば、グループ管理サーバ5が、鍵情報を生成するときに鍵情報にURIの情報を含め、また、グループ管理サーバ5自身が鍵情報を保持して、URIによって鍵情報へのアクセスを可能となるようにしておけばよい。また、URIがグループ管理サーバ5以外の装置を指定するURIであり、グループ管理サーバ5がその装置に鍵情報を送信して記憶させてもよい。あるいは、通信データを送信する計算機がURIを定め、その計算機がURIによって特定される装置に鍵情報を送信して記憶させてもよい。また、通信データを送受信する各計算機が、DHT(Distributed Hash Table)のようなピアツーピアのファイル共有システムを利用して鍵情報を共有している場合には、鍵情報のハッシュ値をKey_Locationとして用いてもよい。
計算機の制御部41は、通信内容を共有暗号鍵で暗号化した暗号化データを作成した場合、図6に例示するようなフォーマットに従って、暗号化データに、flag、グループID、鍵のバージョン、Key_Locationを付加して、通信データを生成し、その通信データを宛先の計算機に送信すればよい。
次に、その通信データを受信した計算機の動作について説明する。
図7は、通信データを受信した計算機の処理経過の例を示すフローチャートである。既に説明したように、本実施の形態では、計算機は、ステップS6(図4参照。)において、自装置がグループメンバであると判定した場合、鍵情報とグループIDとを対応付けて記憶装置42に記憶する。通信データを受信した計算機の制御部41は、その計算機自身が属するグループIDに対応付けて鍵情報を記憶しているか否かを判定し、グループIDと対応づけた鍵情報を記憶していると判定した場合には、通信データに含まれる「鍵のバージョン(図6参照。)」によって特定されるバージョン情報から復号したグループ鍵(共有暗号鍵)を保持しているか否かを判定する(ステップS11)。
例えば、通信データを受信した計算機が、自身が属するグループIDと対応付けた鍵情報を記憶しているとする。また、通信データに含まれる「鍵のバージョン」が“1 ”であったとする。その場合、制御部41は、“1 ”によって特定されるバージョン情報、すなわち鍵情報内における1番目のバージョン情報(<version=1> から</version>までの記述)から復号したグループ鍵を保持しているか否かを判定する。
通信データに含まれる「鍵のバージョン」によって特定されるバージョン情報から復号したグループ鍵を保持していると判定した場合(ステップS11のYes)、制御部41は、そのグループ鍵を用いて、受信したデータに含まれる暗号化データ(図6参照。)を復号し(ステップS12)、処理を終了する。この結果、制御部41は、暗号化されて送信された通信内容を得ることができる。
また、ステップS11で、計算機の制御部41が、通信データに含まれる「鍵のバージョン」によって特定されるバージョン情報から復号したグループ鍵を保持していないと判定した場合や、その計算機自身が属するグループIDに対応付けて鍵情報を記憶していないと判定した場合(ステップS11のNo)、ステップS13に移行する。ステップS13では、計算機の制御部41は、受信した通信データに含まれる「Key_Location」に基づいて、鍵情報を取得する(ステップS13)。例えば、「Key_Location」としてURIが含まれている場合には、制御部41は、そのURIによって特定される鍵情報にアクセスして、鍵情報を受信する。
ステップS13の後、制御部41は、受信した通信データに含まれる「鍵のバージョン」を参照する(ステップS14)。続いて、制御部41は、ステップS13で取得した鍵情報に含まれるバージョン情報のうち、ステップS14で参照した「鍵のバージョン」によって特定されるバージョン情報に、自装置のピアIDが含まれているか否かを判定する(ステップS15)。
ステップS15において自装置のピアIDが含まれていないと判定した場合(ステップS15のNo)、そのまま処理を終了する。
ステップS15において自装置のピアIDが含まれていると判定した場合(ステップS15のYes)、制御部41は、鍵情報に含まれるバージョン情報のうち、ステップS14で参照した「鍵のバージョン」によって特定されるバージョン情報から、共有暗号鍵(グループ鍵)を復号する(ステップS16)。ステップS16の処理は、ステップS7(図4参照。)と同様である。鍵情報作成時に共有暗号鍵がKEKで暗号化される場合と、共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合それぞれに分けてステップS16の処理について説明する。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合には、制御部41は、「鍵のバージョン」によって特定されるバージョン情報において、自装置のピアIDと組み合わされたデータ(ここではKEKの暗号化データ)を、自装置の秘密鍵で復号する。このとき、ピアIDと組み合わされたデータが、BASE64などで変換(エンコード)されているデータである場合には、そのデータをデコードしてBASE64などによる変換前の状態に戻す。そして、そのデータを、自装置の秘密鍵で復号する。この結果、制御部41は、KEKを得ることができる。続いて、制御部41は、そのKEKを用いて、共有暗号鍵の暗号化データ(図5に示す例では、enc_gkタグとともに記述されたデータ)を復号して、共有暗号鍵を得る。
また、鍵情報作成時に共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合には、制御部41は、「鍵のバージョン」によって特定されるバージョン情報において、自装置のピアIDと組み合わされたデータ(ここでは共有暗号鍵の暗号化データ)を、自装置の秘密鍵で復号する。このとき、ピアIDと組み合わされたデータが、BASE64などで変換(エンコード)されているデータである場合には、そのデータをデコードしてBASE64などによる変換前の状態に戻す。そして、そのデータを、自装置の秘密鍵で復号する。この結果、制御部41は、共有暗号鍵を得る。
続いて、制御部41は、その共有暗号鍵(グループ鍵)を用いて、受信したデータに含まれる暗号化データ(図6参照。)を復号し(ステップS17)、処理を終了する。この結果、制御部41は、暗号化されて送信された通信内容を得ることができる。
次に、本実施の形態の効果について説明する。
本実施の形態では、グループID、鍵のバージョン、Key_Locationとともに暗号化データが送受信され、受信した計算機は、グループIDおよび鍵のバージョンを参照して、グループIDと対応づけた鍵情報を記憶していて、かつ、鍵のバージョンによって特定されるバージョン情報から復号したグループ鍵を保持しているか否かを判定する。そして、そのグループ鍵を保持していない場合には、Key_Locationを用いて鍵情報を取得し、通信データ内の鍵のバージョンに応じたグループ鍵を復号する。よって、グループを形成したり、ネットワークに接続されるグループメンバが変更される時点で、認証サーバ、グループ管理サーバ、グループに属する全ての計算機がネットワーク1に接続していなくても、グループ鍵の共有や変更を行うことができる。
第2の実施の形態において、通信データ送信手段および判定手段は、計算機の制御部42によって実現される。また、Key_Locationは、アクセス情報に相当する。
実施の形態3.
図8は、本発明による暗号通信システムの第3の実施の形態を示すブロック図である。第1の実施形態と同様の構成部については、図1と同一の符号を付し、詳細な説明を省略する。第3の実施の形態では、暗号通信システムは、グループ管理サーバ5と、計算機2−1〜2−4とを備える。図8では4台の計算機を示しているが、計算機の台数は4台に限定されない。第3の実施の形態では、鍵情報を生成するときに使用する鍵の態様が第1の実施の形態と異なる。
第1の実施の形態では、各計算機2−1〜2−4が、それぞれ自装置のみが保持するように定められた秘密鍵Ap,Bp,Cp,Dpを保持し、グループ管理サーバ5が各秘密鍵と対になる公開鍵Au,Bu,Cu,Duを使用して鍵情報を生成していた。また、第1の実施の形態では、グループ管理サーバ5は、グループ管理サーバ5のみが保持するように定められた秘密鍵αpを保持し、各計算機はその秘密鍵αpと対になる公開鍵αuを保持していた(図1参照。)
これに対し、本実施の形態では、秘密鍵と公開鍵の組み合わせを用いるのではなく、共通鍵を用いる。計算機2−1は、計算機2−1の秘密鍵として秘密鍵(共通鍵)Aを保持し、グループ管理サーバ5は、計算機2−1との間で秘密鍵(共通鍵)Aを秘密に共有する。同様に、計算機2−2は、計算機2−2の秘密鍵として秘密鍵(共通鍵)Bを保持し、グループ管理サーバ5は、計算機2−2との間で秘密鍵(共通鍵)Bを秘密に共有する。計算機2−3は、計算機2−3の秘密鍵として秘密鍵(共通鍵)Cを保持し、グループ管理サーバ5は、計算機2−3との間で秘密鍵(共通鍵)Cを秘密に共有する。計算機2−4は、計算機2−4の秘密鍵として秘密鍵(共通鍵)Dを保持し、グループ管理サーバ5は、計算機2−4との間で秘密鍵(共通鍵)Dを秘密に共有する。すなわち、計算機2−1およびグループ管理サーバ5が秘密鍵(共通鍵)Aを保持する。また、計算機2−2およびグループ管理サーバ5が秘密鍵(共通鍵)Bを保持する。また、計算機2−3およびグループ管理サーバ5が秘密鍵(共通鍵)Cを保持する。また、計算機2−4およびグループ管理サーバ5が秘密鍵(共通鍵)Dを保持する。
また、グループ管理サーバ5は、グループ管理サーバ5の秘密鍵として秘密鍵(共通鍵)αを保持し、各計算機2−1〜2−4は、グループ管理サーバ5との間で秘密鍵(共通鍵)αを秘密に共有する。すなわち、グループ管理サーバ5および各計算機2−1〜2−4が秘密鍵(共通鍵)αを保持する。
また、グループ管理サーバ5は、第1の実施の形態と同様に、共有暗号鍵g1を保持する。また、鍵情報を作成するときにKEKで共有暗号鍵を暗号化する場合には、グループ管理サーバ5は、KEKも保持する。
本実施の形態では、グループ管理サーバ5は、個々の計算機2−1〜2−4と秘密鍵(共通鍵)を事前に秘密に共有することを前提とする。このように共通鍵を予め秘密に共有する態様として、例えば、グループ管理サーバの管理主体(例えばCAなどの組織。人であってもよい。)が、秘密に共有する共通鍵を生成し、耐タンパ性を有するメモリ(例えばICカードなど。)にその共通鍵を格納し、計算機を管理する主体(人)にそのメモリを送付(例えば郵送など。)し、メモリを受け取った者が計算機に直接組み込む等の態様がある。ここに示した態様は一例であり、他の態様によって、共通鍵を予め秘密に共有してもよい。共通鍵を予め秘密に共有するので、ネットワーク1を介して他の装置から共通鍵A,B,C,Dを受信することは行わない。本実施の形態では、ステップS1(図4参照。)において、例えば、予め記憶されている秘密鍵(共通鍵)毎に、グループ管理者から入力部34を介して、その共通鍵に対応する計算機のピアIDが入力される。制御部31は、予め記憶している共通鍵と対応付けて、入力されたピアIDを記憶装置32に記憶(登録)させればよい。そして、その処理の終了後、ステップS2を行わずに、ステップS3以降の処理を行えばよい。
また、本実施の形態で、鍵情報を生成する場合には、公開鍵ではなく共通鍵を用いて鍵情報を生成する。既に説明したように、鍵情報を生成する態様として、共有暗号鍵をグループに属する各計算機の鍵で暗号化する態様や、共有暗号鍵をKEKで暗号化する態様がある。この二つの態様それぞれについて説明する。
本実施の形態では、共有暗号鍵をKEKで暗号化して鍵情報を作成する場合、ステップS3で、グループ管理サーバ5の制御部31は、KEKを暗号化しピアIDと組み合わせてkek タグとともに記述する際、KEKの暗号化に共通鍵を用いる。また、署名データを生成するときには、各計算機との間で秘密に共有している共通鍵αを用いる。ステップS3のその他の点に関しては、第1の実施の形態において共有暗号鍵をKEKで暗号化する場合と同様である。
例えば、グループを形成する計算機として、ステップS1で計算機2−2,2−3が選定されたとする。そして、計算機2−2,2−3のピアIDがそれぞれ“2 ”,“4 ”であるとする。グループ管理サーバ5の制御部31は、ステップS3において、図5に例示する鍵情報と同様の鍵情報を生成する場合、第1の実施の形態と同様に、共有暗号鍵g1をKEKで暗号化し、暗号化したデータをBASE64などで変換し、その変換結果をenc_gkタグとともに記述する。また、制御部31は、ピアID“2 ”によって特定される計算機2−2の秘密鍵(共通鍵)Bを用いてKEKを暗号化する。そして、その暗号化したデータをBASE64などで変換し、変換結果をピアID“2 ”と組み合わせて記述する。同様に、制御部31は、ピアID“4 ”によって特定される計算機2−4の秘密鍵(共通鍵)Dを用いてKEKを暗号化する。そして、その暗号化したデータをBASE64などで変換し、変換結果をピアID“4 ”と組み合わせて記述する。これらの記述は、kek タグとあわせて記述される。また、制御部31は、key タグで記述された情報(<key> から</key>までの記述)に対して、第1の実施の形態と同様にダイジェスト計算を行い、その結果得られるダイジェスト値を秘密鍵(共通鍵)αで暗号化する。この暗号化によって得られたデータを、例えばBASE64などで変換し、署名データとして、signタグの間に記述すればよい。
また、本実施の形態では、グループに属する各計算機の鍵で共有暗号鍵を暗号化する場合、ステップS3で、グループ管理サーバ5の制御部31は、共有暗号鍵を暗号化してピアIDと組み合わせてkek タグとともに記述する際、グループに属する各計算機の秘密鍵(共通鍵)を用いて共有暗号鍵を暗号化する。また、署名データを生成するときには、各計算機との間で秘密に共有している共通鍵αを用いる。その他の点に関しては、第1の実施の形態においてグループに属する各計算機の鍵で共有暗号鍵を暗号化する場合と同様である。
ステップS5(図4参照。)の検証処理では、各計算機の鍵情報解析部(より具体的には図3に示す制御部41)は、鍵情報の署名データを変換(デコード)した後、デコード後のデータをグループ管理サーバ5の秘密鍵(共通鍵)αで復号すればよい。ステップS5のその他の点に関しては、第1の実施の形態と同様である。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合と、共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合それぞれに分けてステップS7の処理について説明する。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合には、ステップS7(図4参照。)の復号処理では、計算機の鍵情報解析部(制御部41)は、自装置のピアIDと組み合わされたデータ(ここではKEKの暗号化データ)を復号するときに、自装置の秘密鍵(共通鍵)で復号する。ステップS7のその他の点に関しては、第1の実施の形態において共有暗号鍵をKEKで暗号化する場合と同様である。例えば、計算機2−2の鍵情報解析部8−2が、自装置のピアID“2 ”と組み合わされたデータを復号する場合、そのデータを変換(デコード)し、デコード後のデータを共通鍵Bで復号して、KEKを得ればよい。
また、鍵情報作成時に共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合には、ステップS7の復号処理で、計算機の鍵情報解析部(制御部41)は、自装置のピアIDと組み合わされたデータ(ここでは共有暗号鍵の暗号化データ)を復号するときに、自装置の秘密鍵(共通鍵)で復号する。その他の点に関しては、第1の実施の形態において共有暗号鍵がグループに属する各計算機の鍵で共有暗号鍵を暗号化する場合と同様である。
また、ステップS4,S6の処理は、第1の実施の形態と同様である。
また、グループメンバのうちネットワーク1に接続されている計算機同士で暗号化通信を行う場合には、共有暗号鍵で通信データを暗号化して送信し、また、受信したデータを共有暗号鍵で復号すればよい。例えば、第2の実施の形態と同様に通信データを送受信する。
第3の実施の形態では、第1の実施の形態と同様の効果が得られる。さらに、第3の実施の形態では、秘密鍵と公開鍵の組み合わせを用いるのではなく、グループ管理サーバ5と計算機とがそれぞれ共通鍵を保持し、共通鍵によってKEKの暗号化や復号を行う。そのため、グループ管理サーバ5や各計算機の処理能力は、第1の実施の形態よりも低くてよい。その結果、例えば、処理能力の低いセンサネットワークであっても、本実施の形態の暗号通信システムを適用することができる。
第3の実施の形態において、鍵情報生成手段および鍵情報送信手段は、グループ管理サーバ5の制御部31によって実現される。鍵情報共有手段および復号手段は、計算機の制御部41によって実現される。共通鍵記憶手段は、グループ管理サーバ5の記憶装置32によって実現される。自装置共通鍵記憶手段は、計算機の記憶装置42によって実現される。
実施の形態4.
図9は、本発明による暗号通信システムの第4の実施の形態を示すブロック図である。第1の実施形態と同様の構成部については、図1と同一の符号を付し、詳細な説明を省略する。第4の実施の形態では、暗号通信システムは、グループ管理サーバ5と、計算機2−1〜2−4とを備える。図8では4台の計算機を示しているが、計算機の台数は4台に限定されない。本実施の形態では、暗号通信システムに、ブロードキャストエンクリプション(Broadcast Encryption)を適用する。
ここでは、各装置が以下のように共通鍵を保持している場合を例にして説明する。計算機2−1は、計算機2−1の秘密鍵として秘密鍵(共通鍵)K0,K1,K3を保持する。計算機2−2は、計算機2−2の秘密鍵として秘密鍵(共通鍵)K0,K1,K4を保持する。計算機2−3は、計算機2−3の秘密鍵として秘密鍵(共通鍵)K0,K2,K5を保持する。計算機2−4は、計算機2−4の秘密鍵として秘密鍵(共通鍵)K0,K2,K6を保持する。また、グループ管理サーバ5は、グループ管理サーバ5の秘密鍵として秘密鍵(共通鍵)αを保持する。
さらに、グループ管理サーバ5は、計算機の秘密鍵K0〜K6を保持する。すなわち、グループ管理サーバ5および各計算機2−1〜2−4は、秘密鍵(共通鍵)K0を秘密に共有する。グループ管理サーバ5および計算機2−1,2−2は、秘密鍵(共通鍵)K1を秘密に共有する。グループ管理サーバ5および計算機2−3,2−4は、秘密鍵(共通鍵)K2を秘密に共有する。グループ管理サーバ5および計算機2−1は、秘密鍵(共通鍵)K3を秘密に共有する。グループ管理サーバ5および計算機2−2は、秘密鍵(共通鍵)K4を秘密に共有する。グループ管理サーバ5および計算機2−3は、秘密鍵(共通鍵)K5を秘密に共有する。グループ管理サーバ5および計算機2−4は、秘密鍵(共通鍵)K6を秘密に共有する。
また、各計算機2−1〜2−4は、グループ管理サーバ5の秘密鍵αを保持する。すなわち、グループ管理サーバ5および各計算機2−1〜2−4は、秘密鍵(共通鍵)αを秘密に共有する。
また、グループ管理サーバ5は、第1の実施の形態と同様に、共有暗号鍵g1を保持する。また、鍵情報を作成するときにKEKで共有暗号鍵を暗号化する場合には、グループ管理サーバ5は、KEKも保持する。
第3の実施の形態と同様に、第4の実施の形態でも、グループ管理サーバ5は各計算機と秘密鍵(共通鍵)を事前に秘密に共有することを前提とする。このように共通鍵を予め秘密に共有する態様として、例えば、グループ管理サーバの管理主体(例えばCAなどの組織。人であってもよい。)が、秘密に共有する共通鍵を生成し、耐タンパ性を有するメモリ(例えばICカードなど。)にその共通鍵を格納し、計算機を管理する主体(人)にそのメモリを送付(例えば郵送など。)し、メモリを受け取った者が計算機に直接組み込む等の態様がある。ここに示した態様は一例であり、他の態様によって、共通鍵を予め秘密に共有してもよい。共通鍵を予め秘密に共有するので、グループ管理サーバ5は、ネットワーク1を介して共通鍵を受信することは行わない。また、本実施の形態では、グループ管理サーバ5の記憶装置32は、計算機の共通鍵(本例ではK0〜K6)の階層を示す木構造のデータを予め記憶する。この木構造のデータは、例えば、予め入力部34を介して入力され、制御部31が入力された木構造のデータを記憶装置32に記憶させればよい。共通鍵の階層を示す木構造のデータは、各計算機2−1〜2−4が共有する共通鍵(本例ではK0)を根(ルート)とし、個々の計算機2−1〜2−4が他の計算機と重複せずに保持している共通鍵(本例ではK3,K4,K5,K6)を葉(リーフ)とするデータである。すなわち、共通鍵の階層とは、各計算機が共有する共通鍵を根とし、個々の計算機が他の計算機と重複せずに記憶している共通鍵を葉とする階層である。また、木構造のデータにおいて、根、各節、各葉には、それぞれを特定するための識別情報(以下、節点番号と記す。)が定められている。木構造のデータでは、各葉がどの計算機に対応するのかが定められている。
また、根、葉、節の総称を節点と記すことにする。
図10は、共通鍵の階層を示す木構造のデータの例を示す説明図である。本例では、各計算機2−1〜2−4が共有する共通鍵K0が根となる。また、計算機2−1が保持して、他の計算機が保持していない共通鍵K3が葉となる。同様に、K4,K5,K6も葉となる。また、計算機2−1,2−2が保持して、計算機2−3,2−4が保持していない共通鍵K1は、根(K0)と、葉(K3,K4)との間の節となる。同様に、共通鍵K2は、根(K0)と、葉(K5,K6)との間の節となる。また、図10に示すように、各根、各節、各葉には節点番号が定められている。本例では、K0〜K6の各節の節点番号が“0”〜“6”であるものとする。また、図10に示すように、木構造のデータには、各葉K3,K4,K5,K6が、それぞれ計算機2−1,2−2,2−3,2−4に対応する葉であることを示す情報が含まれている。
また、木構造のデータには、グループに属さない計算機が保持する共通鍵も記述される。例えば、計算機2−2,2−3,2−4がグループを形成するものとして、この3台の計算機が保持する各共通鍵K0〜K2およびK4〜K6が予めグループ管理サーバ5に記憶される場合であっても、木構造のデータには、グループに属さない計算機2−1が保持する共通鍵K3も記述される。
また、本実施の形態では、各計算機2−1〜2−4は、自身が保持する共通鍵の節点番号と、その節点番号がどの共通鍵に対応する番号であるのかを示す情報を予め保持する。各計算機2−1〜2−4には、例えば、グループ管理者から、節点番号およびその節点番号がどの共通鍵に対応する番号であるのかを示す情報が入力され、その入力された情報を記憶装置42(図3参照。)に記憶させればよい。例えば、共通鍵K0,K1,K3を保持する計算機2−1は、節点番号“0”,“1”,“3”を記憶する。同様に、計算機2−2は、節点番号“0”,“1”,“4”を記憶する。計算機2−3は、節点番号“0”,“2”,“5”を記憶する。計算機2−4は、節点番号“0”,“2”,“6”を記憶する。また、各計算機は、各節点番号が、どの共通鍵に対応する番号であるのかを示す情報も記憶する。
以下の説明では、グループに属する計算機として計算機2−2,2−3,2−4が選定された場合を例に説明する。ステップS1では、グループに属する各計算機(本例では、計算機2−2,2−3,2−4)を示す情報が入力され、グループ管理サーバ5の制御部31は、木構造のデータにおけるどの葉が、グループに属するそれぞれの計算機に対応する葉であるのかを特定する。本実施の形態では、ステップS1の後、ステップS2を行わずにステップS3に移行する。
既に説明したように、鍵情報を生成する態様として、共有暗号鍵をグループに属する各計算機の鍵で暗号化する態様や、共有暗号鍵をKEKで暗号化する態様がある。この二つの各態様での鍵情報作成処理(ステップS3)についてそれぞれ説明する。なお、本実施の形態では、鍵情報には、ピアIDの代わりに、節点の識別情報(本例では節点番号)が含まれる。
本実施の形態では、共有暗号鍵をKEKで暗号化して鍵情報を作成する場合、ステップS3で、グループ管理サーバ5の制御部31は、グループメンバを包含する最も根に近い節点の共通鍵でKEKを暗号化する。なお、「グループメンバを包含する最も根に近い節点」とは、「グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点」を意味する。また、ここで、節点とは、節に限らず、葉や根であってもよい。また、制御部31は、そのような節点の共通鍵でKEKを暗号化し、その暗号化データと、その節点の節点番号とを組み合わせて、kek タグとともに記述する。第1の実施の形態や第3の実施の形態では、ピアIDと暗号化したKEKとの組み合わせをkek タグとともに記述していたが、本実施の形態では、節点番号とその節点番号の共通鍵で暗号化したKEKとの組み合わせをkek タグとともに記述する点で、第1の実施の形態や第3の実施の形態とは異なる。また、署名データの生成態様は、第3の実施の形態と同様である。ステップS3のその他の点に関しては第1の実施の形態において共有暗号鍵をKEKで暗号化する場合と同様である。
図11は、本例において生成される鍵情報の例を示す説明図である。本例では、計算機2−2,2−3,2−4がグループに属し、計算機2−1はグループに属さない。制御部31は、木構造のデータを参照して、「グループメンバを包含する最も根に近い節点」、すなわち、「グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点」を判定する。図10に示す木構造を参照すると、計算機2−2に関しては、グループに属さない計算機2−1が保持する共通鍵K0,K1,K3を除けば、最も根に近い節点はK4(節点番号“4”)となる。また、計算機2−3,2−4に関しては、グループに属さない計算機2−1が保持する共通鍵K0,K1,K3を除けば、最も根に近い節点はK2(節点番号“2”)となる。従って、制御部31は、節点番号“2”に対応する共通鍵K2でKEKを暗号化し、その暗号化したデータをBASE64などで変換し、変換結果を節点番号“2”と組み合わせて記述する(図11に示す3行目の記載を参照。)。同様に、制御部31は、節点番号“4”に対応する共通鍵K4でKEKを暗号化し、その暗号化したデータをBASE64などで変換し、変換結果を節点番号“4”と組み合わせて記述する(図11に示す3行目の記載を参照。)。これらの記述は、kek タグとあわせて記述される。その他の点(共通暗号鍵の暗号化や署名データの生成等)については、第3の実施の形態と同様であるので説明を省略する。
また、本実施の形態では、グループに属する各計算機の鍵で共有暗号鍵を暗号化する場合、ステップS3で、グループ管理サーバ5の制御部31は、グループメンバを包含する最も根に近い節点の共通鍵で共有暗号鍵を暗号化する。すなわち、制御部31は、グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点の共通鍵を用いて、共有暗号鍵を暗号化する。そして、制御部31は、その節点の節点番号と、共有暗号鍵を暗号化したデータとを組み合わせて、kek タグとともに記述する。制御部31は、このような節点番号と共有暗号鍵を暗号化したデータとの組み合わせを、グループに属する各計算機毎に導出して、kek タグとともに記述する。また、署名データの生成態様は、第3の実施の形態と同様である。その他の点に関しては第1の実施の形態においてグループに属する各計算機の鍵で共有暗号鍵を暗号化する場合と同様である。
ステップS4,S5の処理は、第3の実施の形態と同様である。
ステップS6(図4参照。)の判定処理では、計算機の鍵情報解析部(制御部41)は、自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されているか否かにより、自装置がグループメンバであるか否かを判定する。自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されている場合には、自装置がグループメンバであると判定する。また、自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されていない場合には、自装置がグループメンバではないと判定する。例えば、本例では、計算機2−1は、節点番号“0”,“1”,“3”を記憶する。計算機2−1の鍵情報解析部8−1は、図11に例示する鍵情報を参照した場合、節点番号“0”,“1”,“3”のいずれもkek タグに記述されていないので、自装置がグループメンバではないと判定し(ステップS6のNo)、処理を終了する。
また、例えば、計算機2−2は、節点番号“0”,“1”,“4”を記憶する。計算機2−2の鍵情報解析部8−2は、図11に例示する鍵情報を参照した場合、節点番号“4”が記述されているので、自装置がグループメンバであると判定し(ステップS6のYes)、ステップS7に移行する。同様に、計算機2−3は、節点番号“0”,“2”,“5”を記憶する。計算機2−3の鍵情報解析部8−3は、図11に例示する鍵情報を参照した場合、節点番号“2”が記述されているので、自装置がグループメンバであると判定し(ステップS6のYes)、ステップS7に移行する。計算機2−4に関しても同様である。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合と、共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合それぞれに分けてステップS7の処理について説明する。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合には、ステップS7(図4参照。)の復号処理で、計算機の鍵情報解析部(制御部41)は、自装置が記憶している節点番号と組み合わされたデータ(ここではKEKの暗号化データ)を復号するときに、予め記憶している情報を参照して、その節点番号に対応する共通鍵を特定し、その共通鍵でKEKの暗号化データを復号する。例えば、計算機2−2の鍵情報解析部8−2は、ステップS7において、予め記憶している情報を参照して、自装置が記憶している節点番号“4”に対応する共通鍵K4を特定する。そして、その共通鍵K4を用いて、節点番号“4” と組み合わされたデータ(KEKの暗号化データ)を復号する。また、例えば、計算機2−3の鍵情報解析部8−3は、ステップS7において、予め記憶している情報を参照して、自装置が記憶している節点番号“2”に対応する共通鍵K2を特定する。そして、その共通鍵K2を用いて、節点番号“2” と組み合わされたデータ(KEKの暗号化データ)を復号する。計算機2−4に関しても同様である。
また、鍵情報作成時に共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合には、ステップS7の復号処理で、計算機の鍵情報解析部(制御部41)は、自装置が記憶している節点番号と組み合わされたデータ(ここでは共有暗号鍵の暗号化データ)を復号するときに、予め記憶している情報を参照して、その節点番号に対応する共通鍵を特定し、その共通鍵で共有暗号鍵の暗号化データを復号する。この結果、共有暗号鍵が得られる。
また、グループメンバのうちネットワーク1に接続されている計算機同士で暗号化通信を行う場合には、共有暗号鍵で通信データを暗号化して送信し、また、受信したデータを共有暗号鍵で復号すればよい。例えば、第2の実施の形態と同様に通信データを送受信する。
次に、本実施の形態の効果について説明する。本実施の形態では、ブロードキャストエンクリプション(Broadcast Encryption)で利用する鍵束を共通鍵としてグループ管理サーバ5と各計算機とが共有する。そして、「グループメンバを包含する最も根に近い節点」、すなわち、「グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点」の共通鍵を用いて鍵情報を生成する。従って、非常に多くの計算機でグループを形成し、そのような多くの計算機でグループ鍵を共有する場合であっても、鍵情報の情報量を小さくすることができる。
第4の実施の形態において、鍵情報生成手段および鍵情報送信手段は、グループ管理サーバ5の制御部31によって実現される。鍵情報共有手段および復号手段は、計算機の制御部41によって実現される。共通鍵記憶手段は、グループ管理サーバ5の記憶装置32によって実現される。自装置共通鍵記憶手段は、計算機の記憶装置42によって実現される。
また、上記の鍵情報は例示であり、鍵情報に用いられるタグの名称などは、上記述の例に限定されない。また、鍵情報は、XML以外の言語で記述されてもよい。
上記のような各実施の形態の暗号通信システムは、例えば、ピアツーピアのコンテンツ配信サービスであって、サービス管理者がサービスするピアを固定し、グループ鍵を有さないピアがコンテンツのダウンロードをできないようなコンテンツ配信サービスに適用される。
また、上記のような各実施の形態の暗号通信システムは、例えば、サーバとノード間の秘匿通信や、ノード同士の秘匿通信を行うセンサネットワークにも適用される。
実施の形態5.
図13は、本発明による暗号通信システムの第5の実施の形態を示すブロック図である。第4の実施形態と同様の構成部については、図9と同一の符号を付し、詳細な説明を省略する。第5の実施の形態では、暗号通信システムは、グループ管理サーバ5と、計算機2−1〜2−5とを備える。図13に示す計算機2−5は、他の計算機2−1〜2−4と同様の計算機である。図13では5台の計算機を示しているが、計算機の台数は5台に限定されない。本実施の形態では、暗号通信システムに、LKH(Logical Key Hierarchy)法を適用する。このLKH法は、ブロードキャストエンクリプション(Broadcast Encryption)において、グループのメンバの入れ替わり頻度が高い際に木構造の一部の節点鍵を変更する。これにより、グループ管理サーバがメンバの入れ替わり頻度が高いグループを管理する場合でも大規模な木構造を事前に生成する必要がない。なお、本実施の形態の説明において、木構造の節点に対応する鍵を節点鍵と記す場合がある。
ここでは、各装置が以下のように共通鍵を保持している場合を例にして説明する。計算機2−1は、計算機2−1の秘密鍵として秘密鍵(共通鍵)K0,K1,K3を保持する。計算機2−2は、計算機2−2の秘密鍵として秘密鍵(共通鍵)K0,K1,K4を保持する。計算機2−3は、計算機2−3の秘密鍵として秘密鍵(共通鍵)K0,K2,K5を保持する。計算機2−4は、計算機2−4の秘密鍵として秘密鍵(共通鍵)K0,K2,K6を保持する。計算機2−5は、計算機2−5の秘密鍵として秘密鍵(共通鍵)K0’,K2’,K6’を保持する。また、グループ管理サーバ5は、グループ管理サーバ5の秘密鍵として秘密鍵(共通鍵)αを保持する。
さらに、グループ管理サーバ5は、計算機の秘密鍵K0〜K6およびK0’,K2’,K6’を保持する。すなわち、グループ管理サーバ5および各計算機2−1〜2−4は、秘密鍵(共通鍵)K0を秘密に共有する。グループ管理サーバ5および計算機2−1,2−2は、秘密鍵(共通鍵)K1を秘密に共有する。グループ管理サーバ5および計算機2−3,2−4は、秘密鍵(共通鍵)K2を秘密に共有する。グループ管理サーバ5および計算機2−1は、秘密鍵(共通鍵)K3を秘密に共有する。グループ管理サーバ5および計算機2−2は、秘密鍵(共通鍵)K4を秘密に共有する。グループ管理サーバ5および計算機2−3は、秘密鍵(共通鍵)K5を秘密に共有する。グループ管理サーバ5および計算機2−4は、秘密鍵(共通鍵)K6を秘密に共有する。グループ管理サーバ5および計算機2−5は、秘密鍵(共通鍵)K0’,K2’,K6’を秘密に共有する。
また、各計算機2−1〜2−5は、グループ管理サーバ5の秘密鍵αを保持する。すなわち、グループ管理サーバ5および各計算機2−1〜2−5は、秘密鍵(共通鍵)αを秘密に共有する。
また、グループ管理サーバ5は、第4の実施の形態と同様に、共有暗号鍵g1を保持する。また、鍵情報を作成するときにKEKで共有暗号鍵を暗号化する場合には、グループ管理サーバ5は、KEKも保持する。
第4の実施の形態と同様に、第5の実施の形態でも、グループ管理サーバ5は各計算機と秘密鍵(共通鍵)を事前に秘密に共有することを前提とする。このように共通鍵を予め秘密に共有する態様として、例えば、グループ管理サーバの管理主体(例えばCAなどの組織。人であってもよい。)が、秘密に共有する共通鍵を生成し、耐タンパ性を有するメモリ(例えばICカードなど。)にその共通鍵を格納し、計算機を管理する主体(人)にそのメモリを送付(例えば郵送など。)し、メモリを受け取った者が計算機に直接組み込む等の態様がある。ここに示した態様は一例であり、他の態様によって、共通鍵を予め秘密に共有してもよい。共通鍵を予め秘密に共有するので、グループ管理サーバ5は、ネットワーク1を介して共通鍵を受信することは行わない。また、本実施の形態では、グループ管理サーバ5の記憶装置32は、計算機の共通鍵(本例ではK0〜K6)の階層を示す木構造のデータを予め記憶する。この木構造のデータは、例えば、予め入力部34を介して入力され、制御部31が入力された木構造のデータを記憶装置32に記憶させればよい。共通鍵の階層を示す木構造のデータは、各計算機2−1〜2−4が共有する共通鍵(本例ではK0)を根(ルート)とし、個々の計算機2−1〜2−4が他の計算機と重複せずに保持している共通鍵(本例ではK3,K4,K5,K6)を葉(リーフ)とするデータである。すなわち、共通鍵の階層とは、各計算機が共有する共通鍵を根とし、個々の計算機が他の計算機と重複せずに記憶している共通鍵を葉とする階層である。また、木構造のデータにおいて、根、各節、各葉には、それぞれを特定するための識別情報(以下、節点番号と記す。)が定められている。木構造のデータでは、各葉がどの計算機に対応するのかが定められている。
また、根、葉、節の総称を節点と記すことにする。
図14は、共通鍵の階層を示す木構造のデータの例を示す説明図である。本例では、各計算機2−1〜2−4が共有する共通鍵K0が根となる。また、計算機2−1が保持して、他の計算機が保持していない共通鍵K3が葉となる。同様に、K4,K5,K6も葉となる。また、計算機2−1,2−2が保持して、計算機2−3,2−4が保持していない共通鍵K1は、根(K0)と、葉(K3,K4)との間の節となる。同様に、共通鍵K2は、根(K0)と、葉(K5,K6)との間の節となる。また、図14に示すように、各根、各節、各葉には節点番号が定められている。本例では、K0〜K6の各節の節点番号が“0”〜“6”であるものとする。また、図14に示すように、木構造のデータには、各葉K3,K4,K5,K6が、それぞれ計算機2−1,2−2,2−3,2−4に対応する葉であることを示す情報が含まれている。
また、木構造のデータには、グループに属さない計算機が保持する共通鍵も記述される。例えば、計算機2−2,2−3,2−4がグループを形成するものとして、この3台の計算機が保持する各共通鍵K0〜K2およびK4〜K6が予めグループ管理サーバ5に記憶される場合であっても、木構造のデータには、グループに属さない計算機2−1が保持する共通鍵K3も記述される。
ただし、以下の説明では、グループに属する計算機として以前計算機2−2,2−3,2−4が選定されており、その後計算機2−4を無効化して計算機2−5を新たに加える場合を例に説明する。従って、図14に示すように、木構造における各節点K0,K2,K6は、計算機2−5が保持する鍵を示す節点K0’,K2’,K6’に置き換えられる。また、葉K6が計算機2−4に対応する葉であることを示す情報は、葉K6’が計算機2−5に対応する葉であることを示す情報に置き換えられる。なお、節点が置き換えられても、節点番号は変わらない。
また、本実施の形態では、各計算機2−1〜2−5は、自身が保持する共通鍵の節点番号と、その節点番号がどの共通鍵に対応する番号であるのかを示す情報を予め保持する。各計算機2−1〜2−5には、例えば、グループ管理者から、節点番号およびその節点番号がどの共通鍵に対応する番号であるのかを示す情報が入力され、その入力された情報を記憶装置42(図3参照。)に記憶させればよい。例えば、共通鍵K0,K1,K3を保持する計算機2−1は、節点番号“0”,“1”,“3”を記憶する。同様に、計算機2−2は、節点番号“0”,“1”,“4”を記憶する。計算機2−3は、節点番号“0”,“2”,“5”を記憶する。計算機2−4は、節点番号“0”,“2”,“6”を記憶する。計算機2−5は、節点番号“0”,“2”,“6”を記憶する。本例では、後計算機2−4を無効化して計算機2−5を新たに加える。従って、計算機2−5は、節点番号“0”,“2”,“6”を記憶する。また、各計算機は、各節点番号が、どの共通鍵に対応する番号であるのかを示す情報も記憶する。
既に述べたように、ここでは、グループに属する計算機として以前計算機2−2,2−3,2−4が選定されており、その後計算機2−4を無効化して計算機2−5を新たに加える場合を例に説明する。ステップS1では、グループに属する各計算機(本例では、計算機2−2,2−3,2−5)を示す情報が入力され、グループ管理サーバ5の制御部31は、木構造のデータにおけるどの葉が、グループに属するそれぞれの計算機に対応する葉であるのかを特定する。また、ステップS1では、グループ管理サーバ5には、無効化される計算機(本例では計算機2−4)の情報、および、その無効化される計算機に代わって新たに追加される計算機(本例では計算機2−5)の情報が入力される。グループ管理サーバ5の制御部31は、入力された情報に基づき、当初の木構造のデータに含まれていて無効化される計算機の鍵を示す節点を、新たに追加される計算機が保持する鍵を示す節点に置き換える。また、制御部31は、置き換える前の葉に対応する計算機(無効化される計算機)の情報を、置き換えた後の葉に対応する計算機(新たに追加される計算機)の情報に置き換える。例えば、制御部31は、図14に示すように、当初の木構造における節点K0,K2,K6(無効化される計算機2−4の鍵を示す節点)を、新たに追加される計算機2−5が保持する鍵を示す節点K0’,K2’,K6’に置き換える。また、制御部31は、葉K6が計算機2−4に対応する葉であることを示す情報を、葉K6’が計算機2−5に対応する葉であることを示す情報に置き換える。ただし、制御部31は、節点番号は変化させない。本実施の形態では、ステップS1の後、ステップS2を行わずにステップS3に移行する。
既に説明したように、鍵情報を生成する態様として、共有暗号鍵をグループに属する各計算機の鍵で暗号化する態様や、共有暗号鍵をKEKで暗号化する態様がある。この二つの各態様での鍵情報作成処理(ステップS3)についてそれぞれ説明する。なお、本実施の形態では、鍵情報には、ピアIDの代わりに、節点の識別情報(本例では節点番号)が含まれる。
本実施の形態では、ステップS3で、まず、節点鍵が変更された後も木構造に属する計算機に対して新しい節点鍵を伝達するために、このような計算機が保有する有効な接点鍵で暗号化する。すなわち、ステップS3で、グループ管理サーバ5の制御部31は、木構造のデータにおいて置き換えられた節点が示す鍵を、無効化されずに残った計算機に保持させることができるように、置き換えられた節点が示す鍵を、無効化されずに残った計算機が保持する節点鍵(または無効化されずに残った計算機が保持することになる鍵)で暗号化する。つぎに、節点鍵を別の節点鍵で暗号化した結果得られるデータを文字コードとして表すために、このデータを、例えばBASE64などで変換(エンコード)する。図14に示す例では、グループ管理サーバ5の制御部31は、まず、変更される節点鍵のうち、葉を除いた最も葉に近い節点鍵K2’は計算機2−3に保有されるべきものなので、K2’をK5(計算機2−3が保持する鍵)で暗号化し、BASE64等で変換する。つぎに、K2’のつぎに最も葉に近い節点鍵K0’は、無効化された計算機2−4を除くすべての計算機に保有されるべきものなので、K0’をK1(計算機2−1,2−2が保持する鍵)で暗号化し、BASE64等で変換したものと、K2’(計算機2−3が保持することになる鍵)で暗号化し、BASE64等で変換したものを別々に作成する。
つぎに、共有暗号鍵をKEKで暗号化して鍵情報を作成する場合、グループ管理サーバ5の制御部31は、グループメンバを包含する最も根に近い節点の共通鍵でKEKを暗号化する。なお、「グループメンバを包含する最も根に近い節点」とは、「グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点」を意味する。また、ここで、節点とは、節に限らず、葉や根であってもよい。また、制御部31は、そのような節点の共通鍵でKEKを暗号化し、その暗号化データと、その節点の節点番号とを組み合わせて、kek タグとともに記述する。第1の実施の形態や第3の実施の形態では、ピアIDと暗号化したKEKとの組み合わせをkek タグとともに記述していたが、本実施の形態では、節点番号とその節点番号の共通鍵で暗号化したKEKとの組み合わせをkek タグとともに記述する点で、第1の実施の形態や第3の実施の形態とは異なる。また、署名データの生成態様は、第3の実施の形態と同様である。ステップS3のその他の点に関しては第1の実施の形態において共有暗号鍵をKEKで暗号化する場合と同様である。
図15は、本例において生成される鍵情報の例を示す説明図である。本例では、計算機2−2,2−3,2−5がグループに属し、計算機2−1,2−4はグループに属さない。制御部31は、木構造のデータを参照して、「グループメンバを包含する最も根に近い節点」、すなわち、「グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点」を判定する。ここで、計算機が保持する鍵には、計算機が保持することが可能な鍵(計算機が保持することになる鍵)も含まれる。図14に示す木構造を参照すると、計算機2−2に関しては、グループに属さない計算機2−1が保持することが可能な共通鍵K0’および計算機2−1が保持するK1,K3を除けば、最も根に近い節点はK4(節点番号“4”)となる。また、計算機2−3,2−5に関しては、グループに属さない計算機2−1が保持することが可能な共通鍵K0’および計算機2−1が保持するK1,K3を除けば、最も根に近い節点はK2’(節点番号“2”)となる。従って、制御部31は、節点番号“2”に対応する新しい共通鍵K2’でKEKを暗号化し、その暗号化したデータをBASE64などで変換し、変換結果を節点番号“2”と組み合わせて記述する(図15に示す8行目の記載を参照。)。同様に、制御部31は、節点番号“4”に対応する共通鍵K4でKEKを暗号化し、その暗号化したデータをBASE64などで変換し、変換結果を節点番号“4”と組み合わせて記述する(図15に示す8行目の記載を参照。)。これらの記述は、kek タグとあわせて記述される。つぎに、制御部31は、節点鍵が変更された後も木構造に属する計算機に対して新しい節点鍵を伝達するために、上述の暗号化(すなわち、置き換えられた節点が示す鍵を、無効化されずに残った計算機が保持する節点鍵(または無効化されずに残った計算機が保持することになる鍵)で暗号化する処理)を行い、Base64で変換された情報をrevタグとともに記述する。revタグとともに記述される情報は、節点鍵が変更された節点番号と、変更された節点鍵を暗号化した節点鍵の節点番号と、その節点番号に対応する節点鍵で、変更された節点鍵を暗号化し、BASE64等で変換したデータとの組み合わせである。図15に例示する“2:5:42af”は、節点番号2の節点鍵K2が変更され、その新しい節点鍵K2’が節点番号5の節点鍵K5により暗号化されていることを示していて、“42af”はK2’をK5で暗号化したデータをBASE64等で変換したものであることを示している。同様に、図15に例示する“0:2:ef3f”は、節点番号0の節点鍵K0が変更され、その新しい節点鍵K0’が節点番号2の節点鍵K2’により暗号化されていることを示していて、“ef3f”はK0’をK2’で暗号化したデータをBASE64等で変換したものであることを示している。同様に、図15に例示する“0:1:abcd”は、節点番号0の節点鍵K0が変更され、その新しい節点鍵K0’が節点番号1の節点鍵K1により暗号化されていることを示していて、“abcd”はK0’をK1で暗号化したデータをBASE64等で変換したものであることを示している。制御部31は、このようなrevタグの記述を行う。その他の点(共通暗号鍵の暗号化や署名データの生成等)については、第3の実施の形態と同様であるので説明を省略する。
図16、図17は、本例において生成される鍵情報の変形例を示す説明図である。本例では、新しい節点鍵の情報を図17に示したような別の鍵情報(以降、この鍵情報のことを節点鍵情報と呼ぶ)として管理した上で、図16に示すようにrevタグには節点鍵情報を取得するためのKey_Locationが記載される。このKey_Locationは、第2の実施の形態で説明したKey_Locationと同様、計算機が節点鍵情報を取得するための情報である。例えば、節点鍵情報のURI(Uniform Resource Indicator)をKey_Locationとしてもよい。この場合、例えば、グループ管理サーバ5が、節点鍵情報を生成するときに節点鍵情報にURIの情報を含め、また、グループ管理サーバ5自身が節点鍵情報を保持して、URIによって節点鍵情報へのアクセスを可能となるようにしておけばよい。また、URIがグループ管理サーバ5以外の装置を指定するURIであり、グループ管理サーバ5がその装置に節点鍵情報を送信して記憶させてもよい。あるいは、通信データを送信する計算機がURIを定め、その計算機がURIによって特定される装置に節点鍵情報を送信して記憶させてもよい。また、通信データを送受信する各計算機が、DHT(Distributed Hash Table)のようなピアツーピアのファイル共有システムを利用して節点鍵情報を共有している場合には、節点鍵情報のハッシュ値をKey_Locationとして用いてもよい。図17に記載したrevタグとともに記述される情報は、図15を参照して説明した場合と同様、節点鍵が変更された節点番号と、変更された節点鍵を暗号化した節点鍵の節点番号と、その節点番号に対応する節点鍵で、変更された節点鍵を暗号化し、BASE64等で変換したデータとの組み合わせである。図17に例示する“2:5:42af”は、節点番号2の節点鍵K2が変更され、その新しい節点鍵K2’が節点番号5の節点鍵K5により暗号化されていることを示していて、“42af”はK2’をK5で暗号化したデータをBASE64等で変換したものであることを示している。同様に、図17に例示する“0:2:ef3f”は、節点番号0の節点鍵K0が変更され、その新しい節点鍵K0’が節点番号2の節点鍵K2’により暗号化されていることを示していて、“ef3f”はK0’をK2’で暗号化したデータをBASE64等で変換したものであることを示している。同様に、図17に例示する“0:1:abcd”は、節点番号0の節点鍵K0が変更され、その新しい節点鍵K0’が節点番号1の節点鍵K1により暗号化されていることを示していて、“abcd”はK0’をK1で暗号化したデータをBASE64等で変換したものであることを示している。その他の点(共通暗号鍵の暗号化や署名データの生成等)については、第3の実施の形態と同様であるので説明を省略する。
また、本実施の形態では、グループに属する各計算機の鍵で共有暗号鍵を暗号化する場合、ステップS3で、グループ管理サーバ5の制御部31は、グループメンバを包含する最も根に近い節点の共通鍵で共有暗号鍵を暗号化する。すなわち、制御部31は、グループに属さない計算機が保持する共通鍵を除いた中で、最も根に近い節点の共通鍵を用いて、共有暗号鍵を暗号化する。なお、この節点の共通鍵には新しい節点鍵を利用する。そして、制御部31は、その節点の節点番号と、共有暗号鍵を暗号化したデータとを組み合わせて、kek タグとともに記述する。制御部31は、このような節点番号と共有暗号鍵を暗号化したデータとの組み合わせを、グループに属する各計算機毎に導出して、kek タグとともに記述する。最後に、節点鍵が変更された後も木構造に属する計算機に対して新しい節点鍵を伝達するために、上述の暗号化(すなわち、置き換えられた節点が示す鍵を、無効化されずに残った計算機が保持する節点鍵(または無効化されずに残った計算機が保持することになる鍵)で暗号化する処理)を行い、Base64で変換された情報をrevタグとともに記述するか、図17に例示するような新しい節点鍵情報を生成し、その節点鍵情報の場所をrevタグとともに記述する。また、署名データの生成態様は、第3の実施の形態と同様である。その他の点に関しては第1の実施の形態においてグループに属する各計算機の鍵で共有暗号鍵を暗号化する場合と同様である。
ステップS4,S5の処理は、第3の実施の形態と同様である。
ステップS6(図4参照。)の判定処理では、計算機の鍵情報解析部(制御部41)は、自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されているか否かにより、自装置がグループメンバであるか否かを判定する。自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されている場合には、自装置がグループメンバであると判定する。また、自装置が予め記憶している節点番号と一致する節点番号がkek タグに記述されていない場合には、自装置がグループメンバではないと判定する。例えば、本例では、計算機2−1は、節点番号“0”,“1”,“3”を記憶する。計算機2−1の鍵情報解析部8−1は、図15に例示する鍵情報を参照した場合、節点番号“0”,“1”,“3”のいずれもkek タグに記述されていないので、自装置がグループメンバではないと判定し(ステップS6のNo)、処理を終了する。
また、例えば、計算機2−2は、節点番号“0”,“1”,“4”を記憶する。計算機2−2の鍵情報解析部8−2は、図15に例示する鍵情報を参照した場合、節点番号“4”が記述されているので、自装置がグループメンバであると判定し(ステップS6のYes)、ステップS7に移行する。同様に、計算機2−3は、節点番号“0”,“2”,“5”を記憶する。計算機2−3の鍵情報解析部8−3は、図15に例示する鍵情報を参照した場合、節点番号“2”が記述されているので、自装置がグループメンバであると判定し(ステップS6のYes)、ステップS7に移行する。計算機2−5に関しても同様である。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合と、共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合それぞれに分けてステップS7の処理について説明する。
鍵情報作成時に共有暗号鍵がKEKで暗号化される場合には、計算機の鍵情報解析部(制御部41)は、ステップS7(図4参照。)の復号処理で、まずrevタグを参照し、図16に例示するようなフォーマットだと先に節点鍵情報をダウンロードした上で、自分が保持する節点鍵が更新されてないか確認した上で、更新されている場合は、自分の保有する他の節点鍵を用いて新しい節点鍵を復号し、格納する。例えば、計算機2−3の鍵情報解析部(制御部41)が、図15に例示する鍵情報を共有化しているとする。この場合、計算機2−3の鍵情報解析部8−3は、“2:5:42af”という記述を参照して、自身が保持する節点鍵(節点番号2に対応するK2)が更新されたと判定し、“42af”をBASE64等で変換する。さらに、そのデータを節点番号5に対応する鍵K5(計算機2−3が保持している鍵)で復号し、その結果得られる鍵K2’を記憶装置に格納する。さらに、計算機2−3の鍵情報解析部8−3は、“0:2:ef3f”という記述を参照して、自身が保持する節点鍵(節点番号0に対応するK0)が更新されたと判定し、“0:2:ef3f” をBASE64等で変換する。さらに、そのデータを節点番号2に対応する鍵K2’で復号し、その結果得られる鍵K0’を記憶装置に格納する。ここでは、計算機2−3が鍵K2’を得て、さらに“0:2:ef3f”という記述を参照して鍵K0’を得る場合を説明した。計算機2−1,2−2は、“0:1:abcd”という記述を参照して、自身が保持する鍵K1を用いて、K0’を復号すればよい。また、自分の保有する節点鍵で新しい節点鍵を復号できない場合はその計算機は無効化端末であるため、処理を終了する。例えば、計算機2−4の鍵情報解析部(制御部41)は、図15に例示するrevタグの記述を参照して、暗号化された鍵を復号するための鍵を保持していないと判定し、処理を終了する。つぎに、計算機の鍵情報解析部(制御部41)は、自装置が記憶している節点番号と組み合わされたデータ(ここではKEKの暗号化データ)を復号するときに、予め記憶している情報を参照して、その節点番号に対応する共通鍵を特定し、その共通鍵でKEKの暗号化データを復号する。例えば、計算機2−2の鍵情報解析部8−2は、ステップS7において、予め記憶している情報を参照して、自装置が記憶している節点番号“4”に対応する共通鍵K4を特定する。そして、その共通鍵K4を用いて、節点番号“4” と組み合わされたデータ(KEKの暗号化データ)を復号する。また、例えば、計算機2−5の鍵情報解析部8−5は、ステップS7において、予め記憶している情報を参照して、自装置が記憶している節点番号“2”に対応する共通鍵K2’を特定する。そして、その共通鍵K2’を用いて、節点番号“2” と組み合わされたデータ(KEKの暗号化データ)を復号する。計算機2−3に関しても同様である。
また、鍵情報作成時に共有暗号鍵がグループに属する各計算機の鍵で暗号化される場合には、ステップS7の復号処理で、計算機の鍵情報解析部(制御部41)は、自装置が記憶している節点番号と組み合わされたデータ(ここでは共有暗号鍵の暗号化データ)を復号するときに、予め記憶している情報を参照して、その節点番号に対応する共通鍵を特定し、その共通鍵で共有暗号鍵の暗号化データを復号する。この結果、共有暗号鍵が得られる。
また、グループメンバのうちネットワーク1に接続されている計算機同士で暗号化通信を行う場合には、共有暗号鍵で通信データを暗号化して送信し、また、受信したデータを共有暗号鍵で復号すればよい。例えば、第2の実施の形態と同様に通信データを送受信する。
次に、本実施の形態の効果について説明する。本実施の形態では、LKH(Logical Key Hierarchy)法を利用して、グループのメンバの入れ替わり頻度が高い際に木構造の一部の節点鍵を変更する。これにより、ブロードキャストエンクリプション(Broadcast Encryption)で利用する木構造を構築するときに、グループメンバの入れ替わりを考慮しなくても、グループの規模のみ考慮して構築すればよいため、不必要に大規模な木構造を事前に生成する必要がない。
第5の実施の形態において、鍵情報生成手段および鍵情報送信手段は、グループ管理サーバ5の制御部31によって実現される。鍵情報共有手段および復号手段は、計算機の制御部41によって実現される。共通鍵記憶手段は、グループ管理サーバ5の記憶装置32によって実現される。自装置共通鍵記憶手段は、計算機の記憶装置42によって実現される。
また、上記の鍵情報は例示であり、鍵情報に用いられるタグの名称などは、上記述の例に限定されない。また、鍵情報は、XML以外の言語で記述されてもよい。
上記のような各実施の形態の暗号通信システムは、例えば、ピアツーピアのコンテンツ配信サービスであって、サービス管理者がサービスするピアを固定し、グループ鍵を有さないピアがコンテンツのダウンロードをできないようなコンテンツ配信サービスに適用される。
また、上記のような各実施の形態の暗号通信システムは、例えば、サーバとノード間の秘匿通信や、ノード同士の秘匿通信を行うセンサネットワークにも適用される。