(57)【特許請求の範囲】
【請求項１】
受信パケットのパケットデータの入力を受け、受信パケットがＩＰｓｅｃパケットであるか否かを判断する前置処理部と、
前記前置処理部によりＩＰｓｅｃパケットであると判断され、出力された前記パケットデータを蓄積する第１のバッファと、
前記第１のバッファからパケットデータの入力を受け、前記ＩＰｓｅｃパケットが認証処理対象である場合に、ＩＰｓｅｃパケット内のＩＣＶにより認証を行い、パケットデータと認証の成功・失敗の判定結果を示すデータとを出力する認証処理部と、
前記認証処理部により出力されたパケットデータと認証の成功・失敗の判定結果を示すデータとを蓄積する第２のバッファと、
前記第２のバッファからパケットデータと認証の成功・失敗の判定結果を示すデータとの入力を受け、前記認証の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記認証の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力する第１の不正パケット破棄部と、
前記第１の不正パケット破棄部からパケットデータの入力を受け、前記ＩＰｓｅｃパケットにＩＰデータが暗号化されてカプセル化されている場合に、該パケットデータ内の暗号化データを復号してＩＰパケットを取得し、この復号したＩＰパケットが設定されたパケットデータと復号の成功・失敗の判定結果を示すデータとを出力する復号処理部と、
前記復号処理部により出力されたパケットデータと復号の成功・失敗の判定結果を示すデータとを蓄積する第３のバッファと、
前記第３のバッファからパケットデータと復号の成功・失敗の判定結果を示すデータとの入力を受け、前記復号の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記復号の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力する第２の不正パケット破棄部と、
前記第２の不正パケット破棄部からパケットデータの入力を受け、該パケットデータを基にデカプセル化したＩＰパケットのデータを生成して出力する後置処理部とを備え、
前記第１のバッファ、前記第２のバッファ、及び、前記第３のバッファはファースト・イン・ファースト・アウトのバッファであり、
前記第２のバッファ及び前記第３のバッファは、少なくとも１個のパケットデータが格納可能であり、かつ、パケットデータの入力が完了した後にこのパケットデータを出力するストア型のバッファである、
ことを特徴とするＩＰｓｅｃ回路。
【請求項２】
中間鍵を保持するメモリと、
ＣＰＵから出力された認証鍵を基に中間鍵を生成して前記メモリに書き込む認証用中間鍵生成部とをさらに備え、
前記認証処理部は、
前記パケットデータから抽出したデータと、前記メモリから読み出した中間鍵とを用いてＩＣＶを算出するＩＣＶ算出部を備えており、
前記ＩＣＶ算出部が算出したＩＣＶと、前記パケットデータ内のＩＣＶとを比較して認証を行う、
ことを特徴とする請求項１に記載のＩＰｓｅｃ回路。
【請求項３】
前記中間鍵は、入力中間鍵及び出力中間鍵からなり、
前記ＩＣＶ算出部は、
前記パケットデータから抽出したデータと、入力中間鍵とを用いてハッシュ値を算出する主ハッシュ演算部と、
主ハッシュ演算部が算出したハッシュ値と、出力中間鍵とを用いてハッシュ値を算出し、算出したハッシュ値からＩＣＶを生成する副ハッシュ演算部とを備え、
前記主ハッシュ演算部及び前記副ハッシュ演算部は、
１クロックでダブル演算対象データを用いた所定の演算を行ない、この演算の結果を次のクロックにおける新たなダブル演算対象データとするダブル演算関数処理部と、
１クロックでハッシュ値演算対象データと、前記ダブル演算関数処理部の演算結果とを用いて所定の演算を行い、この演算の結果を新たなハッシュ値演算対象データとするハッシュ値演算関数処理部とを備え、
前記主ハッシュ演算部は、前記パケットデータから抽出したデータを前記ダブル演算対象データの初期値、前記入力中間鍵を前記ハッシュ値演算対象データの初期値とし、
前記副ハッシュ演算部は、前記主ハッシュ演算部が算出したハッシュ値を前記ダブル演算対象データの初期値、前記出力中間鍵を前記ハッシュ値演算対象データの初期値とし、
前記ダブル演算関数処理部及び前記ハッシュ値演算関数処理部は、１クロックにおいて同時に演算を行ない、所定クロック数だけ演算を行なった結果の前記ハッシュ値演算対象データをハッシュ値として出力する、
ことを特徴とする請求項２に記載のＩＰｓｅｃ回路。
【請求項４】
ＩＰｓｅｃ回路に用いられるＩＰｓｅｃ処理方法であって、
前置処理部が、受信パケットのパケットデータの入力を受け、受信パケットがＩＰｓｅｃパケットであるか否かを判断し、
第１のバッファが、前記前置処理部によりＩＰｓｅｃパケットであると判断され、出力された前記パケットデータを蓄積し、
認証処理部が、前記第１のバッファからパケットデータの入力を受け、前記ＩＰｓｅｃパケットが認証処理対象である場合に、ＩＰｓｅｃパケット内のＩＣＶにより認証を行い、パケットデータと認証の成功・失敗の判定結果を示すデータとを出力し、
第２のバッファが、前記認証処理部により出力されたパケットデータと認証の成功・失敗の判定結果を示すデータとを蓄積し、
第１の不正パケット破棄部が、前記第２のバッファからパケットデータと認証の成功・失敗の判定結果を示すデータとの入力を受け、前記認証の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記認証の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力し、
復号処理部が、前記第１の不正パケット破棄部からパケットデータの入力を受け、前記ＩＰｓｅｃパケットにＩＰデータが暗号化されてカプセル化されている場合に、該パケットデータ内の暗号化データを復号してＩＰパケットを取得し、この復号したＩＰパケットが設定されたパケットデータと復号の成功・失敗の判定結果を示すデータとを出力し、
第３のバッファが、前記復号処理部により出力されたパケットデータと復号の成功・失敗の判定結果を示すデータとを蓄積し、
第２の不正パケット破棄部が、前記第３のバッファからパケットデータと復号の成功・失敗の判定結果を示すデータとの入力を受け、前記復号の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記復号の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力し、
後置処理部が、前記第２の不正パケット破棄部からパケットデータの入力を受け、該パケットデータを基にデカプセル化したＩＰパケットのデータを生成して出力することを特徴とし、
前記第１のバッファ、前記第２のバッファ、及び、前記第３のバッファはファースト・イン・ファースト・アウトのバッファであり、
前記第２のバッファ及び前記第３のバッファは、少なくとも１個のパケットデータが格納可能であり、かつ、パケットデータの入力が完了した後にこのパケットデータを出力するストア型のバッファである、
ことを特徴とするＩＰｓｅｃ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＰｓｅｃパケットの送受信処理を行うＩＰｓｅｃ回路及びＩＰｓｅｃ処理方法に関する。
【背景技術】
【０００２】
近年、ＩＰ（Internet Protocol）通信を安全に行うために、ＩＰパケットの認証・暗号化を行うＩＰｓｅｃ（Security Architecture for Internet Protocol）が使用されている。ＩＰｓｅｃの信号を送受信するための従来のＩＰｓｅｃ回路は、ＣＰＵ（central processing unit）、外部インタフェース、メモリ、暗号・復号、署名・認証の各ブロックから生成され、各ブロック間は、バスを介して接続されている（例えば、非特許文献１参照）。この従来のＩＰｓｅｃ回路において、外部インタフェースから入力されたパケットデータは、バスを介して各ブロック間で複数回転送されてＩＰパケットのデカプセル化やカプセル化が行われ、外部インタフェースから出力される。
【非特許文献１】富士通株式会社、“ネットワークに接続されたホームエレクトロニクス製品のためのセキュリティ機能を備えたシングル−チップシステムＬＳＩ（Single-Chip System LSI Equipped with Security Function for Network-Connected Home Electronics Appliances）”、[online]、[平成１７年８月１２日]、インターネット＜ＵＲＬ：http://edevice.fujitsu.com/fj/MARCOM/find/22-3e/pdf/3.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述した従来のＩＰｓｅｃ回路では、ＩＰｓｅｃ処理を高速に行うためには、暗号・復号や署名・認証のワイヤードロジックで組まれたブロックの高速化のみならず、各ブロック間を接続するうバスの広帯域化が必要となり、かつ、各ブロック間のバス使用を調停するＣＰＵの高性能化が必要となる。このため、高速のＩＰｓｅｃ回路は、極めて高価になるという問題があった。
【０００４】
本発明は、上記問題を解決するためになされたもので、その目的は、安価に高速なＩＰｓｅｃパケットの送受信処理を行うことができるＩＰｓｅｃ回路及びＩＰｓｅｃ処理方法を提供することにある。
【課題を解決するための手段】
【０００５】
上記問題を解決するために、本発明は、受信パケットのパケットデータの入力を受け、受信パケットがＩＰｓｅｃパケットであるか否かを判断する前置処理部と、前記前置処理部によりＩＰｓｅｃパケットであると判断され、出力された前記パケットデータを蓄積する第１のバッファと、前記第１のバッファからパケットデータの入力を受け、前記ＩＰｓｅｃパケットが認証処理対象である場合に、ＩＰｓｅｃパケット内のＩＣＶにより認証を行い、パケットデータと認証の成功・失敗の判定結果を示すデータとを出力する認証処理部と、前記認証処理部により出力されたパケットデータと認証の成功・失敗の判定結果を示すデータとを蓄積する第２のバッファと、前記第２のバッファからパケットデータと認証の成功・失敗の判定結果を示すデータとの入力を受け、前記認証の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記認証の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力する第１の不正パケット破棄部と、前記第１の不正パケット破棄部からパケットデータの入力を受け、前記ＩＰｓｅｃパケットにＩＰデータが暗号化されてカプセル化されている場合に、該パケットデータ内の暗号化データを復号してＩＰパケットを取得し、この復号したＩＰパケットが設定されたパケットデータと復号の成功・失敗の判定結果を示すデータとを出力する復号処理部と、前記復号処理部により出力されたパケットデータと復号の成功・失敗の判定結果を示すデータとを蓄積する第３のバッファと、前記第３のバッファからパケットデータと復号の成功・失敗の判定結果を示すデータとの入力を受け、前記復号の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記復号の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力する第２の不正パケット破棄部と、前記第２の不正パケット破棄部からパケットデータの入力を受け、該パケットデータを基にデカプセル化したＩＰパケットのデータを生成して出力する後置処理部とを備え、前記第１のバッファ、前記第２のバッファ、及び、前記第３のバッファはファースト・イン・ファースト・アウトのバッファであり、前記第２のバッファ及び前記第３のバッファは、少なくとも１個のパケットデータが格納可能であり、かつ、パケットデータの入力が完了した後にこのパケットデータを出力するストア型のバッファである、ことを特徴とするＩＰｓｅｃ回路である。
【０００６】
また、本発明は、上述するＩＰｓｅｃ回路であって、中間鍵を保持するメモリと、ＣＰＵから出力された認証鍵を基に中間鍵を生成して前記メモリに書き込む認証用中間鍵生成部とをさらに備え、前記認証処理部は、前記パケットデータから抽出したデータと、前記メモリから読み出した中間鍵とを用いてＩＣＶを算出するＩＣＶ算出部を備えており、前記ＩＣＶ算出部が算出したＩＣＶと、前記パケットデータ内のＩＣＶとを比較して認証を行う、ことを特徴とする。
【０００９】
また、本発明は、上述するＩＰｓｅｃ回路であって、前記中間鍵は、入力中間鍵及び出力中間鍵からなり、前記ＩＣＶ算出部は、前記パケットデータから抽出したデータと、入力中間鍵とを用いてハッシュ値を算出する主ハッシュ演算部と、主ハッシュ演算部が算出したハッシュ値と、出力中間鍵とを用いてハッシュ値を算出し、算出したハッシュ値からＩＣＶを生成する副ハッシュ演算部とを備え、前記主ハッシュ演算部及び前記副ハッシュ演算部は、１クロックでダブル演算対象データを用いた所定の演算を行ない、この演算の結果を次のクロックにおける新たなダブル演算対象データとするダブル演算関数処理部と、１クロックでハッシュ値演算対象データと、前記ダブル演算関数処理部の演算結果とを用いて所定の演算を行い、この演算の結果を新たなハッシュ値演算対象データとするハッシュ値演算関数処理部とを備え、前記主ハッシュ演算部は、前記パケットデータから抽出したデータを前記ダブル演算対象データの初期値、前記入力中間鍵を前記ハッシュ値演算対象データの初期値とし、前記副ハッシュ演算部は、前記主ハッシュ演算部が算出したハッシュ値を前記ダブル演算対象データの初期値、前記出力中間鍵を前記ハッシュ値演算対象データの初期値とし、前記ダブル演算関数処理部及び前記ハッシュ値演算関数処理部は、１クロックにおいて同時に演算を行ない、所定クロック数だけ演算を行なった結果の前記ハッシュ値演算対象データをハッシュ値として出力する、ことを特徴とする。
【００１１】
また、本発明は、ＩＰｓｅｃ回路に用いられるＩＰｓｅｃ処理方法であって、前置処理部が、受信パケットのパケットデータの入力を受け、受信パケットがＩＰｓｅｃパケットであるか否かを判断し、第１のバッファが、前記前置処理部によりＩＰｓｅｃパケットであると判断され、出力された前記パケットデータを蓄積し、認証処理部が、前記第１のバッファからパケットデータの入力を受け、前記ＩＰｓｅｃパケットが認証処理対象である場合に、ＩＰｓｅｃパケット内のＩＣＶにより認証を行い、パケットデータと認証の成功・失敗の判定結果を示すデータとを出力し、第２のバッファが、前記認証処理部により出力されたパケットデータと認証の成功・失敗の判定結果を示すデータとを蓄積し、第１の不正パケット破棄部が、前記第２のバッファからパケットデータと認証の成功・失敗の判定結果を示すデータとの入力を受け、前記認証の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記認証の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力し、復号処理部が、前記第１の不正パケット破棄部からパケットデータの入力を受け、前記ＩＰｓｅｃパケットにＩＰデータが暗号化されてカプセル化されている場合に、該パケットデータ内の暗号化データを復号してＩＰパケットを取得し、この復号したＩＰパケットが設定されたパケットデータと復号の成功・失敗の判定結果を示すデータとを出力し、第３のバッファが、前記復号処理部により出力されたパケットデータと復号の成功・失敗の判定結果を示すデータとを蓄積し、第２の不正パケット破棄部が、前記第３のバッファからパケットデータと復号の成功・失敗の判定結果を示すデータとの入力を受け、前記復号の成功・失敗の判定結果を示すデータが失敗を示しているとき、前記パケットデータを破棄し、前記復号の成功・失敗の判定結果を示すデータが成功を示しているとき、前記パケットデータを出力し、後置処理部が、前記第２の不正パケット破棄部からパケットデータの入力を受け、該パケットデータを基にデカプセル化したＩＰパケットのデータを生成して出力することを特徴とし、前記第１のバッファ、前記第２のバッファ、及び、前記第３のバッファはファースト・イン・ファースト・アウトのバッファであり、前記第２のバッファ及び前記第３のバッファは、少なくとも１個のパケットデータが格納可能であり、かつ、パケットデータの入力が完了した後にこのパケットデータを出力するストア型のバッファである、ことを特徴とするＩＰｓｅｃ処理方法である。
【発明の効果】
【００１３】
この発明によれば、ワイヤードロジックにより構成され、安価で、かつ、高速のＩＰｓｅｃ処理を行うＩＰｓｅｃ回路を実現することが可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態を図面を参照して説明する。
【００１５】
まず最初にＩＰｓｅｃ（Security Architecture for Internet Protocol）について説明する。図８は、ＩＰｓｅｃパケットの構成を説明するための図である。ＩＰｓｅｃには、トンネルモードとトランスポートモードがあるが、ここでは、トンネルモードについてのみ説明する。
なお、本明細書においては、ＯＳＩ（Open Systems Interconnection）参照モデルの第２層にあたるデータリンク層において送受信されるデータをフレームと記載し、第３層において送受信されるデータ、すなわちフレームからＭＡＣ（Media Access Control）ヘッダやＶＬＡＮ（Virtual Local Area Network）ヘッダを除いたものをパケットと記載する。例えば、ＩＰパケットは、ＩＰヘッダ及びＩＰデータからなる。
【００１６】
ＩＰｓｅｃは、ＩＰにＥＳＰ（Encapsulating Security Payload）などのプロトコルを追加して構成される。送受信データを暗号化する場合、トンネルモードのＩＰｓｅｃでは、ＩＰパケット７１０を暗号化して暗号化パケット７２０を生成し、トレーラ７３０を付加する。さらに、新たなＩＰヘッダ７４０及びＩＰｓｅｃヘッダ７５０を付加して、暗号化パケット７２０及びトレーラ７３０がカプセル化されたＩＰｓｅｃパケットを生成する。ここでは、ＩＰｓｅｃパケットに設定される新たなＩＰヘッダ７４０を外側ＩＰヘッダとよぶ。ＥＳＰを用いる場合、ＩＰｓｅｃヘッダ７５０にはＥＳＰヘッダが用いられる。ＥＳＰヘッダは、ＳＰＩ（セキュリティパラメータインデックス）７５１と、シーケンス番号７５２からなる。ＳＰＩ７５１は、ＩＰｓｅｃにおける論理的なコネクションであるＳＡ（セキュリティアソシエーション）を管理するＳＡＤ（セキュリティアソシエーションデータベース）の検索に用いられる値を示す。また、シーケンス番号７５２は、パケットの順番を示す。
【００１７】
暗号化に用いられるアルゴリズムには、ＮＵＬＬ暗号アルゴリズム（暗号化機能を使用しない）、ＣＢＣ−ＡＥＳ（Cipher Block Chaining - Advanced Encryption Standard）などがある。ＣＢＣ−ＡＥＳを使用する場合、次の暗号化に用いるための情報であるＩＶ（初期ベクトル）７６０がＩＰｓｅｃヘッダ（ＥＳＰヘッダ）７５０と暗号化パケット７２０との間に設定される。また、暗号化パケット７２０を生成する際は、ＩＰパケット７１０にパディング７２１を付加して暗号化する。パディング７２１の長さは、生成された暗号化パケット７２０とトレーラ７３０を合わせた長さが、所定のバイト数の整数倍となるように決められる。トレーラ７３０は、パディング長７３１と、次ヘッダ７３２を含むデータであり、ＮＵＬＬ暗号アルゴリズム以外では暗号化される。パディング長７３１とは、暗号化パケット７２０を生成する際にＩＰパケット７１０に行ったパディング７２１の長さを示す。また、次ヘッダ７３２とは、パケット内でＩＰｓｅｃヘッダ（ＥＳＰヘッダ）７５０の次に来るヘッダのプロトコルを示し、同図においては、トンネルモードであるのでＩＰを示す値が設定される。認証を行う場合は、認証データであるＩＣＶ（Integrity Check Value）７７０がトレーラ７３０の後ろに付加される。
【００１８】
図１は、本発明の一実施の形態によるＩＰｓｅｃ回路としてのＩＰｓｅｃ部２１０を備えた通信装置１００の構成を示す図である。
本実施の形態で送受信するＩＰｓｅｃは、ＩＰｖ６によるトンネルモードのＥＳＰを使用する。
【００１９】
同図において、通信装置１００は、ＧＭＩＩ（Gigabit Medium Independent Interface）やＭＩＩ(Medium Independent Interface)の規格のインタフェースを介してＷＡＮに接続する物理Ｉ／Ｆ（Interface）５００及びＬＡＮに接続する物理Ｉ／Ｆ５０１と接続し、ＬＡＮ側から送信されるパケットをＷＡＮ側へ転送し、また、ＷＡＮ側から送信されるパケットをＬＡＮ側へ転送する。本実施形態の通信装置１００では、ＯＳＩの第３層にあたるネットワーク層では、ＩＰｖ４あるいはＩＰｖ６のパケットの送受信を行い、ＯＳＩの第２層にあたるデータリンク層では、イーサネット（登録商標）のフレームの送受信を行う。
【００２０】
通信装置１００は、転送処理の高速化を図るため半導体素子で構成される通信処理回路２００と、ＣＰＵ４００と、ＤＤＲ−ＳＤＲＡＭ（Double Data Rate-Synchronous Dynamic Random Access Memory）３００とを備えている。
【００２１】
ＤＤＲ−ＳＤＲＡＭ３００は、半導体記憶素子であり、一定容量値、例えば２キロバイトごとに領域分割され、フレーム長が長いフレームであっても、短いフレームであっても分割した１つの領域を割り当てて記憶する。なお、分割されたそれぞれの領域は、後述するハンドル管理部２５５が付与するハンドル番号に対応付けられる。
【００２２】
ＣＰＵ４００は、主に通信処理回路２００で転送処理を行うことができないフレームを通信処理回路２００から受信し、受信したフレームに対する転送先を検出する等の処理を予め内部で動作するソフトウェアに基づいて行う。ＣＰＵ４００が備えるドライバ４００ａは、通信処理回路２００がＣＰＵ４００に入力するパケットのＣＰＵ４００の内部のメモリへの書き込み及び読み出しを行い、また、通信処理回路２００の各機能部の動作を制御する情報の設定を各機能部に対して行う。
【００２３】
通信処理回路２００において、ＷＡＮ用ＭＡＣ（Media Access Control）  Ｉ／Ｆ２０５は、ＷＡＮに接続される物理Ｉ／Ｆ５００へ接続する接続インタフェースである。ＬＡＮ用ＭＡＣ  Ｉ／Ｆ２７５は、ＬＡＮに接続される物理Ｉ／Ｆ５０１へ接続する接続インタフェースである。ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５及び、ＬＡＮ用ＭＡＣ  Ｉ／Ｆ２７５は、上記したＧＭＩＩ及びＭＩＩに準拠した規格を有し、送受信するイーサネット（登録商標）のフレーム（以下、フレームと記載）に対してＩＥＥＥ８０２．３準拠のＭＡＣ処理を行い、また、物理Ｉ／Ｆ５００あるいは５０１との間で送受信されるフレームに対してＣＲＣ（Cyclic Redundancy Check）処理などを行う。
【００２４】
ＩＰｓｅｃ部２１０（ＩＰｓｅｃ回路）は、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５、書き込みスケジューラ部２１５、及び、フレーム生成部２６０に接続される。ＩＰｓｅｃ部２１０は、ＲＦＣ（Request for Comments）２４０６準拠のＩＰｓｅｃ処理に基づき、ＷＡＮに送信するパケットに対して暗号処理を行い、また、ＷＡＮから受信するパケットに対して復号処理を行う。ここで、ＲＦＣ２４０６準拠のＩＰｓｅｃ処理とは、ＲＦＣ２４０３／２４０４準拠のＨＭＡＣ−ＭＤ５（Keyed Hashing for Message Authentication Code-Message Digest 5）やＨＭＡＣ−ＳＨＡ−１（HMAC-Secure Hash Algorithm-1）の認証機能や、ＲＦＣ２４１０／２４５１のＮＵＬＬ，ＣＢＣ−ＡＥＳ（Cipher Block Chaining - Advanced Encryption Standard）の暗号機能などによるＩＰｖ４及びＩＰｖ６パケットに対する暗号及び復号処理である。
【００２５】
書き込みスケジューラ部２１５は、ＩＰｓｅｃ部２１０と、ＬＡＮ用ＭＡＣ  Ｉ／Ｆ２７５と、ＣＰＵ４００に接続するＣＰＵ  Ｉ／Ｆ２６５とに接続され、ラウンドロビン方式により、ＩＰｓｅｃ部２１０と、ＬＡＮ用ＭＡＣ  Ｉ／Ｆ２７５と、ＣＰＵ  Ｉ／Ｆ２６５の順に、これら３つの機能部によって情報が付加されたフレーム（以下、前記３つの機能部によって情報が付加されたフレームをフレーム情報と記載）を出力する。
【００２６】
ＣＰＵ  Ｉ／Ｆ２６５は、通信処理回路２００の各機能部と、書き込みスケジューラ部２１５と、メモリコントローラ部２２０とＣＰＵ４００とに接続され、ＣＰＵ４００から出力されるフレームを書き込みスケジューラ部２１５に入力する。ＣＰＵ４００が通信処理回路２００の各機能部に対して設定を行う際、ＣＰＵ  Ｉ／Ｆ２６５は、設定情報を該当する機能部に入力する。また、メモリコントローラ部２２０から出力されるフレーム情報をＣＰＵ４００に入力する。
【００２７】
ＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆ２２５は、メモリコントローラ部２２０とＤＤＲ−ＳＤＲＡＭ３００に接続され、メモリコントローラ部２２０とＤＤＲ−ＳＤＲＡＭ３００の間でフレームの入出力を行う。
【００２８】
メモリコントローラ部２２０は、書き込みスケジューラ部２１５と、フレーム生成部２６０と、ＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆ２２５と、パーサ部２３０と、ハンドル管理部２５５と、ＱｏＳ部２５０とに接続されている。メモリコントローラ部２２０は、書き込みスケジューラ部２１５から入力されるフレーム情報に対し、ハンドル管理部２５５から付与された空きハンドルのハンドル番号に対応するＤＤＲ−ＳＤＲＡＭ３００の分割された領域に、ＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆ２２５を介してＤＤＲ−ＳＤＲＡＭ３００に書き込む。また、メモリコントローラ部２２０は、書き込みスケジューラ部２１５から入力されるフレーム情報に対し、ハンドル管理部２５５から付与されたハンドル番号を付加してパーサ部２３０に出力する。また、メモリコントローラ部２２０は、後述するＱｏＳ部２５０から出力されるジョブ情報に含まれるハンドル番号に対応するＤＤＲ−ＳＤＲＡＭ３００の領域からＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆ２２５を介してフレーム情報を読み出し、読み出したフレーム情報に対してジョブ情報に基づく情報を付加し、フレーム生成部２６０に出力、あるいはＣＰＵ  Ｉ／Ｆ２６５を介してＣＰＵ４００に出力する。
【００２９】
パーサ部２３０は、メモリコントローラ部２２０によりハンドル番号が付加されたフレーム情報に対して解析を行い、フレーム情報から転送処理に係る情報であるヘッダ情報などを抽出し、解析結果情報としてメモリコントローラ部２２０が付加したハンドル番号等の情報とともに出力する。
【００３０】
検索部２３５は、パーサ部２３０から入力される解析結果情報に基づいて、予めＣＰＵ４００により検索部２３５の内部に設定される転送条件情報を参照し、転送条件情報に基づいて、当該フレームを破棄するか、通過させるか、ＣＰＵ４００へ転送、すなわちＣＰＵ４００へ入力するかを示すフィルタ検索結果情報、及び品質クラスなどの情報を示す分類検索結果などを検出し、検出したフィルタ検索結果情報及び分類検索結果と、パーサ部２３０から入力される解析結果情報の一部の情報、例えば、フレーム長等とをＣＰＵ転送判定部２４０に出力する。ここで、転送条件情報に含まれる条件としては、ＭＡＣアドレス、ＩＰアドレス、ポート番号などがあり、解析結果情報に含まれるフレームのヘッダ情報がこれらの転送条件情報に一致するか否かの検索が行われる。
【００３１】
検索部２３５は、パーサ部２３０にエラーを検出したフレームと、ＣＰＵ  Ｉ／Ｆ２６５を介してＣＰＵ４００から入力されたフレームに対しては、検索を行わない。検索は、受信論理Ｉ／Ｆ検索、ＮＡＴ（Network Address Translation）／ＮＡＰＴ（Network Address Port Translation）検索、経路検索、フィルタ検索、分類検索である。各検索では、解析結果情報に含まれる各種情報の全てまたは一部（検索によって対象となる情報が異なる）と、ＣＰＵ４００から設定された判定条件及び前記判定条件毎の判定マスク（判定条件の無効や一部ビットの無効などの指定であり、マスクがない判定条件もある）により構成される規則（検索毎に複数個の規則を設定できる）と、適合判定を行う。前述の適合判定では、前記判定マスクによって無効とならなかった各判定条件について、入力されたフレームからパーサ部２３０が得た解析結果情報との一致・不一致を得る比較演算を実施し、前記判定条件の全てについて一致を得た場合にのみ、前記規則に適合すると判定される。その後、各検索は、適合した規則（複数個の適合した規則がみつかった場合は、規則毎に設定された優先度を比較し、より優先度の高い規則）に付加された検索結果を出力する。
【００３２】
受信論理Ｉ／Ｆ検索の規則を構成する判定条件は、受信物理Ｉ／Ｆ、送信元ＭＡＣアドレス、ＶＬＡＮ有無、ＶＬＡＮ有のときのＶＬＡＮ  ＩＤ、ＰＰＰｏＥ有無、ＰＰＰｏＥ有のときのＰＰＰｏＥセッションＩＤ、受信ＩＰｓｅｃ有無、受信ＩＰｓｅｃ有のときの受信ＳＡ番号であり、検索結果は、受信論理Ｉ／Ｆ番号、ＣＰＵ転送の有無、ＮＡＴ／ＮＡＰＴの有無である。ここで、受信論理Ｉ／Ｆ番号とは、パケットを受信した論理Ｉ／Ｆを識別する番号であり、ＶＬＡＮやＩＰｓｅｃ  ＶＰＮによって１個の物理Ｉ／Ｆに複数個の論理Ｉ／Ｆを設定できる。また、前記でＮＡＴ／ＮＡＰＴ有の結果を得たパケットのみが、後述のＮＡＴ／ＮＡＰＴ検索（グローバル→ローカル）の対象となる。
【００３３】
ＮＡＴ／ＮＡＰＴ検索（グローバル→ローカル）の規則を構成する検索条件は、宛先ＩＰアドレスと宛先ＴＣＰ／ＵＤＰポート番号（ＮＡＰＴのみ）であり、検索結果は、付け替え後のＩＰアドレスと宛先ＴＣＰ／ＵＤＰポート番号（ＮＡＰＴのみ）である。ここで、ＮＡＴ／ＮＡＰＴ検索（グローバル→ローカル）の対象となったパケットに対する、経路検索、フィルタ検索、分類検索の各々は、解析結果情報に含まれる宛先ＩＰアドレスと宛先ＴＣＰ／ＵＤＰポートではなく、ＮＡＴ／ＮＡＰＴ検索結果である付け替え後の宛先ＩＰアドレスと宛先ＴＣＰ／ＵＤＰポートを検索対象として、前述の検索の規則との適合判定を行う（グローバル→ローカルＮＡＴ／ＮＡＰＴを行うパケットについては、ローカルアドレスやポート番号に基づく検索が行われる）。また、ＮＡＴ／ＮＡＰＴ検索（グローバル→ローカル）の対象となったパケットで、適合する規則が見つからなかった場合は、ＣＰＵ転送要因にＮＡＴ／ＮＡＰＴ（グローバル→ローカル）検索ミスヒットの情報が付加される。
【００３４】
経路検索の規則を構成する判定条件は、受信論理Ｉ／Ｆ番号、送信元ＩＰアドレス、宛先ＩＰアドレスであり、検索結果は、送信論理Ｉ／Ｆ番号、宛先ＭＡＣアドレス、ＭＴＵ（Maximum Transmission Unit）長、ＮＡＴ／ＮＡＰＴ有無、ＭＡＣアドレス未解決有無、自宛有無である。ここで、送信論理Ｉ／Ｆ番号とは、パケットを送信する論理Ｉ／Ｆを識別する番号（受信論理Ｉ／Ｆと送信論理Ｉ／Ｆが同一である場合は番号も共通）である。また、前記でＮＡＴ／ＮＡＰＴ有の結果を得たパケットのみが。後述のＮＡＴ／ＮＡＰＴ検索（ローカル→グローバル）の対象となる。また、前記ＭＴＵ長とパケット長が比較され、パケット長のほうが長い場合に、ＣＰＵ転送要因にＭＴＵ長超過の情報が付加される。また、ＭＡＣアドレス未解決有のパケットには、ＣＰＵ転送要因にＭＡＣアドレス未解決の情報が付加される。また、自宛有のパケットには、ＣＰＵ転送要因に自宛パケットの情報が付加される。
【００３５】
ＮＡＴ／ＮＡＰＴ検索（ローカル→グローバル）の規則を構成する検索条件は、送信元ＩＰアドレスと送信元ＴＣＰ／ＵＤＰポート番号（ＮＡＰＴのみ）であり、検索結果は、付け替え後の送信元ＩＰアドレスと送信元ＴＣＰ／ＵＤＰポート番号（ＮＡＰＴのみ）である。ここで、ＮＡＴ／ＮＡＰＴ検索（ローカル→グローバル）の対象となったパケットで、適合する規則が見つからなかった場合は、ＣＰＵ転送要因にＮＡＴ／ＮＡＰＴ（ローカル→グローバル）検索ミスヒットの情報が付加される。
【００３６】
フィルタ検索及び分類検索の規則を構成する判定条件は、受信論理Ｉ／Ｆ番号、送信論理Ｉ／Ｆ番号、ＶＬＡＮ優先度、ＩＰｖ４／ＩＰｖ６、送信元ＩＰアドレス、宛先ＩＰアドレス、ＴＯＳ／トラフィック・クラス（ＩＰｖ４の場合はＴＯＳを、ＩＰｖ６の場合はトラフィック・クラスを使用する）、オプション・拡張ヘッダ有無、フラグメント状態（フラグメント無、先頭／最後尾／中間）、ＴＯＳ／トラフィック・クラス、上位プロトコル、送信元ポート番号、宛先ポート番号、ＴＣＰフラグ、ＩＣＭＰタイプ・コードを条件として検索する。フィルタ検索結果は、破棄／通過／ＣＰＵ転送の指定であり、分類検索結果は、品質クラスに関する各種情報（送信時のＶＬＡＮ優先度、リマークの有無、リマーク時のＴＯＳ／トラフィック・クラス、キューの指定など）である。
【００３７】
ＣＰＵ転送判定部２４０は、検索部２３５においてＣＰＵ４００へ転送する要因があるとして検出されたフレームに対して、ＣＰＵ転送要因を示す情報、すなわち後述するＣＰＵ転送要因フラグを付与し、ＣＰＵ４００へ転送するか、あるいは破棄するかを判定し、判定した判定結果情報を、検索部２３５から出力される情報とともに出力する。
【００３８】
キュー選択部２４５は、ＣＰＵ転送判定部２４０から入力される情報に含まれる品質クラス情報や送信先の論理Ｉ／Ｆの情報に基づいてＱｏＳ部２５０がキューを選択する際に参照するキュー番号を検出し、ＣＰＵ転送判定部２４０から出力される情報と、検出したキュー番号とを出力する。
【００３９】
ＱｏＳ部２５０は、キュー選択部２４５から出力される情報に基づいてジョブ情報を生成し、同じくキュー選択部２４５から出力されるキュー番号に基づいて、生成したジョブ情報を該当するキューに記録する。また、ＱｏＳ部２５０は、キューに記録されているジョブ情報を予め定められているキューごとの優先度に基づいて読み出し、メモリコントローラ部２２０へ出力する。また、メモリコントローラ部２２０へ出力する際に、ハンドル番号を返却するためハンドル管理部２５５へ出力する。ここで、ジョブ情報とは、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５やＬＡＮ用ＭＡＣ  Ｉ／Ｆ２７５から送信されるフレームに対しては、受信フレーム長、送信フレーム長、送信論理Ｉ／Ｆ、宛先ＭＡＣアドレス、ＮＡＴ／ＮＡＰＴ指定、ＤＳＣＰやＶＬＡＮ  ｐｒｉｏｒｉｔｙ等の情報に対応する品質クラス、ハンドル番号等の情報から構成されている。また、ＣＰＵ４００に転送されるフレームに対しては、ジョブ情報は、受信フレーム長、送信フレーム長、受信論理Ｉ／Ｆ、ＣＰＵ転送理由、品質クラス、ハンドル番号等の情報から構成される。
【００４０】
ハンドル管理部２５５は、ＱｏＳ（Quality of Service）部２５０と、メモリコントローラ部２２０とに接続され、ＤＤＲ−ＳＤＲＡＭ３００の分割された領域のそれぞれに対応するハンドル番号に基づいてＤＤＲ−ＳＤＲＡＭ３００の分割された領域の空塞管理を行う。ここで、空塞管理とは、メモリコントローラ部２２０へは空きハンドル番号を出力して使用中のハンドル番号として管理し、ＱｏＳ部２５０から入力されるフレーム破棄により返却対象となるハンドル番号や、送信により返却対象となるハンドル番号については領域が空きとなるため、空きのハンドル番号として管理する。また、ハンドル管理部２５５は、マルチキャストフレームの場合には、マルチキャストの回数分送信が終了するまで、フレームを削除できないため、ＱｏＳ部２５０が、メモリコントローラ部２２０にジョブ情報を出力した情報をＱｏＳ部２５０からメモリコントローラ部２２０へ直接接続する接続線から分岐する線により参照して、送信開始時に定められるマルチキャストの回数を管理する。
【００４１】
フレーム生成部２６０は、予めＣＰＵ４００のドライバ４００ａから設定される情報に基づいて、メモリコントローラ部２２０から出力されるフレームに対して送信先の論理インタフェースに応じたＶＬＡＮタグやＰＰＰｏＥ（Point to Point Protocol over Ethernet（登録商標））ヘッダの挿入を行い、当該挿入を行ったフレームを出力する。また、フレーム生成部２６０は、宛先ＭＡＣアドレスの付け替え、ＮＡＴ（Network Address Translation）／ＮＡＰＴ（Network Address Port Translation）のためのＩＰアドレス及びポート番号の付け替えを行う。また、フレーム生成部２６０は、ＩＰｓｅｃ部２１０に出力するフレーム対してＩＰｓｅｃ  ＳＡの情報の付加を行う。また、フレーム生成部２６０は、ＤＳＣＰ（DiffServ Code Point）のＩＰパケットのヘッダへの付加、ＶＬＡＮ  ｐｒｉｏｒｉｔｙのフレームのヘッダへの付加を行う。ＤＳＣＰやＶＬＡＮ  ｐｒｉｏｒｉｔｙは、優先制御の際に参照される品質クラス情報となる。ここで、品質クラス情報とは、転送されるフレームに含まれる情報の種別を分類する分類情報であり、分類情報によって示される情報の種別が例えば音声の場合には、当該分類種別を有するフレームには遅延が少ない高い品質の通信処理が適用されることになる。
【００４２】
なお、ＣＰＵ転送判定部２４０において破棄すると判定されたフレームついてはＣＰＵ転送判定部２４０あるいはＱｏＳ部２５０のいずれかにより破棄されることとなる。
【００４３】
次に、図１に示す通信処理回路２００におけるＩＰｓｅｃ処理手順の概要について説明する。
まず、受信パケットの入力時の処理概要について説明する。ＩＰｓｅｃ部２１０は、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５からＩＰｓｅｃパケットを含むフレームを受信する。ＩＰｓｅｃパケットは、外側ＩＰヘッダ、ＳＰＩとシーケンス番号から構成されたＥＳＰヘッダ、ＩＶ（ＣＢＣモードの暗号アルゴリズムの場合のみ）、暗号化された内側ＩＰパケット（ＮＵＬＬ暗号化を含む）、暗号化されたトレーラ（パッド、パッド長、内側ＩＰパケットのプロトコル）、及び、ＩＣＶ（認証ありの場合のみ）から構成される。
【００４４】
ＩＰｓｅｃ部２１０は、ＳＡ（受信）に対応させて、外側ＩＰヘッダの宛先ＩＰアドレスと、ＥＳＰヘッダ内のＳＰＩを、ＳＡ判定条件として記憶している。ＩＰｓｅｃ部２１０は、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５から受信したＩＰｓｅｃパケットから抽出した外側ＩＰヘッダの宛先ＩＰアドレスと、ＥＳＰヘッダに含まれるＳＰＩが前述したＳＡ判定条件と一致するＳＡ（受信）を取得する。ＩＰｓｅｃパケットを含まないフレームや、ＩＰｓｅｃパケットを含むが一致するＳＡ（受信）が見つからなかったフレームについては、ＩＰｓｅｃ部２１０は、前記フレームに、受信ＩＰｓｅｃ無を示す情報を付加して、書き込みスケジューラ部２１５へ出力する。
【００４５】
以下に、ＳＡ（受信）が見つかったＩＰｓｅｃパケットに対するＩＰｓｅｃ部２１０の動作を説明する。
ＩＰｓｅｃ部２１０は、ＳＡ（受信）に対応させて、暗号アルゴリズム、暗号鍵（ＮＵＬＬ暗号以外の場合）、認証アルゴリズム、認証鍵（認証ありの場合）、アンチリプレイの有無を、ＳＡ処理条件（受信）として記憶している。ＩＰｓｅｃ部２１０は、受信したＩＰｓｅｃパケットのＳＡ（受信）に基づいて、ＳＡ処理条件（受信）を取得する。
【００４６】
ＩＰｓｅｃ部２１０は、この取得したＳＡ処理条件（受信）を使用して、認証と復号とデカプセル化の各処理を行い、復号された内側ＩＰパケットを取得する。さらに、復号された内側ＩＰパケットを含むフレームに、受信ＩＰｓｅｃ有を示す情報とＳＡ（受信）を識別する受信ＳＡ番号を付加して、書き込みスケジューラ部２１５に出力する。なお、ＳＡ処理条件（受信）のアンチリプレイが有りの場合は、アンチリプレイの処理が行われる。以下に、認証、復号、デカプセル、アンチリプレイの各処理の動作を説明する。
【００４７】
受信したＩＰｓｅｃパケットに対する認証処理では、前記ＩＰｓｅｃパケットのＥＳＰヘッダ先頭から暗号化されたトレーラ終了までの復号前のデータに対して、所定の認証アルゴリズムと認証鍵を使用して、ＩＣＶを計算し、前記ＩＰｓｅｃパケット内のＩＣＶとの一致を判定する。この判定で一致を得た場合は認証成功であり、不一致の場合は認証失敗となる。なお、認証アルゴリズムとして認証なしが指定されている場合は、前述の認証処理を行わず、認証成功とみなす。前述の認証処理において失敗と判定されたパケットや、受信したＩＰｓｅｃパケットからＩＣＶを得られなかった場合（パケット長が短すぎる場合など）は、ＩＰｓｅｃ部２１０内で破棄される。
【００４８】
受信したＩＰｓｅｃパケットに対する復号処理では、前記ＩＰｓｅｃパケット内の暗号化された内側ＩＰパケットから暗号化されたトレーラ終了までの復号前のデータを、所定の暗号アルゴリズム、暗号鍵を使用して復号する。なお、ＣＢＣモードでの復号演算の初期値として、前記ＩＰｓｅｃパケット内のＩＶを使用する。暗号アルゴリズムとしてＮＵＬＬ暗号（暗号なし）が指定されている場合は、前述の復号処理を行わない。なお、復号対象のデータ長が、暗号アルゴリズムによって予め決められたブロック長の整数倍となっていない場合は、ＩＰｓｅｃ部２１０内で破棄される。
【００４９】
受信したＩＰｓｅｃパケットに対するデカプセル処理では、前記ＩＰｓｅｃパケットから外側ＩＰヘッダ、ＩＶ、トレーラ、ＩＣＶを削除し、復号された内側ＩＰパケットを取得する。このとき、復号されたトレーラのパッド長に基づいてパッドの削除を行い、内側ＩＰパケットのプロトコルに基づいて、フレームのレイヤ３プロトコルとして、ＩＰｖ４あるいはＩＰｖ６を指定する。すなわち、イーサネット（登録商標）フレームのＴｙｐｅフィールドを、内側ＩＰパケットのプロトコルに相当する値に書き換える。
【００５０】
受信したＩＰｓｅｃパケットに対するアンチリプレイ処理では、認証に成功したＩＰｓｅｃパケットのＥＳＰヘッダ内のシーケンス番号と、ＩＰｓｅｃ部２１０がＳＡ（受信）別に管理しているシーケンス番号の状態情報により、アンチリプレイの成功・失敗を判定し、前記シーケンス番号の状態情報の更新（アンチリプレイ処理の成功時のみ）を行う。このアンチリプレイ処理では、シーケンス番号の状態情報としてスライディング受信ウィンドウを使用する。前記ウィンドウの右端は、このＳＡで受信され、認証に成功したパケットについてシーケンス番号の最大値を表す。ウィンドウの左端より小さいシーケンス番号を含むパケットは拒否される。ウィンドウ内に収まるパケットは、ウィンドウ内で受信したパケットのリストに対して既受信としてチェックされる。受信されたパケットがウィンドウに収まり、かつ新しい（既受信としてチェックされていない）場合、あるいは受信されたパケットがウィンドウの右端にある場合、アンチリプレイに成功したと判定する。前記において失敗と判定されたパケットは、ＩＰｓｅｃ部２１０内で破棄される。
【００５１】
なお、ＩＰｓｅｃ部２１０が、書き込みスケジューラ部２１５へデータを出力した以降の動作は、上述した図１における各部の説明を参照のこと。
【００５２】
次に、送信パケットの入力時の処理概要について説明する。
ＩＰｓｅｃ部２１０は、フレーム生成部２６０より、送信ＩＰｓｅｃの有無を示す情報と、ＳＡ（送信）を識別する送信ＳＡ番号とが付加された、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５から送信すべきフレームの入力を受ける。ＩＰｓｅｃ部２１０は、送信ＩＰｓｅｃ無を示す情報が付加されている場合、当該フレームをそのままＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５へ出力する。
【００５３】
以下に、送信ＩＰｓｅｃ有の場合の送信フレームに対するＩＰｓｅｃ部２１０の動作を説明する。
ＩＰｓｅｃ部２１０は、ＳＡ（送信）に対応させて、暗号アルゴリズムと、暗号鍵（ＮＵＬＬ暗号以外の場合）、認証アルゴリズム、認証鍵（認証ありの場合）を、ＳＡ処理条件（送信）として記憶する。ＩＰｓｅｃ部２１０は、ＳＡ（送信）に基づいて、ＳＡ処理条件（送信）を取得する。
【００５４】
また、ＩＰｓｅｃ部２１０は、ＳＡ（送信）に対応させて、外側ＩＰヘッダの宛先ＩＰドレス、送信元ＩＰアドレス、ホップ・リミット（外側ＩＰヘッダがＩＰｖ４の場合はＴＴＬ）、及び、トラフィック・クラス（外側ＩＰヘッダがＩＰｖ４の場合はＴＯＳ）（内側ＩＰパケットのトラフィック・クラスを外側ＩＰヘッダに複製することも可能）と、ＥＳＰヘッダのＳＰＩとをカプセル化条件として記憶している。ＩＰｓｅｃ部２１０は、ＳＡ（送信）に基づいて、カプセル化条件を取得する。
【００５５】
さらに、ＩＰｓｅｃ部２１０は、ＳＡ（送信）に対応させて、送信するＩＰパケットのＥＳＰヘッダ内のシーケンス番号を管理する。すなわち、ＳＡ（送信）別に送信したＩＰパケットの個数を計測し、シーケンス番号とする。ＩＰｓｅｃ部２１０は、ＳＡ（送信）に基づいて、シーケンス番号を取得する。
【００５６】
ＩＰｓｅｃ部２１０は、フレーム生成部２６０より入力されたフレームに含まれるＩＰパケットに対して、上記の取得したＳＡ処理条件ＳＡ（送信）、カプセル化条件、シーケンス番号を使用して、暗号とＩＣＶ生成とカプセルの各処理を行う。以下に、暗号、ＩＣＶ生成、カプセルの各処理の動作を説明する。
【００５７】
暗号処理では、ＩＰｓｅｃ部２１０は、フレーム生成部２６０より入力されたフレームに含まれるＩＰパケットを、ＩＰｓｅｃパケットの内側ＩＰパケットとするため、所定のトレーラを当該ＩＰパケットの直後に付加する。前記トレーラは、パッド、当該パッドのパッド長、内側ＩＰパケットのプロトコルから構成されるが、前記パッドを付加するパディング処理において、当該ＩＰパケットとトレーラを合計した長さが、これらを暗号化するときの暗号アルゴリズムによって予め決められたブロック長の整数倍となるよう、パッド長を取得する。
【００５８】
ＩＰｓｅｃ部２１０は、前記内側ＩＰパケット及び前記トレーラを、所定の暗号アルゴリズムと暗号鍵を使用して暗号化する。ＣＢＣモードの暗号アルゴリズムを使用する場合は、暗号演算の初期値としてＩＶが必要となるが、前回暗号化した結果をＩＶとして利用することが可能である。さらに、前記ＩＶを、前記内側ＩＰパケットの直前に挿入する（ＣＢＣモードの暗号アルゴリズムの場合のみ）。なお、暗号アルゴリズムとしてＮＵＬＬ暗号（暗号なし）が指定された場合は、この暗号処理を行わない。
【００５９】
ＩＣＶ生成処理では、ＩＰｓｅｃ部２１０は、取得したカプセル化条件のＳＰＩとシーケンス番号に基づいてＥＳＰヘッダを生成し、挿入する。この挿入位置は、ＩＶ（ＩＶがない場合は内側ＩＰパケット）の直前である。さらに、ＥＳＰヘッダ先頭から暗号化されたトレーラ終了までの復号前のデータに対して、所定の認証アルゴリズムと認証鍵を使用してＩＣＶを計算し、トレーラの直後に計算したＩＣＶを付加する。
【００６０】
カプセル処理では、ＩＰｓｅｃ部２１０は、取得したカプセル化条件のうち外側ＩＰヘッダに関する条件（宛先ＩＰアドレス、送信元ＩＰアドレス、ホップ・リミット、トラフィック・クラス）と、ＥＳＰヘッダ先頭から暗号化されたトレーラ終了までの長さに基づいて、外側ＩＰヘッダを生成し、ＥＳＰヘッダ直前に挿入する。さらにフレームのレイヤ３プロトコルとして、外側ＩＰヘッダのプロトコル（ＩＰｖ４あるいはＩＰｖ６）を指定する。すなわち、イーサネット（登録商標）フレームのＴｙｐｅフィールドを、外側ＩＰパケットのプロトコルに相当する値に書き換える。
【００６１】
図２は、ＩＰｓｅｃ部２１０の構成を示すブロック図である。
同図において、ＩＰｓｅｃ部２１０は、ＩＰｓｅｃレジスタ６１０、認証用中間鍵生成部６２０、暗号用拡大鍵生成部６３０、受信ＩＰｓｅｃ処理部６４０、及び、送信ＩＰｓｅｃ処理部６５０を備える。ＩＰｓｅｃ部２１０内の各部は、全てワイヤードロジックにより構成する。このように、複雑な調停が必要となる１個のバスで各部を接続するのではなく、パケット処理手順に従ってブロック間を接続する。従って、高性能ＣＰＵが不要となる。
【００６２】
ＩＰｓｅｃレジスタ６１０は、ＣＰＵバスとのインタフェースを有するレジスタであり、ＳＡ判定条件テーブル、受信側ＳＡ処理条件テーブル、送信側ＳＡ処理条件テーブル、カプセル化条件テーブルを保持する。これらのテーブルは、ＣＰＵ４００によって設定される。
ＳＡ判定条件テーブルの各エントリは、受信ＳＡ番号と、外側ＩＰヘッダの宛先ＩＰアドレス及びＥＳＰヘッダ内のＳＰＩとの対応を示す。受信側ＳＡ処理条件テーブルの各エントリは、受信ＳＡ番号と、暗号アルゴリズム、暗号鍵（ＮＵＬＬ暗号以外の場合）、認証アルゴリズム、認証鍵（認証ありの場合）、アンチリプレイ有無との対応を示す。送信側ＳＡ処理条件テーブルの各エントリは、送信ＳＡ番号と、暗号アルゴリズム、暗号鍵（ＮＵＬＬ暗号以外の場合）、認証アルゴリズム、認証鍵（認証ありの場合）との対応を示す。カプセル化条件テーブルの各エントリは、送信ＳＡ番号と、外側ＩＰヘッダの宛先ＩＰアドレス、送信元ＩＰアドレス、ホップ・リミット、トラフィック・クラス、ＥＳＰヘッダのＳＰＩとの対応を示す。
【００６３】
認証用中間鍵生成部６２０は、受信側認証用中間鍵テーブルと、送信側認証用中間鍵テーブルとを保持する。
受信側認証用中間鍵テーブルの各エントリは、受信ＳＡ番号と、受信ＩＰｓｅｃ処理部６４０で使用される認証用中間鍵（認証ありの場合）との対応を示す。認証用中間鍵生成部６２０は、受信側ＳＡ処理条件テーブルの認証アルゴリズムと認証鍵がＣＰＵ４００によって設定されたことを契機に、認証用中間鍵を生成して受信側認証用中間鍵テーブルへ登録する。
また、送信側認証用中間鍵テーブルの各エントリは、送信ＳＡ番号と、送信ＩＰｓｅｃ処理部６５０で使用される認証用中間鍵（認証ありの場合）との対応を示す。認証用中間鍵生成部６２０は、送信側ＳＡ処理条件テーブルの認証アルゴリズムと認証鍵がＣＰＵ４００によって設定されたことを契機に、認証用中間鍵を生成して送信側認証用中間鍵テーブルへ登録する。
【００６４】
暗号用拡大鍵生成部６３０は、受信側暗号用拡大鍵テーブルと、送信側暗号用拡大鍵テーブルとを保持する。
受信側暗号用拡大鍵テーブルの各エントリは、受信ＳＡ番号と、受信ＩＰｓｅｃ処理部６４０で使用される暗号用拡大鍵（ＤＥＳやＡＥＳなど拡大鍵を使用する暗号の場合）との対応を示す。暗号用拡大鍵生成部６３０は、受信側ＳＡ処理条件テーブルの暗号アルゴリズムと暗号鍵がＣＰＵ４００によって設定されたことを契機に、暗号用拡大鍵を生成して受信側暗号用拡大鍵テーブルへ登録する。
また、送信側暗号用拡大鍵テーブルの各エントリは、送信ＳＡ番号と、送信ＩＰｓｅｃ処理部６５０で使用される暗号用拡大鍵（ＤＥＳやＡＥＳなど拡大鍵を使用する暗号の場合）との対応を示す。暗号用拡大鍵生成部６３０は、送信側ＳＡ処理条件テーブルの暗号アルゴリズムと暗号鍵がＣＰＵ４００によって設定されたことを契機に、暗号用拡大鍵を生成して受信側暗号用拡大鍵テーブルへ登録する。
【００６５】
受信ＩＰｓｅｃ処理部６４０は、前置処理部６４１、バッファ６４２、認証処理部６４３、バッファ６４４、不正パケット廃棄部６４５、復号処理部６４６、バッファ６４７、不正パケット廃棄部６４８、及び、後置処理部６４９を有している。前置処理部６４１、バッファ６４２、認証処理部６４３、バッファ６４４、不正パケット廃棄部６４５、復号処理部６４６、バッファ６４７、不正パケット廃棄部６４８、後置処理部６４９は順に直列に接続され、また、前置処理部６４１と後置処理部６４９とが接続される。
【００６６】
バッファ６４２は、カット型のＦＩＦＯ（First-In First-Out）バッファであり、バッファ６４４、及び、バッファ６４７は、ストア型のＦＩＦＯバッファである。ＦＩＦＯとは先に格納されたデータから順に出力することをいう。また、カット型のバッファとは、１個のパケットのデータの入力が完了するまで待たずに、後段ブロックにデータの出力が可能なバッファである。これに対し、ストア型のバッファとは、１個のパケットのデータ（最大パケット長）が格納可能であり、１個のパケットのデータの入力が完了するまで出力を保留し、データの入力が完了した時点で、後段ブロックに出力可能なバッファである。なお、バッファ６４２をストア型バッファとしてもよい。不正パケット廃棄部６４５は、バッファ６４４にバッファリング（格納）された不正パケットを破棄し、不正パケット廃棄部６４８は、バッファ６４７にバッファリングされた不正パケットを破棄する。
【００６７】
前置処理部６４１は、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５から入力されたフレームに含まれるパケットのヘッダを参照し、ＩＰｓｅｃ対象パケットであるか否かを判定する。認証処理部６４３は、認証用中間鍵生成部６２０が生成した認証データ検証用の認証用中間鍵を用いて、ＩＰｓｅｃパケットの認証処理を行う。復号処理部６４６は、暗号用拡大鍵生成部６３０が生成した復号用の暗号用拡大鍵を用いてＩＰｓｅｃパケット内の暗号化データを復号する。後置処理部６４９は、書き込みスケジューラ部２１５へデカプセル化したＩＰパケットを出力する。
【００６８】
上述するように、ストア型バッファであるバッファ６４４、及び、バッファ６４７を有することにより、認証処理部６４３における認証処理、復号処理部６４６における復号処理において、不正パケットと判定される時点（パケットの最後尾を処理した後）まで、後段のブロックにパケットが渡されない。これにより、不正パケットについては、後段の処理を行うことなく破棄することが可能となる。
【００６９】
送信ＩＰｓｅｃ処理部６５０は、前置処理部６５１、バッファ６５２、暗号処理部６５３、バッファ６５４、ＩＣＶ生成処理部６５５、バッファ６５６、後置処理部６５７、及び、バッファ６５８を有する。前置処理部６５１、バッファ６５２、暗号処理部６５３、バッファ６５４、ＩＣＶ生成処理部６５５、バッファ６５６、及び、後置処理部６５７は、順に直列に接続され、前置処理部６５１と後置処理部６５７とはバッファ６５８を介して接続される。バッファ６５２、及び、バッファ６５４は、カット型のＦＩＦＯバッファであり、バッファ６５６、及び、バッファ６５８は、ストア型のＦＩＦＯバッファである。
【００７０】
前置処理部６５１は、フレーム生成部２６０から入力されたフレームに付加された送信ＩＰｓｅｃ有無の情報を用いてＩＰｓｅｃ対象パケットであるか否かを判定し、ＩＰｓｅｃ対象パケットであればバッファ６５２に、ＩＰｓｅｃ非対象パケットであればバッファ６５８にジョブをバッファリングする。暗号処理部６５３は、暗号用拡大鍵生成部６３０が生成した暗号用の暗号用拡大鍵を用いてＩＰパケットやトレーラの暗号処理を行う。ＩＣＶ生成処理部６５５は、認証用中間鍵生成部６２０が生成した認証データ生成用の認証用中間鍵を用いて、ＩＣＶを生成する。後置処理部６５７は、バッファ６５６及びバッファ６５８にバッファリングされたジョブを優先度等に応じて読み出し、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５へフレームデータを出力する。
【００７１】
上述するように、送信ＩＰｓｅｃ部６５０では、暗号処理前後にカット型バッファを採用していることを特徴としている。このカット型バッファの容量は、最大長の１フレーム全てを蓄積するだけの容量が必要なストア型バッファよりも小さくすることが可能であり、回路規模の削減が可能となる。また、カット型バッファで蓄積される時間は、１フレームのバッファ入力を待たずにバッファから出力が可能であるため、バッファでの遅延を小さくすることが可能である。このため、非対象パケットを長い間待たせる必要がない。つまり、スケジューラ直前（後置処理部６５７）のストア型バッファ（バッファ６５６及びバッファ６５８）の容量を小さくすることが可能であり、回路規模の削減が可能となる。
【００７２】
次に、ＩＰｓｅｃ部２１０の詳細な動作について説明する。
ＩＰｓｅｃレジスタ６１０は、ＳＡ判定条件テーブル、受信側ＳＡ処理条件テーブル、送信側ＳＡ処理条件テーブル、カプセル化条件テーブルを保持する。ＣＰＵ４００は、ＣＰＵ  Ｉ／Ｆ２６５を介して、各テーブルの読み書きを行う。
【００７３】
認証用中間鍵生成部６２０は、受信側認証用中間鍵テーブル及び送信側認証用中間鍵テーブルをを予め保持しており、暗号用拡大鍵生成部６３０は、受信側暗号用拡大鍵テーブルと、送信側暗号用拡大鍵テーブルとを予め保持している。
受信側ＳＡ処理条件テーブルの暗号アルゴリズムと暗号鍵がＣＰＵ４００によって設定された場合、認証用中間鍵生成部６２０は、認証用中間鍵を生成して受信側認証用中間鍵テーブルへ登録し、暗号用拡大鍵生成部６３０は、暗号用拡大鍵を生成して受信側暗号用拡大鍵テーブルへ登録する。
同様に、送信側ＳＡ処理条件テーブルの認証アルゴリズムと認証鍵がＣＰＵ４００によって設定された場合、認証用中間鍵生成部６２０は、認証用中間鍵を生成して送信側認証用中間鍵テーブルへ登録し、暗号用拡大鍵生成部６３０は、暗号用拡大鍵を生成して受信側暗号用拡大鍵テーブルへ登録する。
【００７４】
図３は、受信ＩＰｓｅｃ処理部６４０の構成を示す図である。
まず、前置処理部６４１の動作を説明する。前置処理部６４１は、パーサ・検索部１０１０、バッファ１０２０、及び、ＩＰｓｅｃ対象判定部１０３０からなる。
パーサ・検索部１０１０は、ＷＡＮ用ＭＡＣ  Ｉ／Ｆ２０５から受信したフレームが、受信ＩＰｓｅｃ処理対象であるか否かの判定（受信ＩＰｓｅｃ有無の判定）を行い、受信ＩＰｓｅｃありのＩＰｓｅｃパケットについては、受信ＳＡ番号を取得する。すなわち、パーサ・検索部１０１０は、受信したフレームについて、ＩＰパケット有無、ＩＰパケット有の場合のＩＰヘッダの宛先ＩＰアドレスとＥＳＰヘッダの有無、ＥＳＰヘッダ有の場合のＥＳＰヘッダ内のＳＰＩを各々抽出する。その後、パーサ・検索部１０１０は、ＩＰパケット無もしくはＥＳＰヘッダ無の場合は、受信ＩＰｓｅｃ無と判定する。さらに、ＳＡ判定条件テーブルのエントリ毎に、前記エントリに記憶されている宛先ＩＰアドレスとＳＰＩが、抽出した宛先ＩＰアドレスとＳＰＩに一致するか否かを判定する。一致したエントリが見つかった場合は、前記エントリから受信ＳＡ番号を取得する。パーサ・検索部１０１０は、ＳＡ判定条件テーブル内のいずれのエントリとも一致しない場合は、受信ＩＰｓｅｃ無と判定する。
【００７５】
バッファ１０２０は、パーサ・検索部１０１０におけるパーサ・検索処理後のフレームデータと、受信ＩＰｓｅｃ有無、受信ＳＡ番号、ＩＰヘッダ位置等の位置情報をに一時蓄積する。このバッファ１０２０はストア型である。ＩＰｓｅｃ対象判定部１０３０は、前記バッファ１０２０から出力するフレームについて、ＩＰｓｅｃ対象であるか否かを判定する。ＩＰｓｅｃ対象判定部１０３０は、受信ＩＰｓｅｃ無の場合、ＩＰｓｅｃ非対象パケットとして、フレームデータを後置処理部６４９に入力する。
【００７６】
ＩＰｓｅｃ対象判定部１０３０は、受信ＩＰｓｅｃ有の場合、フレームデータをバッファ６４２に入力する。なお、本実施例では、外側ＩＰヘッダのプロトコルは、ＩＰｖ６のみであるため、ＩＰｖ４パケットは受信ＩＰｓｅｃ無と判定される。さらに、ＩＰフラグメントされたパケットについても、フラグメントの再構成を行うことができないため、受信ＩＰｓｅｃ無と判定される。さらに、ＩＰフラグメントされたパケットについても、フラグメントの再構成を行うことができないため、受信ＩＰｓｅｃ無と判定される。ＩＰｓｅｃ対象判定部１０３０は、バッファ１０２０から出力されたフレームに位置情報のデータを付加してバッファ６４２へ出力する。
【００７７】
バッファ６４２は、カット型バッファであり、認証処理部６４３への入力が可能な状態において、蓄積中のデータを出力する（ステップＳ１０４０）。
【００７８】
次に、認証処理部６４３の動作を説明する。認証処理部６４３は、外側ＩＰヘッダ削除・ＩＣＶ計算前処理部１０５０、ＳＨＡ−１  ＩＣＶ計算部１０６０、ＭＤ−５  ＩＣＶ計算部１０７０、バッファ１０８０、ＩＣＶ検査＆ＩＣＶ削除部１０９０、及び、シーケンス番号検査部１１００からなる。外側ＩＰヘッダ削除・ＩＣＶ計算前処理部１０５０は、バッファ６４２から入力されたフレームデータから外側ＩＰヘッダにあたるデータを、ＩＰヘッダ位置等の位置情報に基づいて削除する。そして、受信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内の受信側ＳＡ処理条件テーブルから認証アルゴリズムを取得し、取得した認証アルゴリズムに対応するＩＣＶ計算処理に、ＥＳＰヘッダ先頭からトレーラ最後までのデータを、ＩＣＶ計算のブロック長単位で入力する。これにより、認証アルゴリズムがＳＨＡ−１であればＳＨＡ−１  ＩＣＶ計算部１０６０において、認証アルゴリズムがＭＤ−５であればＭＤ−５  ＩＣＶ計算部１０７０において、ＩＣＶ計算を行う。このＩＣＶ計算では、受信ＳＡ番号に基づいて受信側認証用中間鍵テーブルから認証用中間鍵を取得し使用する。また、認証中のデータは、１ブロック分の処理を行っている間バッファ１０８０に一時蓄積され、出力される。
【００７９】
その後、ＩＣＶ検査＆ＩＣＶ削除処理部１０９０において、ＳＨＡ−１  ＩＣＶ計算部１０６０、あるいは、ＭＤ−５  ＩＣＶ計算部１０７０において計算されたＩＣＶと、入力されたフレームデータ内に含まれるＩＰｓｅｃパケットのＩＣＶとの一致・不一致により認証が成功したかを判定するとともに、当該フレームデータからＩＣＶを削除する。続いて、シーケンス番号検査部１１００は、受信ＳＡ番号に基づいて、受信側ＳＡ処理条件テーブルからアンチリプレイ有無を取得し、アンチリプレイ有の場合は、シーケンス番号検査処理を行い、ＥＳＰヘッダ内のシーケンス番号を検査する。このシーケンス番号検査において、入力したデータからＩＰヘッダ位置等の位置情報に基づいてシーケンス番号を取得し、このシーケンス番号と受信ＳＡ番号に対応するシーケンス番号の状態情報に基づいて、アンチリプレイの成功・失敗の判定と、シーケンス番号の状態情報の更新（成功時のみ）を行う。シーケンス番号検査部１１００は、フレームデータ、位置情報のデータ、及び、認証の成功・失敗の判定結果、アンチリプレイの成功・失敗の判定結果とを示すデータを出力する。
【００８０】
シーケンス番号検査部１１００が出力するデータは、バッファ６４４に入力される。バッファ６４４は、ストア型バッファであり、１フレーム分のデータが蓄積される。不正パケット廃棄部６４５は、認証の成功・失敗の判定結果と、アンチリプレイ有の場合のアンチリプレイの成功・失敗の判定結果を得る。不正パケット廃棄部６４５は、認証の失敗もしくはアンチリプレイの失敗であるとき、復号処理部６４６へのデータの入力を行わず、このフレーム破棄する。１フレーム分のデータが蓄積され、前記フレームについて認証が成功し、かつ、アンチリプレイに成功した（あるいはアンチリプレイ無）場合に、復号処理部６４６への入力が可能な状態において、前記フレームデータ及び位置情報のデータを、復号処理部６４６へ入力する。
【００８１】
次に、復号処理部６４６の動作を説明する。復号処理部６４６は、ＥＳＰヘッダ削除部１１３０、復号化部１１４０、及び、ＩＶ削除・トレーラ削除部１１５０からなる。ＥＳＰヘッダ削除部１１３０は、ＥＳＰヘッダ削除処理において、バッファ６４４からフレームデータと位置情報のデータの入力を受ける。ＥＳＰヘッダ削除部１１３０は、ＩＰヘッダ位置等の位置情報のデータに基づいて、フレームデータからＥＳＰヘッダを削除する。復号化部１１４０は、受信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内の受信側ＳＡ処理条件テーブルから暗号化アルゴリズムを取得し、ＩＶからトレーラ最後までのデータを暗号のブロック長単位で、取得した暗号アルゴリズムに対応する復号処理に入力し、復号処理を行う。この復号処理では、受信ＳＡ番号に基づいて受信側暗号用拡大鍵テーブルから暗号用拡大鍵を取得して使用する。さらに、復号化部１１４０は、ＩＰヘッダ位置等の位置情報のデータに基づいて、前記フレームデータからＩＶを取得して、ＣＢＣモードでの復号の初期値として使用する。なお、暗号アルゴリズムによって予め決められたブロック長の整数倍となっていない場合は、復号に失敗したと判定する。
【００８２】
ＩＶ削除・トレーラ削除部１１５０は、フレームデータからＩＶ及びトレーラを削除する。ＩＶ削除・トレーラ削除部１１５０は、復号されたトレーラのパッド長に基づいてパッドの削除を行い、内側ＩＰパケットのプロトコルに基づいて、フレームのレイヤ３プロトコルとして、ＩＰｖ４あるいはＩＰｖ６を取得する。ただし、この処理において、内側ＩＰパケットのプロトコルがＩＰｖ４あるいはＩＰｖ６のどちらでもない場合や、内側ＩＰパケットのバージョンと一致しない場合は、復号に失敗したと判定する。ＩＶ削除・トレーラ削除部１１５０は、フレームデータと、復号の成功・失敗の判定結果のデータをバッファ６４７へ出力する。
【００８３】
ＩＶ削除・トレーラ削除部１１５０が出力したデータは、バッファ６４７に入力される。バッファ６４７は、ストア型バッファであり、１フレーム分のデータが蓄積される。不正パケット廃棄部６４８は、復号の成功・失敗の判定結果を得る。不正パケット廃棄部６４８は、復号失敗であるとき、後置処理部６４９へのフレームデータの入力を行わず、このフレームを破棄する。１フレーム分のデータが蓄積され、前記フレームについて復号が成功した場合に、後置処理部６４９への入力が可能な状態において、前記フレームデータを、後置処理部６４９へ入力する。
【００８４】
次に、後置処理部６４９の動作を説明する。後置処理部６４９は、Ｅｔｈｅｒヘッダ書換部１１８０、及び、スケジューラ部１１９０からなる。Ｅｔｈｅｒヘッダ書換部１１８０は、復号処理部６４６が出力したフレームデータのうち、イーサネット（登録商標）フレームのＴｙｐｅフィールドの値を、内側ＩＰパケットのプロトコルに合致するように書き換える。その後、スケジューラ部１１９０は、内側ＩＰパケットのフレームを、ＩＰｓｅｃ非対象パケットとして入力したフレームとスケジューラで合流させて書き込みスケジューラ部２１５へ出力する。
【００８５】
図４は、ＩＰｓｅｃ送信時の送信ＩＰｓｅｃ処理部６５０の構成を示す図である。
まず、前置処理部６５１の動作を説明する。前置処理部６５１は、バッファ２０１０、ＩＰｓｅｃ対象判定部２０２０、及び、パーサ部２０３０からなる。バッファ２０１０は、ストア型のバッファであり、フレーム生成部２６０から入力されたフレームデータ、送信ＩＰｓｅｃの有無を示す情報、送信ＳＡ番号を一時蓄積する。
【００８６】
ＩＰｓｅｃ対象判定部２０２０は、前記バッファ２０１０から出力されるフレームについて、ＩＰｓｅｃ対象であるか否かを判定する。ＩＰｓｅｃ対象判定部２０２０は、送信ＩＰｓｅｃ無の場合、ＩＰｓｅｃ非対象パケットとして、フレームデータをバッファ６５８へ出力する。送信ＩＰｓｅｃ有の場合、パーサ部２０３０は、Ｌ２ヘッダ終了位置等の位置情報のデータをフレームデータに付加し、バッファ６５２へ出力する。
【００８７】
バッファ６５２は、カット型バッファであり、暗号処理部６５３への入力が可能な状態において、蓄積中のデータを出力する。
【００８８】
次に、暗号処理部６５３の動作について説明する。暗号処理部６５３は、ＥＳＰパディング部２０５０、暗号化部２０６０、及び、シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０からなる。ＥＳＰパディング部２０５０は、送信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内の送信側ＳＡ処理条件テーブルから、暗号アルゴリズムを取得する。ＥＳＰパディング部２０５０は、フレームデータ内のＩＰパケット（内側ＩＰパケット）の直後に、パッド、当該パッドのパッド長、次ヘッダから構成されるトレーラを付加する。このとき、ＩＰパケットとトレーラを合計した長さが、これらを暗号化するときの暗号アルゴリズムによって予め決められたブロック長の整数倍となるよう、パッド長を決定する。次ヘッダは、内側ＩＰパケットのプロトコルに対応する。
【００８９】
暗号化部２０６０は、暗号処理において、暗号アルゴリズムがＮＵＬＬ暗号以外の場合、暗号アルゴリズムに従って、フレームデータ内のＩＰパケット及びトレーラを暗号化する。このとき、暗号化部２０６０は、送信ＳＡ番号に基づいて送信側暗号用拡大鍵テーブルから暗号用拡大鍵を取得して使用する。そして、暗号化部２０６０は、暗号化した結果のデータにより、フレームデータ内のＩＰパケット及びトレーラを書き換える。
【００９０】
シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０は、ＥＳＰヘッダ＆ＩＶ挿入処理を行う。すなわち、シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０は、送信ＳＡ番号に基づいて、内部に保持している送信ＳＡ番号毎の送信ＩＰパケットの個数を読み出し、この読み出した個数を基にシーケンス番号を生成する。そして、当該送信ＳＡ番号に対応した送信ＩＰパケットの個数を増加させる。さらに、シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０は、送信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内のカプセル化条件テーブルからＳＰＩ値を読み出す。シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０は、生成したシーケンス番号と、読み出したＳＰＩ値を用いてＥＳＰヘッダを作成し、フレームデータ内の暗号化データの前に挿入する。また、暗号アルゴリズムがＣＢＣモードの場合、ＩＶをＥＳＰヘッダと暗号化データの間に挿入する。ＩＶは、前回暗号化した結果を利用する。シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部２０７０は、フレームデータをバッファ６５４へ出力する。
【００９１】
バッファ６５４は、カット型バッファであり、ＩＣＶ生成処理部６５５への入力が可能な状態において、蓄積中のデータを出力する。
【００９２】
次に、ＩＣＶ生成処理部６５５の動作を説明する。ＩＣＶ生成処理部６５５は、ＩＣＶ計算前処理部２１００、ＳＨＡ−１  ＩＣＶ計算部２１１０、ＭＤ−５  ＩＣＶ計算部２１２０、バッファ２１３０、及び、外側ＩＰヘッダ挿入・ＩＣＶ挿入部２１４０からなる。ＩＣＶ計算前処理部２１００は、送信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内の送信側ＳＡ処理条件テーブルから認証アルゴリズムを取得し、取得した認証アルゴリズムに対応するＩＣＶ計算処理に、ＥＳＰヘッダ先頭からトレーラ最後までのデータを、ＩＣＶ計算のブロック長単位で入力する。これにより、認証アルゴリズムがＳＨＡ−１の場合ＳＨＡ−１  ＩＣＶ計算部２１１０が、認証アルゴリズムがＭＤ−５の場合ＭＤ−５  ＩＣＶ計算部２１２０がＩＣＶ計算を行う。このＩＣＶ計算では、送信ＳＡ番号に基づいて送信側認証用中間鍵テーブルから認証用中間鍵を取得し使用する。また、ＩＣＶ生成中のデータは、バッファ２１３０に１ブロック分の処理を行っている間一時蓄積され、出力される。
【００９３】
外側ＩＰヘッダ挿入・ＩＣＶ挿入部２１４０は、送信ＳＡ番号に基づいて、ＩＰｓｅｃレジスタ６１０内のカプセル化条件テーブルから、外側ＩＰヘッダの宛先ＩＰアドレス、送信元ＩＰアドレス、ホップ・リミット、トラフィック・クラスを取得する。そして、取得したこれらの情報と、ＥＳＰヘッダ先頭から暗号化されたトレーラ終了までの長さとに基づいて外側ＩＰヘッダを生成し、フレームデータ内のＥＳＰヘッダ直前に挿入する。外側ＩＰヘッダ挿入・ＩＣＶ挿入部２１４０は、さらにフレームのレイヤ３プロトコルとして、外側ＩＰヘッダのプロトコルを指定する。すなわち、イーサネット（登録商標）フレームのＴｙｐｅフィールドを、外側ＩＰパケットのプロトコルに相当する値に書き換える。加えて、外側ＩＰヘッダ挿入・ＩＣＶ挿入部２１４０は、ＳＨＡ−１  ＩＣＶ計算部２１１０、または、ＭＤ−５  ＩＣＶ計算部２１２０において計算されたＩＣＶを、フレームデータ内のトレーラの直後に挿入する。外側ＩＰヘッダ挿入・ＩＣＶ挿入部２１４０は、フレームデータをバッファ６５６に出力する。
【００９４】
ＩＣＶ生成処理部６５５から出力するフレームデータは、バッファ６５６に入力される。また、前置処理部６５１のＩＰｓｅｃ対象判定部２０２０から出力するフレームデータは、バッファ６５８に入力される。バッファ６５６及び６５８は、ストア型バッファであり、１フレーム分のデータが蓄積される。バッファ６５６及び６５８は、１フレーム分のデータが蓄積され、後置処理部６５７への入力が可能な状態において、前記フレームデータを、後置処理部６５７へ入力する。
【００９５】
後置処理部６５７は、スケジューラ部２１７０を備える。スケジューラ部２１７０は、バッファ６５６から出力されたＩＰｓｅｃパケットのフレーム、及び、バッファ６５８から出力されたＩＰｓｅｃ非対象パケットのフレームを出力する。
【００９６】
図５は、認証用中間鍵生成部６２０における中間鍵生成処理を示す図である。
認証用中間鍵生成部６２０は、ＣＰＵ４００から出力された認証鍵に基づいての認証用中間鍵（以下、単に「中間鍵」と記載）を生成し、認証用中間鍵生成部６２０内のテーブルに格納しておく。そして、上述した認証処理部６４３及びＩＣＶ生成処理部６５５のＩＣＶ計算においては、認証対象のパケットの到着に応じて中間鍵を読み出して使用する。中間鍵は、ＩＰｓｅｃ  ＳＡ毎に、入力中間鍵、及び、出力中間鍵の２つがある。中間鍵を生成してメモリに記憶しておくことにより、パケットの受信あるいは送信毎に計算処理を行う必要がなくなり、認証処理の高速化を可能とする。
【００９７】
認証用中間鍵生成部６２０は、ＣＰＵ４００が出力した１６０ビット長の認証鍵、ＩＰｓｅｃ  ＳＡ番号、認証アルゴリズムの情報を受信する。認証データ検証用の認証用中間鍵（以下、単に「認証データ検証用中間鍵」と記載）を生成する場合、ＩＰｓｅｃ  ＳＡ番号は、受信ＳＡ番号に相当し、認証データ生成用の認証用中間鍵（以下、単に「認証データ生成用中間鍵」と記載）を生成する場合、ＩＰｓｅｃ  ＳＡ番号は、送信ＳＡ番号に相当する。
【００９８】
認証用中間鍵生成部６２０は、認証鍵の前に０ｘ０の連続を付加し、５１２ビット長の伸張鍵とする（ステップＳ３０１０）。なお、「０ｘ」とは、１６進数を示す。そして、ｉｐａｄと伸張鍵の排他的論理和（以下、「ＥｘＯＲ」と記載）を算出するとともに、ｏｐｄａと伸張鍵の排他的論理和（以下、「ＥｘＯＲ」と記載）を算出する（ステップＳ３０２０）。なお、ｉｐａｄとは、０ｘ３６の繰り返しパターンからなる５１２ビット長のデータであり、ｏｐａｄとは、０ｘ５ｃの繰り返しパターンからなる５１２ビット長のデータである。
【００９９】
認証用中間鍵生成部６２０は、認証アルゴリズムがＳＨＡ−１である場合、ＳＨＡ−１中間鍵用のハッシュ演算を実行し（ステップＳ３０３０）、認証アルゴリズムがＭＤ−５である場合、ＭＤ−５中間鍵用のハッシュ演算を実行する（ステップＳ３０４０）。ステップＳ３０３０では、ｉｐａｄと伸張鍵とのＥｘＯＲ演算結果に対してＳＨＡ−１中間鍵用のハッシュ値演算を行って１６０ビット長の入力中間鍵を生成するとともに、ｏｐａｄと伸張鍵とのＥｘＯＲ演算結果に対してＳＨＡ−１中間鍵用のハッシュ値演算を行って１６０ビット長の出力中間鍵を生成し、出力する。一方、ステップＳ３０４０では、ｉｐａｄと伸張鍵とのＥｘＯＲ演算結果に対してＭＤ−５中間鍵用のハッシュ値演算を行って１２８ビット長の入力中間鍵を生成し、ｏｐａｄと伸張鍵とのＥｘＯＲ演算結果に対してＭＤ−５中間鍵用のハッシュ値演算を行って１２８ビット長の出力中間鍵を生成し、出力する。
【０１００】
認証用中間鍵生成部６２０は、ステップＳ３０３０あるいはステップＳ３０４０において生成した中間鍵である入力中間鍵及び出力中間鍵を、ＩＰｓｅｃ  ＳＡ番号に対応させて中間鍵テーブルに格納する（ステップＳ３０５０）。中間鍵テーブルは、中間鍵が認証データ検証用中間鍵である場合は、受信側認証用中間鍵テーブルであり、中間鍵が認証データ生成用中間鍵である場合は、送信側認証用中間鍵テーブルである。
【０１０１】
図６は、認証処理部６４３及びＩＣＶ生成処理部６５５に用いられるＩＣＶ計算部の構成を示すブロック図である。下記では、認証処理部６４３におけるＩＣＶ計算部６７０について説明する。
ＩＣＶ計算部６７０は、入力中間鍵を初期値として、入力メッセージ（フレームデータ内のＥＳＰヘッダからトレーラまで）に対するハッシュ値を計算する主ハッシュ演算部６７１と、出力中間鍵を初期値として、主ハッシュ演算部６７１が出力するハッシュ値に対するハッシュ値を計算する副ハッシュ演算部６７２からなる２段のパイプライン構成とする。これにより、スループット向上が可能となる。
【０１０２】
ＩＣＶ計算部６７０は、フレームデータ内のＥＳＰヘッダからトレーラまでの入力メッセージを受けると、ＩＰｓｅｃ  ＳＡ番号（受信ＳＡ番号）をＩＰｓｅｃレジスタ６１０に出力する。主ハッシュ演算部６７１は、ＩＰｓｅｃレジスタ６１０からＩＰｓｅｃ  ＳＡ番号に対応した認証データ検証用中間鍵の入力中間鍵を取得して主ハッシュ演算を行い、ハッシュ値を出力する。ハッシュ値は、ＳＨＡ−１の場合は、１６０ｂｉｔ、ＭＣ−５の場合は１２８ｂｉｔ長である。主ハッシュ演算部６７１は、ハッシュ値の出力後は、次の入力を受付可能とする。
【０１０３】
続いて、副ハッシュ演算部６７２は、ＩＰｓｅｃレジスタ６１０からＩＰｓｅｃ  ＳＡ番号に対応した認証データ検証用中間鍵の出力中間鍵を取得して、主ハッシュ演算部６７１が出力したハッシュ値に対する副ハッシュ演算を行う。演算結果のハッシュ値は、ＳＨＡ−１の場合は１６０ｂｉｔ、ＭＣ−５の場合は１２８ｂｉｔ長である。副ハッシュ演算部６７２は、ハッシュ値の先頭から９６ビットを取り出して、ＩＣＶ値とする。副ハッシュ演算部６７２は、ハッシュ値の出力後は、次の入力を受付可能とする。
【０１０４】
なお、ＩＣＶ生成処理部６５５におけるＩＣＶ計算部についても同様の処理を実行するが、受信ＳＡ番号は送信ＳＡ番号に、認証データ検証用中間鍵は認証データ生成用中間鍵に読みかえる。
【０１０５】
図７は、図６に示す主ハッシュ演算部６７１及び副ハッシュ演算部６７２に用いられるハッシュ演算部６８０の構成を示すブロック図である。同図におけるハッシュ演算部６８０は、ＳＨＡ−１ハッシュ演算を行う。ハッシュ演算部６８０が実行するハッシュ演算として、５１２ビット長のブロック毎に、８０ステップ（ｔ＝０〜７９）の計算が規定されている。ハッシュ演算部６８０においては、ｔ＝０及びｔ＝１の演算を１クロックで行い、同様に、ｔ＝ｉ×２及びｔ＝ｉ×２＋１（ｔ＝０〜３９）についての演算を１クロックで行う。このようにして、８０ステップの計算を４０サイクル（４０クロック）で完了させる。これにより、ハッシュ演算における倍速クロック動作を必要とせず、スループットの向上が可能となる。
【０１０６】
ハッシュ演算状態制御部６８１は、制御信号を受信する。制御信号は、先頭／終了ブロックの有無、データの入力タイミングや中間鍵の入力タイミングを示す信号など、ハッシュ演算を制御するために必要な信号であればよい。
ハッシュ演算状態制御部６８１は、クロック（ＣＬＫ）のタイミングにより、ダブル演算関数（以下、「Ｗ演算関数」と記載）を制御する信号をＷ演算関数処理部６８２へ、ハッシュ値演算関数を制御する信号をハッシュ値演算関数処理部６８３へ同時に出力する。これにより、Ｗ演算関数処理部６８２におけるｔ＝ｉ×２及びｔ＝ｉ×２＋１のステップの演算と、ハッシュ値演算関数処理部６８３におけるｔ＝ｉ×２及びｔ＝ｉ×２＋１のステップの演算が同時に実行されることになる。
【０１０７】
Ｗ演算関数処理部６８２には、フレームデータ内のＥＳＰからトレーラまでを５１２ビット長ブロックに分割し、最後のブロックについては、ＨＭＡＣトレーラ（０ｂ１０００..のパターン＋ＥＳＰからトレーラまでのビット数を表す６４ビット）を付与して５１２ビット長化した入力データが入力され、この入力データは初期値としてＷレジスタ群６８４内のレジスタＷｉ（ｉ＝０〜１５）に格納される。また、ハッシュ値演算関数処理部６８３には１６０ビット長の中間鍵が入力され、初期値としてハッシュ値レジスタ群６８５内のレジスタＡ、Ｂ、Ｃ、Ｄ、Ｅに格納される。レジスタＷｉ（ｉ＝０〜１５）、及び、レジスタＡ、Ｂ、Ｃ、Ｄ、Ｅは、それぞれ３２ビット長のレジスタである。
【０１０８】
Ｗ演算関数処理部６８２、及び、ハッシュ値演算関数処理部６８３は、ハッシュ演算状態制御部６８１から出力される信号を受信し、Ｗレジスタ群６８４内のレジスタＷｉ（ｉ＝０〜１５）、及び、ハッシュ値レジスタ群６８５内のレジスタＡ、Ｂ、Ｃ、Ｄ、Ｅ内に格納された値を用いて演算を行う。そして、Ｗレジスタ群６８４には、Ｗ演算関数処理部６８２による算出結果が、ハッシュ値レジスタ群６８５には、ハッシュ値演算関数処理部６８３による算出結果がクロックのタイミングで書き込まれる。これを繰り返し、データの入力からクロック４０サイクル後に、ハッシュ値レジスタ群６８５内のレジスタＡ、Ｂ、Ｃ、Ｄ、Ｅに格納された値により示される、入力データに対するハッシュ値演算結果と、ハッシュ演算状態制御部６８１からのハッシュ値演算終了を示す信号とが出力される。
【０１０９】
次に、Ｗ演算関数処理部６８２及びハッシュ値演算関数処理部６８３が実行する演算の詳細について説明する。なお、演算は、Ｖｅｒｉｌｏｇ−ＨＤＬ言語を用いて記述している。
【０１１０】
まず、Ｗ演算関数処理部６８２が実行する演算を以下に示す。
Ｗ演算関数処理部６８２は、演算停止中、以下のように、各レジスタＷｉ（ｉ＝０〜１５）の値を保持している。
【０１１１】
【数１】
0004647479.tif 000002
【０１１２】
Ｗ演算関数処理部６８２は、データ入力直後、以下のように、レジスタＷｉ（ｉ＝０〜１５）に、５１２ビット長の入力データをセットする。
【０１１３】
【数２】
0004647479.tif 000003
【０１１４】
Ｗ演算関数処理部６８２は、演算開始（演算カウンタ＝０）から８サイクル経過（演算カウンタ＝７）までの期間は、以下の演算を行う。
【０１１５】
【数３】
0004647479.tif 000004
【０１１６】
Ｗ演算関数処理部６８２は、演算開始より９サイクル経過（演算カウンタ＝８）から演算終了（演算カウンタ＝３９）までの期間は、以下の演算を行う。
【０１１７】
【数４】
0004647479.tif 000005
【０１１８】
次に、図７のハッシュ値演算関数処理部６８３が実行する演算を以下に示す。なお、式中では、レジスタＡ、Ｂ、Ｃ、Ｄ、Ｅを単にＡ、Ｂ、Ｃ、Ｄ、Ｅと記述している。
ハッシュ値演算関数処理部６８３は、演算停止中、以下のように、各レジスタＡ〜Ｅの値を保持している。
【０１１９】
【数５】
0004647479.tif 000006
【０１２０】
ハッシュ値演算関数処理部６８３は、先頭ブロックの入力直後、以下のように、中間鍵をセットする。
【０１２１】
【数６】
0004647479.tif 000007
【０１２２】
ハッシュ値演算関数処理部６８３は、演算開始（演算カウンタ＝０）から演算終了（演算カウンタ＝３９）までの期間は、以下の演算を行う。
【０１２３】
【数７】
0004647479.tif 000008
【０１２４】
なお、
【０１２５】
【数８】
0004647479.tif 000009
【０１２６】
【数９】
0004647479.tif 000010
【０１２７】
【数１０】
0004647479.tif 000011
【０１２８】
【数１１】
0004647479.tif 000012
【０１２９】
【数１２】
0004647479.tif 000013
【０１３０】
【数１３】
0004647479.tif 000014
【０１３１】
【数１４】
0004647479.tif 000015
【０１３２】
上記実施の形態によれば、ワイヤードロジックにより構成され、高速なＩＰｓｅｃパケットの送受信処理を行うＩＰｓｅｃ回路を安価に実現することができる。
【図面の簡単な説明】
【０１３３】
【図１】本発明の一実施の形態による通信装置の構成を示すブロック図である。
【図２】同実施の形態によるＩＰｓｅｃ部の構成を示すブロック図である。
【図３】同実施の形態による受信ＩＰｓｅｃ処理部の構成を示す図である。
【図４】同実施の形態による送信ＩＰｓｅｃ処理部の構成を示す図である。
【図５】同実施の形態による認証用中間鍵生成部における中間鍵生成処理を示す図である。
【図６】同実施の形態によるＩＣＶ計算部の構成を示すブロック図である。
【図７】同実施の形態によるハッシュ演算部の構成を示すブロック図である。
【図８】ＩＰｓｅｃパケットの構成を示す図である。
【符号の説明】
【０１３４】
１００…通信装置、  ２００…通信処理回路、  ２０５…ＷＡＮ用ＭＡＣ  Ｉ／Ｆ、  ２１０…ＩＰｓｅｃ部、  ２１５…書き込みスケジューラ部、  ２２０…メモリコントローラ部、  ２２５…ＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆ、  ２３０…パーサ部、  ２３５…検索部、  ２４０…ＣＰＵ転送判定部、２４５…キュー選択部、  ２５０…ＱｏＳ部、  ２５５…ハンドル管理部、  ２６０…フレーム生成部、  ２６５…ＣＰＵ  Ｉ／Ｆ、  ２７５…ＬＡＮ用ＭＡＣ  Ｉ／Ｆ、  ３００…ＤＤＲ−ＳＤＲＡＭ、  ４００…ＣＰＵ、  ５００、５０１…物理Ｉ／Ｆ、  ６１０…ＩＰｓｅｃレジスタ、  ６２０…認証用中間鍵生成部、  ６３０…暗号用拡大鍵生成部、  ６４０…受信ＩＰｓｅｃ処理部、  ６４１、６５１…前置処理部、  ６４２、６４４、６４７、６５２、６５４、６５６、６５８、１０２０、１０８０、２０１０、２１３０…バッファ、  ６４３…認証処理部、  ６４５、６４８…不正パケット廃棄部、  ６４６…復号処理部、  ６４９、６５７…後置処理、  ６５０…送信ＩＰｓｅｃ処理部、  ６５３…暗号処理部、  ６５５…ＩＣＶ生成処理部、  ６７０…ＩＣＶ計算部、  ６７１…主ハッシュ演算部、  ６７２…副ハッシュ演算部、  ６８０…ハッシュ演算部、  ６８１…ハッシュ演算状態制御部、  ６８２…Ｗ演算関数処理部、  ６８３…ハッシュ値演算関数処理部、  ６８４…Ｗレジスタ群、  ６８５…ハッシュ値レジスタ群、  １０１０…パーサ・検索部、  １０３０、２０２０…ＩＰｓｅｃ対象判定部、  １０５０…外側ＩＰヘッダ削除・ＩＣＶ計算前処理部、  １０６０、２１１０…ＳＨＡ−１  ＩＣＶ計算部、  １０７０、２１２０…ＭＤ−５  ＩＣＶ計算部、  １０９０…ＩＣＶ検査＆ＩＣＶ削除部、  １１００…シーケンス番号検査部、  １１３０…ＥＳＰヘッダ削除部、  １１４０…復号化部、  １１５０…ＩＶ削除・トレーラ削除部、  １１８０…Ｅｔｈｅｒヘッダ書換部、  １１９０、２１７０…スケジューラ部、  ２０３０…パーサ部、  ２０５０…ＥＳＰパディング部、  ２０６０…暗号化部、  ２０７０…シーケンス番号生成・ＥＳＰヘッダ＆ＩＶ挿入処理部、  ２１００…ＩＣＶ計算前処理部、  ２１４０…外側ＩＰヘッダ挿入・ＩＣＶ挿入部
【図１】
0004647479.tif 000016
【図２】
0004647479.tif 000017
【図３】
0004647479.tif 000018
【図４】
0004647479.tif 000019
【図５】
0004647479.tif 000020
【図６】
0004647479.tif 000021
【図７】
0004647479.tif 000022
【図８】
0004647479.tif 000023