次に本発明について図面を参照して詳細に説明する。
図1は本発明の一実施形態における暗号通信システムの構成を示すブロック図である。
図1に示すように、暗号通信システムは、送信装置1および受信装置2を有する。
送信装置1は、受信装置2と相互に認証しあい、暗号鍵を共有し、自装置内に保有する平文コンテンツを暗号化して受信装置2に送信する通信装置である。
受信装置2は、送信装置1と相互に認証しあい、暗号鍵を共有し、送信装置1から受信した暗号化コンテンツを復号化して平文コンテンツを取得する通信装置である。
まず、本実施形態の暗号通信システムの概略の動作について説明する。
送信装置1と受信装置2が交互に乱数を通知することにより複数の乱数を共有し、それらの乱数を用いて暗号鍵を生成する。
本実施形態の送信装置1および受信装置2が生成する暗号鍵には2種類がある。1つは、コンテンツ転送の前段階として送信装置1と受信装置2とが共有すべき乱数を相互に通知するときに用いる暗号鍵である。それを一時鍵と呼ぶことにする。もう1つは、乱数の共有が完了した後、送信装置1から受信装置2へコンテンツを転送するのに用いる暗号鍵である。それをセッション鍵と呼ぶことにする。
送信装置1から受信装置2へ乱数を通知するとき、その乱数を含むメッセージには送信装置1の署名が付加され、受信装置2はその署名を検証することにより送信装置1を認証する。逆に、受信装置2から送信装置1へ乱数を通知するとき、その乱数を含むメッセージには受信装置2の署名が付加され、送信装置1はその署名を検証することにより受信装置2を認証する。
それらの署名には乱数から生成された暗号鍵による暗号化が適用されている。2つ目以降の乱数を通知するためのメッセージに付加される署名には、それまでに累積的に共有した全ての乱数を用いて生成した暗号鍵による暗号化が適用される。
なお、送信装置1と受信装置2は、複数の乱数の共有が完了するまでは、それまでに共有した乱数を用いて生成した暗号鍵を一時鍵として署名の暗号化に使用する。
一方、送信装置1と受信装置2は、複数の乱数の共有が完了すると、最終的に共有した全ての乱数を用いて生成した暗号鍵をセッション鍵として送信装置1から受信装置2へ送信するコンテンツの暗号化およびメッセージに付加される署名の暗号化に使用する。
以下、送信装置1および受信装置2のそれぞれの構成および動作について説明する。
送信装置1は、鍵生成部11、認証部12、記憶装置13、コンテンツ送信部14およびコンテンツデータベース15を有する。
鍵生成部11は、乱数を生成し、生成した乱数を記憶装置13の乱数テーブルに格納する。また、鍵生成部11は、受信装置2が生成した乱数を認証部12から受信すると、受信した乱数を記憶装置13の乱数テーブルに格納する。
鍵生成部11は、送信装置1から受信装置2へ通知すべき乱数を生成し、その乱数を生成したタイミングで暗号鍵を算出する。このとき、鍵生成部11は、受信装置2との相互認証処理を開始してから送受信した全ての乱数と、新たに生成した乱数とを基に暗号鍵を算出する。
また、鍵生成部11は、受信装置2から乱数を受信したタイミングで暗号鍵を算出する。このとき、鍵生成部11は、受信装置2との相互認証処理を開始してから送受信した全ての乱数と、新たに受信装置2から受信した乱数とを基に暗号鍵を算出する。
そして、鍵生成部11は、算出した暗号鍵を記憶装置13の暗号鍵テーブルに格納する。
送信装置1の認証部12は、送信装置1自身が受信装置2を認証するときと、送信装置1が受信装置2による認証を受けるときに、それらの認証に関する処理を行う。
まず、送信装置1が受信装置2による認証を受けるときの認証部12の動作について説明する。
認証部12は、鍵生成部11が生成した乱数を受信装置2に送信するために、乱数を含むメッセージを作成する。認証部12は、作成したメッセージを記憶装置13のメッセージテーブルに格納する。さらに、認証部12は、作成したメッセージを所定のアルゴリズムで暗号化した暗号化メッセージを作成する。なお、暗号鍵を共有する前にメッセージを暗号化および復号化するアルゴリズムは、送信装置1および受信装置2が共有している共通処理である。また、暗号鍵を共有した後、認証部12は、鍵生成部11が最後に算出した暗号鍵をセッション鍵とし、作成したメッセージをセッション鍵で暗号化する。
また、認証部12は、受信装置2との相互認証処理を開始してから送受信した全てのメッセージと今回送信するメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。なお、所定のダイジェスト関数処理は、送信装置1および受信装置2が共有している共通処理である。ダイジェスト関数の例として、MD5(Message Digest 5)やSHA−1(Secure Hash Algorithm 1)などがあげられる。さらに、認証部12は、鍵生成部11によって生成された暗号鍵を用いて、算出したダイジェスト値を暗号化した署名を作成する。
認証部12は、作成した暗号化メッセージに署名を付与して受信装置2の認証部22に送信する。認証部12は、メッセージを暗号化してから送信することにより、メッセージの機密性を保護する。また、認証部12は、暗号化メッセージに署名を付与して送信することにより、メッセージの完全性を保護する。
次に、送信装置1が受信装置2を認証するときの認証部12の動作について説明する。
認証部12は、受信装置2の認証部22から暗号化メッセージを受信すると、受信した暗号化メッセージを所定のアルゴリズムで復号化することにより、受信装置2の認証部22が生成したメッセージを取得する。認証部12は、取得したメッセージを記憶装置13のメッセージテーブルに格納する。さらに、認証部12は、取得したメッセージから乱数を抽出し、抽出した乱数を鍵生成部11に送信する。
認証部12は、鍵生成部11が算出した暗号鍵を用いて、受信装置2から受信した署名を復号化することにより、受信装置2が算出したダイジェスト値を取得する。
また、認証部12は、受信装置2との相互認証処理を開始してから送受信した全てのメッセージと今回受信装置2から受信したメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。認証部12は、受信した署名を復号化することにより取得したダイジェスト値と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値を比較することにより、受信したメッセージの正当性を検証する。
認証部12は、乱数を含むメッセージの送受信を、受信装置2と所定回数繰り返して実施することにより受信装置2を認証する。送信装置1および受信装置2は、相互認証処理を開始してから送受信した全てのメッセージを累積してダイジェスト値を作成するため、第三者によるなりすましを防止できる。また、送信装置1および受信装置2は、相互認証処理を開始してから送受信した全ての乱数を累積して暗号鍵を作成するため、第三者にメッセージの送受信を傍受されても、その第三者に暗号鍵を漏洩する危険性を低減できる。
記憶装置13は、乱数テーブル、暗号鍵テーブルおよびメッセージテーブルを格納する揮発性メモリであり、RAM(Random Access Memory)などによって実現できる。
記憶装置13に格納されるテーブルの例を図2に示す。乱数テーブルには、鍵生成部11が生成した乱数および受信装置2から受信した乱数が格納される。また、暗号鍵テーブルには、鍵生成部11が乱数から生成した暗号鍵が格納される。また、メッセージテーブルには、受信装置2との相互認証処理を開始してから送受信した全てのメッセージが格納される。
コンテンツ送信部14は、鍵生成部11が最後に算出した暗号鍵をセッション鍵として使用する。セッション鍵は、送信装置1および受信装置2が複数のメッセージを送受信することにより取得した複数の乱数を累積して作成されているため、セキュリティの強度は高くなっている。
コンテンツ送信部14は、送信装置1が保有する平文コンテンツを、セッション鍵を用いて暗号化した暗号化コンテンツを作成する。
また、コンテンツ送信部14は、平文コンテンツに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。
コンテンツ送信部14は、暗号化コンテンツおよび平文コンテンツのダイジェスト値を含むコンテンツメッセージを作成する。コンテンツ送信部14は、作成したコンテンツメッセージを記憶装置13のメッセージテーブルに格納する。コンテンツ送信部14は、作成したコンテンツメッセージをさらにセッション鍵で暗号化した暗号化コンテンツメッセージを作成する。
また、コンテンツ送信部14は、受信装置2との相互認証処理を開始してから送受信した全てのメッセージおよびコンテンツメッセージと今回送信するコンテンツメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。さらに、コンテンツ送信部14は、算出したダイジェスト値を、セッション鍵を用いて暗号化した署名を作成する。
コンテンツ送信部14は、作成した暗号化コンテンツメッセージに署名を付与して受信装置2のコンテンツ受信部24に送信する。
コンテンツデータベース15は、平文コンテンツが格納されるデータベースである。
一方、受信装置2は、鍵生成部21、認証部22、記憶装置23、コンテンツ受信部24およびコンテンツデータベース25を有する。
鍵生成部21の基本的な構成は、送信装置1の鍵生成部11の構成と同じである。
鍵生成部21は、乱数を生成し、生成した乱数を記憶装置23の乱数テーブルに格納する。また、鍵生成部21は、送信装置1が生成した乱数を認証部22から受信すると、受信した乱数を記憶装置23の乱数テーブルに格納する。
鍵生成部21は、受信装置2から送信装置1へ通知すべき乱数を生成し、その乱数を生成したタイミングで暗号鍵を算出する。このとき、鍵生成部21は、送信装置2との相互認証処理を開始してから送受信した全ての乱数と、新たに生成した乱数とを基に暗号鍵を算出する。
また、鍵生成部21は、送信装置1から乱数を受信したタイミングで暗号鍵を算出する。このとき、鍵生成部21は、送信装置1との相互認証処理を開始してから送受信した全ての乱数と、新たに送信装置1から受信した乱数とを基に暗号鍵を算出する。
そして、鍵生成部21は、算出した暗号鍵を記憶装置23の暗号鍵テーブルに保存する。
認証部22の基本的な構成は、送信装置1の認証部12の構成と同じである。
受信装置2の認証部22は、受信装置2自身が送信装置1を認証するときと、受信装置2が送信装置1による認証を受けるときに、それらの認証に関する処理を行う。
まず、受信装置2が送信装置1を認証するときの認証部22の動作について説明する。
認証部22は、送信装置1の認証部12から暗号化メッセージを受信すると、受信した暗号化メッセージを所定のアルゴリズムで復号化することにより、送信装置1の認証部12が生成したメッセージを取得する。認証部22は、取得したメッセージを記憶装置23のメッセージテーブルに格納する。認証部22は、メッセージから乱数を抽出し、抽出した乱数を鍵生成部21に送信する。
認証部22は、鍵生成部21が算出した暗号鍵を用いて、送信装置1から受信した署名を復号化し、送信装置1が算出したダイジェスト値を取得する。
また、認証部22は、送信装置1との相互認証処理を開始してから送受信した全てのメッセージと今回送信装置1から受信したメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。認証部22は、受信した署名を復号化することにより取得したダイジェスト値と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値を比較することにより、受信したメッセージの正当性を検証する。
次に、受信装置2が送信装置1による認証を受けるときの認証部22の動作について説明する。
認証部22は、鍵生成部21が生成した乱数を送信装置1に送信するために、乱数を含むメッセージを作成する。認証部22は、作成したメッセージを記憶装置23のメッセージテーブルに格納する。さらに、認証部22は、作成したメッセージを所定のアルゴリズムで暗号化した暗号化メッセージを作成する。
また、認証部22は、送信装置1との相互認証処理を開始してから送受信した全てのメッセージと今回送信するメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。さらに、認証部22は、鍵生成部21によって生成された暗号鍵を用いて、算出したダイジェスト値を暗号化した署名を作成する。
認証部22は、作成した暗号化メッセージに署名を付与して送信装置1の認証部12に送信する。
認証部22は、乱数を含むメッセージの送受信を、送信装置1と所定回数繰り返して実施することにより送信装置1を認証する。
記憶装置23は、乱数テーブル、暗号鍵テーブルおよびメッセージテーブルを保存する揮発性メモリであり、RAM(Random Access Memory)などによって実現できる。
乱数テーブルには、鍵生成部21が生成した乱数および送信装置1から受信した乱数が格納される。また、暗号鍵テーブルには、鍵生成部21が乱数から生成した暗号鍵が格納される。また、メッセージテーブルには、送信装置1との相互認証処理を開始してから送受信した全てのメッセージが格納される。
コンテンツ受信部24は、鍵生成部21が最後に算出した暗号鍵をセッション鍵として使用する。
コンテンツ受信部24は、送信装置1のコンテンツ送信部14から暗号化コンテンツメッセージを受信すると、セッション鍵を用いて、受信した暗号化コンテンツメッセージを復号化することにより、送信装置1のコンテンツ送信部14が生成したコンテンツメッセージを取得する。コンテンツ受信部24は、取得したコンテンツメッセージを記憶装置23のメッセージテーブルに格納する。
コンテンツ受信部24は、セッション鍵を用いて、送信装置1から受信した署名を復号化し、送信装置1が算出したコンテンツメッセージのダイジェスト値を取得する。
また、コンテンツ受信部24は、送信装置1との相互認証処理を開始してから送受信した全てのメッセージおよびコンテンツメッセージと今回送信装置1から受信したコンテンツメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。コンテンツ受信部24は、受信した署名を復号化することにより取得したダイジェスト値と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値を比較することにより、受信したコンテンツメッセージの正当性を検証する。
受信したコンテンツメッセージが正当であると判別すると、コンテンツ受信部24は、受信したコンテンツメッセージに含まれる暗号化コンテンツを、セッション鍵を用いて復号化し、平文コンテンツを取得する。
また、コンテンツ受信部24は、取得した平文コンテンツに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する。コンテンツ受信部24は、受信したコンテンツメッセージに含まれる、送信装置1が算出した、平文コンテンツのダイジェスト値と、自装置で所定のダイジェスト関数処理を施すことにより取得した平文コンテンツのダイジェスト値を比較することにより、受信したコンテンツの正当性を検証する。
受信したコンテンツが正当であると判別すると、コンテンツ受信部24は、受信したコンテンツをコンテンツデータベース25に格納する。
コンテンツデータベース25は、取得した平文コンテンツを格納するデータベースである。
次に図1に示した暗号通信システムで送信装置1と受信装置2が相互認証するときの送信装置1と受信装置2のシーケンスについて説明する。
図3は図1に示した暗号通信システムで送信装置1と受信装置2が相互認証するときの送信装置1と受信装置2のシーケンスを示す図である。
相互認証処理を開始する前の、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図4aに示す。図4aに示すように、送信装置1の乱数テーブル、暗号鍵テーブルおよびメッセージテーブルには、まだ、乱数、暗号鍵およびメッセージは格納されていない。送信装置1のコンテンツデータベース15には受信装置2に送信するための平文コンテンツが格納されている。また、受信装置2の乱数テーブル、暗号鍵テーブルおよびメッセージテーブルにも、まだ、乱数、暗号鍵およびメッセージは格納されていない。
相互認証処理を開始すると、まず、送信装置1の鍵生成部11は、乱数1を生成し、生成した乱数1を記憶装置13の乱数テーブルに格納する(ステップS1)。次に、鍵生成部11は、生成した乱数1から一時鍵1を算出する。また、鍵生成部11は、算出した一時鍵1を記憶装置13の暗号鍵テーブルに格納する。
鍵生成部11が乱数1を生成し、一時鍵1を算出すると、認証部12は、乱数1を含むメッセージ1を作成する(ステップS2)。認証部12は、作成したメッセージ1を記憶装置13のメッセージテーブルに格納する。さらに、認証部12は、作成したメッセージ1を所定のアルゴリズムで暗号化した暗号化メッセージ1を作成する。
次に、認証部12は、メッセージ1に対して所定のダイジェスト関数処理を施したダイジェスト値1を算出する。さらに、認証部12は、算出したダイジェスト値1を、一時鍵1を用いて暗号化した署名1を作成する(ステップS3)。
次に、認証部12は、暗号化メッセージ1に署名1を付与して受信装置2の認証部22に送信する(ステップS4)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに送信装置1から受信装置2に送信されるデータを図4bに示す。図4bに示すように、送信装置1の乱数テーブルには乱数1が格納され、暗号鍵テーブルには一時鍵1が格納され、メッセージテーブルにはメッセージ1が格納されている。また、乱数1を含むメッセージ1を暗号化した暗号化メッセージ1が、署名1とともに送信装置1から受信装置2に送信される。
受信装置2の認証部22は、送信装置1の認証部12から暗号化メッセージ1を受信すると、送信装置1の認証部12が施した暗号化に対応する所定のアルゴリズムで、受信した暗号化メッセージ1を復号化し、メッセージ1を取得する。認証部22は、取得したメッセージ1を記憶装置23のメッセージテーブルに格納する。さらに、認証部22は、メッセージ1から乱数1を抽出し、抽出した乱数1を鍵生成部21に送信する(ステップS5)。
鍵生成部21は、乱数1を認証部22から受信すると、受信した乱数1を記憶装置23の乱数テーブルに格納する(ステップS6)。次に、鍵生成部21は、受信した乱数1から一時鍵1を算出する。また、鍵生成部21は、算出した一時鍵1を記憶装置23の暗号鍵テーブルに保存する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図4cに示す。図4cに示すように、受信装置2の乱数テーブルには乱数1が格納され、暗号鍵テーブルには一時鍵1が格納、メッセージテーブルにはメッセージ1が格納されている。
認証部22は、鍵生成部21が、乱数1を記憶装置23の乱数テーブルに、一時鍵1を記憶装置23の暗号鍵テーブルに保存すると、一時鍵1を用いて送信装置1から受信した署名1を復号化し、送信装置1が算出したダイジェスト値1を取得する。
また、認証部22は、送信装置1から受信したメッセージ1に対して所定のダイジェスト関数処理を施したダイジェスト値1−2を算出する。認証部22は、受信した署名1を復号化することにより取得したダイジェスト値1と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値1−2を比較することにより、受信したメッセージ1の正当性を検証する(ステップS7)。
受信したメッセージ1が正当でないと判別すると、認証部22は、記憶装置23に格納されているデータを破棄し、送信装置1との通信を終了する。
一方、受信したメッセージ1が正当であると判別すると、次は、受信装置2が送信装置1へ新たな乱数を送信する。
まず、受信装置2の鍵生成部21は、乱数2を生成し、生成した乱数2を記憶装置23の乱数テーブルに格納する(ステップS8)。次に、鍵生成部21は、記憶装置23の乱数テーブルに格納されている乱数1と生成した乱数2とから一時鍵2を算出する。また、鍵生成部21は、算出した一時鍵2を記憶装置23の暗号鍵テーブルに格納する。
鍵生成部21が乱数2を生成し、一時鍵2を算出すると、認証部22は、乱数2を含むメッセージ2を作成する(ステップS9)。認証部22は、作成したメッセージ2を記憶装置23のメッセージテーブルに格納する。さらに、認証部22は、作成したメッセージ2を所定のアルゴリズムで暗号化した暗号化メッセージ2を作成する。
次に、認証部22は、メッセージ1とメッセージ2とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値2を算出する。さらに、認証部22は、算出したダイジェスト値2を、一時鍵2を用いて暗号化した署名2を作成する(ステップS10)。
次に、認証部22は、暗号化メッセージ2に署名2を付与して送信装置1の認証部12に送信する(ステップS11)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに受信装置2から送信装置1に送信されるデータを図4dに示す。図4dに示すように、受信装置2の乱数テーブルには乱数2が格納され、暗号鍵テーブルには一時鍵2が格納され、メッセージテーブルにはメッセージ2が格納されている。また、乱数2を含むメッセージ2を暗号化した暗号化メッセージ2が、署名2とともに受信装置2から送信装置1に送信される。
送信装置1の認証部12は、受信装置2の認証部22から暗号化メッセージ2を受信すると、受信装置2の認証部22が施した暗号化に対応する所定のアルゴリズムで、受信した暗号化メッセージ2を復号化し、メッセージ2を取得する。認証部12は、取得したメッセージ2を記憶装置13のメッセージテーブルに格納する。さらに、認証部12は、メッセージ2から乱数2を抽出し、抽出した乱数2を鍵生成部11に送信する(ステップS12)。
鍵生成部11は、乱数2を認証部12から受信すると、受信した乱数2を記憶装置23の乱数テーブルに格納する(ステップS13)。次に、鍵生成部11は、受信した乱数2から一時鍵2を算出する。また、鍵生成部11は、算出した一時鍵2を記憶装置13の暗号鍵テーブルに保存する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図4eに示す。図4eに示すように、送信装置1の乱数テーブルには乱数2が格納され、暗号鍵テーブルには一時鍵2が格納され、メッセージテーブルにはメッセージ2が格納されている。
認証部12は、鍵生成部11が、乱数2を記憶装置13の乱数テーブルに、一時鍵2を記憶装置13の暗号鍵テーブルに保存すると、一時鍵2を用いて受信装置2から受信した署名2を復号化し、受信装置2が算出したダイジェスト値2を取得する。
また、認証部12は、記憶装置13のメッセージテーブルに格納されているメッセージ1と受信装置2から受信したメッセージ2とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値2−2を算出する。認証部12は、受信した署名2を復号化することにより取得したダイジェスト値2と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値2−2を比較することにより、受信したメッセージ2の正当性を検証する(ステップS14)。
受信したメッセージ2が正当でないと判別すると、認証部12は、記憶装置13に格納されているデータを破棄し、受信装置2との通信を終了する。
一方、受信したメッセージ2が正当であると判別すると、次は、送信装置1が受信装置2へ新たな乱数を送信する。
まず、送信装置1の鍵生成部11は、乱数3を生成し、生成した乱数3を記憶装置13の乱数テーブルに格納する(ステップS15)。次に、鍵生成部11は、記憶装置13の乱数テーブルに格納されている乱数1および乱数2と、生成した乱数3とから暗号鍵を算出する。本実施の形態では、このとき算出した暗号鍵を、送信装置1および受信装置2のコンテンツの送受信のための暗号化に用いるセッション鍵とする。鍵生成部11は、算出したセッション鍵を記憶装置13の暗号鍵テーブルに格納する。
鍵生成部11が乱数3を生成し、セッション鍵を算出すると、認証部12は、乱数3を含むメッセージ3を作成する(ステップS16)。認証部12は、作成したメッセージ3を記憶装置13のメッセージテーブルに格納する。さらに、認証部12は、作成したメッセージ3を所定のアルゴリズムで暗号化した暗号化メッセージ3を作成する。
次に、認証部12は、メッセージ1とメッセージ2とメッセージ3とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値3を算出する。さらに、認証部12は、算出したダイジェスト値3を、セッション鍵を用いて暗号化した署名3を作成する(ステップS17)。
次に、認証部12は、暗号化メッセージ3に署名3を付与して受信装置2の認証部22に送信する(ステップS18)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに送信装置1から受信装置2に送信されるデータを図4fに示す。図4fに示すように、送信装置1の乱数テーブルには乱数3が格納され、暗号鍵テーブルにはセッション鍵が格納され、メッセージテーブルにはメッセージ3が格納されている。また、乱数3を含むメッセージ3を暗号化した暗号化メッセージ3が、署名3とともに送信装置1から受信装置2に送信される。
受信装置2の認証部22は、送信装置1の認証部12から暗号化メッセージ3を受信すると、送信装置1の認証部12が施した暗号化に対応する所定のアルゴリズムで、受信した暗号化メッセージ3を復号化し、メッセージ3を取得する。認証部22は、取得したメッセージ3を記憶装置23のメッセージテーブルに格納する。さらに、認証部22は、メッセージ3から乱数3を抽出し、抽出した乱数3を鍵生成部21に送信する(ステップS19)。
鍵生成部21は、乱数3を認証部22から受信すると、受信した乱数3を記憶装置23の乱数テーブルに格納する(ステップS20)。次に、鍵生成部21は、記憶装置23の乱数テーブルに格納されている乱数1および乱数2ならびに受信した乱数3からセッション鍵を算出する。また、鍵生成部21は、算出したセッション鍵を記憶装置23の暗号鍵テーブルに保存する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図4gに示す。図4gに示すように、受信装置2の乱数テーブルには乱数3が格納され、暗号鍵テーブルにはセッション鍵が格納され、メッセージテーブルにはメッセージ3が格納されている。
認証部22は、鍵生成部21が、乱数3を記憶装置23の乱数テーブルに、セッション鍵を記憶装置23の暗号鍵テーブルに保存すると、セッション鍵を用いて送信装置1から受信した署名3を復号化し、送信装置1が算出したダイジェスト値3を取得する。
また、認証部22は、記憶装置23のメッセージテーブルに格納されているメッセージ1とメッセージ2と送信装置1から受信したメッセージ3とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値3−2を算出する。認証部22は、受信した署名3を復号化することにより取得したダイジェスト値3と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値3−2を比較することにより、受信したメッセージ3の正当性を検証する(ステップS21)。
受信したメッセージ3が正当でないと判別すると、認証部22は、記憶装置23に格納されているデータを破棄し、送信装置1との通信を終了する。
一方、受信したメッセージ3が正当であると判別すると、次に、受信装置2は、送信装置1へ認証が完了した旨を示す認証完了情報を送信する。
認証部22は、認証完了情報を含むメッセージ4を作成する(ステップS22)。認証部22は、作成したメッセージ4を記憶装置23のメッセージテーブルに格納する。さらに、認証部22は、作成したメッセージ4をセッション鍵で暗号化した暗号化メッセージ4を作成する。
次に、認証部22は、メッセージ1とメッセージ2とメッセージ3とメッセージ4とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値4を算出する。さらに、認証部22は、算出したダイジェスト値4を、セッション鍵を用いて暗号化した署名4を作成する(ステップS23)。
次に、認証部22は、暗号化メッセージ4に署名4を付与して送信装置1の認証部12に送信する(ステップS24)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに受信装置2から送信装置1に送信されるデータを図4hに示す。図4hに示すように、受信装置2のメッセージテーブルにはメッセージ4が格納されている。また、認証完了情報を含むメッセージ4を暗号化した暗号化メッセージ4が、署名4とともに受信装置2から送信装置1に送信される。
送信装置1の認証部12は、受信装置2の認証部22から暗号化メッセージ4を受信すると、受信した暗号化メッセージ4を、セッション鍵を用いて復号化し、メッセージ4を取得する。認証部12は、取得したメッセージ4を記憶装置13のメッセージテーブルに格納する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図4iに示す。図4iに示すように、送信装置1のメッセージテーブルにはメッセージ4が格納されている。
認証部12は、セッション鍵を用いて受信装置2から受信した署名4を復号化し、受信装置2が算出したダイジェスト値4を取得する。
また、認証部12は、記憶装置13のメッセージテーブルに格納されているメッセージ1とメッセージ2とメッセージ3と受信装置2から受信したメッセージ4とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値4−2を算出する。認証部12は、受信した署名4を復号化することにより取得したダイジェスト値4と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値4−2を比較することにより、受信したメッセージ4の正当性を検証する(ステップS25)。
受信したメッセージ4が正当でないと判別すると、認証部12は、記憶装置13に格納されているデータを破棄し、受信装置2との通信を終了する。
一方、受信したメッセージ4が正当であると判別すると、認証部12は、メッセージ4から認証完了情報を抽出し、受信装置2で認証が正常に完了したか否かを判別する。
認証部12が受信装置2で認証が正常に完了したことを確認すると、送信装置1および受信装置2の相互認証処理は完了となる。
次に図1に示した暗号通信システムで送信装置1から受信装置2へコンテンツを送信するときの送信装置1と受信装置2のシーケンスについて説明する。
図5は図1に示した暗号通信システムで送信装置1から受信装置2へコンテンツを送信するときの送信装置1と受信装置2のシーケンスを示す図である。
送信装置1のコンテンツ送信部14は、まず、コンテンツデータベース15に格納されている平文コンテンツを読み出す。送信装置1のコンテンツ送信部14は、コンテンツデータベース15から読み出した平文コンテンツを、セッション鍵を用いて暗号化した暗号化コンテンツを作成する(ステップS31)。
また、コンテンツ送信部14は、コンテンツデータベース15から読み出した平文コンテンツに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する(ステップS32)。
次に、コンテンツ送信部14は、暗号化コンテンツおよび平文コンテンツのダイジェスト値を含むコンテンツメッセージ5を作成する(ステップS33)。コンテンツ送信部14は、作成したコンテンツメッセージ5を記憶装置13のメッセージテーブルに格納する。さらに、コンテンツ送信部14は、作成したコンテンツメッセージ5をさらにセッション鍵で暗号化した暗号化コンテンツメッセージ5を作成する。
また、コンテンツ送信部14は、受信装置2との相互認証処理を開始してから送受信した全てのメッセージおよびコンテンツメッセージと今回送信するコンテンツメッセージ5とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値5を算出する。さらに、コンテンツ送信部14は、算出したダイジェスト値5を、セッション鍵を用いて暗号化した署名5を作成する(ステップS34)。
コンテンツ送信部14は、作成した暗号化コンテンツメッセージ5に署名5を付与して受信装置2のコンテンツ受信部24に送信する(ステップS35)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに送信装置1から受信装置2に送信されるデータを図6aに示す。図6aに示すように、送信装置1のメッセージテーブルにはコンテンツメッセージ5が格納されている。また、暗号化コンテンツおよび平文コンテンツのダイジェスト値を含むコンテンツメッセージ5を暗号化した暗号化コンテンツメッセージ5が、署名5とともに送信装置1から受信装置2に送信される。
コンテンツ受信部24は、送信装置1のコンテンツ送信部14から暗号化コンテンツメッセージ5を受信すると、受信した暗号化コンテンツメッセージ5を、セッション鍵を用いて復号化する。コンテンツ受信部24は、取得したコンテンツメッセージ5を記憶装置23のメッセージテーブルに格納する。
コンテンツ受信部24は、セッション鍵を用いて、送信装置1から受信した署名5を復号化し、送信装置1が算出したコンテンツメッセージ5のダイジェスト値5を取得する。
また、コンテンツ受信部24は、送信装置1との相互認証処理を開始してから送受信した全てのメッセージおよびコンテンツメッセージと今回送信装置1から受信したコンテンツメッセージ5とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値5−2を算出する。コンテンツ受信部24は、受信した署名5を復号化することにより取得したダイジェスト値と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値5−2を比較することにより、受信したコンテンツメッセージ5の正当性を検証する(ステップS36)。
受信したコンテンツメッセージ5が正当であると判別すると、コンテンツ受信部24は、受信したコンテンツメッセージ5に含まれる暗号化コンテンツを、セッション鍵を用いて復号化し、平文コンテンツを取得する(ステップS37)。
また、コンテンツ受信部24は、取得した平文コンテンツに対して所定のダイジェスト関数処理を施したダイジェスト値を算出する(ステップS38)。コンテンツ受信部24は、受信したコンテンツメッセージ5に含まれる、送信装置1が算出した、平文コンテンツのダイジェスト値と、受信した平文コンテンツに対して所定のダイジェスト関数処理を施すことにより取得したダイジェスト値を比較することにより、受信したコンテンツの正当性を検証する(ステップS39)。
受信したコンテンツが正当であると判別すると、コンテンツ受信部24は、受信したコンテンツをコンテンツデータベース25に格納する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図6bに示す。図6bに示すように、受信装置2のメッセージテーブルにコンテンツメッセージ5が格納され、コンテンツデータベース25にコンテンツが格納されている。
平文コンテンツを取得すると、コンテンツ受信部24は、コンテンツ受信部14へ受信が完了した旨を示す受信完了情報を送信する。
コンテンツ受信部24は、受信完了情報を含むメッセージ6を作成する(ステップS40)。コンテンツ受信部24は、作成したメッセージ6を記憶装置23のメッセージテーブルに格納する。さらに、コンテンツ受信部24は、作成したメッセージ6をセッション鍵で暗号化した暗号化メッセージ6を作成する。
次に、認証部22は、送信装置1との相互認証処理を開始してから送受信した全てのメッセージとメッセージ6とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値6を算出する。さらに、コンテンツ受信部24は、算出したダイジェスト値6を、セッション鍵を用いて暗号化した署名6を作成する(ステップS41)。
次に、コンテンツ受信部24は、暗号化メッセージ6に署名6を付与して送信装置1のコンテンツ送信部14に送信する(ステップS42)。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータ、ならびに受信装置2から送信装置1に送信されるデータを図6cに示す。図6cに示すように、受信装置2のメッセージテーブルにはメッセージ6が格納されている。また、受信完了情報を含むメッセージ6を暗号化した暗号化メッセージ6が、署名6とともに受信装置2から送信装置1に送信される。
送信装置1のコンテンツ送信部14は、受信装置2のコンテンツ受信部24から暗号化メッセージ6を受信すると、受信した暗号化メッセージ6を、セッション鍵を用いて復号化し、メッセージ6を取得する。認証部12は、取得したメッセージ6を記憶装置13のメッセージテーブルに格納する。
このときの、送信装置1の記憶装置13およびコンテンツデータベース15に格納されているデータ、ならびに受信装置2の記憶装置23およびコンテンツデータベース25に格納されているデータを図6dに示す。図6dに示すように、送信装置1のメッセージテーブルにはメッセージ6が格納されている。
コンテンツ送信部14は、セッション鍵を用いて受信装置2から受信した署名6を復号化し、受信装置2が算出したダイジェスト値6を取得する。
また、コンテンツ送信部14は、受信装置2との相互認証処理を開始してから送受信した全てのメッセージと受信装置2から受信したメッセージ6とを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値6−2を算出する。コンテンツ送信部14は、受信した署名6を復号化することにより取得したダイジェスト値6と、自装置で所定のダイジェスト関数処理を施すことにより取得したダイジェスト値6−2を比較することにより、受信したメッセージ6の正当性を検証する(ステップS43)。
受信したメッセージ6が正当であると判別すると、コンテンツ送信部14は、メッセージ6から受信完了情報を抽出し、受信装置2で受信が正常に完了したか否かを判別する。
コンテンツ送信部14が受信装置2で認証が正常に完了したことを確認すると、送信装置1から受信装置2へのコンテンツの送信処理は完了となる。
以上説明したように、本実施形態によれば、送信装置と受信装置が相互に認証しあいながら相互に乱数を通知しあうことにより送信装置と受信装置で乱数を共有し、送信装置から受信装置へ、共有した乱数を使って暗号化したコンテンツを送るので、負荷の軽い処理によってコンテンツのセキュリティ性を高めることができる。
また、本実施形態によれば、送信装置と受信装置が相互に乱数を通知しあう中で2回目以降の乱数の通知では、通知すべき乱数だけでなく、相手装置から通知された乱数あるいは更に既に相手装置に通知した乱数を使って暗号化した署名を使って認証を行うので、単純に双方向に認証しあうのに比べてセキュリティ性のより高い認証を行うことができる。
本実施形態によれば、RFID(Radio Frequency Identification)リーダライタ、動画再生プレイヤーあるいは音楽再生プレイヤーのような低性能な装置であっても、必要なコンテンツを高速かつ安全に送受信できる。
また、本実施形態によれば、送信装置および受信装置は、自装置が新たに生成した乱数だけでなく、相手装置から通知された乱数あるいは更に既に相手装置に通知した乱数に基づいて算出したダイジェスト値を用いて署名を生成するので、第三者によるなりすましを防止できる。
また、本実施形態によれば、送信装置および受信装置は、乱数を送受信するごとに一時鍵を生成し、ダイジェスト値をその一時鍵で暗号化して署名とするので、第三者に通信を傍受されても、重要な情報を漏洩する危険性を低減できる。
なお、本実施形態では、署名を作成するためのダイジェスト値を、相互認証処理を開始してから送受信した全てのメッセージと新たに送信するメッセージとを連結したデータに基づいて算出する例を示した。相互認証処理を開始してから送受信した全てのメッセージに基づいてダイジェスト値を算出することにより、セキュリティ性を高めることができるが、相互認証処理を開始してから送受信した全てのメッセージを記憶するための容量をもつ記憶装置を通信装置に実装する必要がある。
ダイジェスト値の算出方法は、送信装置と受信装置で共通の処理であればよい。例えば、前回のメッセージ送信処理時に算出したダイジェスト値を記録しておき、そのダイジェスト値と今回送信するメッセージとを連結したデータに対して所定のダイジェスト関数処理を施したダイジェスト値を署名のために用いてもよい。その場合、通信装置の記憶装置の容量を小さくすることができる。
また、送信装置および受信装置が送受信するメッセージあるいはコンテンツメッセージに対する暗号化は、送信装置と受信装置で共通の処理であればよく、用途に応じて、メッセージあるいはコンテンツメッセージ全体を暗号化してもよいし、重要な部分のみを暗号化してもよい。メッセージあるいはコンテンツメッセージ全体を暗号化することにより、セキュリティ強度をあげることができるし、重要な部分のみを暗号化することにより、暗号化処理の負荷を低減し、高速に暗号通信を行うことができる。
また、本実施形態では、相互認証および暗号鍵の共有をするために、送信装置および受信装置がメッセージを2回ずつ送信する例を示した。メッセージの送受信回数を増やすことにより、セキュリティ強度をあげることができるし、メッセージの送受信回数を減らすことにより、その処理時間を低減でき、高速に暗号通信を行うことができる。
また、送信装置および受信装置が相互認証し、共有したセッション鍵を用いて暗号化してよいコンテンツ数は、用途に応じて変更してよい。1つのコンテンツを送信するごとに、相互認証しなおし、暗号鍵を再生成することにより、セキュリティ強度をあげることができる。一方、相互認証し、共有したセッション鍵を用いて複数のコンテンツを送受信することにより、高速に暗号通信を行うことができる。