(57)【特許請求の範囲】
【請求項１】
複数の外部装置と１以上の経路で接続される鍵共有装置であって、
前記外部装置との間で共有する暗号鍵を記憶する鍵記憶部と、
前記鍵記憶部に記憶されている前記暗号鍵のうち、前記外部装置に含まれる第１装置と共有する前記暗号鍵の個数が予め定められた閾値以下である場合に、前記外部装置に含まれる第２装置を介して前記第１装置に到達する経路を決定する決定部と、
前記第１装置との間で共有する新たな暗号鍵である初期鍵を発生する第１発生部と、
前記第２装置との間で共有する前記暗号鍵を用いて、前記初期鍵を暗号化する暗号化部と、
暗号化した前記初期鍵を、前記第１装置を宛先として前記第２装置に送信する第１送信部と、
を備えることを特徴とする鍵共有装置。
【請求項２】
前記外部装置との間の経路を表す経路情報を記憶する経路記憶部をさらに備え、
前記決定部は、前記経路情報に基づいて前記第２装置を介して前記第１装置に到達する経路を決定すること、
を特徴とする請求項１に記載の鍵共有装置。
【請求項３】
前記経路記憶部は、前記経路情報を配信する機能を有するサーバ装置から受信した前記経路情報を記憶すること、
を特徴とする請求項２に記載の鍵共有装置。
【請求項４】
前記第１発生部は、前記第２装置との間で既に共有済みの暗号鍵が存在する場合は、共有済みの暗号鍵のいずれかを前記初期鍵とし、
前記第１送信部は、前記第２装置との間で既に共有済みの暗号鍵が存在する場合は、共有済みの暗号鍵のうち、前記初期鍵とした暗号鍵の範囲または位置を示す情報を、前記第２装置に送信すること、
を特徴とする請求項１に記載の鍵共有装置。
【請求項５】
前記鍵記憶部は、複数の前記外部装置それぞれに対応して複数備えられること、
を特徴とする請求項１に記載の鍵共有装置。
【請求項６】
前記鍵記憶部は、前記外部装置の識別情報と、前記外部装置との間で共有する前記暗号鍵とを対応づけて記憶すること、
を特徴とする請求項１に記載の鍵共有装置。
【請求項７】
複数の外部装置と１以上の経路で接続される鍵共有装置で実行される鍵共有方法であって、
前記鍵共有装置は、前記外部装置との間で共有する暗号鍵を記憶する鍵記憶部を備え、
前記鍵記憶部に記憶されている前記暗号鍵のうち、前記外部装置に含まれる第１装置と共有する前記暗号鍵の個数が予め定められた閾値以下である場合に、前記外部装置に含まれる第２装置を介して前記第１装置に到達する経路を決定する決定ステップと、
前記第１装置との間で共有する新たな暗号鍵である初期鍵を発生する第１発生ステップ部と、
前記第２装置との間で共有する前記暗号鍵を用いて、前記初期鍵を暗号化する暗号化ステップと、
暗号化した前記初期鍵を、前記第１装置を宛先として前記第２装置に送信する第１送信ステップと、
を含むことを特徴とする鍵共有方法。
【請求項８】
複数の外部装置と１以上の経路で接続されるコンピュータを、
前記外部装置との間で共有する暗号鍵を記憶する鍵記憶部と、
前記鍵記憶部に記憶されている前記暗号鍵のうち、前記外部装置に含まれる第１装置と共有する前記暗号鍵の個数が予め定められた閾値以下である場合に、前記外部装置に含まれる第２装置を介して前記第１装置に到達する経路を決定する決定部と、
前記第１装置との間で共有する新たな暗号鍵である初期鍵を発生する第１発生部と、
前記第２装置との間で共有する前記暗号鍵を用いて、前記初期鍵を暗号化する暗号化部と、
暗号化した前記初期鍵を、前記第１装置を宛先として前記第２装置に送信する第１送信部、
として機能させるための鍵共有プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、鍵共有装置、鍵共有方法および鍵共有プログラムに関する。
【背景技術】
【０００２】
ＳＥＣＯＱＣ（Secure  Communication  based  on  Quantum  Cryptography）と呼ばれる量子暗号通信に関する研究プロジェクトが知られている。ＳＥＣＯＱＣでは、量子暗号鍵配送により生成され、複数のノードに分散蓄積された乱数を基に鍵交換等を行う際の機能、および、Ｑ３Ｐ（Quantum  Point  to  Point  Protocol）と名付けられたプロトコルなどの技術が提案されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Kollmitzer  C.,  Pivk  M.  (Eds.),  Applied  Quantum  Cryptography,  Lect.  Notes  Phys.  797  (Springer,  Berlin  Heidelberg  2010),  p155-p168,  DOI  10.1007/978-3-642-04831-9
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術では、ノードが追加された場合や、ノードで乱数が過度に消費され当該ノードが使用できなくなった場合に、それらのノードの再稼働を手動で行わなければならなかった。すなわち、このような場合、例えば初期認証用の鍵を管理者が手動で設定する必要があった。
【課題を解決するための手段】
【０００５】
実施形態の鍵共有装置は、鍵記憶部と、決定部と、第１発生部と、暗号化部と、第１送信部と、を備える。鍵記憶部は、外部装置との間で共有する暗号鍵を記憶する。決定部は、鍵記憶部に記憶されている暗号鍵のうち、外部装置に含まれる第１装置と共有する暗号鍵の個数が閾値以下である場合に、外部装置に含まれる第２装置を介して第１装置に到達する経路を決定する。第１発生部は、第１装置との間で共有する新たな暗号鍵である初期鍵を発生する。暗号化部は、第２装置との間で共有する暗号鍵を用いて、初期鍵を暗号化する。第１送信部は、暗号化した初期鍵を、第１装置を宛先として第２装置に送信する。
【図面の簡単な説明】
【０００６】
【図１】本実施形態の通信システムの構成例を示す図。
【図２】本実施形態にかかるノードのブロック図。
【図３】変形例にかかるノードのブロック図。
【図４】本実施形態における鍵共有処理の全体の流れを示すフローチャート。
【図５】鍵共有処理の全体の流れを示すフローチャート。
【図６】通信システムの他の構成例を示す図。
【図７】本実施形態にかかる装置のハードウェア構成図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、この発明にかかる鍵共有装置の好適な実施形態を詳細に説明する。
【０００８】
最初に、本実施形態の鍵共有装置を含む通信システムについて説明する。図１は、本実施形態の通信システム１０の構成例を示す図である。通信システム１０は、鍵共有装置としての複数のノード１００ａ〜１００ｇを含む。なお、ノード１００ａ〜１００ｇは同様の構成を備えるため、区別する必要がない場合は単にノード１００という。ノード１００の個数は７に限られるものではない。
【０００９】
各ノード１００は、安全に通信するための暗号鍵（乱数）を発生させ、ノード１００内に記憶する機能を備える。ノード１００は、例えば、外部装置である他のノード１００との間で共有する乱数を継続的に発生させることによりこの機能を実現する。共有する乱数を継続的に発生させる方法としては、上述の量子暗号鍵配送などを適用できる。通常、量子暗号鍵配送では、発生された乱数の一部が、ノード１００間の通信で共有する暗号鍵として利用される。なお、適用可能な方法は量子暗号鍵配送に限られるものではない。共有する乱数（暗号鍵）を発生させ、共有するノードそれぞれに記憶できる方法であればあらゆる方法を適用できる。
【００１０】
なお、量子暗号鍵配送を用いる場合、図１の各ノード１００間には、光ファイバなどの量子暗号鍵配送のための通信チャネルが設けられる。また、各ノード１００間には、通常のデータを送受信するためのインターネットなどの通信回線も設けられる。
【００１１】
図２は、本実施形態にかかるノード１００の構成の一例を示すブロック図である。図２に示すように、ノード１００は、複数のアプリケーション１０１ａ、１０１ｂ、１０１ｃと、鍵中継部１１０と、を備えている。区別する必要がない場合は、アプリケーション１０１ａ〜１０１ｃを単にアプリケーション１０１という。アプリケーション１０１の個数は３に限られるものではない。
【００１２】
アプリケーション１０１は、例えば、他のノード１００との間で暗号鍵を用いて通信する機能を備えるソフトウェアプログラムである。アプリケーション１０１は、例えば、ノード１００内のＣＰＵ（図示せず）によりＲＯＭ（図示せず）などの記憶媒体から読み出され実行される。なお、アプリケーション１０１をノード１００以外の装置で実行するように構成してもよい。
【００１３】
鍵中継部１１０は、鍵管理部１２０と、第２発生部１３０と、鍵記憶部１４１と、経路記憶部１４２と、を備える。
【００１４】
鍵管理部１２０は、アプリケーション１０１が利用する鍵を管理する。例えば、鍵管理部１２０は、暗号鍵を必要とするアプリケーション１０１からの要求に応じて、通信相手のアプリケーションが存在する他のノード１００（以下、ノードＢという）の鍵管理部１２０（以下、鍵管理部Ｂという）との間で共有する暗号鍵（以下、アプリケーション暗号鍵という）を生成する。
【００１５】
アプリケーション１０１からの要求を受けた鍵管理部１２０が、アプリケーション暗号鍵として利用する乱数列を用意する。鍵管理部１２０は、例えばＡＥＳ暗号方式のアプリケーション暗号鍵であれば、鍵記憶部１４１に記憶され、かつ、ノードＢと共有されている乱数から、２５６ビットの乱数をアプリケーション暗号鍵として取り出し、アプリケーション１０１へ回答する。また、鍵管理部１２０は、当該アプリケーション暗号鍵を特定する特定情報（乱数の識別情報、取り出した範囲など）を鍵管理部Ｂへ通知する。
【００１６】
なお、アプリケーション１０１は、例えば通信の度に、鍵管理部１２０に対して安全なアプリケーション暗号鍵の生成を要求する。このような通信ごとにアプリケーション暗号鍵の生成は、例えば、理論的に解読不可能なワンタイムパッド暗号を用いた通信の場合などに必要となる。したがって、通信量の増大等によりアプリケーション暗号鍵の消費量が増大し、共有する乱数が枯渇する場合がある。そして、共有する乱数が枯渇すると、共有させる方法の中での相互認証等に当該乱数を使用する手順があるために、それを実行できず、乱数の共有が停止する。
【００１７】
ノードＢとの間で共有する乱数が枯渇した場合、および、ノードＢとの間で乱数を共有していない場合、などの事情により、乱数共有機能が停止している場合、これを開始または再開させるために、鍵管理部１２０は、ノードＢとの間で共有する新たな乱数（以下、初期鍵という）を発生する。鍵管理部１２０は、別のノード１００（以下、ノードＣという）と共有する乱数を用いて、発生した初期鍵を暗号化する。そして、鍵管理部１２０は、暗号化した初期鍵を、ノードＢを宛先としてノードＣに送信する。ノードＣは、暗号化された初期鍵を、送信元のノード１００との間で共有する乱数で復号する。このような処理が、初期鍵がノードＢの鍵管理部Ｂに到達するまで繰り返される。これにより、初期鍵をノードＢの鍵管理部Ｂとの間で共有することが可能となる。
【００１８】
初期鍵は、例えば量子暗号鍵配送によりノードＢとの間で共有する乱数の継続的な発生を開始または再開させるために利用される。なお、量子暗号鍵配送では、乱数を発生させた後、送信側および受信側で相互に確認（答え合わせ）を実行する。このときの相互認証用に鍵として初期鍵が必要となる（つまり、共有する乱数が枯渇していた間は、この相互認証ができなくなり、乱数の共有が停止していた）。
【００１９】
第２発生部１３０は、他のノード１００との間で共有する乱数（共有する暗号鍵の素となる乱数）を発生する。第２発生部１３０は、例えば上述の量子暗号鍵配送により、共有する乱数を継続的に発生する。第２発生部１３０の詳細は後述する。
【００２０】
鍵記憶部１４１は、第２発生部１３０により発生された乱数を記憶する。鍵記憶部１４１は、例えば、乱数と、当該乱数を共有する他のノード１００を識別する情報である共有先情報と、乱数を識別する乱数識別情報とを対応づけて記憶する。
【００２１】
鍵記憶部１４１に蓄積された乱数は、当該乱数を共有しているノード１００との間の認証用の鍵、および、アプリケーション１０１が使用する鍵情報を隣接するノード１００へ通信する際に絶対安全を保障するワンタイムパッド暗号用の鍵などとして使用される。従って、共有する相手に応じて、蓄積されている乱数の任意の箇所から、任意の長さで鍵として使えるようにする必要がある。このため、乱数は、共有先情報および乱数識別情報と共に蓄積されている。共有先情報は、例えば、共有先ノードのＩＰアドレスに、さらに８ビットの付加情報が付加される。
【００２２】
経路記憶部１４２は、他のノード１００と通信するための経路を表す経路情報を記憶する。経路情報は、例えば、インターネットなどで用いられるルーティングテーブルと同様の情報を含む。すなわち、経路情報は、例えば宛先のノード１００の属するネットワークのＩＤ、および、最終的に宛先のノード１００にデータを送信するために、最初に当該データを送信するノード１００（ネクストホップ）を含む。
【００２３】
次に、鍵管理部１２０の詳細な構成の一例について説明する。鍵管理部１２０は、第１受信部１２１と、第１発生部１２２と、決定部１２３と、暗号化部１２４と、第１送信部１２５と、経路設定部１２６と、を備える。
【００２４】
第１受信部１２１は、アプリケーション１０１などの他の構成部から情報を受信する。例えば、第１受信部１２１は、アプリケーション１０１からのアプリケーション暗号鍵の要求を受信する。
【００２５】
第１発生部１２２は、他のノード１００との間で共有する乱数（アプリケーション暗号鍵）を発生する。ところが、第１発生部１２２は、例えば、鍵記憶部１４１に記憶されている、通信相手となる他のノード１００（第１装置）との間で共有する暗号鍵の個数が予め定められた閾値以下であり、あるいは、それ以外の共有する暗号鍵の原因で予め定められた条件に陥ったために、乱数の共有が停止している場合に、初期鍵を発生する。
【００２６】
決定部１２３は、通信相手のノード１００との間で共有する暗号鍵の個数が閾値以下である場合に、あるいは、それ以外の共有する暗号鍵の原因で予め定められた条件に陥った場合に、通信相手のノード１００と異なるノード１００（第２装置）を介して通信相手のノード１００に到達するための経路を決定する。決定部１２３は、例えば経路記憶部１４２に記憶された経路情報を参照して、通信相手のノード１００に到達するための経路および最初にデータを送信するノード１００を決定する。
【００２７】
暗号化部１２４は、決定されたノード１００との間で共有する乱数を用いて初期鍵を暗号化する。暗号化部１２４は、例えばワンタイムパッド暗号により初期鍵を暗号化する。
【００２８】
第１送信部１２５は、アプリケーション１０１などの他の構成部に対して情報を送信する。例えば、第１送信部１２５は、アプリケーション１０１に対して通信相手のノードとの間で共有するアプリケーション暗号鍵を送信する。また、第１送信部１２５は、決定部１２３より決定された経路上の、最初にデータを送信するノード１００に対して、暗号化部１２４により暗号化された初期鍵を送信する。
【００２９】
経路設定部１２６は、経路情報を更新して経路記憶部１４２に保存する。経路設定部１２６は、例えば、インターネットで用いられるルーティングテーブルの更新と同様の方法により経路情報を更新する。
【００３０】
次に、第２発生部１３０の詳細な構成の一例について説明する。第２発生部１３０は、第２送信部１３１ａと、第２送信部１３１ｂと、第２受信部１３２と、を備えている。第２送信部１３１ａ、１３１ｂは、同様の機能を備えるため、区別する必要がない場合は単に第２送信部１３１という。
【００３１】
第２送信部１３１は、量子暗号鍵配送の送信側としての機能を備える。第２受信部１３２は、量子暗号鍵配送の受信側としての機能を備える。例えば、図１のノード１００ａが、ノード１００ｂおよび１００ｃに対しては量子暗号鍵配送の送信側として機能し、ノード１００ｆに対しては量子暗号鍵配送の受信側として機能する場合は、図２に示すように、ノード１００ａの鍵中継部１１０は、２つの第２送信部１３１（第２送信部１３１ａ、１３１ｂ）と、１つの第２受信部１３２とを備える。このように、図２に示す第２送信部１３１および第２受信部１３２の個数は一例であり、量子暗号鍵配送の相手となるノード１００の数に応じて変化する。
【００３２】
なお、鍵記憶部１４１を、乱数を共有する他のノード１００ごとに備えるように構成してもよい。図３は、このように構成した変形例にかかるノード１００−２の構成の一例を示すブロック図である。図３に示すように、ノード１００−２は、第２発生部１３０−２の構成が図２と異なっている。その他の機能および構成は図２と同様であるため説明を省略する。
【００３３】
第２発生部１３０−２は、第２送信部１３１ａ、第２送信部１３１ｂ、および、第２受信部１３２にそれぞれ対応する鍵記憶部１４１−２ａ、１４１−２ｂ、１４１−２ｃを備えている。例えば、鍵記憶部１４１−２ａは、第２送信部１３１ａが量子暗号鍵配送によって生成した乱数を記憶する。この場合、鍵記憶部１４１−２ａは、第２送信部１３１ａの通信相手となるノード１００の共有先情報を記憶しなくてもよい。
【００３４】
また、対応する鍵記憶部１４１を第２送信部１３１または第２受信部１３２の内部に備えるように構成してもよい。このような構成であれば、アプリケーション１０１用の鍵生成のためのアプリケーション１０１と第２発生部１３０とのインターフェースが、鍵管理部１２０の主な役割となり、簡略化が可能になる。一方、乱数を保存する第２送信部１３１および第２受信部１３２も、内部に乱数秘匿の機構を備えればよいため、乱数が装置外部にさらされる可能性が減る。したがって、安全性を高めることが容易になる。
【００３５】
次に、このように構成された本実施形態にかかるノード１００による鍵共有処理について図４を用いて説明する。図４は、本実施形態における鍵共有処理の全体の流れを示すフローチャートである。
【００３６】
まず、鍵管理部１２０の第１受信部１２１は、アプリケーション１０１からアプリケーション暗号鍵の要求を受信する（ステップＳ１０１）。第１発生部１２２は、当該アプリケーション１０１の通信相手となるアプリケーションを実行する他のノード１００（ノードＢとする）との間で共有する乱数が、鍵記憶部１４１に記憶されているか否かを判断する（ステップＳ１０２）。
【００３７】
第１発生部１２２は、ノードＢとの間で乱数を共有する機能を有していることを認識するが、その際、更に、ノードＢとの間で共有する乱数が０個（＝閾値）以下であるか否かを判断する。閾値の値０は一例であり、１以上の値を用いてもよい。あるいは、共有する乱数の個数以外の、共有する乱数に関して予め定められた条件に陥ったかどうかの判断でもよい。これにより、例えば乱数が完全に枯渇することによる乱数共有の停止、さらに、それに起因するサービス一時停止等の障害発生を抑止できる。
【００３８】
なお、ノードＢとの間で乱数を共有する機能を有していない場合は、この操作は、第１発生部１２２が生成するアプリケーション暗号鍵を、本ノードと乱数を共有する別のノード（ノードＤとする）経由でノードＢへ転送することになる。このため、以下のステップのノードＢを、ノードＤと読み替えることにより、本フローチャートの処理が応用できる。
【００３９】
共有機能が停止し、乱数が記憶されていない場合（ステップＳ１０２：Ｎｏ）、第１発生部１２２は、ノードＢとの間で共有するための初期鍵となる乱数を発生する（ステップＳ１０３）。決定部１２３は、初期鍵の送信先とすべき他のノード１００（ノードＣとする）を、経路記憶部１４２の経路情報を参照して決定する（ステップＳ１０４）。暗号化部１２４は、決定されたノードＣとの間で共有する乱数を鍵記憶部１４１から読み出し、読み出した乱数で初期鍵を暗号化する（ステップＳ１０５）。第１送信部１２５は、暗号化された初期鍵を、宛先をノードＢとしてノードＣに送信する（ステップＳ１０６）。
【００４０】
初期鍵がノードＢまで到達すれば、ノードＢとの間で量子暗号鍵配送による乱数の生成・共有が開始される（その際に行われる相互認証に初期鍵が使用される）。第１送信部１２５は、このようにして生成され、鍵記憶部１４１に蓄積された乱数から得られるアプリケーション暗号鍵を、要求元のアプリケーション１０１に送信する（ステップＳ１０７）。
【００４１】
ステップＳ１０２で、ノードＢと共有する乱数が記憶されていると判断した場合（ステップＳ１０２：Ｙｅｓ）、鍵管理部１２０は、アプリケーション暗号鍵として用いる乱数の一部を鍵記憶部１４１から読み出す（ステップＳ１０８）。第１送信部１２５は、読み出されたアプリケーション暗号鍵の特定情報（乱数識別情報、乱数内でのアプリケーション暗号鍵の範囲など）をノードＢに送信する（ステップＳ１０９）。このように特定情報のみを送信するため、通信量を削減できる。第１送信部１２５は、読み出されたアプリケーション暗号鍵を要求元のアプリケーション１０１に送信する（ステップＳ１１０）。
【００４２】
次に、本実施形態の鍵共有装置（ノード１００）を用いた通信システムによる効果の一例について説明する。以下では、ノード１００のいずれか２つであるノードＡおよびノードＢとの間の通信を例に説明する。
【００４３】
ノードＡの鍵管理部１２０（鍵管理部Ａとする）とノードＢの鍵管理部１２０（鍵管理部Ｂとする）との間で通信する場合、鍵管理部Ａと鍵管理部Ｂとが直接通信できる場合であっても、通信相手が成りすましでないことを確認するために、定期的に、または、必要に応じて、認証を行う。鍵記憶部１４１に共有している乱数が必要な量だけ存在する場合は、その乱数を用いて認証を行う。通信システムの初期起動時等、鍵記憶部１４１に利用可能な乱数が記憶されていない場合には、別途、初期認証用の鍵（初期鍵）を安全に配布する手段を準備しておく必要がある。通常は、工場出荷時に初期鍵を設定する方法、システム管理者が各鍵管理部Ａ、Ｂ内に初期鍵を手動で設定する方法、および、ノードＡ、Ｂに別途備えられるセキュアチップ（図示せず）内の識別情報を初期鍵として利用する方法などが用いられる。
【００４４】
しかし、システム稼働中であっても、暗号鍵（乱数）の消費量増大、および、認証の失敗等により、鍵管理部Ａと鍵管理部Ｂとの間で共有する乱数が無くなり、相互認証が不可能になる場合がある。または、接続されていなかったノード間に新しいリンクが追加される場合もある。これらの場合、ネットワークの構成によっては、鍵管理部Ａと鍵管理部Ｂとが、直接接続するリンク以外の既存のリンクを介して通信できる場合がある。特に、量子暗号通信システムでは、ＤＯＳ攻撃対策としても迂回路を持つことが重要である。従って、多くの場合、迂回路が存在するネットワーク構成の設計が行われる。
【００４５】
上述のように、本実施形態は、リンクで共有する乱数が枯渇した場合、および、新たなリンクが追加された場合であっても、迂回路を利用することにより、リンクの通信で共有する乱数の生成を開始させることができる。すなわち、自動的なリンク起動が可能になる。これにより、通信システムの可用性の増大、信頼性向上、および、管理・拡張性の高度化を実現できる。
【００４６】
既にリンクが存在する鍵管理部Ａと鍵管理部Ｂの場合には、暗号鍵（乱数）の喪失による迂回路を介した初期鍵交換を不要とするための制御を実行することが望ましい。このような制御としては、例えば以下のように段階的に乱数の消費量を減らし、乱数の保存量が増大するように制御する方法がある。
（第１段階）乱数の残量に応じて、乱数を多く使用するアプリケーションの実行を禁止
（第２段階）乱数を使用するアプリケーションの実行を禁止
（第３段階）認証以外での乱数の使用禁止
【００４７】
なお、初期鍵の交換は、迂回路中の各リンクではワンタイムパッド暗号により実施されることが望ましい。
【００４８】
乱数を共有するときに、乱数の部分（部分鍵）ごとに安全性の情報を付加して保存するように構成してもよい。安全性の情報は、例えば、盗聴の確率、再生量子ビットの誤り率、および、デコイパルスの誤り率などである。安全性の情報は、共有する乱数の生成時に諸項目を詳細検査することにより決定される。そして、このような安全性の情報を参照し、所定の安全性の条件を満たすことがノード１００間で事前に承認された暗号鍵（部分鍵）を用いるように構成してもよい。
【００４９】
図５は、このように構成した場合の鍵共有処理の全体の流れを示すフローチャートである。ステップＳ２０１からステップＳ２０７までは、図４のステップＳ１０１からステップＳ１０７までと同様の処理なので、その説明を省略する。また、図４のフローチャートと同様に、本ノード１０１がノードＢと乱数を共有する機能を有さず、本ノード１０１が乱数を共有する他のノード（例えば、ノードＤ）を迂回してアプリケーション暗号鍵を転送する場合にも図５のフローチャートを適用できる。
【００５０】
共有する乱数が鍵記憶部１４１に記憶されていない場合（ステップＳ２０２：Ｎｏ）、鍵管理部１２０は、ノードＢとの間で事前に承認済みのアプリケーション暗号鍵が存在するか否かを判断する（ステップＳ２０８）。存在する場合は（ステップＳ２０８：Ｙｅｓ）、第１送信部１２５は、承認済みのアプリケーション暗号鍵を要求元のアプリケーション１０１に送信する（ステップＳ２０９）。第１送信部１２５は、承認済みのアプリケーション暗号鍵の使用を開始することをノードＢに通知する（ステップＳ２１０）。事前に承認済みのアプリケーション暗号鍵が存在しない場合（ステップＳ２０８：Ｎｏ）、図４のステップＳ１０８〜ステップＳ１１０と同様の処理（ステップＳ２１１〜ステップＳ２１３）が実行される。
【００５１】
要求元のアプリケーションなどを識別し、乱数の要求元に応じて利用するアプリケーション暗号鍵の安全性を変更するように構成してもよい。例えば、鍵管理部１２０の相互認証用の通信支援に用いる暗号鍵は、乱数のうち安全性がより高い部分を利用するように構成してもよい。この処理は、鍵管理部１２０がアプリケーション暗号鍵を生成するときに、要求元のアプリケーションを識別することにより実現できる。迂回路の各通信は相互認証によりメッセージが保護されている。したがって、サービス要求が途中で改竄されることはない。
【００５２】
迂回路の指定は、鍵管理部１２０の有するルーティング機能（経路設定部１２６）により行われる。ノード１００の再起動および再設定時には、通信相手のアドレスは既に経路情報として経路記憶部１４２に記憶されている。このため、決定部１２３は、経路記憶部１４２の経路情報を参照して迂回路を決定できる。一方、新規リンクが追加される場合には、通信相手のアドレスを経路情報に設定しなければならない。これは、例えばシステム管理者が手動で経路情報を更新することにより行われる。
【００５３】
暗号鍵（乱数）の不足は、機能不備の場合を除くと、盗聴や妨害などにより乱数の生成量が減少した場合、乱数を利用するアプリケーションが多い場合、および、頻繁な鍵変更が要求される場合（特にワンタイムパッド暗号が利用される場合）に発生する。
【００５４】
これらの現象が短時間の場合には、乱数の不足に陥る前に迂回路など他のリンクを活用することが、システムの可用性向上のために重要である。システム全体でみると、迂回路の利用が鍵の消費を速める場合もある。しかし、鍵消費の少ない鍵管理部１２０を経由するように迂回路を設定すれば、システム全体としては、コストを増大（例えば、鍵生成機能（第２発生部１３０）の増強、乱数過消費によるサービス一時停止等の障害の発生）させることなく、サービスの提供を続けることができる可能性が増える。
【００５５】
このため、経路設定部１２６が、乱数の蓄積の度合等の状況情報を他のノード１００の経路設定部１２６との間で交換するように構成してもよい。また、決定部１２３が、経路選択の際に、交換した状況情報をメトリックとして、経路選択を実行するように構成してもよい。
【００５６】
また、例えばシステムの規模に応じて、このような状況情報の収集機能、状況情報に基づく経路選択のための経路情報の構成機能、および、各ノード１００の鍵管理部１２０に対する経路情報の配信機能を有するサーバ装置（センタ）を備えるように構成してもよい。
【００５７】
図６は、このように構成した通信システム１０−２の構成例を示す図である。通信システム１０−２は、複数のノード１００ａ〜１００ｇに加えて、上記機能を有するセンタ２００を備えている。図６の破線は、センタ２００が各ノード１００と接続され、状況情報および経路情報などの各種情報を送受信することを示す。なお、センタ２００に不具合が生じても、通信システム１０−２が継続的に利用できるように、センタ２００を二重化するように構成してもよい。
【００５８】
鍵管理部１２０は、迂回路を探す際に、所望のリンクが使えないこと（リンクで共有する乱数が不足していること）をセンタ２００に通知した後に、センタ２００に対して経路情報の提供を要求する。所望のリンクが使えないことを反映した経路情報を入手する必要があるためである。鍵管理部１２０は、例えば、所望のリンクが使えないことを一時的にセンタ２００に通知する。そして、センタ２００は、例えば所望のリンクが使えないことを反映した経路情報を、通知元の鍵管理部１２０に送信する。
【００５９】
このように構成すれば、例えば、迂回路を介した初期鍵交換によりリンクが短時間に再起動した場合等に、当該リンクの一時断を検出しないまま、通信システム１０−２全体の経路情報が利用継続される状況を実現しうる。これにより、リンク変動などによるネットワークの負荷変動の不安定さを引き起こしにくいという利点も出てくる。
【００６０】
また、本実施形態の機能を備えれば、ノード１００を新設した場合に、当該ノード１００が接続するリンクのうち１つのリンクに対して初期鍵の設定等を手動で行えば、他のリンクについては迂回路経由での初期設定が実行される。したがって、ノード新設時の立上げ作業を省力化できる。
【００６１】
ところで、システムの振る舞いを簡単にするためには、アプリケーション１０１に提供するアプリケーション暗号鍵は、鍵記憶部１４１に蓄積されている乱数から求めるのではなく、要求のたびにノード１００で乱数発生器を使って発生させる構成が望ましい。本実施形態では、例えば第１発生部１２２を乱数発生器として用いる。乱数生成速度がＧｂｐｓ（gigabit  per  second）以上である乱数発生器も存在するため、ワンタイムパッド暗号を用いる場合であっても、乱数発生器でリアルタイムに乱数を発生させながら通信を実現できる。
【００６２】
発生された乱数は、隣接するノード１００（隣接ノード）と共有済みで蓄積されている乱数を使ったワンタイムパッド暗号により、隣接ノードへ転送される。また、このような転送処理が繰り返されて、最終的に乱数が送信されるノード１００（最終ノード）まで送られる。最終ノードは、最終ノードで復号された乱数をアプリケーション暗号鍵としてアプリケーションに渡す。
【００６３】
最終ノードへ乱数を転送する通信にもワンタイムパッド暗号を用いる場合には、必要量の暗号鍵を事前に転送しておくか、暗号鍵をリアルタイムで転送する。ただし、ホップ毎に復号または符号化を繰り返すので、リアルタイムで暗号鍵を転送する場合であっても、ワンタイムパッド暗号で暗号化されたデータが最終ノードへ到達するより暗号鍵が遅れる状況も考えられる。
【００６４】
この状況に備えるためには、受信データに必要な遅延を与えるバッファを受信側に用意すればよい。このバッファは、データの通信用、鍵の通信用、またはその両方に必要になる場合がある。共有鍵暗号を使った通信でも、高速かつ頻繁に共有鍵を変更する場合には、同様のリアルタイムサービスサポートの機能を備えておくことが望ましい。
【００６５】
一方、隣接ノードとの間には、既に共有済みの乱数が存在する。従って、既存の乱数を使って、乱数を転送するのは、効率の劣化につながる。そこで、最初のリンクだけは、既に共有済の蓄積された乱数から、暗号鍵を選ぶように構成してもよい。すなわち、第１発生部１２２が、隣接ノードとの間で共有する乱数の一部を暗号鍵とするように構成してもよい。
【００６６】
隣接ノードには、乱数の中での暗号鍵の範囲または位置を示す情報のみが伝えられる。隣接ノードは、この情報を用いて、蓄積された乱数から該当部分を選択する。隣接ノードは、選択した部分である暗号鍵を、次のノード１００との間で共有済の乱数でワンタイムパッド暗号により暗号化し、次のノード１００に送出する。以降、同様の処理が繰り返され、最終ノードとの間での乱数（アプリケーション暗号鍵）の共有を達成する。
【００６７】
この機能も、連続的に鍵を生成させる必要がある場合にも利用できるように設計および実装可能である。アプリケーション暗号鍵交換の手順が、データ通信と並列に実施される場合もある。このような場合であっても、この機能を使うことにより乱数（暗号鍵）を転送する負荷が軽減できるため、アプリケーション暗号鍵を発生するノード１００（ノードＡとする）での他のサービスの実施を容易にする。隣接したノードとの間では暗号鍵の範囲または位置を示す情報のみを伝える方法は、前記、初期鍵の迂回路を介しての転送にも適応できる。
【００６８】
これまでは、ノード１００間で共有される乱数を、主にアプリケーション間の通信の暗号化に適用する例を説明した。適用可能な処理は通信の暗号化に限られるものではない。例えば、ファイルを暗号化して送信する処理にも適用できる。すなわち、ファイル自身を暗号化し、暗号化したファイルを送信する場合のファイル暗号化の暗号鍵として、共有される乱数を用いることができる。
【００６９】
この場合、暗号化されたファイルを保存するとともに、別の場所に、暗号化に用いた暗号鍵を保存しておく。本実施形態の通信システム１０は、ネットワーク前提であるので、暗号化されたファイルをそのまま、転送先のノード１００（ノードＤとする）へ転送してノードＤで保存するように構成してもよい。ノードＤでファイルの復号のために暗号鍵が必要になった際に、または、事前に、または、ファイルの転送時に、暗号鍵をノードＡからノードＤに転送する。この暗号鍵の転送のときに、上述の手順を適用できる。
【００７０】
通信の際に暗号化通信を行い、ノードＤが、暗号化通信で受信したデータ部分を復号せずにファイルを再構成し、その暗号化状態のファイルと、暗号化通信で用いた暗号鍵とを保存する手法も存在する。この手法では、暗号化通信の暗号鍵をファイル暗号化の暗号鍵に兼用できる。従って、暗号鍵の生成に関して新しい機能を提供する必要がない。またノードＤは、暗号化されたまま受信データを保存しておけばよいだけであるため、送信ノード側で必要となる機能が不要になるという利便性がある。また、上記手法では、受信操作の中で暗号化したデータを復号し、ファイル保存操作で再度、ファイルを暗号化して保存する手法と比較して、計算量を減らし、システムの効率を改善できる。
【００７１】
しかし、通信の際のパケットのサイズまたは区切りで暗号鍵が変化する場合、および、ワンタイムパッド暗号を用いた場合には、データ部分の暗号鍵だけから、暗号鍵を再構築する必要が生じる。このように、ノードＤでの暗号鍵の管理が複雑になる。
【００７２】
ファイル暗号化処理への応用を考慮し、通信時にプトロコルに関する部分の暗号化の暗号鍵と、データ部分の暗号化の暗号鍵とを別々に用意して使うように構成してもよい。このような構成であれば、受信側で暗号化されたデータ部分を復号することなくファイルを再構成して保存しても、ファイルの解読用（復号用）の暗号鍵の管理を容易にできる。
【００７３】
以上説明したとおり、本実施形態によれば、ノードが追加された場合や、ノードで乱数が過度に消費され当該ノードが使用できなくなった場合等であっても、迂回路経由で初期鍵を共有し、初期鍵を用いて乱数の生成を開始できる。
【００７４】
次に、本実施形態にかかる各装置（ノード（鍵共有装置）、センタ（サーバ装置））のハードウェア構成について図７を用いて説明する。図７は、本実施形態にかかる装置のハードウェア構成を示す説明図である。
【００７５】
本実施形態にかかる装置は、ＣＰＵ（Central  Processing  Unit）５１などの制御装置と、ＲＯＭ（Read  Only  Memory）５２やＲＡＭ（Random  Access  Memory）５３などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５４と、ＨＤＤ（Hard  Disk  Drive）、ＣＤ（Compact  Disc）ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバス６１を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【００７６】
本実施形態にかかる鍵共有装置で実行される鍵共有プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
【００７７】
また、本実施形態にかかる鍵共有装置で実行される鍵共有プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる鍵共有装置で実行される鍵共有プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００７８】
また、本実施形態の鍵共有プログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００７９】
本実施形態にかかる鍵共有装置で実行される鍵共有プログラムは、上述した各部（第１発生部、決定部、第１送信部等）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ５１（プロセッサ）が上記記憶媒体から鍵共有プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【００８０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８１】
１０  通信システム
１００ａ〜１００ｇ  ノード
１０１ａ〜１０１ｃ  アプリケーション
１１０  鍵中継部
１２０  鍵管理部
１２１  第１受信部
１２２  第１発生部
１２３  決定部
１２４  暗号化部
１２５  第１送信部
１２６  経路設定部
１３０  第２発生部
１３１ａ  第２送信部
１３１ｂ  第２送信部
１３２  第２受信部
１４１  鍵記憶部
１４２  経路記憶部
２００  センタ
【図１】
0005624526.tif 000002
【図２】
0005624526.tif 000003
【図３】
0005624526.tif 000004
【図４】
0005624526.tif 000005
【図５】
0005624526.tif 000006
【図６】
0005624526.tif 000007
【図７】
0005624526.tif 000008