"復号処理を行う復号処理手段と、認証処理を行う認証処理手段と、前記復号処理手段および前記認証処理手段への入出力データを処理する入出力データ処理手段を有し、前記入出力データ処理手段は、前記入出力データ処理手段への入力データから、前記認証処理手段で用いられるパラメータを算出するパラメータ算出手段と、前記パラメータ算出手段で算出されたパラメータ、あるいは、前記復号処理手段で処理されたデータから算出されたパラメータと、前記入出力データ処理手段への入力データから、前記認証処理手段への入力データを成形する入出力データ成形手段を有する暗号処理装置。前記パラメータ算出手段は、前記入出力データ処理手段への入力データを用いて、前記認証処理手段で用いるパラメータを算出し、前記入出力データ成形手段は、前記パラメータ算出手段で算出されたパラメータ、あるいは、前記入出力データ処理手段への入力データから、前記認証処理手段への入力データを成形することを特徴とする請求項1に記載の暗号処理装置。前記入出力データ成形手段は、前記復号処理手段で復号処理されたデータからパラメータを算出し、算出したパラメータと、前記入出力データ処理手段への入力データと、前記復号処理手段で処理されたデータとから、前記認証処理手段への入力データを成形する請求項1に記載の暗号処理装置。前記入出力データ成形手段は、前記入出力データ処理手段への入力データから、前記復号処理手段への入力データを成形することを特徴とする請求項1~3の何れか1項に記載の暗号処理装置。前記入出力データ成形手段は、前記認証処理手段で得られたMAC値と、前記復号処理手段で得られたMAC値と比較することを特徴とする請求項1~4の何れか1項に記載の暗号処理装置。前記パラメータ算出手段は、1パケットまたは1データグラムごとに、パラメータの算出を行うことを特徴とする請求項1~5の何れか1項に記載の暗号処理装置。さらに、前記入出力データ処理手段への入出力データの転送を制御する入出力データ転送手段を有し、前記入出力データ処理手段は、さらに、前記復号処理手段で処理されたデータ、あるいは、前記認証処理手段で処理されたデータを一時保持するための中間データ保持手段を有する特徴とする請求項1~6の何れか1項に記載の暗号処理装置。前記復号処理および認証処理は、SSL/TLSレコードプロトコル処理であることを特徴とする請求項1~7の何れか1項記載の暗号処理装置。しかしながら、特許文献1では、SSL/TLS受信処理において、認証パラメータを算出するための復号処理、ペイロードデータの復号処理と認証処理を一括してハードウエア処理できなかった。これらの処理を行うにはソフトウエア処理、ハードウエア処理の切替、ハードウエア処理の設定、ソフトウエア処理、データ転送等を順次処理する必要があり、高速化の妨げになっていた。上記課題を解決するため、データの転送回数を従来より削減し、復号処理と認証処理との並列化処理の高速化を目的とする。本発明に係る暗号処理装置は、復号処理を行う復号処理手段と、認証処理を行う認証処理手段と、前記復号処理手段および前記認証処理手段への入出力データを処理する入出力データ処理手段を有し、前記入出力データ処理手段は、前記入出力データ処理手段への入力データから、前記認証処理手段で用いられるパラメータを算出するパラメータ算出手段と、前記パラメータ算出手段で算出されたパラメータ、あるいは、前記復号処理手段で処理されたデータから算出されたパラメータと、前記入出力データ処理手段への入力データから、前記認証処理手段への入力データを成形する入出力データ成形手段を有することを特徴とする。本発明によれば、データの転送回数を従来より削減し、復号処理と認証処理との並列化処理の高速化が実現できる。[実施形態1]以下、本発明の実施形態についてSSL/TLS受信処理を説明する。ここでは、SSL/TLS受信処理として、AES-128、SHA-1の例を説明する。図1は本発明の実施形態1における暗号処理装置の構成を示した図である。同図において100は本発明に係る暗号処理装置である。暗号処理装置100は中央演算処理装置101、外部記憶装置102、暗号処理アクセラレータ103から構成される。中央演算処理装置101は暗号処理アクセラレータ103にパラメータ設定し、外部記憶装置102と暗号処理アクセラレータ103間の入出力データ転送設定を制御する。外部記憶装置102には暗号処理アクセラレータ103との間で転送される入出力データ、暗号処理アクセラレータ103に設定されるパラメータが保持されている。暗号処理アクセラレータ103はパラメータ保持設定部104、入出力データ転送部105、入出力データ処理部106、暗号化復号処理部107、認証処理部108から構成される。パラメータ保持設定部104は中央演算処理装置101によって通信暗号処理に必要なパラメータを設定され、処理が終了するまで保持されるようになっている。入出力データ転送部105は中央演算処理装置101によって設定された入出力データ転送設定に従って外部記憶装置102、入出力データ処理部106間で入出力データを転送する。入出力データ処理部106はパラメータ算出部1062、入出力データ成形部1063、中間データ保持部1064等から構成される。パラメータ算出部1062はパラメータ保持設定部104で保持されるパラメータと入出力データ成形部1063で成形される入出力データから暗号化復号処理、認証処理に必要なパラメータを算出する。そして算出されたパラメータを暗号化復号処理部107、認証処理部108に設定する。また、一部の入力データを生成し、入出力データ成形部1063に出力する。入出力データ成形部1063は暗号化復号処理部107、認証処理部108への入力データを成形し、暗号化復号処理部107、認証処理部108へ出力する。この入力データは入出力データ転送部105から転送される入力データ、中間データ保持部1064から転送される中間データ、パラメータ算出部1062の出力データから成形される。また入出力データ成形部1063は中間データ保持部1064から転送される中間データから出力データを成形し、入出力データ転送部105へ転送する。中間データ保持部1064には暗号化復号処理部107、認証処理部108からの出力データが入力し、一時保持され、入出力データ成形部へ転送される。暗号化復号処理部107にはパラメータ算出部1062から暗号化復号処理に必要なパラメータが設定され、入出力データ成形部1063から成形処理された入力データが入力する。そして入力データを暗号化復号処理したデータを中間データ保持部1064に出力する。認証処理部108にはパラメータ算出部1062から認証処理に必要なパラメータが設定され、入出力データ成形部1063から成形処理された入力データが入力する。そして認証処理の中間データを内部で保持するとともに、出力データを入出力データ処理部106の中間データ保持部1064に出力する。出力データはここでは認証処理の1ブロック毎の処理終了信号であるが、前記中間データを出力してもよい。暗号処理アクセラレータ103は設定に従って処理を行い、暗号化復号処理されたデータおよび認証処理結果は外部記憶装置102に転送され、処理の終了を中央演算処理装置101へ通知する。次にSSL/TLS受信処理において暗号化復号処理部107に入力するデータについて説明する。図2は、SSL/TLS受信処理における受信データのフォーマットを示した図である。図2において、Compressedfragment、MAC値、paddingdata、CipherText.paddinglengthの各フィールドのデータは送信側で連結され、AES-128で暗号化されている。この暗号化されたデータがSSL/TLS受信処理において暗号化復号処理部107で復号処理される。ここで、Type、Version、CipherText.lengthは、ヘッダ部分に相当する。TypeはSSL/TLSのペイロードデータに格納されているデータの種類、VersionはSSL/TLSのバージョン、CipherText.lengthは暗号化されているデータのデータ長である。Compressedfragmentは、コンテンツデータ、MAC値は、改竄検知のための認証コードである。paddingdataは暗号化対象データをAES-128のブロックサイズの整数倍にするために付加されるデータである。CipherText.paddinglengthはCipher_Text.paddinglengthフィールドを含めたpaddingdataのデータ長である。尚、図2のフォーマットに沿った暗号化データは、パケット、あるいはデータグラムの暗号化処理単位ごとに生成され、この暗号化処理単位ごとに、復号処理が実行される。次にSSL/TLS受信処理において認証処理部108に入力するデータについて説明する。図3は本実施形態における認証処理部108の入力データを示した図である。図3において、KXORipadはSSL/TLSプロトコルで通信する双方で共有するMAC書き込みシークレットの後に0x00を付加して64バイトにしたものとipadの排他的論理和である。Sequencenumberは送信側ではデータの送出毎に、受信側ではデータの受信毎にデータのバイト数を加えて更新されるカウンタ値である。KXORipadとSequencenumberについては図2で示した受信データそのものに含まれていない。そのため、中央演算処理装置101が、KとSequencenumberを、パラメータ保持設定部104に設定し、そして、パラメータ算出部1062に送られる。パラメータ算出部1062は、Kと保持しているipadから、KXORipadを算出する。算出されたKXORipadと、Sequencenumberを入出力データ成形部1063に送られる。そして、認証処理部108への入力データとして図2で示した受信データに先行して、KXORipadとSequencenumberが連結される。これに続いて、受信データから暗号化されていないType、Versionの各データが入出力データ成形部1063で連結される。受信データではその後にCipherText.lengthが続くが認証処理においては、CipherText.lengthを式1により算出されたCompressed.lengthに置き換える必要がある。Compressed.length=CipherText.length-CipherSpec.mac_size-CipherText.padding_length1式1ここでCipherText.length,CipherSpec.mac_size,CipherText.padding_length1はRFC2104に規定されており、図2に示されるような関係にある。CipherText.lengthは、暗号化されているデータのデータ長、CipherSpec.mac_sizeは、MAC値のデータ長、CipherText.padding_lengthは、パディングデータのデータ長である。さらに復号処理により得られたCompressedfragmentを入出力データ成形部1063で連結し、paddingdataを入出力データ成形部1063で付加したものが、図3Aである。Compressedfragmentとpaddingdataは、暗号化復号処理部107における復号処理で得られる。そして、図3Aのデータから、ハッシュ値を認証処理部108で求める。次にSSL/TLSプロトコルで通信する双方で共有するMAC書き込みシークレットの後に0x00を付加して64バイトにしたものとopadの排他的論理和であるKXORopadと上記算出されたハッシュ値を入出力データ成形部1063で連結する。算出されたハッシュ値は、図3BのHashValueに相当する。尚、KXORopadは、パラメータ算出部1062において、パラメータ保持設定部104から受け取ったKと保持しているopadから、KXORopadを算出し、その後、入出力データ成形部1063に送られる。復号処理されたPaddingdataを入出力データ成形部1063で付加したものが、図3Bである。図3Bのデータを認証処理部108に入力し、最終的なMAC値を認証処理部108で算出する。図4は、SSL/TLS受信処理において復号処理の対象となるデータグラムを示した図である。図4Aは、図2と同じであり、SSL/TLS受信処理における受信データに相当する。図4Bは、暗号処理アクセラレータ103への入力データであり、図4Aに示した受信データの先頭部分に、暗号化データの最終2ブロックを連結したデータである。復号処理は、暗号化復号処理部107で、16バイト単位で処理される。図4Bに示した入力データの先頭に連結された暗号化データの最終2ブロックのうち、最後のブロックCEは復号処理の被処理データとして、最後から2番目のブロックCE2はブロックCEの復号処理のイニシャルベクタとして用いられる。図5は実施形態1におけるSSL/TLS受信処理の先頭部分の処理フローを示した図である。ステップS401において中央演算処理装置101は暗号処理アクセラレータ103の動作に必要なパラメータをパラメータ保持設定部104に設定する。ステップS402においてパラメータ保持設定部104は設定されたパラメータを保持するとともにパラメータ算出部1062に転送する。ステップS403においてパラメータ算出部1062は転送されたパラメータのうち、Kを用いて、KXORipadとKXORopadを算出する。算出したKXORipadと受け取ったSequenceNumberを入出力データ成形部1063に転送する。尚、ステップS401、ステップS402、ステップS403と、後述するステップS426のパラメータに関する処理は、暗号処理単位であるパケット、あるいはデータグラムごとに実行される。ステップS404において、入出力データ成形部1063は、転送されたKXORipadとSequenceNumberから認証処理部108の入力データであるブロックH0を成形し、認証処理部108へ出力する。本実施形態では認証処理部108においてハッシュ関数SHA-1の処理を行うので入力データは64バイト単位となり、入力データであるブロックH0は、図3のKXORipadとなる。KXORipadは送受信されるデータに先行して送信側受信側双方で共有している情報から算出可能であるため、入力する受信データが64バイトに達する前に認証処理部108での認証処理が開始できる。ステップS405において認証処理部108は図3に示した認証処理の対象となるデータの最初のブロックであるブロックH0に対してハッシュ値算出処理を行う。なお、認証処理部108は、ブロックH0に対する処理が終了すると中間値を内部に保持し、次のブロックであるブロックH1の処理における初期値として使用する。この中間値は1ブロックの処理が終了するたびに認証処理部108内部で保持され、対象となる全データに対する認証処理が終了するまで中間データ保持部1064に出力する必要はない。ここで、ブロックHmは、図3Aのデータを、64バイト単位で分割したブロックのうち、m1番目のブロックである。また、ブロックHEは、図3Aのデータを、64バイト単位で分割したブロックのうちの最後のブロックである。一方、ステップS406において中央演算処理装置101は入出力データ転送部105と外部記憶装置102間の入出力データ転送設定を入出力データ転送部105に設定する。ステップS407において入出力データ転送部105は外部記憶装置102から入出力データ転送部105への図4Bに示した入力データの転送を開始する。本実施例では暗号モードがCBCモードであるのでイニシャルベクタがパラメータとして設定されるが、CTRモードであればカウンタ値がパラメータとして設定される。ステップS426において、パラメータ算出部1062は、入力データからブロックCE2を抽出し、イニシャルベクタとして暗号処理部107に転送する。ステップS408において入出力データ成形部1063は入力データからブロックCEを成形し、暗号化復号処理部107に転送する。ここで、ブロックCnは、図2で、暗号化されているデータを、16バイト単位で分割したブロックのうち、n1番目のブロックである。また、ブロックCEは、図2で、暗号化されているデータを、16バイト単位で分割したブロックのうちの最後のブロックである。ここで、図2、暗号化されているデータは、Compressedfragment、Paddingdata、MAC値、CipherText.paddinglengthである。上述したように図3で示した認証処理部108への入力データの成形にあたっては受信データのCipherText.lengthをCompressed.lengthに置き換える必要がある。この際、入出力データ成形部1063での成形処理にCipherText.padding_length1が必要となる。そのため、受信データの暗号化された部分から先行してCipherText.padding_length1を含むブロックの復号処理を行う。SSL/TLSの規格上上記CipherText.padding_length1を含むブロックは受信データの最後のブロックであるため、暗号化復号処理部107で行う復号処理の最初のブロックは受信データの最後のブロックCEになる。ステップS409において暗号化復号処理部107はブロックCEに対する復号処理を行い、ブロックCEを平文化復号処理したブロックPEを中間データ保持部1064に出力する。ここで、ブロックPnは、ブロックCnを復号処理されたブロックである。ステップS410において中間データ保持部1064は入出力データ成形部1063にブロックPEを転送する。ステップS427において、入出力データ成形部1063はブロックPEからCipherText.padding_lengthを抽出し、上述した式1によりパラメータであるCompressed.lengthを算出する。他のパラメータCipherText.lengthは受信データに平文として埋め込まれており、パラメータとしてパラメータ保持設定部104に設定される。また、CipherSpec.mac_sizeは認証処理部108で選択された認証アルゴリズムによって決まる固定値である。なお、ブロックPEはここでは上記Compressed.lengthを算出するためにのみ使用しているので入出力データ転送部105を介して外部記憶装置102に転送していないが、暗号化されたデータの復号処理の最後にもう一度読み込む必要がある。ステップ410において外部記憶装置102に転送することにより再度最後のブロックの復号処理を省略することもできるが後述するようにトータルの処理時間は短縮できない。ステップS428においてパラメータ算出部1062はパラメータ保持設定部104から転送されたイニシャルベクタを暗号化復号処理部107に転送する。ステップS411において入出力データ成形部1063は入力データからブロックC0を成形し、暗号処理部107に転送する。ここでブロックC0は、暗号化されているデータを、16バイト単位で分割したブロックのうちの最初のブロックである。ステップS412において暗号化復号処理部107はブロックC0に対する復号処理を行い、ブロックC0を平文化復号処理したブロックP0を中間データ保持部1064に出力する。また、ステップS428で設定されたイニシャルベクタをブロックC0に置き換え、内部で保持する。ステップS413において中間データ保持部1064は入出力データ成形部1063および入出力データ転送部105にブロックP0を転送する。ステップS414において入出力データ転送部105は外部記憶装置102にブロックP0を転送する。ステップS415において入出力データ成形部1063は入力データからブロックC1を成形し、暗号処理部107に転送する。ここでブロックC1は、図2で、暗号化されているデータを、16バイト単位で分割したブロックのうち、2番目のブロックである。ステップS416、ステップS417、ステップS418においてブロックC0と同様の手順で、ブロックC1を成形/転送、復号処理し、平文化復号処理したブロックP1を外部記憶装置102に転送する。ステップS419、ステップS420、ステップS421、ステップS422においても、ブロックC0と同様の手順で、ブロックC2を成形/転送、復号処理し、平文化復号処理したブロックP2を外部記憶装置102に転送する。また、ブロックC3、C4、についても同様の手順で復号処理を行ない、平文化復号処理したブロックP3、P4、を外部記憶装置102に転送する。この間、ブロックC3、C4、を含む入力データを外部記憶装置102から入出力データ転送部105に転送する必要があるが、図5においては省略し、明示していない。入出力データ転送部105、入出力データ成形部1063などが一時保持できればまとめてバースト転送してもよいし、平文化復号処理したブロックを外部記憶装置102に転送するたびに外部記憶装置102から転送してもよい。一方、ステップS405において認証処理部108がブロックH0に対するハッシュ値算出処理を終えると中間データ保持部1064に対してブロックH0処理終了信号を出力する。ステップS423において中間データ保持部1064は入出力データ成形部1063に対してブロックH0処理終了信号を転送する。ステップS424において、入出力データ成形部1063は、ブロックH1を成形する。ブロックH1は、入出力データ転送部105から受け取ったTypeとVersionと、ステップS427で算出したCompressed.lengthと、暗号化復号処理部107で復号されたfragmentとから成形される。そして、成形したブロックH1を、認証処理部108に転送する。ステップS425において認証処理部108はブロックH0に対するハッシュ値算出処理を行った結果得られた中間値を初期値としてブロックH1に対してハッシュ値算出処理を行う。そして、処理中のパケット、あるいはデータグラムのデータがなくなるまで、ブロックCn成形/転送処理、ブロックCn復号処理、ブロックPn転送処理、ブロックHm認証処理を繰り返す。本実施形態では暗号化復号処理アルゴリズムとしてCBCモードのAES-128、認証処理アルゴリズムとしてHMAC-SHA-1の組み合わせが選択された場合を想定している。AES-128は128ビットの入力データを11ラウンド、SHA-1は512ビットの入力データを80ステップでそれぞれ処理するアルゴリズムである。SSL/TLSでは送受信する被処理データに対し、暗号化復号処理と認証処理の両方を行う必要がある。これらを並列処理する場合、SHA-1が1ブロックの処理に要する時間が、AES-128が1ブロックの処理に要する時間の4倍より大きければ、SHA-1の処理速度がSSL/TLSレコードプロトコル処理のスループットを決める支配要因になる。一方、SHA-1が1ブロックの処理に要する時間が、AES-128が1ブロックの処理に要する時間の4倍より小さければ、AES-128の処理速度がSSL/TLSレコードプロトコル処理のスループットを決める支配要因になる。ここではハードウエアでAES-128を1ラウンド/クロックサイクル、SHA-1を2ステップ/クロックサイクルで処理すると想定し、ほぼ同等の処理速度を想定している。図6は本実施形態におけるSSL/TLS受信処理の最後の部分の処理フローを示した図である。ステップS512において処理中のパケット、あるいはデータグラムの入力データがなくなると、入出力データ転送部105は外部記憶装置102から入出力データ転送部105への入力データの転送を終了する。ステップS513のブロックCE復号処理は、図4のステップ409と同様の処理である。ステップS514のブロックPE転送処理は、図4のステップ410と同様の処理である。ステップS501において入出力データ転送部105は復号処理した最後のブロックPEを外部記憶装置102に転送する。ステップS502において認証処理部108は最後のブロックであるブロックHEに対するハッシュ値算出処理を行ない、算出したハッシュ値を中間データ保持部1064へ転送する。ステップS503において中間データ保持部1064はハッシュ値を入出力データ成形部1063に転送し、入出力データ成形部1063はハッシュ値を保持しておく。ここで、ハッシュ値は、図3BにおけるHashValueに相当する。ステップS504において入出力データ成形部1063はブロックM0を成形し、認証処理部108に転送する。ここで、ブロックM0は、図3BにおけるKXORopadの部分である。ステップS505において認証処理部108はブロックM0に対するハッシュ値算出処理を行ない、中間データ保持部1064に対してブロックM0処理終了信号を出力する。ステップS506において中間データ保持部1064は入出力データ成形部1063に対してブロックM0処理終了信号を転送する。ステップS507において入出力データ成形部1063は、認証処理部108で算出したハッシュ値と、暗号化復号処理部107で復号されたPaddingdataとから、ブロックM1を成形し、認証処理部108に転送する。ここで、ブロックM1は、図3BにおけるHashValueおよびPaddingdataの部分である。ステップS508において認証処理部108はブロックM1に対するハッシュ値算出処理を行ない、算出したMAC値を中間データ保持部1064へ転送する。ステップS509において中間データ保持部1064はMAC値を入出力データ成形部1063に転送する。ステップS510において、入出力データ成形部1063は、認証処理部108で算出されたMAC値が復号処理して得られたMAC値と一致するか比較を行う。また、算出したMAC値およびMAC値の比較結果を入出力データ転送部105に転送する。ステップS511において、入出力データ転送部105はMAC値およびMAC値の比較結果を外部記憶装置102に転送する。図5と図6のフローチャートは、ある1つの暗号化処理単位のデータについての処理であり、受信した暗号化データを復号処理認証処理する場合は、図5と図6のフローチャートを、暗号化処理単位ごとに処理される。以上説明したようにSSL/TLS受信処理の設定に従って、暗号化復号処理および認証処理に必要なパラメータの算出、設定と入力データの成形を行う入出力データ処理をハードウエアで行っている。そのため、ハードウエア、ソフトウエア間の切替が不要な一括処理が可能になった。また、復号処理、認証処理を並列化し、データ転送回数も削減することができたため、SSL/TLS受信処理の処理速度を向上させることができた。本実施形態によれば、通信暗号処理に必要な設定を行い、その後、入力データを一度入力することでハードウエアが一連の通信暗号処理に必要なパラメータの算出、入出力データの成形を行っている。このためハードウエア処理、ソフトウエア処理の切替によるオーバーヘッドがなくなり、データの転送回数が従来より削減される。また、暗号化復号処理と認証処理を並列化するだけでなく暗号、認証アルゴリズムに応じて最適な順序で処理でき、通信暗号処理全体のスループットを向上させることができる。また、本実施形態によれば、処理中の暗号化処理単位の通信暗号処理を行う際に、一度だけ必要な設定を行い、入力データを入力すれば良いので従来必要であった復号されたデータを保持する記憶容量が必要なくなる。結果として、メモリコストを削減出来る。なお、本実施形態においては暗号アルゴリズムとしてCBCモードのAES-128を例にしたが、CTRモードにおいてもIVの代わりにCTR初期値をパラメータとして設定して同様の動作が実現できる。また認証アルゴリズムとしてHMAC-SHA-1を例にしたが、SHA-1の代わりにMD5、SHA-256などを使った場合でも適用可能である。MD5、SHA-256などを使った場合に得られるハッシュ値のデータサイズがそれぞれ16バイト、32バイトとなる点が異なるが、入力データのブロックサイズはSHA-1の場合と同様に64バイトであるので本実施例と同様の処理が実現できる。"