(57)【要約】      （修正有）【課題】暗号通信速度を更に向上させた暗号通信装置を提供する。【解決手段】量子暗号通信システム２００は、暗号化部５２と復号部５３と制御部３とを備える。暗号化部５２は、平文データを受け付ける前に、平文データを暗号化する暗号鍵を鍵提供部２３から先読みし、平文データを受け付けた場合、平文データを先読みされた暗号鍵により暗号化する。復号部５３は、暗号データを受け付ける前に、暗号データを復号する復号鍵を鍵提供部２３から先読みし、暗号データを受け付けた場合、暗号データを先読みされた復号鍵により復号する。制御部３は、先読みされる暗号鍵の量と、先読みされる前記復号鍵の量とを制御する。【選択図】図３
2019161557.tif 000002
【特許請求の範囲】
【請求項１】
平文データを受け付ける前に、前記平文データを暗号化する暗号鍵を先読みし、前記平文データを受け付けた場合、前記平文データを前記暗号鍵により暗号化する暗号化部と、
暗号データを受け付ける前に、前記暗号データを復号する復号鍵を先読みし、前記暗号データを受け付けた場合、前記暗号データを前記復号鍵により復号する復号部と、
先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する制御部と、
を備える暗号通信装置。
【請求項２】
前記制御部は、先読みされた前記暗号鍵を記憶するために確保されるメモリ領域のサイズと、先読みされた前記復号鍵を記憶するために確保されるメモリ領域のサイズとを更に制御する、
請求項１に記載の暗号通信装置。
【請求項３】
ＱＫＤ（Ｑｕａｎｔｕｍ  Ｋｅｙ  Ｄｉｓｔｒｉｂｕｔｉｏｎ）により、通信先の装置と共有された共通鍵を生成するＱＫＤ部を更に備え、
前記制御部は、前記共通鍵を前記暗号鍵又は前記復号鍵に割り当て、前記共通鍵の生成速度が速いほど、先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを多くする、
請求項１に記載の暗号通信装置。
【請求項４】
ＱＫＤ（Ｑｕａｎｔｕｍ  Ｋｅｙ  Ｄｉｓｔｒｉｂｕｔｉｏｎ）により、通信先の装置と共有された共通鍵を生成するＱＫＤ部を更に備え、
前記制御部は、前記共通鍵の残量が多いほど、先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを多くする、
請求項１に記載の暗号通信装置。
【請求項５】
ＱＫＤ（Ｑｕａｎｔｕｍ  Ｋｅｙ  Ｄｉｓｔｒｉｂｕｔｉｏｎ）により、通信先の装置と共有された共通鍵を生成するＱＫＤ部を更に備え、
前記暗号化部と前記復号部とは、任意の数のマルチプロセス又はマルチスレッドにより実現され、
前記制御部は、前記共通鍵の生成速度が速いほど、前記マルチプロセスのプロセス数、又は、前記マルチスレッドのスレッド数を多くする、
請求項１に記載の暗号通信装置。
【請求項６】
ＱＫＤ（Ｑｕａｎｔｕｍ  Ｋｅｙ  Ｄｉｓｔｒｉｂｕｔｉｏｎ）により、通信先の装置と共有された共通鍵を生成するＱＫＤ部を更に備え、
前記暗号化部と前記復号部とは、任意の数のマルチプロセス又はマルチスレッドにより実現され、
前記制御部は、前記共通鍵の残量が多いほど、前記マルチプロセスのプロセス数、又は、前記マルチスレッドのスレッド数を多くする、
請求項１に記載の暗号通信装置。
【請求項７】
前記制御部は、前記復号鍵の残量よりも前記暗号鍵の残量の方が多い場合、先読みされる前記暗号鍵の量を先読みされる前記復号鍵の量よりも多くし、前記暗号鍵の残量よりも前記復号鍵の残量の方が多い場合、先読みされる前記復号鍵の量を先読みされる前記暗号鍵の量よりも多くする、
請求項１に記載の暗号通信装置。
【請求項８】
前記暗号化部と前記復号部とは、任意の数のマルチプロセス又はマルチスレッドにより実現され、
前記制御部は、前記復号鍵の残量よりも前記暗号鍵の残量の方が多い場合、前記暗号化部を実現するマルチプロセス又はマルチスレッドの数を、前記復号部を実現するマルチプロセス又はマルチスレッドの数よりも多くし、前記暗号鍵の残量よりも前記復号鍵の残量の方が多い場合、前記復号部を実現するマルチプロセス又はマルチスレッドの数を、前記暗号化部を実現するマルチプロセス又はマルチスレッドの数よりも多くする、
請求項１に記載の暗号通信装置。
【請求項９】
前記制御部は、前記暗号通信装置による暗号通信の通信統計情報及び通信履歴情報の少なくとも一方を使用して、先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する、
請求項１に記載の暗号通信装置。
【請求項１０】
前記暗号化部と前記復号部とは、任意の数のマルチプロセス又はマルチスレッドにより実現され、
前記制御部は、前記暗号通信装置による暗号通信の通信統計情報及び通信履歴情報の少なくとも一方を使用して、前記暗号化部を実現するマルチプロセス又はマルチスレッドの数と、前記復号部を実現するマルチプロセス又はマルチスレッドの数とを制御する、
請求項１に記載の暗号通信装置。
【請求項１１】
前記制御部は、前記平文データを生成するアプリケーションに応じて、先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する、
請求項１に記載の暗号通信装置。
【請求項１２】
前記暗号化部と前記復号部とは、任意の数のマルチプロセス又はマルチスレッドにより実現され、
前記制御部は、前記平文データを生成するアプリケーションに応じて、前記暗号化部を実現するマルチプロセス又はマルチスレッドの数と、前記復号部を実現するマルチプロセス又はマルチスレッドの数とを制御する、
請求項１に記載の暗号通信装置。
【請求項１３】
平文データを受け付ける前に、前記平文データを暗号化する暗号鍵を先読みし、前記平文データを受け付けた場合、前記平文データを前記暗号鍵により暗号化する暗号化部と、
暗号データを受け付ける前に、前記暗号データを復号する復号鍵を先読みし、前記暗号データを受け付けた場合、前記暗号データを前記復号鍵により復号する復号部と、
先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する制御部と、
を備える暗号通信システム。
【請求項１４】
平文データを受け付ける前に、前記平文データを暗号化する暗号鍵を先読みし、前記平文データを受け付けた場合、前記平文データを前記暗号鍵により暗号化するステップと、
暗号データを受け付ける前に、前記暗号データを復号する復号鍵を先読みし、前記暗号データを受け付けた場合、前記暗号データを前記復号鍵により復号するステップと、
先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御するステップと、
を含む暗号通信方法。
【請求項１５】
コンピュータを、
平文データを受け付ける前に、前記平文データを暗号化する暗号鍵を先読みし、前記平文データを受け付けた場合、前記平文データを前記暗号鍵により暗号化する暗号化部と、
暗号データを受け付ける前に、前記暗号データを復号する復号鍵を先読みし、前記暗号データを受け付けた場合、前記暗号データを前記復号鍵により復号する復号部と、
先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する制御部、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は暗号通信装置、暗号通信システム、暗号通信方法及びプログラムに関する。
【背景技術】
【０００２】
ワンタイムパッド（ＯＴＰ：Ｏｎｅ  Ｔｉｍｅ  Ｐａｄ）等の暗号通信方式を利用して暗号データ通信を行う技術が従来から知られている。ＯＴＰは、送受信されるデータと同じ長さの鍵を用いて、暗号化及び復号化を行い、一度用いた鍵は以後使わずに捨ててゆく方式である。ＯＴＰにより送受信された暗号データは、如何なる知識を有する盗聴者によっても解読できないことが情報理論によって保証されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５４２４００８号公報
【特許文献２】特許第４０１５３８５号公報
【特許文献３】特許第６２０３０９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、暗号通信速度を更に向上させることが難しかった。
【課題を解決するための手段】
【０００５】
実施形態の暗号通信装置は、暗号化部と復号部と制御部とを備える。暗号化部は、平文データを受け付ける前に、前記平文データを暗号化する暗号鍵を先読みし、前記平文データを受け付けた場合、前記平文データを前記暗号鍵により暗号化する。復号部は、暗号データを受け付ける前に、前記暗号データを復号する復号鍵を先読みし、前記暗号データを受け付けた場合、前記暗号データを前記復号鍵により復号する。制御部は、先読みされる前記暗号鍵の量と、先読みされる前記復号鍵の量とを制御する。
【図面の簡単な説明】
【０００６】
【図１】実施形態の鍵共有方式の例を示す図。
【図２】実施形態の暗号通信システムの構成例を示す図。
【図３】実施形態の量子暗号通信システムの機能構成の例を示す図。
【図４】実施形態の暗号鍵及び復号鍵の先読み制御について説明するための図。
【図５】実施形態の暗号化部の動作を示すフローチャート。
【図６】実施形態の復号部の動作を示すフローチャート。
【図７Ａ】実施形態の鍵の先読み量の制御例を説明するための図。
【図７Ｂ】実施形態の鍵の先読み量の制御例を説明するための図。
【図８Ａ】実施形態の暗号化部及び復号部をマルチプロセスにより実行する場合の例を示す図。
【図８Ｂ】実施形態の暗号化部及び復号部をマルチスレッドにより実行する場合の例を示す図。
【図９Ａ】図８Ａのプロセスの数を変更した場合の例を示す図。
【図９Ｂ】図８Ｂのスレッドの数を変更した場合の例を示す図。
【図１０】実施形態の量子暗号通信装置のハードウェア構成の例を示す図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、暗号通信装置、暗号通信システム、暗号通信方法及びプログラムの実施形態を詳細に説明する。
【０００８】
はじめに、暗号化及び復号に使用される鍵を、量子鍵配送技術（ＱＫＤ：（Ｑｕａｎｔｕｍ  Ｋｅｙ  Ｄｉｓｔｒｉｂｕｔｉｏｎ）により共有する場合の例について説明する。
【０００９】
［鍵共有方式の例］
図１は実施形態の鍵共有方式の例を示す図である。実施形態の鍵の共有は、量子鍵配送技術（以下、「ＱＫＤ」と呼ぶ。）を利用して行われる。量子鍵配送技術では、光ファイバーで接続された、単一光子を連続的に送信するＱＫＤ送信機１００ａと、当該単一光子を受信するＱＫＤ受信機１００ｂとの間で、暗号データ通信用の鍵を安全に共有する。なお、ＱＫＤ送信機１００ａ及びＱＫＤ受信機１００ｂの間で鍵を共有するためには、さらに、ＱＫＤ送信機１００ａとＱＫＤ受信機１００ｂとの間で鍵蒸留と呼ばれる古典通信路を介した制御データの交換が行われる。
【００１０】
ＱＫＤ送信機１００ａとＱＫＤ受信機１００ｂとの間で共有される鍵（共通鍵）は、デジタルデータ（乱数列）である。ＱＫＤによって共有される鍵は、量子力学の原理に基づいて、盗聴されていないことが保証されている。そのため、ＱＫＤによって共有された鍵の安全性は、非常に高いので、この鍵を用いて暗号通信を行うことで、高セキュリティ通信を実現することができる。
【００１１】
なお、暗号通信に使用される暗号アルゴリズムは、上述のワンタイムパッド（ＯＴＰ）以外でもよい。例えば、暗号アルゴリズムは、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）等でもよい。実施形態の説明では、暗号アルゴリズムがＯＴＰである場合について説明する。
【００１２】
以下、ＱＫＤ送信機１００ａ及びＱＫＤ受信機１００ｂを総称する場合、単にノードという。一方のノードで暗号化に用いられた鍵（以下、「暗号鍵」と呼ぶ。）は、他方のノードでは復号に用いられる鍵（以下、「復号鍵」と呼ぶ。）である。
【００１３】
送信側のノードから受信側のノードへの暗号データ送信と、受信側のノードから送信側のノードへの暗号データ送信の両方を行うこと、すなわち、全二重での暗号データ通信を考える。全二重での暗号データ通信では、ノード間で共有された鍵のうち、一方のノードの暗号鍵は、他方のノードでは復号鍵として利用され、一方のノードの復号鍵は、他方のノードでは暗号鍵として利用されるように、暗号通信システム全体で制御（鍵管理）する必要がある。
【００１４】
なお、ＡＥＳの様なブロック暗号が用いられる場合は、ＯＴＰのような情報理論的安全性は満たさない。しかしながら、ＡＥＳでは、暗号データを送信するノードも、当該暗号データを受信するノードも、同一の鍵に基づいて処理をすることが一般的である。そのため、暗号鍵及び復号鍵を分けて鍵管理をすることは必ずしも必要ではなく、単に鍵（共通鍵）の残量として鍵管理をしてもよい。
【００１５】
［暗号通信システムの構成例］
図２は実施形態の暗号通信システム３００の構成例を示す図である。実施形態の暗号通信システム３００は、拠点Ａの量子暗号通信システム２００ａと、拠点Ｂの量子暗号通信システム２００ａとを備える。拠点Ａの量子暗号通信システム２００ａと、拠点Ｂの量子暗号通信システム２００ａとは、光ファイバーにより接続されている。
【００１６】
拠点Ａの量子暗号通信システム２００ａは、ＱＫＤ部１ａ、鍵管理部２ａ、制御部３ａ、アプリ部４ａ、暗号処理部５ａ及び通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）部６ａを備える。同様に、拠点Ｂの量子暗号通信システム２００ｂは、ＱＫＤ部１ｂ、鍵管理部２ｂ、制御部３ｂ、アプリ部４ｂ、暗号処理部５ｂ及び通信Ｉ／Ｆ部６ｂを備える。
【００１７】
以下、量子暗号通信システム２００ａ及び２００ｂを区別しない場合は、単に量子暗号通信システム２００と呼ぶ。同様に、ＱＫＤ部１ａ及び１ｂ（鍵管理部２ａ及び２ｂ、制御部３ａ及び３ｂ、アプリ部４ａ及び４ｂ、暗号処理部５ａ及び５ｂ、通信Ｉ／Ｆ部６ａ及び６ｂ）を区別しない場合は、単にＱＫＤ部１（鍵管理部２、制御部３、アプリ部４、暗号処理部５、通信Ｉ／Ｆ部６）と呼ぶ。
【００１８】
図２の例では、拠点ＡのＱＫＤ部１ａは、上述のＱＫＤ送信機１００ａにより実現され、拠点ＢのＱＫＤ部１ｂが、上述のＱＫＤ受信機１００ｂにより実現される。なお、各拠点のＱＫＤ部が、ＱＫＤ送信機１００ａ及びＱＫＤ受信機１００ｂの両方により実現されていてもよい。すなわち、両方の拠点が単一光子を送信できようにしてもよい。
【００１９】
また、各拠点の鍵管理部２は、各拠点の制御部３により暗号鍵又は復号鍵のいずれかに割り当てられた鍵を保持する。割り当てられた鍵は、鍵管理部２により各拠点の暗号処理部５に提供される。
【００２０】
各拠点のアプリ部４は、任意の機能を有する任意の数のアプリケーションにより実現される。実施形態の説明では、アプリ部４は、暗号化処理は行わず、平文データを暗号処理部５に受け渡す。同様に、アプリ部４は、復号処理は行わず、平文データを暗号処理部５から受け取る。
【００２１】
各拠点の暗号処理部５は、アプリ部４からデータを受け付けると、当該データを暗号鍵により暗号化する。また、各拠点の暗号処理部５は、通信Ｉ／Ｆ部６から暗号データを受け付けると、当該暗号データを復号鍵により復号する。
【００２２】
各拠点の通信Ｉ／Ｆ部６は、各拠点の暗号処理部５により暗号化された暗号データにより、暗号通信を行う。
【００２３】
なお、各拠点のアプリ部４が、暗号処理を行う機能を有する場合、暗号処理部５の暗号化処理、及び、復号処理の少なくとも一方を行ってもよい。
【００２４】
また、各拠点の量子暗号通信システム２００は、複数の装置により実現されていてもよいし、１つの量子暗号通信装置として実現されていてもよい。
【００２５】
次に、各拠点の量子暗号通信システム２００の機能構成の例について、より詳細に説明する。
【００２６】
［機能構成の例］
図３は実施形態の量子暗号通信システム２００の機能構成の例を示す図である。実施形態の量子暗号通信システム２００は、ＱＫＤ部１、鍵管理部２、制御部３、アプリ部４、暗号処理部５及び通信Ｉ／Ｆ部６を備える。
【００２７】
図３は、図２で上述した鍵管理部２のより詳細な機能ブロック（暗号鍵保持部２１、復号鍵保持部２２及び鍵提供部２３）、及び、図２で上述した暗号処理部５のより詳細な機能ブロック（仮想Ｉ／Ｆ部５１、暗号化部５２、復号部５３及び物理Ｉ／Ｆ部５４）も示す。
【００２８】
ＱＫＤ部１は、量子鍵配送技術によって、通信先の装置と共有された鍵（共通鍵）を生成する。ＱＫＤ部１は、生成された鍵を鍵管理部２に入力する。
【００２９】
鍵管理部２は、暗号鍵保持部２１、復号鍵保持部２２及び鍵提供部２３を備える。
【００３０】
暗号鍵保持部２１は、データを暗号化する鍵（暗号鍵）を保持する。復号鍵保持部２２は、データを復号する鍵（復号鍵）を保持する。
【００３１】
なお、鍵の保持方法は任意でよい。鍵の保持方法は、例えば、鍵を固定長（または可変長）のファイルとし、当該ファイルに鍵ＩＤを付与して保持する方法でもよい。鍵ＩＤは、鍵を識別する識別情報である。また例えば、鍵の保持方法は、鍵をデータベースシステムにより保持（管理）する方法でもよい。
【００３２】
鍵提供部２３は、暗号処理部５に鍵を提供する。
【００３３】
制御部３は、量子暗号通信システム２００の動作を制御する。例えば、制御部３は、ＱＫＤ部１により生成された鍵（共通鍵）を、暗号鍵又は復号鍵に割り当てる制御を行う。また例えば、制御部３は、暗号通信速度の遅延を抑制する制御を行う。暗号通信速度の遅延を抑制する制御は、例えば鍵の先読み制御、及び、暗号処理の並列化制御等である。鍵の先読み制御、及び、暗号処理の並列化制御の詳細は後述する。
【００３４】
アプリ部４は、他拠点のアプリ部４との間で送受信されるデータを生成する。
【００３５】
暗号処理部５は、アプリ部４から平文データを受け付けると、鍵提供部２３により提供された暗号鍵で当該データを暗号化し、暗号データを通信Ｉ／Ｆ部６に入力する。また、暗号処理部５は、通信Ｉ／Ｆ部６から暗号データを受け付けると、鍵提供部２３により提供された復号鍵で当該暗号データを復号し、平文データをアプリ部４に入力する。
【００３６】
具体的には、暗号処理部５は、仮想Ｉ／Ｆ部５１、暗号化部５２、復号部５３及び物理Ｉ／Ｆ部５４を備える。
【００３７】
仮想Ｉ／Ｆ部５１は、暗号処理部５とアプリ部４との間のインタフェースである。仮想Ｉ／Ｆ部５１は、通常の通信Ｉ／Ｆと同様のインタフェースをアプリ部４に提供する。例えば、仮想Ｉ／Ｆ部５１は、仮想デバイスとして実装されたネットワークインタフェース等である。これにより、アプリ部４は、暗号処理部５が行っている処理については感知せずに、あるいは、そもそも暗号処理部５の存在を感知せずに、通信を行うことができる。したがって、アプリ部４は、暗号化処理及び復号処理等の変更、追加及び削除をする場合であっても、アプリ部４の変更は不要となる。一方で、暗号処理部５は、仮想Ｉ／Ｆ部５１を介して暗号処理機能を提供することにより、アプリ部４の種類、及び、アプリ部４の数等によらず、暗号機能を提供することができる。
【００３８】
暗号化部５２は、アプリ部４から仮想Ｉ／Ｆ部５１経由で受け取った平文データを、鍵提供部２３から受け取った暗号鍵で暗号化し、暗号データを物理Ｉ／Ｆ部５４経由で通信Ｉ／Ｆ部６へ受け渡す。実施形態では、暗号アルゴリズムがＯＴＰのため、暗号化処理は、平文データと暗号鍵とのＸＯＲ（エクスクルーシブオア）演算を行うことに相当する。
【００３９】
復号部５３は、通信Ｉ／Ｆ部６から、物理Ｉ／Ｆ部５４経由で受け取った暗号データを、鍵提供部２３から受け取った復号鍵で復号化し、平文データを仮想Ｉ／Ｆ部５１経由でアプリ部４へ受け渡す。実施形態では、暗号アルゴリズムがＯＴＰのため、復号処理は、暗号データと復号鍵とのＸＯＲ（エクスクルーシブオア）演算を行うことに相当する。
【００４０】
物理Ｉ／Ｆ部５４は、暗号処理部５と通信Ｉ／Ｆ部６との間の接続インタフェースである。
【００４１】
以上が暗号処理部５の構成の説明である。なお、暗号処理部５は、オペレーティングシステムが提供するドライバソフトウェアとして実現してもよいし、仮想インタフェース機能を利用するアプリケーションソフトウェアとして実現してもよい。
【００４２】
通信Ｉ／Ｆ部６は、他の装置と通信するためのネットワークインタフェースである。例えば、上述の暗号データは、通信Ｉ／Ｆ部６を介して他の装置と送受信される。
【００４３】
次に、実施形態の暗号通信システム３００の暗号通信速度の遅延を抑制する制御の詳細について説明する。
【００４４】
まず、鍵の先読み制御の詳細について説明する。
【００４５】
［鍵の先読み制御］
図４は実施形態の暗号鍵及び復号鍵の先読み制御について説明するための図である。前述の通り、暗号化部５２は、アプリ部４から仮想Ｉ／Ｆ部５１経由で受け取った平文データを、鍵提供部２３から受け取った暗号鍵で暗号化し、暗号データを物理Ｉ／Ｆ部５４経由で通信Ｉ／Ｆ部６へ受け渡す。このとき、暗号化部５２が、アプリ部４から平分データを受け取ってから、鍵提供部２３から暗号鍵を取得すると、当該暗号鍵の取得に要する時間が、そのまま暗号処理及び送信処理の遅延となって、暗号通信速度が遅くなってしまう。例えば、鍵管理部２が、暗号鍵をファイルシステム上に保持している場合、ファイル読み出し遅延が、暗号通信速度の遅延を増加させてしまう。
【００４６】
同様に、復号部５３は、通信Ｉ／Ｆ部６から物理Ｉ／Ｆ部５４経由で受け取った暗号データを、鍵提供部２３から受け取った復号鍵で復号し、平文データを仮想Ｉ／Ｆ部５１経由でアプリ部４へ受け渡す。このとき、復号部５３が、通信Ｉ／Ｆ部６から暗号データを受け取ってから、鍵提供部２３から復号鍵を取得すると、当該復号鍵の取得に要する時間が、そのまま復号処理及び受信処理の遅延となって、暗号通信速度が遅くなってしまう。例えば、鍵管理部２が、復号鍵をファイルシステム上に保持している場合、ファイル読み出し遅延が、暗号通信速度の遅延を増加させてしまう。
【００４７】
図５及び図６を参照して、暗号通信速度の遅延を抑制する鍵の先読み制御について説明する。
【００４８】
図５は実施形態の暗号化部５２の動作を示すフローチャートである。図５の例では、暗号アルゴリズムがＯＴＰである場合を例にして説明する。
【００４９】
はじめに、暗号化部５２が、アプリ部４から平文データを受け取る前に、制御部３により決められた量（サイズ）の暗号鍵を、鍵提供部２３から取得しておくことにより、暗号鍵を先読み（プリフェッチ）する（ステップＳ１）。先読みされた暗号鍵は、暗号化部５２により参照されるメモリ等に保持される。
【００５０】
次に、暗号化部５２は、アプリ部４から平文データを受け付けると（ステップＳ２）、ステップＳ１の処理により先読みされた暗号鍵と、当該平文データとのＸＯＲ処理により、当該平文データを暗号化する（ステップＳ３）。これにより、暗号鍵の取得に伴う暗号通信速度の遅延を抑制することができる。
【００５１】
次に、暗号化部５２が、ステップＳ３のＸＯＲ処理により暗号化された暗号データを出力する（ステップＳ４）。
【００５２】
次に、暗号化部５２が、ステップＳ３のＸＯＲ処理で使用された暗号鍵を削除する（ステップＳ５）。
【００５３】
なお、暗号化部５２によるステップＳ５の削除処理はオプションである。前述の通り、ＯＴＰでは一度使用された暗号鍵は二度使用されない。このため、暗号鍵を削除する必要がある。暗号鍵の削除処理は、鍵管理部２又は制御部３が別途、実施してもよいし、暗号化部５２が行ってもよい。また、暗号化部５２による暗号鍵の削除処理は、ステップＳ５で必ずしもリアルタイムに行う必要はなく、後回しにしてもよい。すなわち、例えば、暗号化部５２は、次に処理すべき平文データの入力がある場合、一つ前の暗号化処理に使用された暗号鍵の削除処理は、当該平文データの暗号化処理を終えた後でもよい。これにより、暗号鍵の削除処理による暗号通信速度の遅延を抑制することができる。
【００５４】
図６は実施形態の復号部５３の動作を示すフローチャートである。図６の例では、暗号アルゴリズムがＯＴＰである場合を例にして説明する。
【００５５】
はじめに、復号部５３が、通信Ｉ／Ｆ部６から暗号データを受け取る前に、制御部３により決められた量（サイズ）の復号鍵を、鍵提供部２３から取得しておくことにより、復号鍵を先読み（プリフェッチ）する（ステップＳ１１）。先読みされた復号鍵は、復号部５３により参照されるメモリ等に保持される。
【００５６】
次に、復号部５３は、通信Ｉ／Ｆ部６から暗号データを受け付けると（ステップＳ１２）、ステップＳ１１の処理により先読みされた復号鍵と、当該暗号データとのＸＯＲ処理により、当該暗号データを復号する（ステップＳ１３）。これにより、復号鍵の取得に伴う暗号通信速度の遅延を抑制することができる。
【００５７】
次に、復号部５３が、ステップＳ１３のＸＯＲ処理により復号された平文データを出力する（ステップＳ１４）。
【００５８】
次に、復号部５３が、ステップＳ１３のＸＯＲ処理で使用された復号鍵を削除する（ステップＳ１５）。
【００５９】
なお、復号部５３によるステップＳ１５の削除処理はオプションである。前述の通り、ＯＴＰでは一度使用された復号鍵は二度使用されない。このため、復号鍵を削除する必要がある。復号鍵の削除処理は、鍵管理部２又は制御部３が別途、実施してもよいし、復号部５３が行ってもよい。また、復号部５３による復号鍵の削除処理は、ステップＳ１５で必ずしもリアルタイムに行う必要はなく、後回しにしてもよい。すなわち、例えば、復号部５３は、次に処理すべき暗号データの入力がある場合、一つ前の復号処理に使用された復号鍵の削除処理は、当該暗号データの復号処理を終えた後でもよい。これにより、復号鍵の削除処理による暗号通信速度の遅延を抑制することができる。
【００６０】
次に、鍵の先読み量制御（先読みされた鍵を保持するメモリ５５（５６）の領域制御）の詳細について説明する。
【００６１】
［鍵の先読み量の制御］
先読みされた鍵が利用されれば、その分、新たな鍵が先読みされる必要がある。先読みされる鍵の量（サイズ）の制御方法には色々な方法が考えられる。例えば、暗号化部５２（復号部５３）が、現在、メモリに保持された暗号鍵（復号鍵）の残量によらず、常に一定サイズの暗号鍵（復号鍵）を新たに先読みする方法が考えられる。また例えば、暗号化部５２（復号部５３）が、常にメモリに一定量の暗号鍵（復号鍵）が保持されるように、利用された暗号鍵（復号鍵）のサイズ分だけ新たに暗号鍵（復号鍵）を鍵管理部２から読み出して補充する方法も考えられる。
【００６２】
暗号化部５２（復号部５３）は、暗号鍵（復号鍵）の先読みを行うことで、暗号化処理（復号処理）を開始する際に発生する、暗号鍵（復号鍵）の読み出し遅延を回避することができる。ところが、暗号通信が連続して発生すると、先読みされた暗号鍵（復号鍵）は当然枯渇する。先読みされた暗号鍵（復号鍵）が枯渇すると、暗号鍵（復号鍵）の読み出しのための通信遅延が発生する。
【００６３】
暗号鍵（復号鍵）として使用される鍵（共通鍵）は、ＱＫＤ部１により生成され、制御部３により当該共通鍵が暗号鍵又は復号鍵に割り当てられる。したがって、暗号化部５２（復号部５３）が、任意の量の暗号鍵（復号鍵）を無条件に先読みできるわけではない。そのため、例えば、制御部３が、暗号化部５２（復号部５３）により先読みされる暗号鍵（復号鍵）の量を、幾つかの要因に基づいて制御（決定）する。また例えば、制御部は、先読みされた暗号鍵を記憶するために確保されるメモリ領域のサイズと、先読みされた復号鍵を記憶するために確保されるメモリ領域のサイズを、幾つかの要因に基づいて制御（決定）する。
【００６４】
図７Ａ及び７Ｂは、実施形態の鍵の先読み量の制御例を説明するための図である。メモリ５５は、暗号化部５２により先読みされた暗号鍵を記憶する。メモリ５６は、復号部５３により先読みされた復号鍵を記憶する。
【００６５】
図７Ａの例は、先読みされた暗号鍵を記憶するために確保されたメモリ５５のサイズと、先読みされた復号鍵を記憶するために確保されたメモリ５６のサイズとが同じ場合を示す。一方、図７Ｂの例は、先読みされた暗号鍵を記憶するために確保されたメモリ５５のサイズが、先読みされた復号鍵を記憶するために確保されたメモリ５６のサイズよりも大きい場合を示す。
【００６６】
以下、鍵の先読み量の具体的な制御方法の例として、制御方法（Ａ）〜（Ｄ）について説明する。
【００６７】
（Ａ）トラフィックの量に基づく制御
例えば、制御部３は、暗号通信の通信統計情報及び通信履歴情報の少なくとも一方を使用して、先読みされる暗号鍵の量と、先読みされる復号鍵の量とを制御する。
【００６８】
通信統計情報及び通信履歴情報は、例えば通信トラフィックの量、送信トラフィックの量、受信トラフィックの量、及び、通信エラー等を含む。通信統計情報及び通信履歴情報は、例えば、仮想Ｉ／Ｆ部５１、物理Ｉ／Ｆ部５４及び通信Ｉ／Ｆ部６等で取得される。
【００６９】
具体的には、制御部３は、例えば、通信トラフィックの量が多い場合は、先読みされる暗号鍵（復号鍵）の量（先読みされた暗号鍵（復号鍵）を保持するメモリ５５（５６）のサイズ）を増加させ、通信トラフィックの量が少ない場合は、先読みされる暗号鍵（復号鍵）の量（先読みされた暗号鍵（復号鍵）を保持するメモリ５５（５６）のサイズ）を減少させる。こうすることで、通信トラフィックの量が多い場合に、より多くの暗号鍵（復号鍵）を先読みできるようになるので、先読された暗号鍵（復号鍵）が枯渇する可能性を低減させることができる。
【００７０】
特に、送信トラフィックの量と受信トラフィックの量とに偏りがある場合は、制御部３は、メモリ５５のサイズとメモリ５６のサイズとが異なるように制御してもよい。例えば、送信トラフィックの量が受信トラフィックの量よりも多い場合、制御部３は、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）を増加させ、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）を減少させる。こうすることにより、量子暗号通信システム２００上で有限であるメモリサイズを有効に活用するとともに、鍵の先読み量の調整、及び、暗号通信速度の最適化を実現することができる。
【００７１】
（Ｂ）鍵残量に基づく制御
また例えば、制御部３は、復号鍵保持部２２に保持された復号鍵の残量よりも暗号鍵保持部２１に保持された暗号鍵の残量の方が多い場合、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）を先読みされる復号鍵の量よりも多くする。一方、制御部３は、暗号鍵保持部２１に保持された暗号鍵の残量よりも復号鍵保持部２２に保持された復号鍵の残量の方が多い場合、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）を先読みされる前記暗号鍵の量よりも多くする。
【００７２】
また例えば、制御部３は、暗号鍵（復号鍵）の残量を確認し、暗号鍵（復号鍵）がそもそも少ない場合（例えば、閾値以下の場合）、暗号鍵（復号鍵）の先読みを行うことができない（または効率的ではない）可能性があるため、先読みを行わない（または先読み量を減少させる）。
【００７３】
また例えば、より鍵残量が多い方の先読み量（先読みされた暗号鍵（復号鍵）を保持するメモリ５５（５６）のサイズ）を増加させる方法と、より鍵残量が少ない方の先読み量（先読みされた暗号鍵（復号鍵）を保持するメモリ５５（５６）のサイズ）を減少させる方法とを組み合わせてもよい。これにより、量子暗号通信システム２００上で有限であるメモリサイズを有効に活用するとともに、鍵の先読み量の調整、及び、暗号通信速度の最適化を実現することができる。
【００７４】
（Ｃ）鍵の生成速度に基づく制御
また例えば、制御部３は、ＱＫＤ部１により生成される鍵（共通鍵）の生成（共有）速度が速いほど、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）と、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）とを多くする。
【００７５】
鍵（共通鍵）の生成（共有）速度は、例えば、送信側で使用される暗号鍵（乱数列）と、受信側で使用される復号鍵（送信側と同じ乱数列）とを生成する速度である。ＱＫＤ部１による鍵の生成速度が遅いほど、暗号化部５２（復号部５３）による暗号鍵（復号鍵）の読み出し処理による暗号通信速度の遅延の影響よりも、鍵の生成速度そのものが暗号通信速度を律速する（ボトルネックとなる）可能性が高い。この場合、暗号化部５２（復号部５３）は、暗号鍵（復号鍵）の先読みを行うことは効率的ではない可能性があるため、先読みを行わない（または先読み量を減少させる）。
【００７６】
なお、暗号鍵（復号鍵）の先読み量は、鍵（共通鍵）の生成速度ではなく、鍵（共通鍵）の残量により制御されてもよい。例えば、制御部３は、暗号鍵又は復号鍵に割り当てられる鍵（共通鍵）の残量が多いほど、先読みされる暗号鍵の量と、先読みされる復号鍵の量とを多くする。
【００７７】
（Ｄ）アプリケーションに応じた制御
また例えば、制御部３は、平文データを生成するアプリケーション（アプリ部４）に応じて、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）と、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）とを制御する。アプリケーションは、その種類によって、通信データ量、送信データ量及び受信データ量の割合、及び、通信データの発生頻度等の特性が異なる。制御部３は、例えば、このようなアプリケーションの特性に応じた制御を示す設定ファイル等を使用して、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）と、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）とを制御する。
【００７８】
具体的には、例えばアプリケーションが、送信データ量（または送信頻度）よりも受信データ量（または送信頻度）が少ない特性を有する場合、制御部３は、先読みされる暗号鍵の量（先読みされた暗号鍵を保持するメモリ５５のサイズ）を増加させ、先読みされる復号鍵の量（先読みされた復号鍵を保持するメモリ５６のサイズ）を減少させる。これにより、量子暗号通信システム２００上で有限であるメモリサイズを有効に活用するとともに、鍵の先読み量の調整、及び、暗号通信速度の最適化を実現することができる。
【００７９】
なお、先読みされる鍵の量（先読みされた鍵を保持するメモリ５５（５６）のサイズ）は、システム起動時に予め定めておいてもよいし、上記（Ａ）〜（Ｄ）の制御方法を使用して、システム起動中に動的に変更されてもよい。
【００８０】
次に、暗号処理（暗号化処理及び復号処理）の並列化制御の詳細について説明する。
【００８１】
［暗号処理の並列化制御］
制御部３は、上述の暗号化部５２による暗号化処理（図５参照）、及び、上述の復号部５３による復号処理（図６参照）をマルチプロセスまたはマルチスレッドで実行する並列化制御を行う。
【００８２】
図８Ａは実施形態の暗号化部５２及び復号部５３をマルチプロセスにより実行する場合の例を示す図である。図８Ａの例は、暗号化部５２が、３つのプロセスにより、暗号化部５２ａ〜ｃとして動作し、復号部５３が、３つのプロセスにより、復号部５３ａ〜ｃとして動作する場合を示す。
【００８３】
図８Ｂは実施形態の暗号化部５２及び復号部５３をマルチスレッドにより実行する場合の例を示す図である。図８Ｂの例は、暗号化部５２が、３つのスレッドにより、暗号化部５２ａ〜ｃとして動作し、復号部５３が、３つのスレッドにより、復号部５３ａ〜ｃとして動作する場合を示す。
【００８４】
暗号化部５２及び復号部５３が、マルチプロセスまたはマルチスレッドにより並列化される場合の暗号鍵保持部２１及び復号鍵保持部２２の構成について説明する。
【００８５】
暗号鍵保持部２１は、例えば暗号化部５２ａ〜５２ｃ毎に用意されてもよい。例えば、暗号鍵がファイルシステム上のファイルとして保持される場合、暗号鍵を保持するディレクトリを分けることにより、暗号化部５２ａ〜５２ｃ毎の暗号鍵が区別できるようにしてもよい。また例えば、暗号鍵がファイルシステム上のファイルとして保持される場合、暗号鍵に付与される鍵ＩＤの付与ルールにより、暗号化部５２ａ〜５２ｃ毎の暗号鍵が区別できるようにしてもよい。
【００８６】
また例えば、単一の暗号鍵保持部２１が、暗号化部５２ａ〜５２ｃからのアクセスを受け付けてもよい。
【００８７】
復号鍵保持部２２の構成方法の説明は、上述の暗号鍵保持部２１の構成方法と同様であるので省略する。
【００８８】
次に、暗号化部５２及び復号部５３が、マルチプロセスまたはマルチスレッドにより並列化される場合の暗号処理部５の構成について説明する。
【００８９】
仮想Ｉ／Ｆ部５１は、アプリ部４から受け付けた平文データを、暗号化部５２ａ〜ｃに配分する必要がある。通常は、平文データを１／３ずつ配分する配分処理を行うことが効率的である。本配分処理は、仮想Ｉ／Ｆ部５１に実装されることが望ましい。このように、受け取ったデータを複数の処理部に配分する配分処理は、例えばＬｉｎｕｘ（登録商標）オペレーティングシステム等の場合、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）の冗長化及び負荷分散等に使われるボンディング（ｂｏｎｄｉｎｇ）と呼ばれる方法、及び、当該ボンディングの拡張によって実現可能である。
【００９０】
暗号化部５２がマルチプロセスにより動作する場合（図８Ａ参照）、各暗号化部５２ａ〜ｃには、それぞれ独立のメモリ５５ａ〜ｃが割り当てられる。同様に、復号部５３がマルチプロセスにより動作する場合、各復号部５３ａ〜ｃには、それぞれ独立のメモリ５６ａ〜ｃが割り当てられる。
【００９１】
一方、暗号化部５２がマルチスレッドにより動作する場合（図８Ｂ参照）、各暗号化部５２ａ〜ｃには、共通のメモリ５５が割り当てられる。同様に、復号部５３がマルチスレッドにより動作する場合、各復号部５３ａ〜ｃには、共通のメモリ５６が割り当てられる。
【００９２】
なお、マルチスレッドの場合、各暗号化部５２ａ〜ｃ（復号部５３ａ〜ｃ）により参照されるメモリ５５（５６）の各領域サイズは可変であっても構わない。各領域サイズを可変にすることにより、各暗号化部５２ａ〜ｃ（復号部５３ａ〜ｃ）がそれぞれ異なる大きさの暗号鍵（復号鍵）を先読みすることも可能である。
【００９３】
物理Ｉ／Ｆ部５４では、各暗号化部５２ａ〜ｃから暗号データを受け付けると、当該暗号データを単一の通信Ｉ／Ｆ部６から出力し、対向の装置の物理Ｉ／Ｆ部５４に接続された対応する復号部５３ａ〜ｃにて当該暗号データが受信できるように通信制御をする。この通信制御を行う方法は任意でよい。例えば、各暗号化部５２ａ〜ｃに、固有の識別子を割り当てることにより、暗号化部５２ａは対向する復号部５３ａと、暗号化部５２ｂは対向する復号部５３ｂと、暗号化部５２ｃは対向する復号部５３ｃと暗号データを交換できるようにしてもよい。具体的な実装方法としては、例えば、暗号化部５２ａ（ｂ，ｃ）及び復号部５３ａ（ｂ，ｃ）の組毎に、それぞれ異なるポート番号を使ったＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）通信を行わせる方法、それぞれ異なるＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスを使ったＩＰ通信を行わせる方法、及び、それぞれ異なるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスを使った通信を行わせる方法等がある。
【００９４】
このように、マルチプロセスまたはマルチスレッドにより暗号処理部５を動作させることで、並列化制御に必要なコンピュータのプロセッサ等のリソースが十分にある場合には、暗号通信処理を更に高速化させることができる。一方で、コンピュータのリソースに限りがある場合、やみくもにプロセス数またはスレッド数を増加させても、暗号通信処理は高速化されない。
【００９５】
次に、制御部３が、上述のプロセスの数またはスレッドの数を、幾つかの要因に基づいて制御（変更）する方法について説明する。
【００９６】
図９Ａは、図８Ａのプロセスの数を変更した場合の例を示す図である。図９Ａの例は、暗号化部５２に割り当てられたプロセスの数が３から４に増加し、復号部５３に割り当てられたプロセスの数が３から２に減少した場合を示す。
【００９７】
図９Ｂは、図８Ｂのスレッドの数を変更した場合の例を示す図である。図９Ｂの例は、暗号化部５２に割り当てられたスレッドの数が３から４に増加し、復号部５３に割り当てられたスレッドの数が３から２に減少した場合を示す。
【００９８】
以下、プロセス数（スレッド数）の具体的な制御方法の例として、制御方法（Ａ）〜（Ｄ）について説明する。
【００９９】
（Ａ）トラフィックの量に基づく制御
例えば、制御部３は、暗号通信の通信統計情報及び通信履歴情報の少なくとも一方を使用して、プロセスの数またはスレッドの数を制御する。なお、通信統計情報及び通信履歴情報の説明は、上述の鍵の先読み制御の説明と同じなので省略する。
【０１００】
具体的には、制御部３は、例えば、通信トラフィックの量が多い場合は、プロセスの数またはスレッドの数を増加させ、通信トラフィックの量が少ない場合は、プロセスの数またはスレッドの数を減少させる。こうすることで、通信トラフィックの量が多い場合に、より多くのプロセスまたはスレッドにより、暗号化処理（復号処理）を実行できるので、当該暗号化処理（復号処理）を高速化できる。
【０１０１】
特に、送信トラフィックの量と受信トラフィックの量とに偏りがある場合は、制御部３は、暗号化処理に割り当てられるプロセス（スレッド）の数と、復号処理に割り当てられるプロセス（スレッド）の数とが異なるように制御してもよい。例えば、送信トラフィックの量が受信トラフィックの量よりも多い場合、制御部３は、暗号化処理に割り当てられるプロセス（スレッド）の数を増加させ、復号処理に割り当てられるプロセス（スレッド）の数）を減少させる。こうすることにより、量子暗号通信システム２００上で有限であるプロセッサ等のリソースを有効に活用するとともに、暗号通信速度の高速化及び最適化を実現することができる。
【０１０２】
（Ｂ）鍵残量に基づく制御
また例えば、制御部３は、復号鍵保持部２２に保持された復号鍵の残量よりも暗号鍵保持部２１に保持された暗号鍵の残量の方が多い場合、暗号化処理に割り当てられるプロセス（スレッド）の数を復号処理に割り当てられるプロセス（スレッド）の数よりも多くする。一方、制御部３は、暗号鍵保持部２１に保持された暗号鍵の残量よりも復号鍵保持部２２に保持された復号鍵の残量の方が多い場合、復号処理に割り当てられるプロセス（スレッド）の数を暗号化処理に割り当てられるプロセス（スレッド）の数よりも多くする。
【０１０３】
また例えば、制御部３は、暗号鍵（復号鍵）の残量を確認し、暗号鍵（復号鍵）がそもそも少ない場合（例えば、閾値以下の場合）、プロセス数（スレッド数）を増加させない（または減少させる）。この理由は、暗号鍵（復号鍵）がそもそも少ない場合は、暗号鍵（復号鍵）の残量がボトルネックとなるため、プロセス数（スレッド数）を増加させても、暗号通信速度を高速化できない可能性があるためである。
【０１０４】
また例えば、より鍵残量が多い方のプロセス数（スレッド数）を増加させる方法と、より鍵残量が少ない方のプロセス数（スレッド数）を減少させる方法とを組み合わせてもよい。これにより、量子暗号通信システム２００上で有限であるプロセッサ等のリソースを有効に活用するとともに、暗号通信速度の高速化及び最適化を実現することができる。
【０１０５】
（Ｃ）鍵の生成速度に基づく制御
また例えば、制御部３は、ＱＫＤ部１により生成される鍵（共通鍵）の生成（共有）速度が速いほど、暗号化処理に割り当てられるプロセス数（スレッド数）と、復号処理に割り当てられるプロセス数（スレッド数）とを多くする。なお、鍵（共通鍵）の生成（共有）速度の説明は、上述の鍵の先読み制御の説明と同じなので省略する。
【０１０６】
ＱＫＤ部１による鍵の生成速度が遅いほど、暗号化部５２（復号部５３）による暗号化処理（復号処理）による暗号通信速度の遅延の影響よりも、鍵の生成速度そのものが暗号通信速度を律速する（ボトルネックとなる）可能性が高い。この場合、暗号化部５２（復号部５３）に割り当てられるプロセス（スレッド）の数を増やすことは効率的ではない可能性があるため、制御部３は、プロセス数（スレッド数）を増加させない（または減少させる）。
【０１０７】
なお、プロセス数（スレッド数）は、鍵（共通鍵）の生成速度ではなく、鍵（共通鍵）の残量により制御されてもよい。例えば、制御部３は、暗号鍵又は復号鍵に割り当てられる鍵（共通鍵）の残量が多いほど、暗号化処理に割り当てられるプロセス数（スレッド数）と、復号処理に割り当てられるプロセス数（スレッド数）とを多くする。
【０１０８】
（Ｄ）アプリケーションに応じた制御
また例えば、制御部３は、平文データを生成するアプリケーション（アプリ部４）に応じて、暗号化処理に割り当てられるプロセス数（スレッド数）と、復号処理に割り当てられるプロセス数（スレッド数）とを制御する。アプリケーションは、その種類によって、通信データ量、送信データ量及び受信データ量の割合、及び、通信データの発生頻度等の特性が異なる。制御部３は、例えば、このようなアプリケーションの特性に応じた制御を示す設定ファイル等を使用して、暗号化処理に割り当てられるプロセス数（スレッド数）と、復号処理に割り当てられるプロセス数（スレッド数）とを制御する。
【０１０９】
具体的には、例えばアプリケーションが、送信データ量（または送信頻度）よりも受信データ量（または送信頻度）が少ない特性を有する場合、制御部３は、暗号化処理に割り当てられるプロセス数（スレッド数）を増加させ、復号処理に割り当てられるプロセス数（スレッド数）を減少させる。これにより、量子暗号通信システム２００上で有限であるプロセッサ等のリソースを有効に活用するとともに、暗号通信速度の高速化及び最適化を実現することができる。
【０１１０】
なお、プロセス数（スレッド数）は、対向の量子暗号通信システム２００と合意しておく必要がある。すなわち、拠点Ａにおける量子暗号通信システム２００ａの暗号化部５２のプロセス数（スレッド数）がＮ（Ｎは１以上の整数）、復号部５３のプロセス数（スレッド数）がＭ（Ｍは１以上の整数）の場合、対向する拠点Ｂにおける量子暗号通信システム２００ｂの暗号化部５２のプロセス数（スレッド数）がＮ、復号部５３のプロセス数（スレッド数）がＭである必要がある。
【０１１１】
なお、プロセス数（スレッド数）は、システム起動時に予め定めておいてもよいし、上記（Ａ）〜（Ｄ）の制御方法を使用して、システム起動中に動的に変更されてもよい。ただし、制御部３は、プロセス数（スレッド数）を動的に変更する場合、制御信号を交換する等の制御方法により、対向の量子暗号通信システム２００のプロセス数（スレッド数）も同様に変更する。
【０１１２】
最後に、実施形態の量子暗号通信システム２００（図２参照）を実現するための量子暗号通信装置のハードウェア構成の例について説明する。
【０１１３】
［ハードウェア構成の例］
図１０は実施形態の量子暗号通信装置のハードウェア構成の例を示す図である。実施形態の量子暗号通信装置は、制御装置４０１、主記憶装置４０２、補助記憶装置４０３、表示装置４０４、入力装置４０５、量子通信Ｉ／Ｆ４０６及び古典通信Ｉ／Ｆ４０７を備える。
【０１１４】
制御装置４０１、主記憶装置４０２、補助記憶装置４０３、表示装置４０４、入力装置４０５、量子通信Ｉ／Ｆ４０６及び古典通信Ｉ／Ｆ４０７は、バス４１０を介して接続されている。
【０１１５】
制御装置４０１は、補助記憶装置４０３から主記憶装置４０２に読み出されたプログラムを実行する。主記憶装置４０２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリである。補助記憶装置４０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びメモリカード等である。
【０１１６】
表示装置４０４は、量子暗号通信装置の状態等を示す情報を表示する。表示装置４０４は、例えば液晶ディスプレイ等である。入力装置４０５は、ユーザーからの入力を受け付ける。入力装置４０５は、例えばキーボード及びマウス等である。なお、量子暗号通信装置と情報処理装置とを接続し、例えば上述のアプリ部４（図２参照）を情報処理装置で動作させる場合等は、表示装置４０４及び入力装置４０５を備えていなくてもよい。この場合、量子暗号通信装置の設定等は、例えば古典通信Ｉ／Ｆ４０７を介して接続される端末等から行われる。
【０１１７】
量子通信Ｉ／Ｆ４０６は、単一光子が送信される量子通信路に接続するためのインタフェースである。
【０１１８】
古典通信Ｉ／Ｆ４０７は、イーサネット（登録商標）等の古典通信路（制御通信路）に接続するためのインタフェースである。なお古典通信Ｉ／Ｆ４０７は、無線方式でもよい。
【０１１９】
実施形態の量子暗号通信装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、メモリカード、ＣＤ−Ｒ、及び、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータ・プログラム・プロダクトとして提供される。
【０１２０】
また実施形態の量子暗号通信装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【０１２１】
また実施形態の量子暗号通信装置が実行するプログラムを、ダウンロードさせずにインターネット等のネットワーク経由で提供するように構成してもよい。
【０１２２】
また実施形態の量子暗号通信装置で実行されるプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１２３】
実施形態の量子暗号通信装置で実行されるプログラムは、実施形態の量子暗号通信装置の機能構成のうち、プログラムにより実現可能な機能を含むモジュール構成となっている。
【０１２４】
プログラムにより実現される機能は、制御装置４０１が補助記憶装置４０３等の記憶媒体からプログラムを読み出して実行することにより、主記憶装置４０２にロードされる。すなわちプログラムにより実現される機能は、主記憶装置４０２上に生成される。
【０１２５】
なお実施形態の量子暗号通信装置の機能の一部又は全部を、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアにより実現してもよい。ＩＣは、例えば専用の処理を実行するプロセッサである。
【０１２６】
また複数のプロセッサを用いて各機能を実現する場合、各プロセッサは、各機能のうち１つを実現してもよいし、各機能のうち２つ以上を実現してもよい。
【０１２７】
また実施形態の量子暗号通信装置の動作形態は任意でよい。実施形態の量子暗号通信装置を、例えばネットワーク上のクラウドシステムを構成する装置として動作させてもよい。
【０１２８】
以上説明したように、実施形態の暗号通信システム３００では、暗号化部５２が、平文データを受け付ける前に、平文データを暗号化する暗号鍵を先読みし、平文データを受け付けた場合、平文データを暗号鍵により暗号化する。復号部５３が、暗号データを受け付ける前に、暗号データを復号する復号鍵を先読みし、暗号データを受け付けた場合、暗号データを復号鍵により復号する。制御部３は、先読みされる暗号鍵の量と、先読みされる復号鍵の量とを制御する。
【０１２９】
これにより実施形態の暗号通信システム３００によれば、暗号通信速度を更に向上させることができる。
【０１３０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３１】
１  ＱＫＤ部
２  鍵管理部
３  制御部
４  アプリ部
５  暗号処理部
６  通信Ｉ／Ｆ部
２１  暗号鍵保持部
２２  復号鍵保持部
２３  鍵提供部
５１  仮想Ｉ／Ｆ部
５２  暗号化部
５３  復号部
５４  物理Ｉ／Ｆ部
５５  メモリ
５６  メモリ
１００ａ  ＱＫＤ送信機
１００ｂ  ＱＫＤ受信機
２００  量子暗号通信システム
３００  暗号通信システム
４０１  制御装置
４０２  主記憶装置
４０３  補助記憶装置
４０４  表示装置
４０５  入力装置
４０６  量子通信Ｉ／Ｆ
４０７  古典通信Ｉ／Ｆ
４１０  バス
【図１】
2019161557.tif 000003
【図２】
2019161557.tif 000004
【図３】
2019161557.tif 000005
【図４】
2019161557.tif 000006
【図５】
2019161557.tif 000007
【図６】
2019161557.tif 000008
【図７Ａ】
2019161557.tif 000009
【図７Ｂ】
2019161557.tif 000010
【図８Ａ】
2019161557.tif 000011
【図８Ｂ】
2019161557.tif 000012
【図９Ａ】
2019161557.tif 000013
【図９Ｂ】
2019161557.tif 000014
【図１０】
2019161557.tif 000015