以下に、本発明にかかる暗号化通信装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態1.
図1は、本発明に係る暗号化通信装置を含む通信ネットワークの構成を示す図である。通信システム100は、ユーザ側の通信ネットワークであるLAN(Local Area Network)1〜3、LAN1〜3を接続する通信ネットワークであるWAN(Wide Area Network)5、暗号化通信装置10A,10Bを含んで構成されている。
LAN1は、ユーザ側の通信端末である通信端末X1〜Xn(nは自然数)を含んで構成されている。また、LAN2は通信端末Y1〜Ym(mは自然数)を含んで構成され、LAN3は通信端末Z1〜Zl(lは自然数)を含んで構成されている。なお、ここでは説明の便宜上、データ送信側の通信端末を発側端末といい、データ受信側の通信端末を着側端末という場合がある。
暗号化通信装置(カプセル型暗号化通信装置)10Aは、LAN1とWAN5を接続し、暗号化通信装置10BはLAN2,3とWAN5を接続している。暗号化通信装置10A,10Bは、発着端末(発側端末、着側端末)が送受信するIPメッセージを、中継路上で同じIPを使用した別のプロトコルでカプセル化し転送する機能(トンネリング通信機能)を有している。
暗号化通信装置10A,10Bは、トンネリング通信として、例えば、IP−in−IPカプセル化、トンネルモードIPSEC_ESPカプセル化、GRE(Generic Routing Encapsulation)カプセル化、モバイルIPカプセル化などを行う。ここでの暗号化通信装置10Aは、LAN1側から送信されたIPメッセージ(ユーザメッセージ)や通信制御用メッセージ(後述のICMPエラー通知メッセージ73)を、暗号化するとともにカプセル化してWAN5内に転送する。また、暗号化通信装置10Bは、LAN2,3から送信されたIPメッセージや通信制御メッセージを、暗号化するとともにカプセル化してWAN5内に転送する。
さらに、ここでの暗号化通信装置10Aは、他のルータ(中継装置)R1〜R3を介して受信したIPメッセージをデカプセル化するとともに、復号してLAN1側に転送する。また、暗号化通信装置10Bは、他のルータR1〜R3を介して受信したIPメッセージをデカプセル化するとともに、復号してLAN2,3の何れかに転送する。
WAN5は、データの中継装置であるルータR1〜R3を含んで構成されている。ルータR1〜R3は、暗号化通信装置10Aから送信されたIPメッセージを暗号化通信装置10Bに転送するとともに、暗号化通信装置10Bから送信されたIPメッセージを暗号化通信装置10Aに転送する。
例えば、発着端末は、IETF(Internet Engineering Task Force)のRFC(Request For Comments)に記述されるIPv(Internet Protocol Version)4あるいはIPv6メッセージを、ユーザメッセージ(後述のIPメッセージ71等)として用いる。
また、暗号化通信装置10A,10Bは、例えばIETFのRFC2401−RFC2412等に記述されるIPSEC処理を実行し、暗号用通信路としてIPSEC_SAを使用する。また、暗号化通信装置10A,10Bは、例えば暗号用通信メッセージとしてRFC2406に記述されるようなIPSECのESP暗号化メッセージを使用してトンネルモードでIPSEC暗号化する手段を備えている。
また、ルータR1〜R3(暗号化に寄与しない通常の通信装置)が通知する通信制御用メッセージは、例えばRFCに記述されるようなICMPメッセージ(ICMP_Destination_UnreachableメッセージやPacket_Too_BigメッセージなどのMTU超過などの通知メッセージである。
ここで、通信システム100内で送受信されるデータの構成について説明する。図2は、通信ネットワーク内で送受信されるデータの構成を説明するための図である。ここでは、通信端末X1(発側端末)から通信端末Y1(着側端末)へデータ送信する場合であって、ルータR1がMTU超過を検出した場合に通信システム100内で送受信されるデータの構成について説明する。
通信端末X1から暗号化通信装置10Aへ送信されるデータD1(IPメッセージ)は、宛先アドレスである通信端末Y1のアドレス、送信側アドレスである通信端末X1のアドレス、データ部等を含んで構成されている。
暗号化通信装置10Aは、通信端末X1からデータD1を受信すると、このデータD1にESPカプセル化処理を行ってデータD2を作成する。そして、暗号化通信装置10Aは、トンネル通信路130を使用してデータD2(IPSECメッセージ)をWAN5内に転送する。
データD2は、トンネル通信路130内での受信側アドレスとして暗号化通信装置10Bのアドレス(SG2)、送信側アドレスとして暗号化通信装置10Aのアドレス(SG1)、トンネリング用のカプセル化メッセージ(ESPヘッダ、データD1)等を含んで構成されている。
ルータR1がMTU超過を検出した場合、ルータR1から暗号化通信装置10AにICMPエラー通知(データD3)が送信される。このデータD3(後述するICMPエラーメッセージ73)は、トンネル通信路130内での受信側アドレスとして暗号化通信装置10Aのアドレス(SG1)、送信側アドレスとしてルータR1のアドレス(R1)、ICMPヘッダ(MTU超過)を有しており、これらの部分がICMPエラー通知を行う際のトンネル通信に利用される。
また、データD3は、ICMPエラーの原因となった元のメッセージ(データD2)(トンネル送信側アドレス(SG1)、トンネル受信側アドレス(SG2)、トンネル通信用のIPヘッダ)を有している。これらの部分は、暗号化通信装置10AがIPSECメッセージを送信する際のトンネル通信に利用された情報である。
また、データD3は、ESPヘッダ、LAN1内で送受信されたデータに関する情報(着側端末のアドレス(Y1)、発側端末のアドレス(X1))、IPヘッダを有しており、トンネル通信路130内でのデータD3においては、これらの部分がトンネリング用のカプセル化メッセージとして暗号化され隠蔽されている。このため、発着端末のアドレスは内側メッセージに隠蔽されている。
つぎに、暗号化通信装置10A,10Bの構成について説明する。なお、暗号化通信装置10A,10Bは同様の構成を有するので、ここでは暗号化通信装置10Aを例にとって説明する。また、以下では通信端末X1が発側端末であり、通信端末Y1が着側端末である場合を例にとって説明する。
図3は、本発明に係る暗号化通信装置の実施の形態1の構成を示すブロック図である。暗号化通信装置10Aは、発側端末から受信したIPメッセージ71に対応するシーケンス番号などと発側端末アドレスを記憶しておき、発側端末側にICMPエラーを通知する際に発側端末アドレス等を再生する通信装置である。
暗号化通信装置10Aは、端末側I/F(インタフェース)13、トンネル側I/F(受信部)14、出力側SADB11、入力側SADB12、カプセル化処理部20、デカプセル化処理部30、ICMP受信処理部40、ICMP中継再生処理部50、ICMP再生データ管理部60を備えている。
端末側I/F13は、LAN1側の通信インタフェースであり、トンネル側I/F14は、WAN5側(トンネル側)の通信インタフェースである。端末側I/F13は、LAN1〜3側の発側端末(通信端末X1など)からIPメッセージ71を受信するとともに、発側端末へICMPエラー通知メッセージ74やIPメッセージ76を送信する。
IPメッセージ71,76は、発側端末のアドレス、着側端末のアドレス、IPメッセージ部などを含んで構成されている。ICMPエラー通知メッセージ74は、暗号化通信装置10Aのアドレス、発側端末のアドレス、エラーメッセージなどを含んで構成されている。
トンネル側I/F14は、トンネル側の対向する暗号化通信装置10BにIPSEC_ESPカプセル化メッセージ(以下、IPSECメッセージ72という)を送信し、トンネル側のルータR1〜R3からICMPエラー通知メッセージ73やIPメッセージ75を受信する。
IPSECメッセージ72,75は、暗号化通信装置10Aのアドレス、暗号化通信装置10Bのアドレス、暗号化されたIPメッセージ部などを含んで構成されている。ICMPエラー通知メッセージ73は、エラー通知を行うルータR1などのアドレス、暗号化通信装置10Aのアドレス、エラーメッセージなどを含んで構成されている。
出力側SADB11は、IPメッセージ71が使用するSAを決定するための情報(後述する出力側SA情報101)を記憶する。入力側SADB12は、IPSECメッセージ75内の暗号化されたIPメッセージ部を復号するためのSA毎の情報(後述する入力側SA情報)を記憶する。
カプセル化処理部20は、安全な通信路(SA)を確立するための処理、IPSEC_ESP暗号化処理、カプセル化処理等を行なう。カプセル化処理部20は、SA検索部21、SA使用許諾判定部22、暗号化処理部23、ESPヘッダ処理部(送信部)24、認証値計算部25、IPヘッダ処理部26を備えている。
SA検索部21は、安全な通信路を確立するため、IPメッセージ71内の発着アドレス、プロトコル種別、発着ポート番号などに基づいて、出力側SADB11を検索し、IPメッセージ71が使用するSA(通信路識別情報)を決定する。
SA使用許諾判定部22は、SA検索部21によって決定されたSAをIPメッセージ71が使用できるか否かを判定する。SA使用許諾判定部22は、IPメッセージ71がSAを使用可能である場合、使用するSPI値(暗号化通信路情報)をキーとして元のIPメッセージ71の発着端末アドレスをICMP再生データ管理部60(後述のSA使用端末DB61(後述の使用SA情報102))に登録する。
暗号化処理部23は、IPメッセージ71のIPSEC_ESP暗号化処理を行なうため、IPメッセージ71全体を暗号化する。暗号化処理部23は、出力側SADB11がSA毎に持つ情報(出力側SA情報101)を用いて暗号化を行う。
ESPヘッダ処理部24は、暗号化したIPメッセージ71の前にESPヘッダを付与する。ESPヘッダ処理部24は、ESPヘッダに、SA毎に異なるSPI値と、メッセージ毎にカウントアップされるシーケンス番号(メッセージ識別情報)を付与する。ESPヘッダ処理部24は、ICMP再生データ管理部60(後述のシーケンス使用端末DB62(後述のシーケンス番号情報103)に、SPI値とシーケンス番号をキーとして元のIPメッセージ71の発着端末アドレスを登録する。
認証値計算部25は、ESPヘッダと暗号化したIPメッセージ71に対して、ESP認証値を算出し末尾に付与する。IPヘッダ処理部26は、認証値計算部25が生成したESPカプセル化メッセージがSAのMTUを超えている場合、フラグメント等の処理を行ってIPヘッダを付与する。IPヘッダ処理部26が作成したデータは、IPSEC_ESPカプセル化メッセージ(IPSECメッセージ72)として、トンネル側I/F14から対向する暗号化通信装置10Bへ送信される。
ICMP再生データ管理部60は、SA使用端末DB61、シーケンス使用端末DB62を有している。SA使用端末DB61は、SPI値に対応する発側端末のアドレス、着側端末のアドレスに関する情報(使用SA情報102)を記憶する。シーケンス使用端末DB62は、SPI値とシーケンス番号に対応する発側端末のアドレス、着側端末のアドレスに関する情報(シーケンス番号情報103)を記憶する。
デカプセル化処理部30は、IPSEC_ESP復号処理、デカプセル化処理等を行なう。デカプセル化処理部30は、使用SA検索部31、シーケンス検証部32、認証値確認処理部33、リプレイ防御処理部34、復号処理部35、出力前SADB監査部36を有している。
使用SA検索部31は、受信したIPSECメッセージ75内の暗号化通信装置10BのアドレスとSPI値に基づいて、使用するSAを決定する。シーケンス検証部32は、受信したIPSECメッセージ75内のシーケンス番号を検査してリプレイ攻撃を監査し、IPSECメッセージ75の受け入れの可否を決定する。
認証値確認処理部33は、受信したIPSECメッセージ75のESPヘッダと暗号化されたIPメッセージ部に対してESP認証値を算出する。認証値確認処理部33は、算出したESP認証値と、IPSECメッセージ75の末尾に付加されているESP認証値と比較し、IPSECメッセージ75の改ざんの有無を検出する。
リプレイ防御処理部34は、受信したIPSECメッセージ75内のシーケンス番号に基づいて、内部で保持するリプレイ防御ウィンドウの操作を行い、リプレイ防御ウィンドウを更新する。
復号処理部35は、受信したIPSECメッセージ75内の暗号化されたIPメッセージ部を復号する。復号処理部35は、入力側SADB12がSA毎に持つ情報(入力側SA情報)を用いてIPメッセージ部の復号を行なう。
出力前SADB監査部36は、復号して得たIPメッセージ76が図示しない入力側SPD(Security Policy Database)の発着アドレス、プロトコル種別、発着ポートなどに基づく条件に合致しているか否かを監査する。出力前SADB監査部36に監査されて、所定の条件に合致したIPメッセージ76は、端末側I/F13からLAN1内に送信される。
ICMP受信処理部40は、ICMP種別判定部41、ICMP内部パケット抽出部42、ICMP種別対応処理部43を有している。ICMP種別判定部41は、ICMP73の種別を判定する。
ICMP内部パケット抽出部42は、ICMPエラー通知メッセージ73のデータ部が内部メッセージを含む場合に、この内部メッセージを抽出する。ICMP内部パケット抽出部42は、必要に応じて内部メッセージ自体を解析し、発着アドレス(暗号化通信装置10A,10Bのアドレス)、プロトコル種別、発着ポート番号など、一般的なIPメッセージから取得可能な情報を抽出する。ICMP内部パケット抽出部42は、内部メッセージがIPSEC_ESPカプセル化メッセージである場合、さらに内部メッセージの内部まで解析し、ESPヘッダ内のSPI値、シーケンス番号などを抽出する。
ICMP種別対応処理部43は、ICMP種別に応じてICMP処理(例えば暗号化通信装置10Aのルーティングテーブル更新など)や、出力側SADB11のMTU値(送信MTU値)を更新する。
ICMP中継再生処理部50は、ICMP中継処理判定部51、ICMP再生部52、ICMP送信端末決定部(送信先判断部、送信アドレス決定部)53を有している。ICMP中継処理判定部51は、ICMPエラー通知メッセージ73のメッセージ種別(以下、ICMPメッセージ種別という)に基づいて、ICMPエラー通知メッセージ73の通信端末側へのデータ中継処理の要否(ICMPエラー通知メッセージ73を通信端末側へ転送する必要があるか否か)を判定する。
ICMP再生部52は、受信したICMPエラー通知メッセージ73から、通信端末側に送信すべきICMPエラー通知メッセージ74を再生(作成)する。ICMP再生部52は、使用SA情報102やシーケンス番号情報103内の発側端末アドレス、シーケンス番号等に基づいて、ICMPエラー通知メッセージ74を作成する。
ICMP送信端末決定部53は、受信したICMPエラー通知メッセージ73のメッセージ種別と通信端末側へ送信する再生されたICMPエラー通知メッセージ74のICMPメッセージ種別に基づいて、通信端末側へ送信するICMPエラー通知メッセージ74の送信先(送信先となる発側端末範囲)と、そのアドレスを決定する。ICMP送信端末決定部53は、ICMPエラー通知メッセージ74を、例えば発側端末だけ又はSA(SPI値)を使用する全ての発側端末に送信することを決定する。
つぎに、実施の形態1に係る暗号化通信装置10Aの動作手順として、データ送信処理(暗号化処理)、復号処理、ICMP受信処理、本実施の形態1の主たる特徴であるICMP再生処理の各動作手順について説明する。
(送信処理)
まず、通信端末X1(発側端末)からトンネル側(WAN5側)へのデータ送信処理(暗号化処理)について説明する。図4は、発側端末からトンネル側へのデータ送信処理の処理手順を示すフローチャートである。
暗号化通信装置10Aは、発側端末から端末側I/F13を介してIPメッセージ71を受信すると、一般的なルータ機能によってIP受信処理、ルーティング処理を行い、IPメッセージ71の出力先I/F(トンネル側I/F14)を決定する(ステップS110)。なお、図3に示す暗号化通信装置10Aでは、IP受信処理、ルーティング処理を行う手段の図示を省略している。
暗号化通信装置10Aは、ルーティング処理によってIPメッセージ71をトンネル側I/F14へ出力することを決定すると、このIPメッセージ71をカプセル化処理部20に渡す。
カプセル化処理部20では、安全な通信路(SA)を確立するため、まず使用SA検索部21がIPメッセージ71内の発着アドレス、プロトコル種別、発着ポート番号などに基づいて、出力側SADB11を検索し、IPメッセージ71が使用するSAを決定する。使用SA検索部21は、例えば出力側SADB11が記憶する出力側SA情報101を用いてIPメッセージ71が使用するSAを決定する(ステップS120)。
図5は、出力側SA情報の構成の一例を示す図である。出力側SA情報101は、IPメッセージ71を暗号化してSAを確立するための情報であり、「発側端末」、「着側端末」、「暗号化手段」、「認証手段」、「対向装置」、「SPI値」、「共有秘密鍵」、「現在の初期ベクトル値」、「送信MTU値」、「プロトコル種別」、「発着ポート番号」がそれぞれ対応付けられている。
「発側端末」は、通信端末X1等の発側端末(アドレス)を示し、「着側端末」は、通信端末Y1等の着側端末(アドレス)を示している。「暗号化手段」は、「3DES(Data Encryption Standard)」、「DES」等の暗号化を行う手段を示している。
「認証手段」は、「MD(Message Digest)5」や「SHA(Secure Hash Algorithm)1」等の認証に使われるハッシュ関数(認証の手段)を示している。「対向装置」は、対向する暗号化通信装置を示している。なお、ここでのSG(security gateway)2は暗号化通信装置10Bを示し、SG3は暗号化通信装置10A,10B以外の暗号化通信装置を示している。
「SPI値」は、SAを一意に識別するための任意の値(32ビット)である。「共有秘密鍵」は、暗号化通信装置10B等の対向装置との間で共有する暗号化/復号のための秘密鍵である。なお厳密にはSG間の「共有秘密鍵」には暗号化に使用する共有暗号化秘密鍵と、認証に使用する共有認証秘密鍵があるが、以下「共有秘密鍵」はSG間で暗号化に使用する共有暗号化秘密鍵を指す(非特許文献1)。
「現在の初期ベクトル値」は、IPメッセージ71を暗号化する際に用いる擬似乱数の初期ベクトル値(暗号化パラメータ情報)である。「現在の初期ベクトル値」は、1つ前の送信メッセージから生成しメッセージ毎に異なる値が設定される。「送信MTU値」は、トンネル側へ1回の転送で送信できるデータの最大値を示す値(設定値)である。「プロトコル種別」は、発着通信端末が利用する通信プロトコルの種別を示し、「発着ポート番号」は、発着通信端末が利用するポートの番号を示している。
使用SA検索部21が、IPメッセージ71の使用するSAを出力側SA情報101から抽出(発見)できない場合(ステップS130、No)、使用SA検索部21はこのIPメッセージ71を廃棄するか、又は発側端末にICMPエラー通知メッセージ74を送信(応答)する(ステップS140)。
一方、使用SA検索部21がIPメッセージ71の使用するSAを出力側SA情報101から抽出できた場合(ステップS130、Yes)、SA使用許諾判定部22はIPメッセージ71が前記抽出したSAを使用する条件を満たしているか否かを判定する(ステップS150)。
ここでの判定条件には、該当SAは障害により使用不能であるか否か(条件1)、IPメッセージ71にDF(Don't Fragment)フラグが設定されてフラグメント転送不可であるのにSAにはESP処理後の暗号化メッセージ長より小さいMTUが設定され、フラグメントする必要があるか否か(条件2)等の条件がある。例えば、(条件2)の場合、フラグメントする必要があれば、このSAは使用できないと判断される。
SA使用許諾判定部22によってSAの使用不可と判断された場合(ステップS150、No)、暗号化通信装置10Aは発側端末にICMPエラー通知メッセージ74を応答する(ステップS140)。
一方、SA使用許諾判定部22によってSAが使用可能であると判定された場合(ステップS150、Yes)、本実施の形態1に係るSA使用許諾判定部22は、使用するSPI値をキーとして元のIPメッセージ71の発着端末アドレスをSA使用端末DB61(使用SA情報102)に登録する(ステップS160)。
図6は、SA使用端末DBが記憶する使用SA情報の構成の一例を示す図である。ここでの使用SA情報102(アドレス情報)は、現在時刻が例えば123msecである場合を一例として示している。使用SA情報102は、SPI値(SA)に対応する発側端末のアドレス、着側端末のアドレスに関する情報であり、「対向装置」、「SPI値」、「SA使用発アドレス」、「SA使用着アドレス」、「消去予定時刻」がそれぞれ対応付けされている。
「SA使用発アドレス」は、SAを使用する発側端末のアドレスを示し、「SA使用着アドレス」はSAを使用する着側端末のアドレスを示す。「消去予定時刻」は、受信タイムアウトによってデータ消去される時刻を示す。
次に、暗号化処理部23は、IPメッセージ71のIPSEC_ESP暗号化処理を行うため、IPメッセージ71全体を暗号化する(ステップS170)。ここでの暗号化には、出力側SADB11がSA毎に持つ情報(図5に示した出力側SA情報101)を用いる。具体的には、出力側SA情報101の「対向装置」、「共有秘密鍵」、「暗号化手段」、1つ前の送信メッセージから生成しメッセージ毎に異なる現在の擬似乱数の初期ベクトル値(「現在の初期値ベクトル値」)を用いて暗号化を行う。
次に、ESPヘッダ処理部24は暗号化したIPメッセージ71の前にESPヘッダを付与する。ここでのESPヘッダには、SA毎に異なるSPI値と、メッセージ毎にカウントアップされるシーケンス番号が付与される(ステップS180)。
さらに、本実施の形態においては、ESPヘッダ処理部24は、シーケンス使用端末DB62(後述のシーケンス番号情報103)に、SPI値とシーケンス番号をキーとして元のIPメッセージ71の発着端末アドレスを登録する(ステップS190)。
図7は、シーケンス使用端末DBが記憶するシーケンス番号情報の構成の一例を示す図である。シーケンス番号情報103(アドレス情報)は、SPI値とシーケンス番号に対応する発側端末のアドレス、着側端末のアドレスに関する情報であり、「対向装置」、「SPI値」、「シーケンス番号」、「SA使用発アドレス」、「SA使用着アドレス」がそれぞれ対応付けされている。
シーケンス使用端末DB62は、所定のタイミングでシーケンス番号情報103内の所定の情報(一組の対応付け)を削除し、新たな情報(一組の対応付け)を記憶する。すなわち、シーケンス使用端末DB62は、例えば所定の期間だけシーケンス番号情報103内の情報を記憶し、所定の期間経過後に古くなったシーケンス番号情報103内の情報を削除する。また、シーケンス使用端末DB62は、シーケンス番号情報103内の情報を所定数だけ記憶し、所定数を超えて新たな情報を記憶する際には、古くなったシーケンス番号情報103内の情報を削除してもよい。
次に、認証値計算部25はESPヘッダと暗号化したIPメッセージ71に対して、ESP認証値を算出し末尾に付与する。IPヘッダ処理部26は、認証値計算部25が生成したESPカプセル化メッセージがSAのMTUを越えている場合、フラグメント等の処理を行ってIPヘッダを付与する。IPヘッダ処理部26が作成したデータは、IPSEC_ESPカプセル化メッセージ(IPSECメッセージ72という)として、トンネル側I/F14から対向する暗号化通信装置10Bへ送信する(ステップS200)。
(復号処理)
次に、ルータR1等のトンネル側(WAN5側)から受信したデータの復号処理について説明する。図8は、トンネル側から受信したデータの復号処理の処理手順を示すフローチャートである。
トンネル側I/F14は、トンネル側からIPSEC_ESPカプセル化メッセージ(以下、IPSECメッセージ75という)を受信すると、一般的なルータ機能によってIP受信処理、ルーティング処理を行う。この結果、IPSECメッセージ75の宛先が自らの暗号化通信装置10Aである場合、IPSECメッセージ75の着ポート番号、上位プロトコル種別を判定し、上位プロトコル種別がIPSEC_ESPメッセージであった場合、IPSECメッセージ75をデカプセル化処理部30に渡す。ここでは、IPSECメッセージ75の上位プロトコル種別がIPSEC_ESPメッセージであるので、このIPSECメッセージ75がデカプセル化処理部30に入力される。
デカプセル化処理部30では、まず使用SA検索部31が、受信したIPSECメッセージ75内の暗号化通信装置10BのアドレスとSPI値に基づいて、使用するSAを検索し決定する(ステップS310)。
次に、シーケンス検証部32は受信したIPSECメッセージ75内のシーケンス番号を検査してリプレイ攻撃を監査し、IPSECメッセージ75の受け入れの可否を決定する(ステップS320)。シーケンス検証部32がIPSECメッセージ75の受け入れは不可であると決定すると(ステップS320、No)、このIPSECメッセージ75は廃棄される(ステップS330)。
一方、シーケンス検証部32がIPSECメッセージ75の受け入れが可能であると決定すると(ステップS320、Yes)、認証値確認処理部33は、受信したIPSECメッセージ75のESPヘッダと暗号化されたIPメッセージ部に対してESP認証値を算出する。そして、算出したESP認証値と、IPSECメッセージ75の末尾に付加されているESP認証値と比較し、IPSECメッセージ75の改ざんの有無を検出する(ステップS340)。
次に、リプレイ防御処理部34は、受信したIPSECメッセージ75内のシーケンス番号によって、内部で保持するリプレイ防御ウィンドウの操作を行い、リプレイ防御ウィンドウを更新する(ステップS350)。
次に、復号処理部35は、受信したIPSECメッセージ75内の暗号化されたIPメッセージ部を復号する(ステップS360)。ここでの復号には、入力側SADB12がSA毎に持つ情報(入力側SA情報)を用いる。
なお、入力側SA情報(図示せず)は、出力側SA情報と同様の構成を有した情報であり、「発側端末」、「着側端末」、「暗号化手段」、「認証手段」、「対向装置」、「SPI値」、「共有秘密鍵」、「現在の初期ベクトル値」、「送信MTU値」がそれぞれ対応付けられている。
ここでは、入力側SA情報の「対向装置」、「共有秘密鍵」、「暗号化手段」、「現在の初期値ベクトル値」を用いてIPメッセージ部の復号を行う。復号されたIPメッセージ部は、IPメッセージ76として出力前SADB監査部36に入力する。
出力前SADB監査部36は、復号して得たIPメッセージ76が入力側SPDの発着アドレス、プロトコル種別、発着ポートなどに基づく条件に合致しているか否かを監査する(ステップS370)。出力前SADB監査部36に監査されて、所定の条件に合致したIPメッセージ76は、端末側I/F13からLAN1内に送信される(ステップS380)。
(ICMP受信処理)
つぎに、ICMPの受信処理、再生処理の処理手順について説明する。まず、ICMP受信処理の処理手順について説明する。図9は、ICMP受信処理の処理手順を示すフローチャートである。
トンネル側I/F14が、トンネル側からICMPエラー通知メッセージ73を受信すると、通常のルータ機能によってIP受信処理、ルーティング処理を行う。この結果、ICMPエラー通知メッセージ73の宛先が自らの暗号化通信装置10Aである場合、ICMPエラー通知メッセージ73はICMP受信処理部40に渡される。
ICMP受信処理部40は、まずICMP種別判定部41により、ICMP73の種別を判定する(ステップS410)。次に、ICMP内部パケット抽出部42は、ICMPエラー通知メッセージ73のデータ部に内部メッセージを含む場合、この内部メッセージを抽出する。ICMP内部パケット抽出部42は、必要に応じて内部メッセージ自体を解析し、発着アドレス(ここでは暗号化通信装置10A,10Bのアドレス)、プロトコル種別、発着ポート番号など、一般的なIPメッセージから取得可能な情報を抽出する(ステップS420)。
ICMP内部パケット抽出部42は、内部メッセージ自体の解析によって、例えば内部メッセージがIPSEC_ESPカプセル化メッセージであると判定された場合、内部メッセージのさらに内部まで解析し、ESPヘッダ内のSPI値、シーケンス番号などを抽出しておく(ステップS430)。
次に、ICMP種別対応処理部43は、ICMP種別に応じて暗号化通信装置10Aが取るべき処理を行う。この取るべき処理としては、暗号化通信装置10A自体が対処すべきICMP処理(例えば暗号化通信装置10Aのルーティングテーブル更新など)(処理1)と、出力側SADB11の値を更新する処理(処理2)がある(ステップS440)。
例えば、ICMP種別がICMPリダイレクト通知メッセージである場合、ICMP種別対応処理部43は暗号化通信装置10Aのルーティングテーブルで、該当する宛先アドレスへのネクストホップアドレスを更新(処理1)する。
また、ICMP種別がICMP宛先到達不能メッセージである場合、ICMP種別対応処理部43は、まず通知された宛先への転送不能(情報)を暗号化通信装置10Aのルーティングテーブルに登録する(処理1)。さらに、ICMPエラー通知メッセージ73がデータ部にIPSEC_EPSカプセル化メッセージを含む場合、ICMP種別対応処理部43は、抽出したSPI値と着側の暗号化通信装置10Bのアドレスによって決定されるSAに対し、該当SAの使用不可に関する情報を出力側SADB11に登録する(処理2)。
また、ICMP種別がICMP_MTU超過通知メッセージの場合、ICMP種別対応処理部43は、まず暗号化通信装置10Aのルーティングテーブルにおいて通知された宛先へのMTU値を更新する(処理1)。さらに、ICMP種別対応処理部43は、ICMPエラー通知メッセージ73がデータ部にIPSEC_EPSカプセル化メッセージを含む場合、抽出したSPI値と着側の暗号化通信装置10Bのアドレスによって決定されるSAに対し、該当SAに通知されたMTU値からIPSEC処理によるオーバヘッド分を差し引いた値を、SAの更新MTU値として出力側SADB11(出力側SA情報101の「送信MTU値」)に登録する(処理2)。
(ICMP再生処理)
この後、ICMPエラー通知メッセージ73は、本実施の形態1の特徴的な構成要素の1つであるICMP中継再生処理部50に渡される。つぎに、ICMP中継再生処理部50が行うICMPの再生処理の処理手順について説明する。図10は、実施の形態1に係るICMP再生処理の処理手順を示すフローチャートである。
まず、ICMP中継処理判定部51では、ICMPエラー通知メッセージ73のメッセージ種別(ICMPメッセージ種別)に基づいて、このICMPエラー通知メッセージ73の通信端末側へのデータ中継処理の要否を判定する(ステップS510)。
ICMP中継処理判定部51で通信端末側へのデータ中継が必要であると判断された場合(ステップS510、Yes)、ICMP再生部52は、受信したICMPエラー通知メッセージ73から、通信端末側に送信すべきICMPエラー通知メッセージ74の作成を開始する。このとき、ICMP再生部52は、使用SA情報102やシーケンス番号情報103内の発側端末アドレス、シーケンス番号等に基づいて、ICMPエラー通知メッセージ74を作成する。
ICMP再生部52は、ICMPエラー通知メッセージ74を再生する際、例えば受信したICMPメッセージ種別と端末側へ送信するICMPメッセージ種別を同一のものとする。すなわち、ICMP再生部52は、受信したICMPメッセージ種別がMTU超過メッセージなら通信端末側に送信するICMPメッセージ種別もMTU超過メッセージとする。また、ICMP再生部52は、ICMPエラー通知メッセージ74を再生する際、状況によっては暗号化通信装置10Aの解釈に応じて異なるICMPメッセージ種別に設定してもよい。
再生されたICMPエラー通知メッセージ74は、ICMP送信端末決定部53に渡される。ICMP送信端末決定部53では、受信したICMPエラー通知メッセージ73のメッセージ種別と通信端末側へ送信するICMPエラー通知メッセージ74のメッセージ種別に基づいて、通信端末側へ送信するICMPエラー通知メッセージ74の送信先を決定する(ステップS530)。
例えば、ICMPメッセージ種別のタイプが「時間超過」であり、コードが「TTL(Time To Live)超過」の場合、暗号化通信装置10AはIPSECメッセージ72の送信時に、元の通信端末からのメッセージのTTLから1を引いて送信している。このため、このICMPエラー通知メッセージ73は発側端末が設定するTTL値に由来していると考えられる。この場合、ICMP送信端末決定部53は、ICMPエラー通知メッセージ74を発側端末だけに通知すると判断する。
また、ICMPメッセージ種別のタイプが「宛先到達不能メッセージ」であり、コードが「フラグメント必要でDF設定」の場合、ICMPエラー通知メッセージ74の送信先はさらに暗号化通信装置10AのDF設定ポリシーにも依存する。
暗号化通信装置10AのDF設定ポリシーには3種類ある。すなわち、DF設定ポリシーには、送信するIPSECメッセージに必ずDFを設定しない(設定1)、必ずDFを設定する(設定2)、元の通信端末(発側端末)からのDF値をコピーする(設定3)がある。
例えば、設定1の場合、フラグメントが必要でDF設定というエラー自体が発生しない。また、設定2の場合、SAを使用する全ての発側端末は通知されたMTU値まで、送信MTUを下げる必要があり、ICMP送信端末決定処理部は53は、このSAを使用している全通信端末にICMPエラー通知メッセージ74を通知すると判断する。
また、設定3の場合、SAを使用するDFを設定し送信する通信端末だけが、送信MTUを下げる必要があり、ICMP送信端末決定部53は、DFを設定して送信する通信端末(このICMPエラー通知メッセージ73に関連する発側端末)にだけICMPエラー通知メッセージ74を通知すると判断する。
また、ICMPメッセージ種別のタイプが「宛先到達不能メッセージ」であり、コードが「ネットワーク到達不能」またはコードが「ホスト到達不能」の場合には、該当SA自体が到達不能になっているので、ICMP送信端末決定部53は、このSAを使用している全通信端末にICMPエラー通知メッセージ74を通知すると判断する。
このようにしてICMP送信端末決定部53は、SAを使用している全通信端末にICMPエラー通知メッセージ74を通知するか、発側端末だけにICMPエラー通知メッセージ74を通知をするかを決定する。さらに、ICMP送信端末決定部53は、再生したICMPエラー通知メッセージ74を送信する発側端末範囲(後述の発側端末範囲301,302)を決定する(ステップS540)。
ここで、発側端末範囲について説明する。図11は、発側端末範囲を説明するための図である。ここでは、ICMPエラー通知メッセージ74を発側端末だけに送信する場合の発側端末範囲を発側端末範囲301、ICMPエラー通知メッセージ74を、SAを使用している通信端末に送信する場合の発側端末範囲を発側端末範囲302、ICMPエラー通知メッセージ74をSAの収容範囲全体に送信する場合の発側端末範囲を発側端末範囲303で示している。
例えば、ICMPメッセージ種別のタイプが「時間超過」であり、コードが「TTL超過」の場合、ICMPエラー通知メッセージ74を発側端末だけに通知すればよいので、ICMPエラー通知メッセージ74は発側端末範囲301に送信する。
また、ICMPメッセージ種別のタイプが「宛先到達不能メッセージ」、コードが「フラグメント必要でDF設定」の場合で、DF設定ポリシーが設定2の場合、SAを使用している全通信端末にICMPエラー通知メッセージ74を通知する必要があるので、ICMPエラー通知メッセージ74は発側端末範囲302に送信する。
また、ICMPメッセージ種別のタイプが「宛先到達不能メッセージ」、コードが「フラグメント必要でDF設定」の場合で、DF設定ポリシーが設定3の場合、DFを設定して送信する通信端末にだけICMPエラー通知メッセージ74を通知すればよいので、ICMPエラー通知メッセージ74は発側端末範囲301に送信する。
また、ICMPメッセージ種別のタイプが「宛先到達不能メッセージ」であり、コードが「ネットワーク到達不能」または「ホスト到達不能」の場合、SAを使用している全通信端末にICMPエラー通知メッセージ74を通知する必要があるので、ICMPエラー通知メッセージ74は発側端末範囲302に送信する。
ICMPエラー通知メッセージ74を所定の発側端末(発側端末範囲301)だけに通知する場合、ICMP送信端末決定部53は、ICMP内部パケット抽出部42で抽出したESPヘッダ内のSPI値とシーケンス番号とをキーとして、シーケンス使用端末DB62(シーケンス番号情報103)から元の発側端末アドレス(例えば通信端末X1のアドレス)を取得する。そして、再生されたICMPエラー通知メッセージ74は、端末側I/F13を介して、この発側端末アドレスだけに送信される。
また、ICMPエラー通知メッセージ74をSAを使用する全通信端末(発側端末範囲302)に通知する場合、ICMP内部パケット抽出部42で抽出したESPヘッダ内のSPI値をキーとしてSA使用端末DB61(使用SA情報102)からSAを使用している全発側端末アドレス(発側端末範囲302内の全通信端末のアドレス)を取得する。そして、再生されたICMPエラー通知メッセージ74は、端末側I/F13を介して、この全発側端末アドレスに送信される。
ここで、本実施の形態1に係る暗号化通信装置10Aと従来の暗号化通信装置(発側トンネル装置)の差異を明確にするため従来の発側トンネル装置の問題点を説明する。ICMPエラー通知メッセージ74は、種別によって以下の種別1〜3の3つに分けることができる。すなわち、ICMPエラー通知メッセージとしては、まず「Echo_Reply」のように通信端末間又は暗号化通信装置間で直接やり取りされるカプセル化と関係無いICMPメッセージ(種別1)がある。また、ICMPエラー通知メッセージとして、ICMPパラメタ不良・リダイレクト・宛先到達不能・時間超過メッセージのように、暗号化通信装置10Aなどのトンネル装置に返答されるメッセージで、中継路上でカプセル化されていることを知らない送信元ホストがそのまま受信しても意味が無いICMPメッセージ(種別2)がある。さらに、ICMPエラー通知メッセージとして、ICMP発信元送信抑制、ICMPエラー通知メッセージのように発側端末に直接返答されるべきICMPメッセージ(種別3)がある。
ICMPエラー通知メッセージ73には、ICMP発信元送信抑制、ICMP_MTU超過(フラグメントが必要でDF設定あり)、ICMP宛先到達不能、ICMPパラメタ異常、ICMPリダイレクト通知など、ICMPエラー通知メッセージにエラーを検出する原因となった元メッセージの一部をデータとして付与するものがある。このため、元メッセージを内包するICMPエラー通知メッセージ73は、種別3のような発側端末に直接返答されるべきICMPメッセージが多い。なぜなら、これらのICMPメッセージは、発側端末に着側端末への到達不能という障害通知と、その障害の原因を発側端末が解析するために、元メッセージも通知する目的を持っているからである。
このため、従来までの発側トンネル装置では、トンネル経路上IPルータから自装置宛てのICMPエラー通知メッセージ73を受信すると、受信したICMPエラー通知メッセージ73の種別を調べ、種別3のようなトンネル経路上IPルータから発側端末へ通知されるべきICMPメッセージで、かつICMPエラー通知メッセージ73が元メッセージの一部をデータとして含んでいる場合、さらにICMPエラー通知メッセージの内側まで深く解析して発着端末アドレスを判定し、所定の発側端末アドレスへICMPエラー通知メッセージ73を中継転送する必要があった。
ところが、発側トンネル装置は、IPSEC環境でのICMPエラー通知メッセージ73から発着端末アドレスを判定しようとすると、このデータ部に付与される元メッセージは発側トンネル装置自体が生成したトンネリング用のカプセル化メッセージになってしまっている。
なぜなら、発側トンネル装置はIPメッセージの送信時に、発着端末間のIPメッセージを内側に隠蔽し、外側に発着トンネル装置アドレスを設定したトンネリング用の外側のカプセル化メッセージで送信しているからである。すなわち、実際の発側端末アドレスは、発側トンネル装置が受信したICMPエラー通知メッセージ73の、データ領域に付与されたエラーの原因となったカプセル化メッセージの、さらにその内側に存在している。
ICMPエラー通知メッセージ内に付与されるデータ領域の最低長は、RFCの規定では、元のメッセージ(この場合はカプセル化メッセージ)のIPヘッダ長+64Byte以上である。
例えば、発側トンネル装置がIPメッセージをカプセル化して送信する際に、カプセル化に使用するパラメータが多い、あるいは各々のパラメータが使用するバイト数が大きい等の理由で、構成されるカプセル化ヘッダ長が大きくなる場合がある。このような場合、カプセル化ヘッダ長により実際に通信端末が使用する真のメッセージのIPヘッダ部を復元するのに必要な長さが、ICMPエラー通知メッセージ内に付与されるデータ領域の最低長64Byteで収まらない場合がある。このとき、従来の発側トンネル装置では、内側に存在する発着端末アドレスを直接判定できないこととなる。
また、トンネルモードのIPSEC_ESP処理を実行する場合、内側のメッセージ(実際に通信端末が使用する真のメッセージ部)はトンネル経路上で暗号化+カプセル化して隠蔽される。これにより、発側トンネル装置はICMPエラー通知メッセージ内に含まれる元メッセージ(発着トンネル装置アドレスを持った外側のカプセル化メッセージヘッダ)の内容は解析できるが、内側の通信端末が使用する真のメッセージ部は暗号化され、そのヘッダ部までは直接解析できないこととなる。このため、発側トンネル装置は、ICMPエラー通知メッセージ73を戻すべき発側端末アドレスを直接判定できないこととなる。
さらに、従来の暗号化通信装置では、トンネル経路に収容する発着端末アドレスとしてアドレスの範囲を指定し、複数の発着端末アドレスからのメッセージをまとめてこのトンネルに収容して転送する場合に、収容アドレス範囲が指定されたICMPエラー通知メッセージ73を発側端末に戻すだけでは不十分な場合がある。これは、トンネル経路上のルータから受信したICMP宛先到達不能などのICMPエラー通知メッセージ73は、その障害を検出する要因となったメッセージを送信した発側端末だけに対処すべき問題があるのではなく、このメッセージが収容されたトンネルの発アドレス範囲内に存在する通信端末全てにとって、対処すべき問題が発生した障害だからである。
つまり、この場合に問題となる障害はトンネルに関係しているので、発側トンネル装置はトンネル経路上ルータから受信したICMPエラー通知メッセージ73を、このトンネルを使用している(使用する可能性のある)発側端末にも通知することが望ましい。
このような場合、ICMPエラーを通知すべき発側端末は、障害が発生したトンネルに収容する発側アドレス範囲(発側端末範囲303)内に存在する。ところが、どの発側端末が現在、そのトンネルを使用している(使用する可能性がある)かを判断する情報がICMPエラー通知メッセージ73には含まれず、さらにカプセル化トンネリング装置自体も判断情報を持たないため、実際にそのトンネルを使用している発側端末範囲302の判定を行うことは難しい。
トンネルの収容発側アドレス範囲の発側端末の全て(発側端末範囲303)にICMPエラー通知メッセージ73すると、実際にはこのトンネルを使用している発側端末数がトンネルの発側アドレス範囲の端末数に比べて小さい場合、多くの不要なICMPエラー通知メッセージ73が通信端末側に通知されることになる。例えば、トンネルの発側アドレス範囲=(192.168.0.0/16)の65535台に対し、実際にこのトンネル使用する端末のアドレスが(192.168.0.1−192.168.0.10)の10台程度である場合、多くの不要なICMPエラー通知メッセージ73が通信端末側に通知されることになる。これにより、通信端末へのICMPエラー通知メッセージ74、あるいはこれに伴うARP送受信などによって帯域の無駄な消費になる。
一方、ICMPエラー通知メッセージ73をその障害を検出する要因となったメッセージの発側端末(発側端末範囲301)のみに通知すると、実際にはこのトンネルを使用している通信端末数が非常に多い場合、トンネルを使用する多くの通信端末へのICMPエラー通知処理が複雑になる。例えば、トンネルの発側アドレス範囲=(192.168.0.0/24)に対し、実際にこのトンネル使用する通信端末のアドレスが(192.168.0.1−192.168.0.250)の250台と多い場合がある。
このとき、トンネルを使用する多くの通信端末は、各々が通信端末からトンネルを使用するメッセージを送信し、発側トンネル装置はこの各々の通信端末が送信するメッセージを受信する。そして、発側トンネル装置は各々のメッセージに使用するトンネルを判定し、さらにこの障害が発生したトンネルを使用するのでICMPエラー通知メッセージの転送不可と判定した後、ようやくICMPエラー通知メッセージ74をその通信端末だけに応答することとなる。
すなわち、非特許文献1で説明した状況が各々の通信端末に対して大規模に発生し、発側端末は中継路上のトンネル使用不可による障害発生を、各々の通信端末が次のメッセージを送信しICMPエラーが応答されるまで知ることは出来ないというタイムタグが発生する。さらに、各々の発側端末が個別にメッセージを送信し、それに伴い個別にICMPエラー通知されることで、多くの不要な送信メッセージが発側トンネル装置に送信され、帯域の無駄な消費になるだけでなく、発側トンネル装置の処理負荷も増大する。
一方、本実施の形態1に係る暗号通信装置10Aは、SA使用端末DB61(使用SA情報102)とシーケンス使用端末DB62(シーケンス番号情報103)を備え、IPSECメッセージ72の送信時に、SAを使用する発着通信端末と、シーケンス番号毎の発着通信端末アドレスを記憶するようにしている。
また、暗号通信装置10Aは、ICMP中継処理判定部51、ICMP再生部52、ICMP送信端末決定部53を備え、ICMPエラー通知メッセージ73の受信時には、通知されたICMPエラーの内容を解釈するとともに、ICMPエラー通知メッセージ74を再生している。さらに、受信したICMPエラーの種別に応じて、ICMPエラー通知メッセージ74を通知する発側端末を決定し、使用SA情報102、シーケンス番号情報103に基づいて、ICMPエラー通知メッセージ74を通知する発側端末のアドレスを回復できるようにしている。
これにより、ICMPエラー通知メッセージ73を受信した際の発着端末アドレスをICMPエラー通知メッセージ73から直接判定することが可能となる。したがって、暗号化通信装置10Aがトンネリング通信を利用し、トンネル経路上で送受信されるトンネリングメッセージの発着アドレスが発着トンネル装置(暗号化通信装置10A,10B)のアドレスとなり、発着端末のアドレスが内側メッセージに隠蔽されてしまう場合であっても、適切な発側端末にICMPエラー通知メッセージ74を送信することが可能となる。
このように実施の形態1によれば、暗号通信装置10Aは、発側端末から送信された元のIPメッセージの部分が暗号化されている場合であっても、暗号化通信路上(トンネル側)から送信IPSECメッセージ72を含むICMPエラー通知メッセージ73を受信した際に、ICMPエラー通知メッセージ73を必要とする発側端末を適切に判断することが可能となる。したがって、容易にICMPエラー通知メッセージ74を適切な発側端末に通知することが可能となる。
また、暗号通信装置10Aは、ICMPエラー通知メッセージ73の必要な発側端末を絞り込んでICMPエラーを通知するので、暗号通信装置10Aが通信端末に送信する不要なICMPエラーの通知量(データ量)を削減できる。
また、暗号通信装置10Aは、トンネル経路上のIPルータ(ルータR1〜R3)からICMPエラー通知メッセージ73を受信した際に、発側端末側にICMPエラー通知メッセージ73を行なうので、発側端末が、発側端末から送信したメッセージが暗号化通信路(トンネル経路)上で発生させた障害や状態変化を知るまでのタイムラグを短くさせることが可能となる。したがって、発側端末は、暗号化通信路を使用する不要なメッセージを送信することが無くなり、発側端末が暗号通信装置10Aに送信する不要な送信メッセージ量も削減できる。これにより、帯域の無駄な消費を抑制し、発側端末に効率良くICMPエラー通知メッセージ74を通知することが可能となる。
また、暗号通信装置10Aは、SA使用端末DB61(使用SA情報102)で受信タイムアウトとなったデータを削除(忘却)するので、SA使用端末DB61を効率良く利用することができるとともに、メモリ容量を小さく構成することが可能になる。
また、暗号通信装置10Aは、シーケンス使用端末DB62(シーケンス番号情報103)で、所定時間の経過後等に古くなったデータを削除するので、シーケンス使用端末DB62を効率良く利用することができるとともに、メモリ容量を小さく構成することが可能になる。
実施の形態2.
つぎに、図12〜図15を用いてこの発明の実施の形態2について説明する。実施の形態2では、暗号化された元のIPメッセージの一部を復号して、ICMPエラー通知メッセージ74を送信すべき発側端末のアドレスを割り出す。
図12は、本発明に係る暗号化通信装置の実施の形態2の構成を示すブロック図である。図12の各構成要素のうち図3に示す実施の形態1の暗号化通信装置10Aと同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
ここでの暗号化通信装置10Aは、ICMP再生データ管理部60にSA使用端末DB61を備えている。また、暗号化通信装置10Aは、ICMP中継再生処理部50に、ICMP中継処理判定部51、ICMP復号・再生処理部55、ICMP送信端末決定部53を有している。
ICMP復号・再生処理部55は、受信したICMPエラー通知メッセージ73(後述のメッセージM11〜M15)に付与されたIPSECメッセージから、IPSEC_ESPヘッダと初期ベクトル値を得て、元のIPメッセージヘッダを復号する。
つぎに、実施の形態2に係る暗号化通信装置10Aの動作手順について説明する。なお、実施の形態1の暗号化通信装置10Aと同様の動作を行なう手順についてはその説明を省略する。
(送信側での暗号化処理)
図13は、送信側の暗号化通信装置の暗号化処理を説明するための図である。暗号化通信装置10Aの暗号化処理部23は、発側端末からのIPメッセージ71を受信して、対向する暗号化通信装置10BへIPSECメッセージ72を送信するため、IPメッセージ71の暗号化処理を行なう。
このとき、暗号化処理部23は、対抗する暗号化通信装置10Bと共有する共有秘密鍵81、最初の送信メッセージの時は初期ベクトル値の初期値82、あるいは後続の送信メッセージではその1つ前の送信メッセージの暗号化データ(暗号ブロックの最終ブロック)から生成する初期ベクトル値131〜134を用いて、各メッセージM1〜M5(IPメッセージ71)を暗号化する。初期ベクトル値の初期値82、初期ベクトル値131〜135は、メッセージ毎に異なる擬似乱数の初期ベクトルであり、暗号化処理部23は、この初期ベクトル値の初期値82、あるいは初期ベクトル値131〜134を用いて、暗号化に使用する暗号化ブロック長単位でIPメッセージ71を暗号化する。
これらの初期ベクトル値は、各パケット(メッセージM1〜M5)毎に、ESPデータ内の最初の部分に付与される。すなわち、初期ベクトル値は、ESPヘッダの直後の部分であって、暗号化するIPメッセージ71の前(暗号化データの前)に付与される。すなわち、初期ベクトル値はESPヘッダと暗号化したIPメッセージの間に入れられている。なお、ここでの初期ベクトル値はESPヘッダには含まれずペイロード部に含まれている。
(送信側でのICMP復号処理)
図14は、送信側の暗号化通信装置のICMP復号処理を説明するための図である。暗号化通信装置10AのICMP復号・再生処理部55は、ルータR1〜R3からICMPエラー通知メッセージ73(メッセージM1〜M5に対応するメッセージM11〜M15)を受信すると、このメッセージM11〜M15の暗号化に使用した初期ベクトル値の再生と、メッセージM11〜M15の復号を行なう。
ここでのメッセージM11〜M15の復号には、共有秘密鍵81、初期ベクトル値の初期値82、初期ベクトル値131〜134が必要となる。共有秘密鍵はSAが永続する限り不変であるが、各初期ベクトル値131〜135はメッセージ毎に可変となる。
このためICMP復号・再生処理部55は、受信したICMPエラー通知メッセージ73(メッセージM11〜M15)に付与されたIPSECメッセージから、IPSEC_ESPヘッダの初期ベクトル値を得て、元のIPメッセージヘッダ(IPヘッダ)を復号する。
この時、受信したICMPエラー通知メッセージ73に付与されるデータ長としては、IPSEC_ESPヘッダ長+各暗号化アルゴリズムが使用する初期ベクトル長+元のIPメッセージのヘッダ長分が必要となる。さらに、元のIPメッセージヘッダはブロック暗号のブロック暗号長単位で復号される。このため、ルータR1〜R3が応答するICMPエラー通知メッセージ73(メッセージM11〜M14)の付与メッセージ長は、暗号化通信装置10Aと暗号化通信装置10Bの間で使用されるIPSECメッセージのIPヘッダ長に加え、以下のヘッダ長を用いて応答する。すなわち、ルータR1〜R3は、IPSECメッセージのIPヘッダ長、IPSEC_ESPヘッダ長と各暗号化アルゴリズムが使用する初期ベクトル長(A)、暗号化された元のオリジナルメッセージのIPヘッダ長(B)の合計値以上のデータ長で、メッセージM11〜M14を暗号化通信装置10Aに応答する。
なお、(B)のデータの暗号化はDES、3DES等のブロック暗号により行われるとともに、ブロック暗号は64bitや128bit等のブロック単位長毎でないと暗号化通信装置10Aで復号できないため、(B)のデータ長(オリジナルメッセージ長のIPヘッダ長)は、使用するブロック暗号化アルゴリズムの暗号化ブロック単位長で切り上げた長さとする。
ここでは、メッセージM2,3,5に対応するメッセージM12,13,15がルータR1〜R3の何れかからICMP応答なしの場合を示している。このような場合であっても、ICMP復号・再生処理部55が、例えばメッセージM14を復号する際には、メッセージM14に付与されたIPSECメッセージから、IPSEC_ESPヘッダの直後の初期ベクトル値を得て、元のIPメッセージヘッダ(IPヘッダ)を復号できる。
(受信側でのメッセージ復号処理)
図15は、受信側の暗号化通信装置のメッセージ復号処理を説明するための図である。ルータR1〜R3の何れかから暗号化通信装置10BへICMPエラー通知メッセージ73が送られることなく、暗号化通信装置10Aから暗号化通信装置10Bへ、IPSECメッセージ72が送信されると、暗号化通信装置10Bの復号処理部35は受信したIPSECメッセージ72(メッセージM1〜M5に対応するメッセージM21〜M25)の復号を行なう。このとき、暗号化通信装置10Bは、メッセージM21〜M25の暗号化に使用した初期ベクトル値を再生し、メッセージM21〜M25の復号を行なう。
ここでは、メッセージM2に対応するメッセージM22がルータR1〜R3の何れかによる廃棄処理によって欠落している場合を示している。このような場合であっても、復号処理部35が、例えばメッセージM23を復号する際には、IPSEC_ESPヘッダの直後の初期ベクトル値を得て、メッセージM23に付与されたIPSECメッセージ部を復号する。
なお、ここでは暗号化通信装置10Aから暗号化通信装置10Bへ送信するメッセージがメッセージM1〜M5の5つである場合について説明したが、メッセージ数は5つに限られず4つ以下でもよいし6つ以上でもよい。
このように実施の形態2によれば、ICMPエラー通知メッセージ73に付与するデータ長を、IPSECメッセージのIPヘッダ長、IPSEC_ESPヘッダ長と各暗号化アルゴリズムが使用する初期ベクトル長(A)、暗号化された元のオリジナルメッセージのIPヘッダ長(B)の合計値以上のデータ長(元のオリジナルメッセージ長のIPヘッダを復号できる十分なデータ長)としているので、ICMP復号・再生処理部55は、所望の元のオリジナルメッセージのIPヘッダを復号することが可能となる。これにより、暗号化通信装置10Aは、ICMPエラー通知メッセージ73を送信すべき通信端末のアドレス(端末識別情報)を得ることができ、適切な通信端末にICMPエラー通知メッセージ74を送信することが可能となる。
また、暗号化通信装置10Aは、ICMPエラー通知メッセージ73からICMPエラー通知メッセージ73を送信すべき通信端末のアドレスを得ることができるので、シーケンス番号等を記憶しておくシーケンス使用端末DB62を用いることなく、簡易な構成で適切な通信端末にICMPエラー通知メッセージ74を送信することが可能となる。
実施の形態3.
つぎに、図16〜図18を用いてこの発明の実施の形態3について説明する。実施の形態3では、IPSECメッセージ72を送信する際にIPSECメッセージ72を識別するための情報を記憶しておき、ICMPエラー通知メッセージ73を受信した際には、記憶しておいた情報に基づいて、ICMPエラー通知メッセージ73が偽装したものであるか否かを判断する。これにより、偽装されたIPSEC_ESPヘッダ部のシーケンス番号を持ったICMPエラーを通知して通信を妨害するDoS攻撃に耐性を持たせる。
図16は、本発明に係る暗号化通信装置の実施の形態3の構成を示すブロック図である。図16の各構成要素のうち図3に示す実施の形態1の暗号化通信装置10Aと同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
ここでの暗号化通信装置10Aは、シーケンス認証値DB(記憶部)91を備えている。また、暗号化通信装置10Aは、ICMP受信処理部40に、ICMP内部パケット抽出・監査処理部45を備えている。
シーケンス認証値DB91は、暗号化通信装置10AがIPSECメッセージ72を送信する際に算出される、独自のメッセージダイジェスト認証値(後述の偽装検出用認証値)に関する情報(後述の認証値情報104)を記憶する。
ICMP復号・再生処理部55は、暗号化通信装置10AにICMPエラー通知メッセージ73や後述の偽装メッセージが通知された際、元のIPSECメッセージ72のIPヘッダ+64Byteに対して偽装検出用認証値を算出するとともにシーケンス番号を抽出する。ICMP内部パケット抽出・監査処理部45は、抽出したシーケンス番号をキーとして、シーケンス認証値DB91からシーケンス番号に対応する偽装検出用認証値を抽出し、シーケンス認証値DB91から抽出した偽装検出用認証値と算出した偽装検出用認証値を比較して、偽装メッセージを検出する。
つぎに、偽装されたICMPエラー通知メッセージ73の検出方法について説明する。正規のルータであるルータR1等が送信するICMPエラー通知メッセージ73と、偽物のルータ(以下、偽装ルータという)が送信するICMPエラー通知メッセージ(以下、偽装メッセージという)は、ESPヘッダ+データ部が僅かに異なっている。
これは、偽装ルータが正規の元のIPSECメッセージ72を知ることが出来ないため、偽装ルータが予測によって偽装メッセージに含める元のIPSECメッセージ72の部分(データ部)を生成するからである。
本実施の形態3に係る暗号化通信装置10Aは、通信システム100内で、ルータR1等が送信するICMPエラー通知メッセージ73と、偽装ルータが送信する偽装メッセージとで異なる部分を抽出し、偽装メッセージを検出する。
偽装ルータは、発側の暗号化通信装置10Aや着側の暗号化通信装置10Bのアドレス、中継路上にある正規のルータR1〜R3のアドレス、ESPで使用するSPI値などは何らかの手段で入手できる可能性がある。また、ESPで使用するシーケンス番号は1から順に始まることなどを利用して、偽装メッセージを偽造できる場合がある。
しかしながら、発側端末が実際に転送するIPメッセージ71をさらに暗号化したIPSECメッセージ72の内部パケットの部分まで偽造することは、実際のIPSECメッセージ72を受信可能な正規の暗号化通信路上のルータR1〜R3以外には不可能である。
正規のICMPエラー通知メッセージ73に含まれる元のIPSEC_ESPメッセージと、偽装メッセージに含まれるIPSEC_ESPメッセージの異なる部分(差異)として各バイト位置の値があげられる。ところが、この差異は全てのバイト位置で必ず発生するという分けではない。特定の1バイト同士でメッセージを比較する場合、例えば攻撃者はその特定のバイトを0x00〜0xffまでの全ての値を持った偽造したICMPエラー通知を生成すれば、簡単に発側の暗号通信装置10Aの偽装検出を回避することができてしまう。
一方、送信した真のIPSECメッセージ72の元のIPSEC_ESPメッセージの全バイトと、偽装メッセージが含むIPSEC_ESPメッセージの全バイトについて異なる部分を検査し、1バイトでも違いが発生していれば、それは偽装メッセージであると判断できる。
したがって、本実施の形態3においては、発側の暗号通信装置10Aは、送信する全てのIPSECメッセージ72を所定の期間保存し、ICMPエラー通知メッセージ73や偽装メッセージが応答されると、メッセージ内に付与された元のIPSEC_ESPメッセージの一部と保存しておいたIPSECメッセージ72を比較する。そして、両者に差異があれば、この差異を検出してメッセージの受け入れを拒否する。
また、本実施の形態3においては、発側の暗号通信装置10Aは、メッセージダイジェスト認証を用いて正当なメッセージと偽装メッセージの差異比較や差異点の抽出処理を行なう。
元のIPSECメッセージ71には図13に示したように、メッセージダイジェスト認証値が付与され保護されている。しかしながら、このメッセージダイジェスト認証値は、元のIPSEC_ESPメッセージの最後に付与されるので、通知されたICMPエラー通知メッセージ73からは、元のIPSEC_ESPメッセージの正当性は検証できない。
そこで、ここでの暗号化通信装置10Aの認証値計算部(第1の識別情報算出部)25は、通常のIPSEC_ESPメッセージ全体を保護する標準のメッセージダイジェスト認証値の他に、自身だけが使用する別のメッセージダイジェスト認証値(以下、偽装検出用認証値という)を計算して保持するようにする。
図17は、偽装検出用認証値の算出方法を説明するための図である。同図において上側のパケットは、暗号化通信装置10Aが送信するIPSECメッセージ72(IPSEC_ESPパケット)を示し、下側のパケットは暗号化通信装置10Aが受信するICMPエラー通知メッセージ73を示している。
暗号化通信装置10AがIPSECメッセージ72を送信する際、認証値計算部25は、元のIPSEC_ESPメッセージに付与される部分(送信するIPSECメッセージ72のIPヘッダ+64Byte(ESPヘッダ+一部のデータ部)に対して独自のメッセージダイジェスト認証である偽装検出用認証値を算出し、シーケンス認証値DB91に記憶させておく。偽装検出用認証値は、後述の認証値情報104としてシーケンス認証値DB91に記憶させておく。
ここで、シーケンス認証値DB91が記憶する偽装検出用認証値(認証値情報104)について説明する。図18は、認証値情報の構成の一例を示す図である。認証値情報104は、偽装ルータから送信されてきた偽装メッセージを検出するための情報であり、「対向装置」(アドレス)、「SPI値」、「シーケンス番号」、「偽装検出用認証値」がそれぞれ対応付けされている。すなわち、ここでの認証値情報104は、「シーケンス番号」と「偽装検出用認証値」が対応付けされており、IPSECメッセージ72を送信した際に記憶しておいた「偽装検出用認証値」を「シーケンス番号」に基づいて検索できる構成となっている。
ここでは、暗号化通信装置10AがIPSECメッセージ72を送信する際に、認証値計算部25がICMPエラー通知メッセージ73で応答される可能性のあるIPヘッダ+64Byte分を対象として偽装検出用認証値を算出し、シーケンス番号をキーとしてシーケンス認証値DB91に保存しておく。
暗号化通信装置10AにICMPエラー通知メッセージ73や偽装メッセージが通知された際、ICMP内部パケット抽出・監査処理部(第2の識別情報算出部)45は、元のIPSECメッセージ72のIPヘッダ+64Byteに対して偽装検出用認証値を算出するとともにシーケンス番号を抽出する。そして、ICMP内部パケット抽出・監査処理部45は、抽出したシーケンス番号をキーとして、シーケンス認証値DB91からシーケンス番号に対応する偽装検出用認証値を抽出する。さらに、ICMP内部パケット抽出・監査処理部(偽装判断部)45は、シーケンス認証値DB91から抽出した偽装検出用認証値と算出した偽装検出用認証値を比較する。
算出した偽装検出用認証値が抽出した偽装検出用認証値と等しい場合、このメッセージは正当なICMPエラー通知メッセージ73であり、等しくない場合は偽装メッセージである。したがって、ICMP内部パケット抽出・監査処理部45は、算出した偽装検出用認証値が抽出した偽装検出用認証値と等しい場合に、メッセージ(ICMPエラー通知メッセージ73)を受け入れる。一方、ICMP内部パケット抽出・監査処理部45は、算出した偽装検出用認証値が抽出した偽装検出用認証値と等しくない場合に、メッセージ(偽装メッセージ)の受け入れを拒否する。
なお、偽装検出用認証値の算出は、暗号化通信路上のルーティング処理によって変更される可能のある領域(例えば、IPSECのIPヘッダ部のTOS(Type Of Service)領域、チェックサム領域、DS(Differentiated Services)フィールドなど)を除いて算出してもよい。
これにより、暗号化通信路上の、ICMPエラー通知メッセージ73を応答するルータR1〜R3以外の偽装ルータが、これらの領域(TOS領域やチェックサム領域など)を変更しても、暗号化通信装置10Aは、確実にICMPエラー通知メッセージ73の応答ルータが暗号化通信路上に存在する正規なルータR1〜R3なのか、偽装ルータなのかを判定できる。
ここで、本実施の形態3に係る暗号化通信装置10Aと従来の暗号化通信装置(発側トンネル装置)の差異を明確にするため従来の発側トンネル装置の問題点を説明する。現実のIPネットワークでは、ICMPエラー通知の多くをIPSEC非対応のルータが送信している。このため従来まではICMPエラー通知の正当性を直接確認できなかった。
したがって、従来までは、通知されたICMPエラー通知あるいは偽装メッセージを全て受け入れるか、全て拒絶するか、あるいはICMPエラー通知に所定のチェックを行なって正当なICMPエラー通知だけを受け入れるかのいずれかである。
ところが、ICMPエラー通知を直接的にチェックをして受け入れる技術は従来までなかった。また、全て受け入れる場合には、ICMP_MTU超過やICMP宛先到達不能などネットワーク障害に関する重大な通知を、それが正当であるかとどうかをチェックすることなく受け入れることになり、容易にDoS攻撃が可能になってしまうという問題が発生する。
また、全て拒絶する場合には、ICMP_MTU超過やICMP宛先到達不能などネットワーク障害に関する重大な通知を全く拒否することになり、重要な障害が検出できないという問題が発生する。
一方、本実施の形態3に係る暗号通信装置10Aは、IPSECメッセージ72を送信する際にIPSECメッセージ72に基づいて偽装検出用認証値を算出し、IPSECメッセージ72が必ず保持するパケット毎のシーケンス番号と関連付けて記憶している。そして、ICMPエラー通知メッセージ73を受信した際には、このICMPエラー通知メッセージ73に基づいて偽装検出用認証値を算出している。
そして、IPSECメッセージ72から算出した偽装検出用認証値と、ICMPエラー通知メッセージ73から算出した偽装検出用認証値に基づいて、受信したICMPエラー通知メッセージ73が偽装したものであるか否かを判断している。
これはシーケンス番号のカウントアップが保証され、それにより各IPSECメッセージを一意に識別できるIPSEC固有の方法であり、シーケンス番号などを持たない既存のIPパケットなどでは、例え独自の認証値を計算してもそれがどの送信パケットに対応する認証値か、ICMPエラー通知メッセージ受信時に比較することができないので、この方法は利用できないのである。
また、ICMPエラー通知の偽装に注目し、暗号化通信装置10Aは、自身は再生したICMPエラー通知メッセージ74を通信端末側に送信し、通信端末に暗号化通信路上の障害を通知を可能とする機能を持たせるとともに、暗号化通信路上の不正な偽装ルータから受信する偽装メッセージ(偽造したICMPエラー通知)は受け入れないよう構成した。これにより、暗号化通信装置10Aは、IPSEC_ESP環境下において柔軟なICMP制御が可能となる。
このように実施の形態3によれば、発側の暗号化通信装置10Aは、ICMPエラー通知時にこの通知メッセージが暗号経路上に存在する正規のルータR1〜R3からのICMPエラー通知メッセージ73であるか、偽装ルータからの偽装メッセージであるかを容易に判断でき、ICMPエラー通知に起因するDoS攻撃を防御することが可能になる。
また、IPSECメッセージ72の送信時に偽装検出用認証値を保存するので、IPSECメッセージ72全体、やIPSECメッセージ72の必要な部分を保存するのと比べて、必要なメモリ量を大幅に削減できる。したがって、簡易な構成で偽装ルータからの偽装メッセージを検出でき、ICMPエラー通知に起因するDoS攻撃を防御することが可能になる。
また、偽装検出用認証値をシーケンス番号に対応付けて保存しているので、偽装検出用認証値の比較計算量を削減でき、偽装検出用認証値の比較を容易かつ迅速に行なうことが可能となる。
以上説明したように、実施の形態1〜3では、リプレイ攻撃の防御という目的を持つIPSEC_ESPヘッダ内のシーケンス番号が、送信IPSECパケットを一意に識別可能とするインデクッス機能を持つことに注目している。そして、このシーケンス番号を、発着端末アドレスの管理、初期ベクトル値の管理、送信メッセージ認証値(偽装検出用認証値)の管理に用いて実施の形態1〜3を実現している。また、1つのシーケンス番号でリプレイ攻撃の防御と発着端末アドレスの割り出し等を行なえるので、IPSEC_ESP暗号化メッセージヘッダ長を削減することが可能となる。