(57)【要約】【課題】演算部を効率的に利用することができるデータ処理装置を提供すること。【解決手段】暗号アルゴリズムとハッシュアルゴリズムとを１つの制御命令で実行することを表す実行情報が制御情報記憶部１３８に記憶されているか否かを判断する制御情報判断部１３２ａと、暗号アルゴリズムとハッシュアルゴリズムとを実行する１つの制御命令を生成する命令生成部１３４と、実行済みであることを表す実行済み情報を制御情報記憶部１３８に保存する保存部１３２ｂと、暗号アルゴリズムとハッシュアルゴリズムのうちいずれかのアルゴリズムの実行要求を受付ける要求受付部１３１と、実行要求を受付けたアルゴリズムが実行済みであることを表す実行済み情報が保存されている場合に、実行済みのアルゴリズムの演算結果を出力する出力部１３２ｄと、を備えた。【選択図】        図５
2009049700.tif 000002
【特許請求の範囲】
【請求項１】
暗号アルゴリズムとハッシュアルゴリズムとを１つの制御命令で実行可能な演算部と、
前記暗号アルゴリズムおよび前記ハッシュアルゴリズムのうち、一方を表す第１アルゴリズムを、他方を表す第２アルゴリズムとともに１つの制御命令で実行するか否かを表す同時実行情報と、前記第２アルゴリズムが実行済みであるか否かを表す実行済み情報とを記憶する制御情報記憶部と、
前記第１アルゴリズムの実行要求を受付ける第１受付部と、
前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されているか否かを判断する制御情報判断部と、
前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されている場合に、前記第１アルゴリズムと前記第２アルゴリズムとを実行する１つの制御命令を生成する生成部と、
生成された制御命令によって前記演算部の実行を制御する制御部と、
生成された制御命令によって前記演算部が実行された場合に、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報を前記制御情報記憶部に保存する保存部と、
前記第２アルゴリズムの実行要求を受付ける第２受付部と、
実行要求を受付けた前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が、前記制御情報記憶部に保存されているか否かを判断する実行済み判断部と、
前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が前記制御情報記憶部に保存されている場合に、実行済みの前記第２アルゴリズムの演算結果を出力する出力部と、
を備えたことを特徴とするデータ処理装置。
【請求項２】
前記暗号アルゴリズムおよび前記ハッシュアルゴリズムの少なくとも一方の実行を要求する処理を含むデータ処理を実行するデータ処理部と、
前記データ処理の内容を定める情報であって、実行すべきアルゴリズムの識別子を含む設定情報を記憶する設定記憶部と、
前記設定情報に、前記暗号アルゴリズムの識別子および前記ハッシュアルゴリズムの識別子が含まれるか否かを判断し、含まれる場合に前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存する同時実行判断部と、をさらに備えたこと、
を特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記設定記憶部は、前記設定情報と前記設定情報の識別子とを対応づけて記憶し、
前記同時実行判断部は、さらに、処理対象データから前記設定情報の識別子を抽出し、抽出した前記設定情報の識別子に対応する前記設定記憶部の前記設定情報に、前記暗号アルゴリズムの識別子および前記ハッシュアルゴリズムの識別子が含まれるか否かを判断し、含まれる場合に前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存すること、
を特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記データ処理部は、ＩＰｓｅｃプロトコルによる前記暗号アルゴリズムおよび前記ハッシュアルゴリズムの少なくとも一方の実行を要求する処理を含む前記データ処理を実行し、
前記設定記憶部は、ＩＰｓｅｃプロトコルのＳＡ（Security Association）の内容を定める前記設定情報と、前記ＳＡの識別子であるＳＰＩ（Security Parameters Index）とを対応づけて記憶し、
前記同時実行判断部は、ＩＰｓｅｃプロトコルで送受信されるメッセージから前記ＳＰＩを抽出し、抽出した前記ＳＰＩに対応する前記設定記憶部の前記設定情報に、前記暗号アルゴリズムの識別子および前記ハッシュアルゴリズムの識別子が含まれるか否かを判断し、含まれる場合に前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存すること、
を特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記同時実行判断部は、取得された前記設定情報に、前記暗号アルゴリズムの識別子および前記ハッシュアルゴリズムの識別子が含まれると判断した回数と予め定められた第１閾値とを比較し、前記回数が前記第１閾値を越えた場合に、前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存すること、
を特徴とする請求項２に記載のデータ処理装置。
【請求項６】
前記暗号アルゴリズムおよび前記ハッシュアルゴリズムの少なくとも一方の実行を要求する処理を含むデータ処理を実行する少なくとも１つのデータ処理部と、
前記第１アルゴリズムの実行を要求した前記データ処理部を識別する第１識別子と、前記第２アルゴリズムの実行を要求した前記データ処理部を識別する第２識別子とが一致するか否かを判断し、一致する場合に、前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存する同時実行判断部と、をさらに備えたこと、
を特徴とする請求項１に記載のデータ処理装置。
【請求項７】
前記同時実行判断部は、さらに、前記第１アルゴリズムの実行時刻と前記第２アルゴリズムの実行時刻との差が予め定められた第２閾値より小さいか否かを判断し、小さい場合に、前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存すること、
を特徴とする請求項６に記載のデータ処理装置。
【請求項８】
前記同時実行判断部は、前記第１識別子と前記第２識別子とが一致すると判断した回数と予め定められた第３閾値とを比較し、前記回数が前記第３閾値を越えた場合に、前記暗号アルゴリズムと前記ハッシュアルゴリズムとを１つの制御命令で実行する前記同時実行情報を前記制御情報記憶部に保存すること、
を特徴とする請求項６に記載のデータ処理装置。
【請求項９】
第１受付部によって、演算部が１つの制御命令で実行可能な暗号アルゴリズムとハッシュアルゴリズムとのうち、一方を表す第１アルゴリズムの実行要求を受付ける第１受付ステップと、
制御情報判断部によって、前記第１アルゴリズムを、前記暗号アルゴリズムおよび前記ハッシュアルゴリズムのうち前記第１アルゴリズムと異なる第２アルゴリズムとともに１つの制御命令で実行するか否かを表す同時実行情報と、前記第２アルゴリズムが実行済みであるか否かを表す実行済み情報とを記憶する制御情報記憶部に、前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が記憶されているか否かを判断する制御情報判断ステップと、
生成部によって、前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されている場合に、前記第１アルゴリズムと前記第２アルゴリズムとを実行する１つの制御命令を生成する生成ステップと、
制御部によって、生成された制御命令によって前記演算部の実行を制御する制御ステップと、
保存部によって、生成された制御命令によって前記演算部が実行された場合に、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報を前記制御情報記憶部に保存する保存ステップと、
第２受付部によって、前記第２アルゴリズムの実行要求を受付ける第２受付ステップと、
実行済み判断部によって、実行要求を受付けた前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が、前記制御情報記憶部に保存されているか否かを判断する実行済み判断ステップと、
出力部によって、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が前記制御情報記憶部に保存されている場合に、実行済みの前記第２アルゴリズムの演算結果を出力する出力ステップと、
を備えたことを特徴とするデータ処理方法。
【請求項１０】
演算部が１つの制御命令で実行可能な暗号アルゴリズムとハッシュアルゴリズムとのうち、一方を表す第１アルゴリズムの実行要求を受付ける第１受付手順と、
前記第１アルゴリズムを、前記暗号アルゴリズムおよび前記ハッシュアルゴリズムのうち前記第１アルゴリズムと異なる第２アルゴリズムとともに１つの制御命令で実行するか否かを表す同時実行情報と、前記第２アルゴリズムが実行済みであるか否かを表す実行済み情報とを記憶する制御情報記憶部に、前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が記憶されているか否かを判断する制御情報判断手順と、
前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されている場合に、前記第１アルゴリズムと前記第２アルゴリズムとを実行する１つの制御命令を生成する生成手順と、
生成された制御命令によって前記演算部の実行を制御する制御手順と、
生成された制御命令によって前記演算部が実行された場合に、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報を前記制御情報記憶部に保存する保存手順と、
前記第２アルゴリズムの実行要求を受付ける第２受付手順と、
実行要求を受付けた前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が、前記制御情報記憶部に保存されているか否かを判断する実行済み判断手順と、
前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が前記制御情報記憶部に保存されている場合に、実行済みの前記第２アルゴリズムの演算結果を出力する出力手順と、
をコンピュータに実行させるデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データに対して暗号化・復号化処理およびハッシュ値算出処理を実行する装置、方法およびプログラムに関するものである。
【背景技術】
【０００２】
暗号アルゴリズムやハッシュアルゴリズムの計算では多くの計算資源を必要とする。このため、例えばＣＰＵ（Central Processing Unit）上で動作するソフトウェアにより、これらのアルゴリズムの計算を行うと、ＣＰＵ上で動作する他の処理に必要な計算資源が不足する恐れがある。これを回避するため、暗号アルゴリズムやハッシュアルゴリズムを計算する専用のハードウェア回路を搭載した暗号エンジンが利用されている。
【０００３】
また、ＩＰｓｅｃプロトコルでデータを送信する処理のように、１つのデータに対して上記２つのアルゴリズムを同時に適用する場合がある。このため、１つのデータに対して暗号アルゴリズムとハッシュアルゴリズムとを同時に適用できる暗号エンジンも開発されている。
【０００４】
特許文献１では、暗号処理または復号処理と認証処理とを１つのデータに対して適用する場合に、それぞれの処理で重複して使用されるデータの範囲を特定し、特定した範囲を１回のみの転送することにより、エンジン部とメインメモリとの間でのデータ転送量を削減する技術が提案されている。
【０００５】
特許文献２では、ＯＳＩ（Open Systems Interconnection）の基本参照モデルのような複数の処理階層のそれぞれで、暗号処理または復号処理、認証処理、およびチェックサム算出処理などの複数の処理が連続して実行されるときのデータ転送量を削減する技術が提案されている。特許文献２の方法では、上流階層の処理を一時的に保留し、最終的に実行可能な段階になってからエンジン部に処理を要求することにより、専用ハードウェアとメインメモリとの間のデータ転送量を削減している。
【０００６】
特許文献１および特許文献２の方法では、暗号アルゴリズムやハッシュアルゴリズムの処理を要求するＯＳ（Operating System）などのソフトウェアが、専用ハードウェアにより両アルゴリズムが同時に実行可能であることを認識し、同時に処理を要求することを前提としている。
【０００７】
【特許文献１】特開２００５−１４８８９４号公報
【特許文献２】特開２００５−１６７５４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、一般に利用されているＯＳなどのソフトウェアが常に専用ハードウェアによる両アルゴリズムの同時処理をサポートしているとは限らない。すなわち、専用ハードウェアを利用するソフトウェアが同時実行に対応していない場合は、専用ハードウェアがアルゴリズムの同時処理が可能であっても、ソフトウェアは各アルゴリズムの実行を個別に要求しなければならないという問題があった。
【０００９】
なお、一般に、暗号エンジンなどのハードウェア開発者とＯＳの開発者とは異なっている。このため、ハードウェア開発者が、専用ハードウェアによる同時実行をサポートするようにＯＳを改修することは困難である。
【００１０】
本発明は、上記に鑑みてなされたものであって、複数のアルゴリズムを同時実行可能な演算部に対して、要求元のＯＳ等が同時実行を要求できない場合であっても、複数のアルゴリズムを同時に実行可能とすることにより、当該演算部を効率的に利用することができる装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明は、暗号アルゴリズムとハッシュアルゴリズムとを１つの制御命令で実行可能な演算部と、前記暗号アルゴリズムおよび前記ハッシュアルゴリズムのうち、一方を表す第１アルゴリズムを、他方を表す第２アルゴリズムとともに１つの制御命令で実行するか否かを表す同時実行情報と、前記第２アルゴリズムが実行済みであるか否かを表す実行済み情報とを記憶する制御情報記憶部と、前記第１アルゴリズムの実行要求を受付ける第１受付部と、前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されているか否かを判断する制御情報判断部と、前記第１アルゴリズムと前記第２アルゴリズムとを１つの制御命令で実行することを表す前記同時実行情報が前記制御情報記憶部に記憶されている場合に、前記第１アルゴリズムと前記第２アルゴリズムとを実行する１つの制御命令を生成する生成部と、生成された制御命令によって前記演算部の実行を制御する制御部と、生成された制御命令によって前記演算部が実行された場合に、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報を前記制御情報記憶部に保存する保存部と、前記第２アルゴリズムの実行要求を受付ける第２受付部と、実行要求を受付けた前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が、前記制御情報記憶部に保存されているか否かを判断する実行済み判断部と、前記第２アルゴリズムが実行済みであることを表す前記実行済み情報が前記制御情報記憶部に保存されている場合に、実行済みの前記第２アルゴリズムの演算結果を出力する出力部と、を備えたことを特徴とする。
【００１２】
また、本発明は、上記装置を実行することができる方法およびプログラムである。
【発明の効果】
【００１３】
本発明によれば、複数のアルゴリズムを同時実行可能な演算部の効率的な利用を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に添付図面を参照して、この発明にかかるデータを処理する装置、方法およびプログラムの最良な実施の形態を詳細に説明する。
【００１５】
（第１の実施の形態）
第１の実施の形態にかかるデータ処理装置は、暗号アルゴリズムおよびハッシュアルゴリズムのいずれかを単独で実行する要求を受付けた場合であっても、他のアルゴリズムと同時に実行すべきと判断した場合は、ハードウェア回路を用いて両アルゴリズムを同時に実行するものである。そして、第１の実施の形態にかかるデータ処理装置は、後で他のアルゴリズムの実行要求を受付けた場合には、同時に実行した演算処理で事前に得られている演算結果を返すものである。
【００１６】
図１は、第１の実施の形態にかかるデータ処理装置としての通信装置１００を含む通信システムの構成を示すブロック図である。図１に示すように、第１の実施の形態の通信システムは、通信装置１００と、通信装置２００と、ネットワーク３００とを備えている。
【００１７】
通信装置１００は、ＩＰｓｅｃプロトコルに従って他の装置との間でデータを送受信する装置である。ＩＰｓｅｃプロトコルでは、安全な通信路を確立するために、データの暗号化・復号化と、改ざん検出のためのハッシュ値の計算とを実行する場合がある。このため、通信装置１００は、暗号アルゴリズムとハッシュアルゴリズムとを１つの制御命令で実行可能な専用のハードウェア演算回路を備えている。通信装置１００の構成の詳細については後述する。
【００１８】
通信装置２００は、ＩＰｓｅｃプロトコルに従って通信装置１００の通信する装置である。なお、通信装置２００が、通信装置１００と同様の機能を備えるように構成してもよい。また、簡単のため、２つの通信装置間の通信処理を例に説明するが、通信装置の個数はこれに限られるものではない。
【００１９】
ネットワーク３００は、ＩＰｓｅｃプロトコルで通信可能なインターネットなどのネットワークである。
【００２０】
次に、通信装置１００の構成の詳細について図２を用いて説明する。図２は、第１の実施の形態にかかる通信装置１００の構成を示すブロック図である。図２に示すように、通信装置１００は、ＳＡＤＢ（Security Association Database）１５１と、ＳＰＤＢ（Security Policy Database）１５２と、アプリケーション１０１と、インターフェイス部１０２と、ネットワーク処理部１１０と、ＩＰｓｅｃ処理部１２０と、演算処理部１３０とを備えている。
【００２１】
ＳＡＤＢ１５１は、ＩＰｓｅｃで使用するＳＡ（Security Association）に関する設定情報を保存する記憶部である。図３は、ＳＡＤＢ１５１に記憶されたデータのデータ構造の一例を示す表である。
【００２２】
図３に示すように、ＳＡＤＢ１５１は、送信元ＩＰ（Internet Protocol）アドレスと、受信先ＩＰアドレスと、適用するセキュリティプロトコルと、ＳＡの識別子であるＳＰＩ（Security Parameters Index）と、暗号アルゴリズムと、暗号アルゴリズムで利用する暗号鍵と、ハッシュアルゴリズムと、ハッシュアルゴリズムで利用するハッシュ鍵とを対応づけて格納している。
【００２３】
セキュリティプロトコルとしては、認証、改竄防止機能を提供するＡＨ（Authentication Header）およびデータ暗号化機能を提供するＥＳＰ（Encapsulated Security Payload）を指定することができる。ＥＳＰは、さらに、認証ありＥＳＰと認証なしＥＳＰとに分けられる。前者については暗号アルゴリズムおよびハッシュアルゴリズムの両方が指定される。後者については、暗号アルゴリズムのみが指定される。また、ＡＨについては、ハッシュアルゴリズムのみが指定される。
【００２４】
なお、通常のハッシュアルゴリズムではハッシュ鍵は不要であるが、ＩＰｓｅｃではＨＭＡＣ（Keyed-Hashing for Message Authentication code）の計算を行うため、ハッシュアルゴリズムとともにハッシュ鍵としてＨＭＡＣ用の鍵が指定される。
【００２５】
図２に戻り、ＳＰＤＢ１５２は、ＩＰｓｅｃの処理を適用する通信を特定するための情報を記憶する記憶部である。図４は、ＳＰＤＢ１５２に記憶されたデータのデータ構造の一例を示す表である。
【００２６】
図４に示すように、ＳＰＤＢ１５２は、送信元ＩＰアドレスと、受信先ＩＰアドレスと、送信元ポート番号と、受信先ポート番号と、通信のプロトコルと、処理を適用するパケットの方向と、適用するセキュリティプロトコルと、セキュリティプロトコルの適用方法とを対応づけて格納している。
【００２７】
通信のプロトコルとしては、例えばＴＣＰまたはＵＤＰなどが指定される。パケットの方向としては、パケットを受信する場合の「ｉｎ」またはパケットを送信する場合の「ｏｕｔ」が指定される。
【００２８】
セキュリティプロトコルの適用方法は、トンネルモードの場合は「tunnel」が、トランスポートモードの場合は「transport」が指定される。また、トンネルモードで適用する場合、ＳＰＤＢ１５２には、さらにトンネル送信元ＩＰアドレスとトンネル受信先ＩＰアドレスとが格納される。
【００２９】
なお、ＳＡＤＢ１５１およびＳＰＤＢ１５２は、ＨＤＤ（Hard Disk Drive）、光ディスク、メモリカード、ＲＡＭ（Random Access Memory）などの一般的に利用されているあらゆる記憶媒体により構成することができる。
【００３０】
図２に戻り、アプリケーション１０１は、通信装置２００との間で送受信したデータを利用するアプリケーションである。インターフェイス部１０２は、通信装置２００などの他の装置との間でＩＰｖ４データグラムやＩＰｖ６データグラムを交換するためのインターフェイスである。
【００３１】
ネットワーク処理部１１０は、インターフェイス部１０２を介してデータグラムを送受信するための各種処理を実行するものである。例えば、ネットワーク処理部１１０は、インターフェイス部１０２から受信したパケットのヘッダ部分の解析や通信プロトコル処理、およびインターフェイス部１０２から送信するためのパケットのヘッダ部分の作成や通信プロトコル処理を行う。
【００３２】
ＩＰｓｅｃ処理部１２０は、ネットワーク処理部１１０で処理するデータグラムに対して、ＩＰｓｅｃプロトコルにしたがって暗号化・復号化処理や認証処理を行うものである。本実施の形態では、ＩＰｓｅｃ処理部１２０は、暗号化・復号化処理と、認証処理とを演算処理部１３０に対して個別に要求するように構成されているものとする。
【００３３】
演算処理部１３０は、ＩＰｓｅｃ処理部１２０からの要求に応じて、暗号アルゴリズムおよびハッシュアルゴリズムによる演算を実行するものである。図５は、演算処理部１３０の詳細な構成を示すブロック図である。
【００３４】
図５に示すように、演算処理部１３０は、要求受付部１３１と、要求処理部１３２と、推定部１３３と、命令生成部１３４と、制御部１３５と、演算回路１３６と、バッファ１３７と、制御情報記憶部１３８と、統計情報記憶部１３９と、を備えている。
【００３５】
演算回路１３６は、暗号アルゴリズムやハッシュアルゴリズムを実行する専用のハードウェア回路であり、制御部１３５から通知された制御命令に従って各アルゴリズムの演算を行うものである。演算回路１３６は、１つの制御命令で暗号アルゴリズムとハッシュアルゴリズムとを実行可能に構成されている。
【００３６】
バッファ１３７は、各アルゴリズムによる演算の対象となるデータ（処理対象データ）、および演算結果を格納するための記憶部である。なお、処理対象データとは、例えば通信相手から受信したパケットなどを意味する。通常は、実際に暗号化・復号化の対象となる領域は、パケットの一部の領域である。以下では、処理対象となるバッファ１３７内の領域を処理対象バッファという。
【００３７】
なお、処理対象データと演算結果とをそれぞれ別のバッファ（記憶部）に記憶するように構成してもよい。また、バッファ１３７は演算処理部１３０内に備える必要はなく、例えば、ＩＰｓｅｃ処理部１２０によって演算処理部１３０外で確保された記憶領域に、処理対象データおよび演算結果を格納するように構成してもよい。
【００３８】
制御情報記憶部１３８は、演算回路１３６に各アルゴリズムの演算を実行させるために必要な制御情報を記憶するものである。このように、本実施の形態では、暗号処理やハッシュ処理に必要な情報を事前に制御情報記憶部１３８に登録することを前提とする。そして、各処理の要求元であるＩＰｓｅｃ処理部１２０は、登録時に各アルゴリズムによる演算処理に付与されたインデックスを指定して、各アルゴリズムによる演算処理の実行を要求する方法を採ることを前提とする。
【００３９】
例えば、ＩＰｓｅｃ処理部１２０は、ＳＡＤＢ１５１の各エントリに対して、暗号処理および／またはハッシュ処理を実行するために必要な情報を事前に演算処理部１３０に通知する。演算処理部１３０は、通知された情報を制御情報として制御情報記憶部１３８に登録する。その際、各処理に対応するインデックスが演算処理部１３０からＩＰｓｅｃ処理部１２０に返される。
【００４０】
なお、インデックスを指定して各アルゴリズムによる演算処理の実行を要求する代わりに、要求のたびに各アルゴリズムによる演算処理の実行に必要な情報を指定するように構成してもよい。この場合は、インデックス値ではなく暗号鍵などの情報によってエントリを特定し、同時実行情報などの個々の情報を判別すればよい。
【００４１】
図６および図７は、制御情報記憶部１３８に記憶された制御情報のデータ構造の一例を示す表である。図６は、暗号処理に必要な情報（以下、暗号情報という）およびハッシュ処理に必要な情報（以下、ハッシュ情報という）が事前に登録された状態の制御情報記憶部１３８の例を示している。また、図７は、後述する推定部１３３によって同時に実行される演算処理が推定され、同時に実行することを表す情報（以下、同時実行情報という）および同時に実行する演算処理それぞれの処理対象バッファ間の相対的な関係を表す情報（以下、オフセット情報という）が追加された状態の制御情報記憶部１３８の例を示している。
【００４２】
なお、図６および図７は、送信用（パケットの方向＝ｉｎ）および受信用（パケットの方向＝ｏｕｔ）のＳＡの内容を表すＳＡＤＢ１５１の２つのエントリのそれぞれで使用される暗号情報およびハッシュ情報が格納された状態の一例を表している。
【００４３】
図６および図７に示すように、制御情報は、各アルゴリズムを実行する演算処理を識別するインデックスと、暗号情報と、ハッシュ情報と、同時実行情報と、オフセット情報とを含んでいる。なお、各情報はさらに詳細な情報を含むが、説明の便宜上、図６および図７では各情報を識別するためのＩＤのみを記載している。例えば、インデックス＝１および３については、それぞれＩＤ＝（Ａ）および（Ｂ）の暗号情報が設定されていることが示されている。各ＩＤに対応する詳細な情報については、図８〜図１２で説明する。
【００４４】
図８は、制御情報に含まれる暗号情報の詳細なデータ構造の一例を示す表である。図８に示すように、暗号情報は、暗号アルゴリズムと、処理モードと、処理の方向と、暗号鍵と、ＩＶ（Initialization Vector）とを含んでいる。なお、ＩＤは、上述のように説明の便宜上付与したものであり、実際には、図６または図７のような制御情報記憶部１３８の対応するＩＤの欄に、図８のＩＤを除く各情報が設定される。以下の図９〜図１２についても同様である。
【００４５】
暗号アルゴリズムには、例えば、ＡＥＳ（Advanced Encryption Standard）およびＤＥＳ（Data Encryption Standard）などのＩＰｓｅｃで利用可能な暗号アルゴリズムを識別する情報が指定される。処理モードには、使用する暗号アルゴリズムで適用可能な処理モードが指定される。例えば、ＡＥＳであればＣＢＣ（Cipher Block Chaining）モードなどが指定される。処理の方向には、暗号化（Encrypt）または復号化（Decrypt）が指定される。
【００４６】
図９は、制御情報に含まれるハッシュ情報の詳細なデータ構造の一例を示す表である。図９に示すように、ハッシュ情報は、ハッシュアルゴリズムと、ハッシュ鍵とを含んでいる。ハッシュ鍵は、鍵情報を用いてハッシュ値を算出するハッシュアルゴリズムの場合に設定される。
【００４７】
図１０および図１１は、制御情報に含まれる同時実行情報の詳細なデータ構造の一例を示す表である。なお、図１０および図１１に図示した例は、図６および図７のインデックス＝３とインデックス＝４のエントリが互いに関連し、インデックス＝４のエントリからインデックス＝３のエントリの順序で実行される可能性が高いと判定された場合に、インデックス＝４のエントリに対して設定される同時実行情報の例を表している。
【００４８】
図１０および図１１に示すように、同時実行情報は、同時実行インデックスと、実行順序と、実行済みフラグと、バッファ情報とを含んでいる。
【００４９】
同時実行インデックスには、後述する推定部１３３によって、各エントリに関連して実行される可能性が高いと推定されたエントリのインデックスが指定される。なお、同時に実行される演算処理が存在せず、単独で演算処理が実行されると判断された場合に、「０」または「９９９９」などのように、単独実行を表す予め定められたインデックスを同時実行インデックスに指定した同時実行情報を設定するように構成してもよい。
【００５０】
実行順序には、関連して実行される可能性が高い２つのエントリ間の実行順序（１または２）が指定される。実行済みフラグには、デフォルトで「ＮＯ」が設定され、関連して実行される演算処理が実際に実行された場合に「ＹＥＳ」が設定される。バッファ情報には、同時実行済みの演算結果を格納するバッファ１３７の領域およびサイズに関する情報が設定される。
【００５１】
なお、図１０は、同時に実行されると推定された演算処理がまだ実行されていない場合の同時実行情報の格納例を表している。また、図１１は、同時に実行されると推定された演算処理が実行された後の同時実行情報の格納例を表している。
【００５２】
図１１に示すように、バッファ情報は、「srcbuf」と、「srclen」と、「dstbuf」と、「dstlen」とを含んでいる。「srcbuf」には、処理対象バッファ内の処理対象データの開始アドレスが設定される。「srclen」には、処理対象データの長さが設定される。「dstbuf」には、演算結果を格納するバッファ１３７内の領域を表す処理結果バッファ内での演算結果の開始アドレスが設定される。「dstlen」には、演算結果の長さが設定される。
【００５３】
なお、処理対象バッファおよび処理結果バッファは、バッファ１３７内に任意の方法で確保される。また、処理対象バッファに演算結果のデータを上書きするように構成してもよい。
【００５４】
図１２は、制御情報に含まれるオフセット情報の詳細なデータ構造の一例を示す表である。図１２に示すように、オフセット情報は、開始オフセットと、終了オフセットとを含んでいる。
【００５５】
開始オフセットには、１番目に実行される演算処理の処理対象バッファの先頭アドレスを基準とした、２番目に実行される演算処理の処理対象バッファの先頭アドレスのオフセットが設定される。また、終了オフセットには、１番目に実行される演算処理の処理対象バッファの終了アドレスを基準とした、２番目に実行される演算処理の処理対象バッファの終了アドレスのオフセットが設定される。このため、オフセット情報は、実行順序が２番目であるインデックスのみに設定され、実行順序が１番目のインデックスには設定されない。
【００５６】
例えば、図１２は、ハッシュアルゴリズムに対応するインデックス＝４のエントリから、暗号アルゴリズムに対応するインデックス＝３のエントリの順序で実行される場合に、ハッシュアルゴリズムの対象領域の方が暗号アルゴリズムの対象領域よりも前後に１６バイトずつ長い場合に、インデックス＝３のエントリに記述されるオフセット情報の例を示している。
【００５７】
図５に戻り、統計情報記憶部１３９は、同時に実行されると推定された演算処理に関連する統計情報を記憶するものである。具体的には、統計情報記憶部１３９は、後述する推定部１３３によって同時に実行されると推定された回数を含む統計情報を記憶する。通信装置１００の起動直後は推定作業が行われていないため、統計情報記憶部１３９には１つもエントリが登録されていない状態になる。
【００５８】
図１３は、第１の実施の形態の統計情報記憶部１３９に記憶された統計情報のデータ構造の一例を示す表である。図１３に示すように、統計情報は、インデックスと、同時実行インデックスと、開始オフセットと、終了オフセットと、カウントと、最終参照時刻とを含んでいる。
【００５９】
インデックスは、図６および図７と同様に、登録時に各アルゴリズムによる演算処理に付与された値が設定される。統計情報記憶部１３９にインデックスが存在する場合は、当該インデックスの演算処理に対して、同時に実行される他の演算処理を推定する処理が実行されていることを示す。
【００６０】
同時実行インデックスは、対応するインデックスの演算処理に関連して実行される可能性がある他の演算処理のインデックスの値が設定される。同時実行インデックス欄には実行順序も合わせて設定される。例えば、インデックスで識別される演算処理が１番目に実行される場合は、同時実行インデックス欄には、同時に実行される演算処理のインデックスとともに、「（first）」が設定される。また、インデックスで識別される演算処理が２番目に実行される場合は、同時実行インデックス欄には、同時に実行される演算処理のインデックスとともに、「（second）」が設定される。
【００６１】
開始オフセットおよび終了オフセットに対しては、実行順序が１番目の場合と２番目の場合とで意味が異なる値が設定される。１番目の場合には、それぞれ処理対象バッファの先頭アドレスと終了アドレスとが指定される。
【００６２】
２番目の場合には、開始オフセットには、同時実行インデックス（すなわち、１番目に実行される演算処理のインデックス）の演算処理が扱う処理対象バッファの先頭アドレスに対する、インデックスの演算処理が扱う処理対象バッファの先頭アドレスのオフセットが設定される。また、終了オフセットには、同時実行インデックスの演算処理が扱う処理対象バッファの終了アドレスに対する、インデックスの演算処理が扱う処理対象バッファの終了アドレスのオフセットが設定される。
【００６３】
カウントは、開始オフセットと終了オフセットとで特定される処理対象バッファに対して、インデックスで特定される演算処理で演算が実行された回数が記録される。
【００６４】
最終参照時刻は、対応するエントリを最後に参照した時刻が設定される。最終参照時刻は必須ではなく、連続性を実行時刻により判定する場合や、一定時間経過したエントリを削除するガーベージコレクションを実現する場合などに使用する。
【００６５】
ここで、開始オフセットおよび終了オフセットの設定方法の具体例について説明する。ここでは、図６のインデックス＝４の演算処理からインデックス＝３の演算処理の実行順序で演算が実行されると仮定する。この場合、推定部１３３によって、各演算処理の処理対象バッファの関係から開始オフセットと終了オフセットの設定値が決定される。
【００６６】
図１４は、この例での処理対象バッファの構成例を示す図である。図１４に示すように、最初に実行されるインデックス＝４の演算処理の処理対象バッファの開始アドレスは「0x10000FF0」、終了アドレスは「0x10001110」である。一方、２番目に実行されるインデックス＝３の演算処理の処理対象バッファの開始アドレスは「0x10001000」、終了アドレスは「0x10001100」である。
【００６７】
この場合、統計情報記憶部１３９のインデックス＝４のエントリには、開始オフセットとして開始アドレス「0x10000FF0」が設定され、終了オフセットとして終了アドレス「0x10001110」が設定される。一方、インデックス＝３のエントリには、開始オフセットとして「１６」が設定され、終了オフセットとして「−１６」が設定される。このように、２番目に実行される演算処理の処理対象バッファのアドレスが、１番目に実行される演算処理の処理対象バッファのアドレスよりも小さい場合は、オフセット値は負数で表される。
【００６８】
図５に戻り、要求受付部１３１は、ＯＳなどの他のソフトウェアからの暗号アルゴリズムまたはハッシュアルゴリズムの実行要求を受付けるものである。本実施の形態では、要求受付部１３１は、ＩＰｓｅｃ処理部１２０から暗号アルゴリズムまたはハッシュアルゴリズムの実行要求を受付ける。なお、各アルゴリズムの実行要求をそれぞれ異なる受付部によって受付けるように構成してもよい。実行要求には、処理内容を特定する情報と、処理対象を特定する情報とが含まれる。本実施の形態では、処理内容を特定する情報として、実行する演算処理のインデックスを用いる。また、処理対象を特定する情報として、処理対象バッファの開始アドレスと終了アドレスとを用いる。
【００６９】
なお、実行要求の形式はこれに限られるものではなく、処理内容を特定可能な情報および処理対象を特定可能な情報を含むものであればあらゆる形式を適用できる。例えば、処理対象を特定する情報として、処理対象バッファの開始アドレスと処理対象バッファの長さとを用いるように構成してもよい。また、上述のように、インデックスの代わりに暗号鍵などの情報によって処理内容を特定するように構成してもよい。
【００７０】
要求処理部１３２は、要求受付部１３１によって受け付けられた実行要求を解析し、要求されたアルゴリズムによる演算処理を実行するように演算処理部１３０内の各部の動作を制御するものである。例えば、要求処理部１３２は、受け付けた実行要求に対応する制御情報を制御情報記憶部１３８から検索し、検索された場合に命令生成部１３４に制御命令の生成を指示する。また、要求処理部１３２は、対応する制御情報が検索されなければ推定部１３３に制御情報の推定を指示する。
【００７１】
また、要求処理部１３２は、このような機能を実現する詳細な構成として、制御情報判断部１３２ａと、保存部１３２ｂと、実行済み判断部１３２ｃと、出力部１３２ｄとを備えている。
【００７２】
制御情報判断部１３２ａは、制御情報記憶部１３８から実行が要求されたインデックスに対応する制御情報を取得し、取得した制御情報内に、要求されたインデックスの演算処理とともに他のインデックスの演算処理を実行することを表す同時実行情報が設定されているか否かを判断する。
【００７３】
なお、要求処理部１３２は、制御情報判断部１３２ａによって同時に実行することを表す同時実行情報が設定されていると判断され、かつ後述する実行済み判断部１３２ｃによって実行済みフラグが「ＮＯ」であると判断された場合には、設定内容にしたがって２つの演算処理を同時に実行する制御命令を生成することを命令生成部１３４に指示する。
【００７４】
保存部１３２ｂは、２つの演算処理を同時に実行する制御命令が実行された場合に、実行済みであることを制御情報記憶部１３８に記憶する。具体的には、保存部１３２ｂは、実行した演算処理の同時実行情報の実行済みフラグを「ＹＥＳ」に設定する。
【００７５】
実行済み判断部１３２ｃは、実行済みフラグによって、同時に実行される演算処理が実行済みか否かを判断する。
【００７６】
出力部１３２ｄは、各演算処理の演算結果を、要求元であるＩＰｓｅｃ処理部１２０に出力する。出力部１３２ｄは、同時に実行される演算処理が実行済みの場合は、実行済みの演算結果を格納した処理結果バッファのアドレスを通知することにより演算結果を出力する。なお、出力部１３２ｄが、ＩＰｓｅｃ処理部１２０が通知した出力バッファに、処理結果バッファに格納された値をコピーすることにより演算結果を出力するように構成してもよい。また、出力部１３２ｄが、処理結果バッファに格納された演算結果のアドレスを、ＩＰｓｅｃ処理部１２０が通知した出力バッファのアドレスに変換してアクセスできるように構成してもよい。
【００７７】
推定部１３３は、要求受付部１３１で受け付けた実行要求や、当該実行要求に関連する一連の実行履歴や通信装置１００内に記憶されているその他の情報を総合的に判断することにより、要求された演算処理が他の演算処理と同時に実行されるか否かを推定するものである。推定部１３３は、取得部１３３ａと、同時実行判断部１３３ｂと、を備えている。
【００７８】
取得部１３３ａは、推定に利用する情報を、演算処理部１３０の外部の構成部から取得するものである。具体的には、取得部１３３ａは、後述する同時実行判断部１３３ｂがパケットから抽出したＳＰＩを受け取り、このＳＰＩを検索キーとして、ＩＰｓｅｃ処理部１２０が参照するＳＡＤＢ１５１から、要求された演算処理に関連するＳＡの設定情報を取得する。
【００７９】
同時実行判断部１３３ｂは、取得部１３３ａが取得した設定情報を参照して、要求された演算処理と他の演算処理とが互いに関連するか否かを判断するものである。具体的には、同時実行判断部１３３ｂは、まず、送受信するパケットからＳＰＩを抽出し、抽出したＳＰＩを取得部１３３ａに通知して対応するＳＡの設定情報を取得させる。そして、同時実行判断部１３３ｂは、取得部１３３ａによって取得された設定情報を参照して、要求されたアルゴリズムによる演算処理に付随して他のアルゴリズムによる演算処理が発生するか否かを判断する。
【００８０】
さらに、同時実行判断部１３３ｂは、付随して実行されると判断した場合は、対応する統計情報記憶部１３９のエントリの同時実行インデックスおよびカウントを更新する。さらに、同時実行判断部１３３ｂは、統計情報のカウントが所定の閾値を超えた場合、統計情報記憶部１３９の内容を制御情報記憶部１３８に移行する。
【００８１】
命令生成部１３４は、要求処理部１３２からの指示に従い、制御情報記憶部１３８の情報を利用して演算回路１３６を制御するための制御命令を生成するものである。
【００８２】
制御部１３５は、命令生成部１３４が生成した制御命令を演算回路１３６に通知し、実際に演算回路１３６にアルゴリズムの計算を実行させるものである。
【００８３】
次に、このように構成された第１の実施の形態にかかる通信装置１００によるデータ処理について図１５を用いて説明する。図１５は、第１の実施の形態におけるデータ処理の全体の流れを示すフローチャートである。
【００８４】
以下では、通信相手である通信装置２００からＥＳＰによって暗号化されたパケットを受信した場合に実行されるデータ処理を例に説明する。すなわち、ハッシュ値を計算してデータを認証した後に、データの復号化を行う場合を例として説明する。なお、通信装置２００にＥＳＰで暗号化したパケットを送信する場合も同様の手順でデータ処理を実現できる。この場合は、例えば暗号処理でデータを暗号化した後にハッシュ値の計算が行われる。
【００８５】
まず、インターフェイス部１０２が、通信装置２００からＥＳＰによって暗号化されたパケットを受信する（ステップＳ１５０１）。インターフェイス部１０２は、受信したパケットをネットワーク処理部１１０に転送する（ステップＳ１５０２）。次に、ネットワーク処理部１１０にて受信処理が実行される。ネットワーク処理部１１０は、受信処理過程でパケットを解析し、受信したパケットがＩＰｓｅｃにより暗号化されたものであることを認識する（ステップＳ１５０３）。そして、ネットワーク処理部１１０は、ＩＰｓｅｃ処理を行うため、パケットをＩＰｓｅｃ処理部１２０に転送する（ステップＳ１５０４）。
【００８６】
ここで、受信するＥＳＰパケットのデータ構造の一例について図１６および図１７を用いて説明する。図１６は、ＥＳＰパケットのデータ構造の概略を示す説明図である。図１６に示すように、ＥＳＰパケットは、ＩＰｖ４、ＥＳＰ、ＴＣＰの各プロトコルに対応するヘッダと、データと、ＥＳＰのトレーラと、ＥＳＰの認証情報とを含んでいる。同図は、暗号化される通信のプロトコルはＴＣＰであり、認証ありＥＳＰを用いている場合のＥＳＰパケットの例である。なお、ＩＰｖ６の場合も同様のパケット構成となる。
【００８７】
ＥＳＰパケットの中で、暗号アルゴリズムにより暗号化されるのはＴＣＰヘッダからＥＳＰトレーラまでの部分である。また、ハッシュアルゴリズムによりハッシュ値が計算されるのは、ＥＳＰヘッダからＥＳＰトレーラまでの部分である。このように、ＩＰｓｅｃでは、暗号アルゴリズムを適用する対象領域とハッシュアルゴリズムを適用する対象領域とは、重複する領域を含むが完全には一致していない。本実施の形態では、このような相違を、上述のようにオフセットによって管理している。ＩＰｖ４のペイロード１６０１の詳細については図１７で説明する。
【００８８】
図１７は、図１６で示したペイロード１６０１の詳細な構成を示す説明図である。図１７に示すように、ＥＳＰヘッダには、ＳＰＩとシーケンス番号（Sequence Number）とが含まれる。上述の同時実行判断部１３３ｂは、このＥＳＰヘッダからＳＰＩを抽出することができる。また、ＴＣＰヘッダとデータとを含む領域、および認証情報の領域は可変長である。
【００８９】
ここで、セキュリティプロトコルとしてＡＨを用いた場合に受信するＡＨパケットのデータ構造の一例について図１８および図１９を用いて説明する。図１８に示すように、ＡＨパケットは、ＩＰｖ４、ＡＨ、ＴＣＰの各プロトコルに対応するヘッダと、データとを含んでいる。すなわち、ＥＳＰパケットからＥＳＰトレーラと認証情報とを除いた構成となっている。ＩＰｖ４のペイロード１８０１に相当する部分に対して、ハッシュアルゴリズムによりハッシュ値が計算される。ペイロード１８０１の詳細については図１９で説明する。
【００９０】
図１９は、図１８で示したペイロード１８０１の詳細な構成を示す説明図である。図１９に示すように、ＡＨヘッダには、次ヘッダと、ペイロード長と、ＳＰＩとシーケンス番号（Sequence Number）とが含まれている。
【００９１】
なお、ＥＳＰとＡＨとは同時に使用することもできる。同時に使用する場合はヘッダが多段構成になるだけであるため、図示は省略する。
【００９２】
図１５に戻り、ＩＰｓｅｃ処理部１２０は、ネットワーク処理部１１０から転送されたパケットを解析し、ＳＰＤＢ１５２とＳＡＤＢ１５１とを参照して処理すべきＩＰｓｅｃのＥＳＰパケットであることを確認する。具体的には、ＩＰｓｅｃ処理部１２０は、まず、受信したパケットに対応するＳＰＤＢ１５２のエントリを取得する（ステップＳ１５０５）。ＩＰｓｅｃ処理部１２０は、パケットのヘッダに含まれるＩＰアドレス、ポート番号、およびプロトコルなどが一致するエントリをＳＰＤＢ１５２から取得する。
【００９３】
エントリが取得できた場合、ＩＰｓｅｃ処理部１２０は、エントリ内に指定されたセキュリティプロトコルによる処理が必要であると判断することができる。そこで、ＩＰｓｅｃ処理部１２０は、取得したエントリに対応するＳＡの設定情報をＳＡＤＢ１５１から取得する（ステップＳ１５０６）。具体的には、ＩＰｓｅｃ処理部１２０は、ＩＰアドレス、セキュリティプロトコルなどが一致するＳＡの内容をＳＡＤＢ１５１から取得する。
【００９４】
次に、ＩＰｓｅｃ処理部１２０は、取得したＳＡの内容に応じて、ハッシュアルゴリズムの実行要求、暗号アルゴリズムの実行要求を、実行すべき順序で演算処理部１３０に送信する。
【００９５】
ここでは、セキュリティプロトコルとして認証ありＥＳＰが指定されていた場合を仮定する。この場合、ＩＰｓｅｃ処理部１２０は、最初にハッシュ値を計算して受信したパケットの完全性をチェックし、次に暗号化されたペイロードを復号する。
【００９６】
すなわち、ＩＰｓｅｃ処理部１２０は、まずハッシュ値計算処理を演算処理部１３０に要求する（ステップＳ１５０７）。このときの実行要求には、例えば図６のインデックス＝４のようなハッシュアルゴリズムのインデックスの値と、処理対象バッファの開始アドレスおよび終了アドレスとが含まれる。
【００９７】
要求を受けた演算処理部１３０は、要求に応じた演算処理を実行する（ステップＳ１５０８）。演算処理の詳細については後述する。演算処理部１３０は、演算処理の結果であるハッシュ値をＩＰｓｅｃ処理部１２０に送信する（ステップＳ１５０９）。
【００９８】
次に、ＩＰｓｅｃ処理部１２０は、ペイロードの復号処理を演算処理部１３０に要求する（ステップＳ１５１０）。このときの実行要求には、例えば図６のインデックス＝３のような暗号アルゴリズムのインデックスの値と、処理対象バッファの開始アドレスおよび終了アドレスとが含まれる。
【００９９】
要求を受けた演算処理部１３０は、要求に応じた演算処理を実行する（ステップＳ１５１１）。演算処理部１３０は、演算処理の結果である復号結果をＩＰｓｅｃ処理部１２０に送信する（ステップＳ１５１２）。
【０１００】
後述するように、演算処理部１３０は、最初の演算処理の中で、次に復号処理が要求されることを予測し、暗号アルゴリズムをハッシュアルゴリズムと同時に実行する。このため、演算処理部１３０は、２回目の演算処理では、既に実行している暗号アルゴリズムの演算結果を出力するだけでよい。
【０１０１】
ＩＰｓｅｃ処理部１２０は、完全性が確認でき、かつ復号処理が完了したパケットをネットワーク処理部１１０に送信する（ステップＳ１５１３）。その後、ネットワーク処理部１１０は、通常のＩＰパケットと同様にトランスポート層処理を行う（ステップＳ１５１４）。その後、処理済みのパケットを、該当するアプリケーション１０１に引き渡し（ステップＳ１５１５）、データ処理を終了する。
【０１０２】
次に、ステップＳ１５０８およびステップＳ１５１１の演算処理の詳細について図２０−１〜２０−２を用いて説明する。図２０−１および２０−２は、第１の実施の形態における演算処理の全体の流れを示すフローチャートである。
【０１０３】
まず、要求受付部１３１は、ＩＰｓｅｃ処理部１２０から、実行すべき演算処理のインデックスを含む実行要求を受付ける（ステップＳ２００１）。次に、要求処理部１３２は、実行要求に含まれるインデックスに対応するエントリを制御情報記憶部１３８から取得する（ステップＳ２００２）。
【０１０４】
次に、要求処理部１３２は、エントリが取得できたか否かを判断する（ステップＳ２００３）。取得できた場合は（ステップＳ２００３：ＹＥＳ）、要求処理部１３２は、取得したエントリから同時実行情報を取得する（ステップＳ２００４）。
【０１０５】
次に、制御情報判断部１３２ａは、同時実行情報が取得できたか否かを判断する（ステップＳ２００５）。取得できた場合は、同時に実行する演算処理が存在すると判断できるためである。なお、単独で実行する場合に「０」または「９９９９」などの特定値を同時実行インデックスに指定する構成の場合は、制御情報判断部１３２ａは、同時実行情報が取得され、同時実行インデックスが特定値以外であることを判断する。
【０１０６】
同時実行情報が取得できなかった場合は（ステップＳ２００５：ＮＯ）、推定部１３３が、同時に実行する他の演算処理の存在を推定する推定処理を実行する（ステップＳ２００６）。推定処理の詳細については後述する。
【０１０７】
推定処理の後、要求処理部１３２は、ステップＳ２００２で取得したエントリから、再度同時実行情報を取得する（ステップＳ２００７）。推定処理内で、同時実行情報が設定される可能性があるためである。
【０１０８】
次に、制御情報判断部１３２ａは、同時実行情報が取得できたか否かを判断する（ステップＳ２００８）。取得できなかった場合は（ステップＳ２００８：ＮＯ）、取得したエントリに対応する演算処理を実行するための実行制御処理が実行される（ステップＳ２００９）。実行制御処理の詳細については後述する。
【０１０９】
ステップＳ２００３で、エントリが取得できなかった場合は（ステップＳ２００３：ＮＯ）、要求された演算を実行できないため、要求処理部１３２は所定のエラー処理を実行する（ステップＳ２０１０）。
【０１１０】
ステップＳ２００５で同時実行情報が取得できた場合は（ステップＳ２００５：ＹＥＳ）、要求処理部１３２は、取得したエントリからオフセット情報を取得する（ステップＳ２０１１）。次に、要求処理部１３２は、オフセット情報が取得できたか否かを判断する（ステップＳ２０１２）。なお、上述のように、オフセット情報は、実行順序が２番目であるインデックスのエントリにのみ設定される。このため、オフセット情報が取得できたか否かを判断することは、取得したエントリが２番目に実行する演算処理のエントリであるか否かを判断することを意味する。
【０１１１】
オフセット情報が取得できなかった場合、すなわち、最初に実行する演算処理のエントリである場合は（ステップＳ２０１２：ＮＯ）、要求処理部１３２は、同時実行情報の同時実行インデックスに対応するエントリを制御情報記憶部１３８から取得する（ステップＳ２０１３）。そして、要求処理部１３２は、取得したエントリのオフセット情報を用いて、同時実行する演算処理の処理対象バッファを特定する（ステップＳ２０１４）。
【０１１２】
具体的には、要求処理部１３２は、実行要求に含まれる処理対象バッファの開始アドレスおよび終了アドレスに、取得したエントリのオフセット情報の開始オフセットおよび終了オフセットをそれぞれ加算し、同時に実行する演算処理の処理対象バッファを特定する。
【０１１３】
続いて、要求された演算処理と、同時実行情報から得られた他の演算処理とを同時に実行するための実行制御処理が実行される（ステップＳ２０１５）。
【０１１４】
実行制御処理の後、出力部１３２ｄは、実行要求を受付けた演算処理の演算結果のみを参照可能にするためのバッファ処理を実行する（ステップＳ２０１６）。例えば、出力部１３２ｄは、同時に実行したハッシュアルゴリズムおよび暗号アルゴリズムの演算結果のうち、要求を受付けたハッシュアルゴリズムの演算結果であるハッシュ値のみを、要求元であるＩＰｓｅｃ処理部１２０から参照可能な状態にする。
【０１１５】
次に、要求処理部１３２は、同時実行情報の実行済みフラグを「ＹＥＳ」に設定し、同時実行情報のバッファ情報に、処理対象バッファおよび処理結果バッファの開始アドレス・長さを設定する（ステップＳ２０１７）。
【０１１６】
ステップＳ２０１２でオフセット情報が取得された場合、すわなち、２番目に実行する演算処理のエントリであると判断された場合は（ステップＳ２０１２：ＹＥＳ）、要求処理部１３２は、同時実行情報の実行済みフラグを取得する（ステップＳ２０１８）。
【０１１７】
次に、実行済み判断部１３２ｃは、実行済みフラグが「ＹＥＳ」であるか否かを判断する（ステップＳ２０１９）。実行済みフラグが「ＹＥＳ」の場合は（ステップＳ２０１９：ＹＥＳ）、実行済み判断部１３２ｃは、さらに実行済みの処理と、要求された処理とを比較する（ステップＳ２０２０）。具体的には、実行済み判断部１３２ｃは、処理に用いる鍵などの情報、および処理対象バッファの開始アドレス・終了アドレスを比較する。
【０１１８】
そして、実行済み判断部１３２ｃは、実行済み処理と要求された処理とが一致するか否かを判断する（ステップＳ２０２１）。具体的には、実行済み判断部１３２ｃは、オフセット情報、アルゴリズム、および各アルゴリズムで使用する情報（暗号情報またはハッシュ情報）がすべて一致するか否かを判断する。一致する場合は（ステップＳ２０２１：ＹＥＳ）、出力部１３２ｄは、実行済みの処理の結果を、ＩＰｓｅｃ処理部１２０から参照可能な状態にする（ステップＳ２０２２）。次に、要求処理部１３２は、同時実行情報の実行済みフラグとバッファ情報とを初期化する（ステップＳ２０２３）。
【０１１９】
ステップＳ２０１９で実行済みフラグが「ＹＥＳ」でないと判断された場合（ステップＳ２０１９：ＮＯ）、または、ステップＳ２０２１で実行済み処理と要求された処理とが一致しないと判断された場合は（ステップＳ２０２１：ＮＯ）、取得したエントリに対応する演算処理を実行するための実行制御処理が実行される（ステップＳ２０２４）。
【０１２０】
なお、このステップは、推定処理で当該エントリの同時実行情報が設定された直後の場合（ステップＳ２０１９：ＮＯに対応）、または実行済み処理と要求された処理とが一致しないと判断された場合（ステップＳ２０２１：ＮＯに対応）にのみ実行される。
【０１２１】
ステップＳ２００９、ステップＳ２０１０、ステップＳ２０２３、およびステップＳ２０２４の後、要求処理部１３２は、要求された処理が完了したことを要求元のＩＰｓｅｃ処理部１２０に通知して（ステップＳ２０２５）、演算処理を終了する。
【０１２２】
このように、本実施の形態によれば、同時実行情報を参照して同時に実行すべき演算処理が存在すると判断した場合は、事前に２つの演算処理を同時に実行するように制御できる（ステップＳ２０１５）。そして、その後に事前に実行済みの演算処理の実行要求を受け付けた場合は、さらに演算を実行することなく、実行済みの演算結果を返している（ステップＳ２０２２）。これにより、ＩＰｓｅｃ処理部１２０などの要求元のプログラムが同時実行を要求できない場合であっても、複数の演算処理を同時に実行可能とし、演算回路１３６の効率的な利用を実現することができる。
【０１２３】
次に、ステップＳ２００６の推定処理の詳細について図２１−１〜２１−２を用いて説明する。図２１−１および２１−２は、第１の実施の形態における推定処理の全体の流れを示すフローチャートである。
【０１２４】
まず、同時実行判断部１３３ｂは、実行要求を受付けたインデックスに対応するエントリ（以下、エントリＡとする）を、統計情報記憶部１３９から取得する（ステップＳ２１０１）。次に、同時実行判断部１３３ｂは、エントリＡが取得できたか否かを判断する（ステップＳ２１０２）。これは、同時に実行する演算処理が存在するか否かをまだ推定していない実行要求であるか否かを判断することに相当する。
【０１２５】
エントリＡが取得できなかった場合は（ステップＳ２１０２：ＮＯ）、同時実行判断部１３３ｂが、受信したパケットからＳＰＩを取得する（ステップＳ２１０３）。同時実行判断部１３３ｂは、例えば、図１７に示したようなパケットのヘッダを解析することによりＳＰＩを取得する。
【０１２６】
次に、取得部１３３ａが、取得したＳＰＩを検索キーとして、ＳＡＤＢ１５１から対応するＳＡを検索する（ステップＳ２１０４）。次に、同時実行判断部１３３ｂは、ＳＡが取得できたか否かを判断する（ステップＳ２１０５）。ＳＡを取得できた場合は（ステップＳ２１０５：ＹＥＳ）、同時実行判断部１３３ｂは、取得したＳＡの内容を解析して同時に実行する演算処理の有無を確認する（ステップＳ２１０６）。そして、同時実行判断部１３３ｂは、同時に実行する演算処理が存在するか否かを判断する（ステップＳ２１０７）。
【０１２７】
例えば、図３のＳＰＩ＝「0x0000abcd」に対応するＳＡを取得した場合であれば、暗号アルゴリズムとハッシュアルゴリズムとが共に設定されているため、同時実行判断部１３３ｂは、同時に実行する演算処理が存在すると判断する。また、例えば、図３のＳＰＩ＝「0x0000bcde」に対応するＳＡを取得した場合であれば、ハッシュアルゴリズムのみが設定されているため、同時実行判断部１３３ｂは、同時に実行する演算処理が存在しないと判断する。
【０１２８】
同時に実行する演算処理が存在する場合は（ステップＳ２１０７：ＹＥＳ）、同時実行判断部１３３ｂは、同時に実行する演算処理に対応するエントリのインデックスを制御情報記憶部１３８から取得する（ステップＳ２１０８）。同時実行判断部１３３ｂは、例えば、ＳＡから得られた鍵情報が一致するエントリを検索することにより、制御情報記憶部１３８から対応するエントリを特定することができる。
【０１２９】
次に、同時実行判断部１３３ｂは、同時に実行する演算処理と、実行要求を受付けた演算処理の実行順序を決定する（ステップＳ２１０９）。具体的には、同時実行判断部１３３ｂは、実行要求を受付けた演算処理を１番目に実行し、ＳＡから得られた他の演算処理を２番目に実行する実行順序を決定する。
【０１３０】
次に、同時実行判断部１３３ｂは、実行順序を決定した演算処理それぞれに対応するエントリを新たに作成し、統計情報記憶部１３９に保存する（ステップＳ２１１０）。
【０１３１】
図２２は、この段階での統計情報記憶部１３９に記憶された統計情報のデータ構造の一例を示す表である。図２２に示すように、この段階では、同時に実行する少なくとも２つのエントリが存在し、それぞれ同時に実行する他の演算処理に対応するエントリのインデックスを指定した同時実行インデックスを含んでいる。また、決定された実行順序が、同時実行インデックス欄に設定される。さらに、この段階では１番目の演算処理に対応するエントリの開始オフセットおよび終了オフセットのみが設定される。２番目の演算処理の実行要求を受付けていないため、１番目の演算処理の処理対象バッファに対するオフセットをまだ特定できないためである。
【０１３２】
図２１−１に戻り、ステップＳ２１０５で、ＳＡを取得できなかった場合は（ステップＳ２１０５：ＮＯ）、同時実行判断部１３３ｂは、実行要求を受付けたインデックスのエントリの同時実行情報に、同時に実行する他の演算処理が存在しないことを設定する（ステップＳ２１１１）。例えば、同時実行判断部１３３ｂは、同時実行情報を空に設定する。上述のように、同時実行インデックスに単独で実行することを表す「０」または「９９９９」などの所定の値を設定するように構成してもよい。
【０１３３】
ステップＳ２１０２で、エントリＡが取得できた場合、すなわち、同時に実行する演算処理が存在するか否かを推定処理中の場合は（ステップＳ２１０２：ＹＥＳ）、登録済みの情報または統計情報を更新するために以下の処理を実行する。
【０１３４】
まず、同時実行判断部１３３ｂは、エントリＡの同時実行インデックスを取得する（ステップＳ２１１２）。次に、同時実行判断部１３３ｂは、同時実行インデックスを参照して実行順序を特定する（ステップＳ２１１３）。上述のように、統計情報記憶部１３９の同時実行インデックスには、エントリに対応する演算処理の実行順序も合わせて設定されている。このため、同時実行判断部１３３ｂは、同時実行インデックスの内容から実行順序を特定できる。
【０１３５】
次に、同時実行判断部１３３ｂは、１番目に実行する処理か否か、すなわち、実行順序＝「first」が設定されているか否かを判断する（ステップＳ２１１４）。１番目に実行する処理の場合は（ステップＳ２１１４：ＹＥＳ）、同時実行判断部１３３ｂは、オフセット情報を更新する（ステップＳ２１１５）。具体的には、同時実行判断部１３３ｂは、実行要求に含まれる処理対象バッファの開始アドレスおよび終了アドレスを、それぞれ統計情報の開始オフセットおよび終了オフセットに設定する。
【０１３６】
ステップＳ２１１４で、１番目に実行する処理でないと判断された場合、すなわち２番目に実行する処理の場合は（ステップＳ２１１４：ＮＯ）、同時実行判断部１３３ｂは、１番目の処理に対応する統計情報記憶部１３９のエントリ（以下、エントリＢとする）を取得する（ステップＳ２１１６）。
【０１３７】
次に、同時実行判断部１３３ｂは、取得したエントリＢのオフセット情報と、実行要求に含まれる処理対象バッファのアドレスの情報とから、２番目の処理に対する開始オフセットおよび終了オフセットとを計算する（ステップＳ２１１７）。エントリＢのオフセット情報である開始オフセットおよび終了オフセットには、それぞれ１番目の処理の処理対象バッファの開始アドレスおよび終了アドレスが設定されている。このため、同時実行判断部１３３ｂは、エントリＢの開始オフセットと、実行要求の処理対象バッファの開始アドレスとの差を、２番目の処理の開始オフセットとして算出する。また、同時実行判断部１３３ｂは、エントリＢの終了オフセットと、実行要求の処理対象バッファの終了アドレスとの差を、２番目の処理の終了オフセットとして算出する。
【０１３８】
次に、同時実行判断部１３３ｂは、計算したオフセットと、エントリＡのオフセットとを比較する（ステップＳ２１１８）。そして、同時実行判断部１３３ｂは、エントリＡのオフセットが設定されているか否か、および両者が一致するか否かを判断する（ステップＳ２１１９）。エントリＡのオフセットが設定されており、かつ計算したオフセットと一致しない場合は（ステップＳ２１１９：ＮＯ）、同時実行判断部１３３ｂは、エントリＡの内容を複製した新たなエントリ（以下、エントリＣとする）を作成し、統計情報記憶部１３９に追加する（ステップＳ２１２０）。次に、同時実行判断部１３３ｂは、追加したエントリＣの開始オフセットおよび終了オフセットに、ステップＳ２１１７で計算したオフセットの値を設定する（ステップＳ２１２１）。
【０１３９】
ステップＳ２１１９で、エントリＡのオフセットが設定されていない場合、または計算したオフセットとエントリＡのオフセットとが一致すると判断した場合は（ステップＳ２１１９：ＹＥＳ）、同時実行判断部１３３ｂは、エントリＡおよびエントリＢのカウントに１を加算する（ステップＳ２１２２）。また、ステップＳ２１２０でエントリＣを新たに作成した場合は、エントリＣおよびエントリＢのカウントに１を加算する（ステップＳ２１２２）。
【０１４０】
次に、同時実行判断部１３３ｂは、加算したカウントが予め定められた閾値を超えたか否かを判断する（ステップＳ２１２３）。カウントが閾値を超えた場合は（ステップＳ２１２３：ＹＥＳ）、同時実行判断部１３３ｂは、統計情報記憶部１３９の情報を制御情報記憶部１３８に移行する（ステップＳ２１２４）。
【０１４１】
具体的には、同時実行判断部１３３ｂは、まず、統計情報記憶部１３９のエントリＢとエントリＡまたはＣのインデックスと同じインデックスを持つ制御情報記憶部１３８のエントリをそれぞれ特定する。そして、同時実行判断部１３３ｂは、特定したエントリそれぞれについて、統計情報の同時実行インデックスを、同時実行情報の同時実行インデックスに設定する。また、同時実行判断部１３３ｂは、統計情報の同時実行インデックスに含まれる実行順序を、同時実行情報の実行順序に反映する。また、同時実行判断部１３３ｂは、統計情報の開始オフセットおよび終了オフセットを、それぞれオフセット情報の開始オフセットおよび終了オフセットに設定する。なお、同時実行判断部１３３ｂは、実行順序＝１であるエントリのオフセット情報を空欄とする。
【０１４２】
制御情報記憶部１３８に情報を移行した後、同時実行判断部１３３ｂは、移行したエントリを統計情報記憶部１３９から削除する（ステップＳ２１２５）。
【０１４３】
次に、ステップＳ２００９、ステップＳ２０１５、およびステップＳ２０２４の実行制御処理の詳細について図２４を用いて説明する。図２４は、第１の実施の形態における実行制御処理の全体の流れを示すフローチャートである。
【０１４４】
まず、要求処理部１３２は、要求された演算処理を実行するための制御命令の生成を命令生成部１３４に依頼する（ステップＳ２２０１）。このとき、要求処理部１３２は、少なくとも処理対象バッファを特定する情報と、実行すべき演算処理と、使用する鍵などの演算に必要な情報とを命令生成部１３４に通知する。
【０１４５】
依頼を受けた命令生成部１３４は、通知内容にしたがって制御命令を生成し（ステップＳ２２０２）、要求処理部１３２に生成した制御命令を返す。次に、要求処理部１３２は、制御部１３５に対して制御命令による演算の実行を依頼する（ステップＳ２２０３）。
【０１４６】
依頼を受けた制御部１３５は、制御命令によって処理を実行するように演算回路１３６を制御する（ステップＳ２２０４）。演算の完了通知を制御部１３５から受付けた場合は、要求処理部１３２の保存部１３２ｂが、同時実行情報の実行済みフラグを「ＹＥＳ」に更新し（ステップＳ２２０５）、実行制御処理を終了する。なお、保存部１３２ｂが、実行済みフラグを「ＹＥＳ」に更新するのは、複数の演算処理を同時に実行する制御命令によって演算が実行された場合に限られる。
【０１４７】
次に、第１の実施の形態によるデータ処理の具体例について説明する。以下では、上記と同様に、通信相手である通信装置２００からＥＳＰによって暗号化されたパケットを受信した場合を例として説明する。また、通信装置１００の起動直後のように、まだ推定処理が実行されていない状態を前提とする。
【０１４８】
この場合、ＩＰｓｅｃ処理部１２０は、ハッシュアルゴリズム、および復号のための暗号アルゴリズムの順で、実行要求を演算処理部１３０に通知する。このため、以下では、（１）推定処理前にハッシュアルゴリズムが要求された場合、（２）（１）の後に暗号アルゴリズムが要求された場合、および、（３）推定処理後に同様のパケットが受信された場合、の３パターンの処理をそれぞれ説明する。
【０１４９】
図２５−１〜図２５−３は、上記（１）のパターンのデータ処理の流れを示すシーケンス図である。なお、ここでは、制御情報記憶部１３８には図６のような制御情報が記憶され、統計情報記憶部１３９にはエントリが存在しないことを前提とする。
【０１５０】
ＩＰｓｅｃ処理部１２０から演算処理部１３０に通知された実行要求は、例えばインデックス＝４（ハッシュ処理）が含まれる。このため、演算処理部１３０はインデックス＝４のハッシュ処理を行う。
【０１５１】
まず、演算処理部１３０の要求受付部１３１は、ＩＰｓｅｃ処理部１２０から通知された実行要求を受け付ける（ステップＳ２５０１）。要求受付部１３１は、例えば、演算処理部１３０と外部とを繋ぐソフトウェアに実装されたＡＰＩ（Application Program Interface）などが相当する。要求受付部１３１は実行要求を受け付けると、実行要求を要求処理部１３２に通知する（ステップＳ２５０２）。
【０１５２】
要求処理部１３２は、制御情報記憶部１３８を参照し、実行要求に含まれるインデックスを有するエントリが保存されていることを確認する（ステップＳ２５０３）。この時、もし対応するエントリが保存されていなければエラーとなる。エントリが存在する場合には、当該エントリが返される（ステップＳ２５０４）。
【０１５３】
次に、対応するエントリの同時実行情報が指定されているか否かを確認する（ステップＳ２５０５）。仮に同時実行情報が指定されている場合には、推定処理は行わず、要求処理部１３２は、同時に実行するための制御命令の生成を命令生成部１３４に通知する（ステップＳ２５０６’）。
【０１５４】
この例では、同時実行情報が指定されていないため、要求処理部１３２は推定部１３３に実行要求を伴う推定処理依頼を通知する（ステップＳ２５０６）。
【０１５５】
推定部１３３の同時実行判断部１３３ｂは、要求処理部１３２から推定処理依頼を受け取ると、推定処理を開始する。同時実行判断部１３３ｂは、受け取った実行要求のインデックスに対応するエントリが、統計情報記憶部１３９に存在するか否かを確認する（ステップＳ２５０７）。
【０１５６】
この段階では、統計情報記憶部１３９に実行要求に対応するエントリが存在しないため（ステップＳ２５０８）、同時実行判断部１３３ｂは、新たに推定処理を行うべき実行要求であると判断する。
【０１５７】
推定処理では、同時実行判断部１３３ｂは、まず、実行要求で指定される処理対象バッファの一部または処理対象バッファの前後を参照し、ＳＰＩを取得する（ステップＳ２５０９）。ここでは、実行要求で指定された処理対象バッファがＩＰｓｅｃで処理されたＩＰデータグラムの一部であると見なして、ＳＰＩが存在すると想定されるアドレスからＳＰＩの値を読み込む。
【０１５８】
なお、ＳＰＩが存在すると想定されるアドレスは、ＩＰバージョン、使用するＩＰｓｅｃプロトコル、およびＩＰｓｅｃモードによって異なる。同時実行判断部１３３ｂは、これらのすべてのバリエーションに対してＳＰＩの取得処理を実行するように構成してもよいし、特定のバリエーションに対してのみＳＰＩの取得処理を実行するように構成してもよい。
【０１５９】
ＳＰＩを取得した後、同時実行判断部１３３ｂは、ＳＰＩが存在すると想定される値を伴う外部情報取得要求を、取得部１３３ａに通知する（ステップＳ２５１０）。
【０１６０】
取得部１３３ａは、ＳＰＩと想定される値をキーにしてＳＡＤＢ２０５を検索し、同じ値をＳＰＩに持つＳＡを探す（ステップＳ２５１１）。検索の結果、ＳＡが存在しなければＩＰｓｅｃ処理ではないと判断できるため、この段階で処理を中断する。なお、中断した旨は、実行要求が通知された順序を逆に辿り、ＩＰｓｅｃ処理部１２０からネットワーク処理部１１０へ通知される。
【０１６１】
検索の結果、同じ値をＳＰＩとして持つＳＡが存在したとすると、同時実行判断部１３３ｂは、当該ＳＡの内容を取得し（ステップＳ２５１２）、解析する（ステップＳ２５１３）。まず、実行要求で指定された演算処理以外に、別の演算処理の実行が必要なＳＡであるか否かを確認する（ステップＳ２５１３）。
【０１６２】
なお、この段階で、別の演算処理の実行が不要であると判断した場合には、これ以上の推定処理は不要である。すなわち、同時実行判断部１３３ｂは、制御情報記憶部１３８に単独で実行するための制御情報のエントリを作成する（ステップＳ２５１４）。そして、推定部１３３による推定処理が終了する（ステップＳ２５１５）。
【０１６３】
この例では、ハッシュアルゴリズムと暗号アルゴリズムとが実行されるＥＳＰの処理が前提であるため、ステップＳ２５１３では、別の演算処理の実行が必要なＳＡであると判断される。
【０１６４】
この場合、同時実行判断部１３３ｂは、当該ＳＡから得られた情報に対応する制御情報記憶部１３８のエントリのインデックスを得る（ステップＳ２５１６、ステップＳ２５１７）。続いて、同時実行判断部１３３ｂは、実行要求で実行する演算処理と当該ＳＡに記載されている別の演算処理の実行順序を、ＳＡの内容から決定する（ステップＳ２５１８）。
【０１６５】
この段階では、最初の推定処理であるため、同時実行判断部１３３ｂは、実行要求で通知されたアルゴリズムであるハッシュアルゴリズムによる演算処理を１番目に実行し、当該ＳＡの解析により得られたアルゴリズムである暗号アルゴリズムによる演算処理を２番目に実行する実行順序を決定する。
【０１６６】
続いて、同時実行判断部１３３ｂは、両演算処理に対応するエントリを統計情報記憶部１３９に作成する（ステップＳ２５１９）。ただし、同時実行判断部１３３ｂは、１番目に実行されるべき演算処理に対応するエントリのインデックスには、実行要求に含まれるインデックスの値を保存する。また、同時実行判断部１３３ｂは、開始オフセットに実行要求で通知された処理対象バッファの開始アドレスを保存し、終了オフセットに実行要求で通知された処理対象バッファの終了アドレスを保存する。
【０１６７】
また、同時実行判断部１３３ｂは、２番目に実行されるべき演算処理に対応するエントリのインデックスには、ステップＳ２５１７で得られたインデックスの値を保存する。また、同時実行判断部１３３ｂは、開始オフセットおよび終了オフセットは空欄とする。また、同時実行判断部１３３ｂは、両エントリの同時実行インデックスには、互いのインデックスの値を保存すると共に、それぞれの実行順序も保存する。
【０１６８】
カウントは、この後の推定処理で値を加算する情報であるため、同時実行判断部１３３ｂはこの段階では０を保存する。また、また、同時実行判断部１３３ｂは、最終参照時刻にエントリの作成時刻を記録する。
【０１６９】
以上で、推定部１３３における最初の実行要求に対する処理が終了し、要求処理部１３２へ処理を返す（ステップＳ２５２０）。ここまでの処理が終了した時点では、統計情報記憶部１３９には、例えば図２２のような統計情報が設定される。
【０１７０】
要求処理部１３２は、再び制御情報記憶部１３８を参照して（ステップＳ２５２１、ステップＳ２５２２）、実行が要求されたインデックス＝４のエントリ（ハッシュ処理）の同時実行情報が記載されているか否かを確認する（ステップＳ２５２３）。この段階では、まだ同時実行情報が記載されていないので、要求処理部１３２は、制御命令の生成要求を命令生成部１３４に通知する（ステップＳ２５２４）。この例では、ハッシュアルゴリズムとＨＭＡＣ鍵とを含む制御情報、および実行要求を含む制御命令生成要求を命令生成部１３４に転送する。
【０１７１】
命令生成部１３４は、制御情報と実行要求を受け取ると、それに対応する制御命令を生成する（ステップＳ２５２５）。生成された制御命令は、要求処理部１３２と制御部１３５を介して演算回路１３６へと送られる（ステップＳ２５２６〜ステップＳ２５２８）。演算回路１３６は、受け取った制御命令に従って演算処理を実行する（ステップＳ２５２９）。
【０１７２】
演算回路１３６による処理が完了すると、演算回路１３６は、制御部１３５へ処理の完了を通知する（ステップＳ２５３０）。続いて、制御部１３５は、要求処理部１３２に完了を通知する（ステップＳ２５３１）。要求処理部１３２は処理完了通知を受け取ると、呼び出し元であるＩＰｓｅｃ処理部１２０に処理の完了を通知する（ステップＳ２５３２）。
【０１７３】
以上で（１）のパターンのデータ処理が終了する。これにより、ＩＰｓｅｃ処理部１２０は、受信したＩＰデータグラムの完全性が確認できるため、引き続き復号処理の実行を演算処理部１３０に要求する。この場合の処理が、（２）のパターンのデータ処理に相当する。なお、このときの実行要求には、復号処理のインデックス＝３が含まれる。以下では、この実行要求を第２の実行要求とし、（１）のパターンで要求された実行要求を第１の実行要求とする。
【０１７４】
図２６−１〜図２６−３は、（２）のパターンのデータ処理の流れを示すシーケンス図である。
【０１７５】
まず、（１）のパターンのハッシュ処理の場合と同様に、要求受付部１３１が第２の実行要求を受け取り、受け取った要求が要求処理部１３２へと送られる（ステップＳ２６０１、ステップＳ２６０２）。
【０１７６】
要求処理部１３２は、再び制御情報記憶部１３８を参照して、第２の実行要求で指定されたインデックスを持つエントリを取得する（ステップＳ２６０３、ステップＳ２６０４）。その後、当該エントリに同時実行情報が保存されているか否かを確認する（ステップＳ２６０５）。この例では、同時実行情報はまだ保存されていないため、第２の実行要求を含む推定処理依頼が推定部１３３に転送される（ステップＳ２６０６）。
【０１７７】
依頼を受けた推定部１３３の同時実行判断部１３３ｂは、第２の実行要求に対応するインデックスを持つエントリが統計情報記憶部１３９に存在するか否かを確認する（ステップＳ２６０７）。
【０１７８】
仮に、エントリが存在しない場合には、第１の実行要求に対応する処理が実行されていないことになるため、第２の実行要求を第１の実行要求の場合と同様に処理する。この例では、（１）のパターンのデータ処理が実行済みであるためエントリが存在する（ステップＳ２６０８）。
【０１７９】
エントリが存在する場合、同時実行判断部１３３ｂは、同時実行インデックスに記載されている情報から、第１の実行要求と第２の実行要求の実行順序を特定する（ステップＳ２６０９）。その後、同時実行インデックスに記載されている情報によって、第１の実行要求に対応するエントリを統計情報記憶部１３９から取得する（ステップＳ２６１０、ステップＳ２６１１）。
【０１８０】
その後、第１の実行要求に対応するエントリに記載された開始オフセットおよび終了オフセットと、第２の実行要求に含まれる情報とから、第２の実行要求に対応するエントリに記載すべき開始オフセットと終了オフセットとを計算する（ステップＳ２６１３）。
【０１８１】
次に、同時実行判断部１３３ｂは、第２の実行要求に対応するエントリのオフセット値と計算したオフセット値とを比較する（ステップＳ２６１４）。
【０１８２】
第２の実行要求に対応するエントリに開始オフセットと終了オフセットとが記載されていない場合、または計算したオフセット値と同じ値が記載されていた場合には、計算したオフセット情報を対応するエントリに書込む（ステップＳ２６１５）。その後、第１の実行要求および第２の実行要求に対応するエントリそれぞれのカウントを増やす（ステップＳ２６１６〜ステップＳ２６１７）。
【０１８３】
統計情報記憶部１３９のエントリを更新した後、同時実行判断部１３３ｂは、エントリのカウントが事前に定められた閾値を超えているか否かを確認する（ステップＳ２６１８）。超えていない場合は、推定部１３３は、処理を終了し、要求処理部１３２に処理を戻す（ステップＳ２６１９）。
【０１８４】
なお、仮に、第２の実行要求に対応するエントリに開始オフセットと終了オフセットとが既に記載されており、新たに計算されたオフセット値と記載されているオフセット値との間で一致するものが存在しない場合は、ステップＳ２６１５〜ステップＳ２６１７の代わりに、以下のステップＳ２６２０〜ステップＳ２６２３の処理が実行される。
【０１８５】
すなわち、同時実行判断部１３３ｂは、まずエントリを複製する（ステップＳ２６２０）。さらに、同時実行判断部１３３ｂは、複製したエントリに対して、計算したオフセット値を記載する（ステップＳ２６２１）。その後、第１の実行要求に対応するエントリと複製されたエントリのカウントを増やす（ステップＳ２６２２、ステップＳ２６２３）。なお、複製されたエントリのカウンタは１から開始する。
【０１８６】
ステップＳ２６１８で、カウントが閾値を超えていると判断した場合は、同時実行判断部１３３ｂは、統計情報記憶部１３９のエントリに記載された情報を制御情報記憶部１３８に反映する（ステップＳ２６２４）。また、同時実行判断部１３３ｂは、統計情報記憶部１３９に保存されたエントリを削除する（ステップＳ２６２５）。
【０１８７】
以上の処理が完了すると、推定部１３３は要求処理部１３２に処理を戻す（ステップＳ２６２６）。
【０１８８】
図２３は、この段階での統計情報記憶部１３９に記憶された統計情報のデータ構造の一例を示す表である。図２３に示すように、この段階では、第２の実行要求が受付けられ、第１の実行要求の処理対象バッファに対するオフセットが特定できたため、２番目に実行される演算処理に対応するエントリ（インデックス＝３）の開始オフセットおよび終了オフセットに値が設定されている。
【０１８９】
以降の処理は、（１）のパターンのデータ処理と同様であるため説明を省略する。
【０１９０】
以上のような（１）および（２）のパターンのデータ処理が、１つの暗号化されたＩＰデータグラムを受信した際に実行される。この処理を数回繰り返すことで、統計情報記憶部１３９に保存されたエントリのカウントが閾値を越え、制御情報記憶部１３８へと格納された状態となる。
【０１９１】
次に、上述のような推定処理が完了し、制御情報記憶部１３８のエントリに同時実行情報が記載されている場合の処理である、（３）のパターンのデータ処理について説明する。図２７−１〜図２７−２は、（３）のパターンのデータ処理の流れを示すシーケンス図である。
【０１９２】
まず、同じ種類のパケットが要求受付部１３１で受信され、ネットワーク処理部１１０およびＩＰｓｅｃ処理部１２０を介して演算処理部１３０に伝えられたと仮定する。
【０１９３】
まず、要求処理部１３２の要求受付部１３１は、インデックス＝４のハッシュ実行要求を受け取る（ステップＳ２７０１〜ステップＳ２７０２）。次に、要求処理部１３２は、制御情報記憶部１３８にインデックス＝４のエントリ（以下、第１のエントリという）が存在することを確認する（ステップＳ２７０３、ステップＳ２７０４）。その後、要求処理部１３２は、第１のエントリの同時実行情報が記載されているか否かを確認する（ステップＳ２７０５）。この場合、先に述べた処理により同時実行情報としてインデックス＝３を含む情報が記載されている。
【０１９４】
同時実行情報が記載されている場合には、要求処理部１３２は、第１のエントリにオフセット情報が存在するか否かを確認する（ステップＳ２７０６）。この場合、先に述べた処理によりオフセット情報は記載されていない。
【０１９５】
次に、要求処理部１３２は、同時実行情報に記載されている同時実行インデックスに対応するエントリ（以下、第２のエントリという）を取得する（ステップＳ２７０７、ステップＳ２７０８）。その後、要求処理部１３２は、実行要求と、実行要求に対応する第１のエントリと第２のエントリに含まれる情報から、両エントリに対応する処理を同時に処理するために必要なオフセット情報を生成する（ステップＳ２７０９）。
【０１９６】
なお、これは、同時に実行する第２の実行要求に対応する処理対象バッファを特定する処理である。要求処理部１３２は、第１の実行要求に含まれている処理対象バッファの開始アドレスおよび終了アドレスに対して、第２のエントリとして保存されているオフセット情報に記載された開始オフセットと終了オフセットを加えることにより、第２の実行要求に対応する処理での処理対象バッファの範囲を求める。
【０１９７】
次に、要求処理部１３２は、命令生成部１３４に対して制御命令生成依頼を通知し、両エントリを同時に処理する制御命令を得る（ステップＳ２７１０〜ステップＳ２７１２）。
【０１９８】
生成された制御命令は、制御部１３５を通して、演算回路１３６に伝えられ（ステップＳ２７１３、ステップＳ２７１４）、実際の演算が実行される（ステップＳ２７１５）。演算回路１３６の演算が完了すると、制御部１３５から要求処理部１３２に対して、処理の完了が通知される（ステップＳ２７１６、ステップＳ２７１７）。
【０１９９】
要求処理部１３２は、処理完了通知を受け取ると（ステップＳ２７１７）、同時に処理されて得られたハッシュ値と復号済みのデータとのうち、ハッシュ値のみを、呼び出し元であるＩＰｓｅｃ処理部１２０が参照可能な状態に設定する（ステップＳ２７１８）。
【０２００】
なお、呼び出し元から参照できるようにする演算結果は、第１の実行要求および第２の実行要求の本来の実行順序に従って決定される。この例では、第１の実行要求がハッシュ処理であり、第２の実行要求が復号処理であるため、先にハッシュ値を参照できるようにする必要がある。なお、両アルゴリズムによる演算結果を同時に参照できるように構成してもよい。
【０２０１】
呼び出し元であるＩＰｓｅｃ処理部１２０に完了を伝える前に、第２の実行要求に対応するエントリの同時実行情報の実行済みフラグを「ＹＥＳ」に設定するとともに、処理結果を格納したバッファ１３７の情報をバッファ情報に設定する（ステップＳ２７１９）。要求処理部１３２は、呼び出し元であるＩＰｓｅｃ処理部１２０に処理の完了を通知する（ステップＳ２７２０）。
【０２０２】
引き続き、ＩＰｓｅｃ処理部１２０が、インデックス＝３を含む復号処理の実行要求を演算処理部１３０に対して発行する。演算処理部１３０は、要求受付部１３１を介して実行要求を受け取り、要求処理部１３２に通知する（ステップＳ２７２１）。
【０２０３】
要求処理部１３２は、制御情報記憶部１３８にインデックス＝３で識別されるエントリが存在することを確認する（ステップＳ２７２２、ステップＳ２７２３）。さらに、要求処理部１３２は、同エントリの同時実行情報を構成する実行済みフラグを参照することで、予想される処理が既に実行され、その結果が保存されていることを確認する（ステップＳ２７２４）。
【０２０４】
仮に、実行済みフラグを参照して、まだ実行されていないことが判明した場合は、前述の場合と同様に推定処理を継続する（同図では省略）。
【０２０５】
要求処理部１３２は、制御情報記憶部１３８のオフセット情報を参照し、事前に実行された処理と新たに受け付けた処理が同一のものか否かを確認する（ステップＳ２７２５）。
【０２０６】
仮に、両者が相違すれば、要求処理部１３２は、命令生成部１３４に対して命令生成要求を送信する（同図では省略）。この場合、要求処理部１３２は、受け付けた実行要求に対応する制御情報記憶部１３８の情報だけを通知して制御命令の生成を依頼する。
【０２０７】
両者が一致している場合は、要求処理部１３２は、同時実行情報のバッファ情報で特定される処理結果を、呼び出し元であるＩＰｓｅｃ処理部１２０から参照可能な状態にする（ステップＳ２７２６）。また、要求処理部１３２は、ＩＰｓｅｃ処理部１２０に完了通知を送信する（ステップＳ２７２７）。さらに、要求処理部１３２は、実行済みフラグを「ＮＯ」に初期化しておく（ステップＳ２７２８）。
【０２０８】
完了通知を受け取ったＩＰｓｅｃ処理部１２０は、通常通り処理を再開して、上位プロトコルの処理を行った後、アプリケーション１０１にデータを渡す。以上で（３）のパターンのデータ処理が終了する。
【０２０９】
このように、本実施の形態によれば、事前に同時に実行される演算処理の情報を保存し（（１）および（２）のパターンのデータ処理）、あるアルゴリズムによる演算処理を単独で実行する要求を受付けた場合に、保存した情報を参照して同時に実行可能な他のアルゴリズムによる演算処理の有無を判断できる。そして、他のアルゴリズムによる演算処理が存在する場合は各アルゴリズムによる演算処理を同時に実行することができる（（３）のパターンのデータ処理）。
【０２１０】
なお、これまでの説明では、カウントの閾値は１つとして説明したが、複数の閾値を事前に用意し、特定の条件が満たされた場合にそれらを使い分けるように構成してもよい。例えば、取得部１３３ａで呼び出し元を確認する処理を行った際に、その呼び出し元に応じて閾値を切り換えるように構成してもよい。また、送信処理に使うエントリと受信処理に使うエントリとで閾値を使い分けるように構成してもよいし、ＳＡＤＢ１５１およびＳＰＤＢ１５２に付加的に記載されている情報の有無によって閾値を使い分けるように構成してもよい。
【０２１１】
このような場合、統計情報記憶部１３９の各エントリには、使用する閾値を合わせて保存し、同時実行判断部１３３ｂが判断する場合に保存された値とエントリに保存されているカウンタを比較することで判定するように構成すればよい。
【０２１２】
また、閾値を超えたか否かで移行するエントリを決定する代わりに、制御情報記憶部１３８に暗号情報やハッシュ情報が保存された後の一定時間内、またはエントリが制御情報記憶部１３８に記録された後の一定時間内で、最もカウントが増えたエントリを移行するエントリとして決定するように構成してもよい。
【０２１３】
この場合、制御情報記憶部１３８や統計情報記憶部１３９のエントリに登録時刻を保存する欄を設けるとともに、同時実行判断部１３３ｂが、カウンタを増加させた後に一定時間が経過したかを判断する処理と、一定時間が経過していた場合に最もカウントが大きいエントリを抽出する処理とを実行するように構成すればよい。
【０２１４】
また、これまでに述べた推定処理は一定回数の試行が必要である。このため、使用回数の少ない暗号処理やハッシュ処理の場合には試行回数が足りずに推定処理が完了しない可能性がある。その場合、統計情報記憶部１３９の各エントリに含まれる最終参照時刻を利用してガーベージコレクションを行うことができる。このようなガーベージコレクションを実行するためには、一定時間ごとに統計情報記憶部１３９のエントリを検査して、一定時間以上使用されていないエントリを削除する処理を同時実行判断部１３３ｂに実装すればよい。
【０２１５】
また、ステップＳ２１１９でオフセットが一致しないと判断された場合のように、同時実行の推定が間違っていた場合に、関連する情報を削除して再度推定処理をやり直すように構成してもよい。やり直すか否かを決定する基準は多数のバリエーションが考えられる。
【０２１６】
例えば、１回でも間違った場合には即座に削除する方法、連続して一定回数以上間違った場合に削除する方法、間違った回数が一定回数に達した場合に削除する方法、および一定時間内に外れた回数が所定の閾値に達した場合に削除する方法などが考えられる。
【０２１７】
いずれの場合も、統計情報記憶部１３９の各エントリに間違った回数をカウントするカウンタを設けるとともに、要求処理部１３２が、推定が間違っていた判断した場合に当該カウンタを増やす処理と、当該カウンタを用いてエントリの同時実行情報とオフセット情報とを削除するか否かを判断する処理とを実行するように構成すればよい。
【０２１８】
また、上記説明では、暗号アルゴリズムとハッシュアルゴリズムとを専用のハードウェアで実現する例を説明したが、両アルゴリズムをソフトウェアで実現する場合にも適用可能である。例えば、複数の汎用なＣＰＵを搭載するシステムで、暗号アルゴリズムとハッシュアルゴリズムとを他の処理とは異なるＣＰＵに割り当てて実行するような場合にも適用可能である。また、以上のような機能を必ずしもソフトウェアで実装する必要はなく、同等の機能を要するハードウェア回路として実装してもよい。
【０２１９】
以上のように、第１の実施の形態にかかるデータ処理装置では、暗号アルゴリズムおよびハッシュアルゴリズムのいずれかを単独で実行する要求を受付けた場合であっても、他のアルゴリズムと同時に実行すべきと判断した場合は、ハードウェア回路を用いて両アルゴリズムを同時に実行することができる。そして、後で他のアルゴリズムの実行要求を受付けた場合には、同時に実行した演算処理で事前に得られている演算結果を返すことができる。
【０２２０】
これにより、複数のアルゴリズムを同時実行可能な演算部の効率的な利用を実現することが可能となる。また、このとき、演算の要求元であるＯＳなどの既存ソフトウェアを変更する必要がない。さらに、連続して実行される暗号アルゴリズムの処理領域とハッシュアルゴリズムの処理領域とが異なっている場合であっても、過去の実行履歴や処理の依頼元やその他の情報から総合的に判断することにより、処理領域を特定して適切に演算を実行することができる。
【０２２１】
（第２の実施の形態）
第１の実施の形態では、同時実行判断部１３３ｂは、ＩＰｓｅｃで利用する情報を参照して同時実行を判断していた。暗号アルゴリズムやハッシュアルゴリズムは、ＩＰｓｅｃ以外の処理でも実行されうるため、ＩＰｓｅｃ以外の処理を実行する任意のアプリケーション等に対しても、第１の実施の形態と同様のデータ処理を実現できることが望ましい。
【０２２２】
第２の実施の形態にかかるデータ処理装置は、要求元のアプリケーション等を識別するプロセスＩＤなどの識別情報を利用して同時実行の可否を判断することにより、ＩＰｓｅｃ以外の処理を実行するアプリケーション等に対しても、複数のアルゴリズムを同時に実行できる演算部の効率的な利用を実現するものである。
【０２２３】
図２８は、第２の実施の形態にかかるデータ処理装置２８００の構成を示すブロック図である。図２８に示すように、データ処理装置２８００は、アプリケーション２８０１と、演算処理部２８３０とを備えている。
【０２２４】
なお、第１の実施の形態のインターフェイス部１０２、ネットワーク処理部１１０、およびＩＰｓｅｃ処理部１２０と同様の通信処理に関する構成部を備えるように構成してもよい。ただし、本実施の形態では、ＩＰｓｅｃ処理部１２０だけでなく、アプリケーション２８０１からも直接演算処理部２８３０に各アルゴリズムによる演算処理の実行を要求できるように構成される。また、本実施の形態でも、事前に暗号鍵などの情報を登録する方式を採用するものとして説明する。
【０２２５】
第２の実施の形態では、アプリケーション２８０１は、暗号アルゴリズムおよびハッシュアルゴリズムの少なくとも一方を要求する処理を含む任意の処理を実行するアプリケーションである。アプリケーション２８０１は、第１の実施の形態のＩＰｓｅｃ処理部１２０と同様に、各アルゴリズムによる演算処理を個別に要求するように構成されている。なお、同図ではアプリケーション２８０１を１つのみ記載しているが、複数のアプリケーション２８０１を含むことができる。
【０２２６】
演算処理部２８３０は、アプリケーション２８０１からの要求に応じて、暗号アルゴリズムおよびハッシュアルゴリズムによる演算を実行するものである。図２９は、演算処理部２８３０の詳細な構成を示すブロック図である。
【０２２７】
図２９に示すように、演算処理部２８３０は、要求受付部１３１と、要求処理部１３２と、推定部２８３３と、命令生成部１３４と、制御部１３５と、演算回路１３６と、バッファ１３７と、制御情報記憶部１３８と、統計情報記憶部２８３９と、を備えている。
【０２２８】
第２の実施の形態では、統計情報記憶部２８３９のデータ構造と、推定部２８３３の機能とが第１の実施の形態と異なっている。その他の構成および機能は、第１の実施の形態にかかる通信装置１００の構成を表すブロック図である図１と同様であるので、同一符号を付し、ここでの説明は省略する。
【０２２９】
図３０は、第２の実施の形態の統計情報記憶部２８３９に記憶された統計情報のデータ構造の一例を示す表である。図３０に示すように、第２の実施の形態の統計情報は、インデックスと、同時実行インデックスと、同時実行インデックス回数と、開始オフセットと、終了オフセットと、カウントと、最終参照時刻と、呼び出し元情報とを含んでいる。
【０２３０】
このように、第２の実施の形態では、同時実行インデックス回数と、呼び出し元情報とが新たに追加された点が、第１の実施の形態と異なっている。また、第２の実施の形態では、１つのインデックスに対して複数の同時実行インデックスを指定可能な点が第１の実施の形態と異なっている。
【０２３１】
第２の実施の形態のカウンタは、後述する同時実行判断部２８３３ｂにより、オフセット値ごとに、インデックスと、同時実行インデックスとが関連すると判断された回数が設定される。一方、同時実行インデックス回数は、オフセット値によらず、インデックスと、同時インデックスとが関連すると判断された回数が設定される。すなわち、同時実行インデックスの値が同一で、オフセット値が異なるエントリは、本実施の形態では別のエントリとして登録され、カウントはそれぞれ独立に更新される。一方、同時実行インデックス回数を更新する際には、同時実行インデックスが一致するエントリは同時に更新される。
【０２３２】
呼び出し元情報は、対応するインデックスの演算処理を要求した呼び出し元のアプリケーション２８０１を識別する情報が設定される。例えば、アプリケーション２８０１に付与されたプロセスＩＤなどを呼び出し元情報として設定する。
【０２３３】
図２９に戻り、推定部２８３３は、取得部２８３３ａと、同時実行判断部２８３３ｂとを備えている。
【０２３４】
取得部２８３３ａは、要求元のアプリケーション２８０１に対応するプロセス情報を取得する。例えば、取得部２８３３ａは、ＯＳが管理しているプロセス情報の取得要求をＯＳに依頼することにより所望のプロセス情報を取得する。また、取得部２８３３ａは、プロセス情報に含まれる情報を元に、さらにＯＳ等から関連する情報を取得する。例えば、取得部２８３３ａは、取得したプロセス情報に含まれるプロセスＩＤをキーとして、アプリケーション２８０１が開いているファイルのファイルディスクリプタを取得する。
【０２３５】
なお、本実施の形態では、アプリケーション２８０１を識別する情報としてプロセスＩＤを用いる例を説明するが、アプリケーション２８０１を識別可能な情報であれば、従来から用いられているあらゆる情報を利用できる。例えば、アプリケーション名（プログラム名）、アプリケーション２８０１が開いているファイルディスクプリタ、アプリケーション２８０１が要求するダイナミックライブラリ、アプリケーション２８０１が使用しているメモリのアドレス（物理メモリ、仮想メモリ）、およびアプリケーション２８０１が発行するシステムコールなどを用いてアプリケーション２８０１を識別するように構成してもよい。また、演算処理部２８３０が呼び出されるまでの関数呼び出しをトレースして、どのような処理から呼び出されたのかを解析することにより、要求元を特定するように構成してもよい。
【０２３６】
同時実行判断部２８３３ｂは、取得されたプロセスＩＤ等を参照して、要求された演算処理と他の演算処理とが互いに関連するか否かを判断するものである。具体的には、同時実行判断部２８３３ｂは、各アルゴリズムによる演算処理を要求したアプリケーション２８０１のプロセスＩＤが一致しており、かつ実行時刻が近い場合に、両アルゴリズムによる演算処理が関連すると判断する。なお、関連性の判断方法はこれに限られるものではなく、例えば、処理対象バッファのアドレスの近さなどによって判断するように構成してもよい。
【０２３７】
次に、このように構成された第２の実施の形態にかかるデータ処理装置２８００によるデータ処理について説明する。第２の実施の形態のデータ処理は、第１の実施の形態のデータ処理を表す図１５の各ステップのうち、演算処理を要求する処理（ステップＳ１５０７、ステップＳ１５１０）、演算処理（ステップＳ１５０８、ステップＳ１５１１）、および演算処理の結果を受信する処理（ステップＳ１５０９、ステップＳ１５１２）に相当する。すなわち、これらの各ステップに相当する処理が、アプリケーション２８０１と演算処理部２８３０との間で実行される。
【０２３８】
なお、第２の実施の形態の演算処理の全体の流れは、第１の実施の形態の演算処理を表す図２０−１〜図２０−２と同様であるためその説明を省略する。ただし、第２の実施の形態では、演算処理内の推定処理が第１の実施の形態と異なっている。
【０２３９】
以下に、第２の実施の形態の推定処理について図３１−１および図３１−２を用いて説明する。図３１−１および図３１−２は、第２の実施の形態における演算処理の全体の流れを示すフローチャートである。
【０２４０】
ステップＳ３１０１からステップＳ３１０２までの、エントリ取得・判定処理は、第１の実施の形態にかかる通信装置１００におけるステップＳ２１０１からステップＳ２１０２までと同様の処理なので、その説明を省略する。
【０２４１】
ステップＳ３１０２で、エントリＡが取得できなかった場合は（ステップＳ３１０２：ＮＯ）、取得部２８３３ａが、ＯＳが管理するアプリケーション２８０１に対応するプロセス情報を取得する（ステップＳ３１０３）。
【０２４２】
次に、取得部２８３３ａは、プロセス情報からアプリケーション２８０１を識別するためのプロセスＩＤを取得する（ステップＳ３１０４）。なお、ファイルディスクプリタ、ダイナミックライブラリなどのその他の情報を利用する場合は、取得部２８３３ａは、プロセスＩＤをキーとしてさらにＯＳからこれらの情報を取得するように構成することができる。
【０２４３】
次に、同時実行判断部２８３３ｂは、実行が要求された演算処理に対応するエントリを作成して統計情報記憶部２８３９に保存する（ステップＳ３１０５）。第２の実施の形態では、この時点では、連続して実行される可能性がある他の演算処理に関する情報を取得していない。したがって、この時点では、実行要求で通知された演算処理に対応するエントリのみを作成して統計情報記憶部２８３９に保存する。
【０２４４】
第２の実施の形態では、取得したプロセスＩＤを呼び出し元情報に設定する。また、同時実行判断部２８３３ｂは、現時点では同時に実行する他の演算処理を確定できないため、同時実行インデックスおよび同時実行インデックス回数は空欄とする。その他の欄については第１の実施の形態と同じである。
【０２４５】
また、上述のように、本実施の形態では、最終的に関連すると見なされる２つのエントリであっても、エントリ作成時点では順序関係を設定できない。このため、２番目に実行すべき演算処理に対して、この時点でオフセットを計算することができない。そこで、本実施の形態では、すべてのエントリのオフセット情報に、実行要求で通知された処理対象バッファのアドレスと、以降の推定処理の中で関連すると判断された他のエントリとの間のオフセット値とを保存できるようにする。
【０２４６】
なお、最終的に関連すると見なされる２つのエントリは、上記のような手順に従い、それぞれ独立にステップＳ３１０５で統計情報記憶部２８３９に保存される。そして、本実施の形態では、このようにして独立にエントリが保存された後、さらに同じエントリの実行要求が受付けられたときに、呼び出し元情報を参照して関連するエントリを判断するように構成される。この判断処理について以下に説明する。
【０２４７】
ステップＳ３１０２で、エントリＡが取得できた場合（ステップＳ３１０２：ＹＥＳ）、同時実行判断部２８３３ｂは、エントリＡの同時実行インデックスを取得する（ステップＳ３１０６）。
【０２４８】
次に、同時実行判断部２８３３ｂは、１番目に実行する処理か否か、すなわち、実行順序＝「first」が設定されているか否かを判断する（ステップＳ３１０７）。なお、本実施の形態では、この時点でまだ同時実行インデックスが設定されていない場合があるため、このステップでは、同時実行判断部２８３３ｂは、同時実行インデックスが格納されており、かつ実行順序が１番目であるかを判断する。
【０２４９】
１番目に実行する処理の場合は（ステップＳ３１０７：ＹＥＳ）、同時実行判断部２８３３ｂは、オフセット情報を更新する（ステップＳ３１０８）。本ステップは、例えば、推定処理が既に実行されて同時実行インデックスが設定されており、さらに同じエントリに対応する演算処理の実行要求が受付けられた場合に実行される。
【０２５０】
１番目に実行する処理でない場合、すなわち、２番目に実行する処理であるか、または同時実行インデックスが設定されていないときは（ステップＳ３１０７：ＮＯ）、同時実行判断部２８３３ｂは、オフセット情報を更新する（ステップＳ３１０９）。そして、同時実行判断部２８３３ｂは、最終参照時刻が最も近いエントリ（以下、エントリＢとする）を、関連するエントリとして統計情報記憶部２８３９から検索する（ステップＳ３１１０）。
【０２５１】
なお、関連するエントリの検索の範囲は、要求されたインデックスに対応するエントリと同じ呼び出し元情報を持つエントリに限定する。また、比較する２つのエントリの最終参照時刻は一定の時間間隔内で発生していることを条件とする。この時間間隔は、管理者が静的に決定する値でもよいし、動作条件などにより動的に決定される値としてもよい。
【０２５２】
次に、同時実行判断部２８３３ｂは、エントリＢが取得されたか否かを判断する（ステップＳ３１１１）。エントリＢが取得されない場合は（ステップＳ３１１１：ＮＯ）、関連するエントリが存在しないと判断できるため、推定処理を終了する。
【０２５３】
エントリＢが取得された場合は（ステップＳ３１１１：ＹＥＳ）、同時実行判断部２８３３ｂは、エントリＡおよびエントリＢの実行順序を決定する（ステップＳ３１１２）。
【０２５４】
同時実行判断部２８３３ｂは、例えば、最終参照時刻を参照して各演算処理の実行時刻の前後関係から実行順序を決定する。なお、実行順序の決定方法はこれに限られるものではない。例えば、同時実行判断部２８３３ｂは、各演算処理の対象領域の大きさを比較して実行順序を決定してもよい。具体的には、同時実行判断部２８３３ｂは、暗号処理とハッシュ処理の対象領域の大きさを比較し、暗号処理の対象領域がハッシュ処理の対象領域よりも小さい場合に、まず暗号処理を実行し、次にハッシュ処理を実行する実行順序を決定する。
【０２５５】
また、アプリケーション２８０１が要求するダイナミックライブラリの情報を取得している場合は、当該ライブラリの名称や、その中に含まれるシンボル名から利用している暗号プロトコルを特定し、特定した暗号プロトコルが要求する順序関係を考慮して実行順序を決定するように構成することもできる。また、事前にアプリケーション２８０１に付随するメタ情報として、使用する暗号プロトコルを保存し、当該暗号プロトコルが要求する順序関係を考慮して実行順序を決定するように構成してもよい。
【０２５６】
関連性あると判定された２つのエントリを得た後は、第１の実施の形態と同様に、両エントリ間の処理対象バッファのオフセットを算出して保存する処理、およびカウントを更新して閾値を超えたかどうかを判定する処理が実行される（ステップＳ３１１３〜ステップＳ３１２１）。
【０２５７】
まず、同時実行判断部２８３３ｂは、関連すると判定された２つのエントリのオフセット情報から、２番目の処理に対する開始オフセットおよび終了オフセットとを計算する（ステップＳ３１１３）。第２の実施の形態では、両エントリのオフセット情報に処理対象バッファの開始アドレスおよび終了アドレスが設定されているため、同時実行判断部２８３３ｂは、両者の差分を計算することによりオフセットを算出することができる。
【０２５８】
次に、同時実行判断部２８３３ｂは、計算したオフセットと、２番目のエントリのオフセットとを比較する（ステップＳ３１１４）。そして、同時実行判断部２８３３ｂは、両者が一致するか否かを判断する（ステップＳ３１１５）。一致しない場合は（ステップＳ３１１５：ＮＯ）、同時実行判断部２８３３ｂは、２番目のエントリの内容を複製した新たなエントリ（以下、エントリＣとする）を作成し、統計情報記憶部２８３９に追加する（ステップＳ３１１６）。次に、同時実行判断部２８３３ｂは、追加したエントリＣの開始オフセットおよび終了オフセットに、ステップＳ３１１３で計算したオフセットの値を設定する（ステップＳ３１１７）。
【０２５９】
ステップＳ３１１５で、計算したオフセットと２番目のエントリのオフセットとが一致すると判断した場合は（ステップＳ３１１５：ＹＥＳ）、同時実行判断部２８３３ｂは、１番目のエントリのカウントと、２番目のエントリまたはエントリＣのカウントと、に１を加算する（ステップＳ３１１８）。
【０２６０】
ステップＳ３１１９からステップＳ３１２１までの、閾値比較処理およびエントリ移行処理は、第１の実施の形態にかかる通信装置１００におけるステップＳ２１２３からステップＳ２１２５までと同様の処理なので、その説明を省略する。
【０２６１】
なお、図３１−１および図３１−２のフローチャートでは、第１の実施の形態と同様に、統計情報のカウントのみを用いて関連性を判定する場合を説明した。以下に、統計情報の同時実行インデックス回数を用いて、エントリ間の関連性の度合いを判定する場合の処理について図３０を用いて説明する。
【０２６２】
図３０では、エントリ１４０１〜１４０５のうち、第１の実行要求に対応するエントリとしてインデックス＝３のエントリ１４０３が存在し、第２の実行要求としてインデックス＝４のエントリ１４０４、１４０５が候補になっている例が示されている。
【０２６３】
なお、インデックス＝４のエントリは、同一の同時実行インデックス（＝３）に対して２つの異なるオフセットの値が得られたため、２つのエントリ１４０４およびエントリ１４０５に分けられている。
【０２６４】
そして、図３０の例では、エントリ１４０４に対して関連すると判定した回数は１０回であり、エントリ１４０５に対して関連すると判定した回数は３回である。なお、この場合は、エントリ１４０４および１４０５の同時実行インデックス回数には、１３（１０＋３）がそれぞれ設定される。この場合、例えば所定の閾値を１０回とし、カウントがこの閾値を超えたエントリ１４０４を制御情報記憶部１３８に移行する。
【０２６５】
このように、同時実行インデックス回数とカウントとを独立して扱うことにより、関連すると認められ、かつオフセット値がある一定の値に収束していることが確認された場合にのみ、統計情報を制御情報に移行することができる。これにより、例えばオフセットのとりうる値が多い場合であっても、複数のオフセット値の中から適切なオフセット値のみを選択することが可能となる。
【０２６６】
このように、第２の実施の形態にかかるデータ処理装置では、要求元のアプリケーション等の識別情報を利用して複数のアルゴリズムによる演算処理の同時実行の可否を判断することができる。これにより、暗号アルゴリズムおよびハッシュアルゴリズムを要求する任意のアプリケーションに対して、複数のアルゴリズムによる演算処理を同時に実行できる演算部の効率的な利用を実現することができる。
【０２６７】
次に、第１または第２の実施の形態にかかるデータ処理装置のハードウェア構成について図３２を用いて説明する。図３２は、第１または第２の実施の形態にかかるデータ処理装置のハードウェア構成を示す説明図である。
【０２６８】
第１または第２の実施の形態にかかるデータ処理装置は、ＣＰＵ５１などの制御装置と、ＲＯＭ（Read Only Memory）５２やＲＡＭ５３などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５４と、ＨＤＤ（Hard Disk Drive）、ＣＤ（Compact Disc）ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバス６１を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【０２６９】
第１または第２の実施の形態にかかるデータ処理装置で実行されるデータ処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact Disk Recordable）、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０２７０】
また、第１または第２の実施の形態にかかるデータ処理装置で実行されるデータ処理プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１または第２の実施の形態にかかるデータ処理装置で実行されるデータ処理プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０２７１】
また、第１または第２の実施の形態のデータ処理プログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０２７２】
第１または第２の実施の形態にかかるデータ処理装置で実行されるデータ処理プログラムは、上述した各部（要求受付部、要求処理部、推定部、命令生成部、制御部）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ５１（プロセッサ）が上記記憶媒体からデータ処理プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【産業上の利用可能性】
【０２７３】
以上のように、本発明にかかるデータ処理する装置、方法およびプログラムは、暗号アルゴリズムおよびハッシュアルゴリズムなどのような複数のアルゴリズムを同時に実行可能なハードウェア演算回路を利用してデータを処理する装置、方法およびプログラムに適している。
【図面の簡単な説明】
【０２７４】
【図１】第１の実施の形態にかかる通信装置を含む通信システムの構成を示すブロック図である。
【図２】第１の実施の形態にかかる通信装置の構成を示すブロック図である。
【図３】ＳＡＤＢに記憶されたデータのデータ構造の一例を示す図表である。
【図４】ＳＰＤＢに記憶されたデータのデータ構造の一例を示す図表である。
【図５】演算処理部の詳細な構成を示すブロック図である。
【図６】制御情報のデータ構造の一例を示す図表である。
【図７】制御情報のデータ構造の一例を示す図表である。
【図８】暗号情報のデータ構造の一例を示す図表である。
【図９】ハッシュ情報のデータ構造の一例を示す図表である。
【図１０】同時実行情報のデータ構造の一例を示す図表である。
【図１１】同時実行情報のデータ構造の一例を示す図表である。
【図１２】オフセット情報のデータ構造の一例を示す図表である。
【図１３】第１の実施の形態の統計情報のデータ構造の一例を示す図表である。
【図１４】処理対象バッファの構成例を示す図である。
【図１５】第１の実施の形態におけるデータ処理の全体の流れを示すフローチャートである。
【図１６】ＥＳＰパケットのデータ構造の概略を示す説明図である。
【図１７】ＥＳＰパケットのペイロードの詳細な構成を示す説明図である。
【図１８】ＡＨパケットのデータ構造の概略を示す説明図である。
【図１９】ＡＨパケットのペイロードの詳細な構成を示す説明図である。
【図２０−１】。第１の実施の形態における演算処理の全体の流れを示すフローチャートである。
【図２０−２】。第１の実施の形態における演算処理の全体の流れを示すフローチャートである。
【図２１−１】第１の実施の形態における推定処理の全体の流れを示すフローチャートである。
【図２１−２】第１の実施の形態における推定処理の全体の流れを示すフローチャートである。
【図２２】統計情報のデータ構造の一例を示す図表である。
【図２３】統計情報のデータ構造の一例を示す図表である。
【図２４】第１の実施の形態における実行制御処理の全体の流れを示すフローチャートである。
【図２５−１】データ処理の流れを示すシーケンス図である。
【図２５−２】データ処理の流れを示すシーケンス図である。
【図２５−３】データ処理の流れを示すシーケンス図である。
【図２６−１】データ処理の流れを示すシーケンス図である。
【図２６−２】データ処理の流れを示すシーケンス図である。
【図２６−３】データ処理の流れを示すシーケンス図である。
【図２７−１】データ処理の流れを示すシーケンス図である。
【図２７−２】データ処理の流れを示すシーケンス図である。
【図２８】第２の実施の形態にかかるデータ処理装置の構成を示すブロック図である。
【図２９】演算処理部の詳細な構成を示すブロック図である。
【図３０】第２の実施の形態の統計情報のデータ構造の一例を示す図表である。
【図３１−１】第２の実施の形態における演算処理の全体の流れを示すフローチャートである。
【図３１−２】第２の実施の形態における演算処理の全体の流れを示すフローチャートである。
【図３２】第１または第２の実施の形態にかかるデータ処理装置のハードウェア構成を示す説明図である。
【符号の説明】
【０２７５】
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５４  通信Ｉ／Ｆ
６１  バス
１００  通信装置
１０１  アプリケーション
１０２  インターフェイス部
１１０  ネットワーク処理部
１２０  ＩＰｓｅｃ処理部
１３０  演算処理部
１３１  要求受付部
１３２  要求処理部
１３２ａ  制御情報判断部
１３２ｂ  保存部
１３２ｃ  実行済み判断部
１３２ｄ  出力部
１３３  推定部
１３３ａ  取得部
１３３ｂ  同時実行判断部
１３４  命令生成部
１３５  制御部
１３６  演算回路
１３７  バッファ
１３８  制御情報記憶部
１３９  統計情報記憶部
２００  通信装置
３００  ネットワーク
１４０１〜１４０５  エントリ
１６０１  ペイロード
１８０１  ペイロード
２８００  データ処理装置
２８０１  アプリケーション
２８３０  演算処理部
２８３３  推定部
２８３３ａ  取得部
２８３３ｂ  同時実行判断部
２８３９  統計情報記憶部
【図１】
2009049700.tif 000003
【図２】
2009049700.tif 000004
【図３】
2009049700.tif 000005
【図４】
2009049700.tif 000006
【図５】
2009049700.tif 000007
【図６】
2009049700.tif 000008
【図７】
2009049700.tif 000009
【図８】
2009049700.tif 000010
【図９】
2009049700.tif 000011
【図１０】
2009049700.tif 000012
【図１１】
2009049700.tif 000013
【図１２】
2009049700.tif 000014
【図１３】
2009049700.tif 000015
【図１４】
2009049700.tif 000016
【図１５】
2009049700.tif 000017
【図１６】
2009049700.tif 000018
【図１７】
2009049700.tif 000019
【図１８】
2009049700.tif 000020
【図１９】
2009049700.tif 000021
【図２０−１】
2009049700.tif 000022
【図２０−２】
2009049700.tif 000023
【図２１−１】
2009049700.tif 000024
【図２１−２】
2009049700.tif 000025
【図２２】
2009049700.tif 000026
【図２３】
2009049700.tif 000027
【図２４】
2009049700.tif 000028
【図２５−１】
2009049700.tif 000029
【図２５−２】
2009049700.tif 000030
【図２５−３】
2009049700.tif 000031
【図２６−１】
2009049700.tif 000032
【図２６−２】
2009049700.tif 000033
【図２６−３】
2009049700.tif 000034
【図２７−１】
2009049700.tif 000035
【図２７−２】
2009049700.tif 000036
【図２８】
2009049700.tif 000037
【図２９】
2009049700.tif 000038
【図３０】
2009049700.tif 000039
【図３１−１】
2009049700.tif 000040
【図３１−２】
2009049700.tif 000041
【図３２】
2009049700.tif 000042