(57)【要約】【課題】本発明は、ネットワークセキュリティを強化するために、データプレーンからの攻撃に対する耐性を向上させることができる通信装置を提供する。【解決手段】監視部は受信したパケットの認証情報を検証し、ルール検証部はパケットにマッチするルールの認証情報を検証する。監視部は、認証情報が検証されたルールに従って、転送するパケットの認証情報を生成する。【選択図】図２
2019530344.tif 000002
【特許請求の範囲】
【請求項１】
受信したパケットの認証情報を検証する監視部と、
前記パケットにマッチするルールの認証情報を検証するルール検証部と、
を備え、
前記監視部は、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成する、ことを特徴とする通信装置。
【請求項２】
前記監視部及び前記ルール検証部のうちの少なくとも一方は、前記通信装置内に設けられた、隔離された実行環境内に配置される、ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記監視部は、前記ルールの前記認証情報の検証が成功した前記ルールに従って転送される前記パケットの前記認証情報を生成する、ことを特徴とする請求項１又は２記載の通信装置。
【請求項４】
パケット変更を指示し、認証情報が検証された前記ルールに従って、前記パケットを変更するパケット変更部をさらに備える、ことを特徴とする請求項１乃至３のいずれか１項に記載の通信装置。
【請求項５】
前記パケット変更部は、前記通信装置内に設けられた、隔離された実行環境内に配置される、ことを特徴とする請求項４記載の通信装置。
【請求項６】
複数のルールを格納するルールデータベースと、
前記ルールデータベースに格納されたルールを管理するルール管理部と、
をさらに備える、ことを特徴とする請求項１乃至５のいずれか１項に記載の通信装置。
【請求項７】
前記ルールデータベースは、１つのルールと他のルールとの間で重複が除去された複数のルールを格納する、ことを特徴とする請求項６記載の通信装置。
【請求項８】
パケットを受信し、前記通信装置に格納されているルールを検索して前記パケットにマッチするルールを見つけ、前記監視部及び前記ルール検証部に、前記パケットと前記パケットにマッチするルールとを提供するパケット転送部をさらに備え、
前記パケットと前記ルールとの両方が、その認証情報の検証に合格すると、前記監視部は前記パケットの認証情報を生成し、
前記パケット転送部は、前記ルールに従って、前記生成した認証情報と共に前記パケットを次のノードに転送する、ことを特徴とする請求項１乃至７のいずれか１項に記載の通信装置。
【請求項９】
前記通信装置は、
前記ルールに基づいて、受信したパケットを転送するスイッチ、
前記ルールに基づいて、受信したパケットを転送し、受信したパケットを変更できるスイッチ、又は
ミドルボックスを含む、ことを特徴とする請求項１乃至８のいずれか１項に記載の通信装置。
【請求項１０】
コントローラと、
複数のネットワーク要素と、
を備え、
前記ネットワーク要素は、
受信したパケットの認証情報を検証する監視部と、
前記パケットにマッチするルールの認証情報を検証するルール検証部と、
を含み、
前記監視部は、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成する、ことを特徴とする通信システム。
【請求項１１】
前記ネットワーク要素における前記監視部及び前記ルール検証部のうちの少なくとも一方は、前記ネットワーク要素内に設けられた、隔離された実行環境内に配置される、ことを特徴とする請求項１０記載の通信システム。
【請求項１２】
前記ネットワーク要素における前記監視部は、認証情報の検証に合格し、かつ、認証情報の検証に成功した前記ルールに従って転送される前記パケットの認証情報を生成する、ことを特徴とする請求項１０又は１１記載の通信システム。
【請求項１３】
前記ネットワーク要素は、パケット変更を示し、認証情報が検証された前記ルールに従って前記パケットを変更するパケット変更部をさらに備える、ことを特徴とする請求項１０乃至１２のいずれか１項に記載の通信システム。
【請求項１４】
前記パケット変更部は、前記ネットワーク要素内に設けられた、隔離された実行環境内に配置される、ことを特徴とする請求項１３記載の通信システム。
【請求項１５】
前記ネットワーク要素は、
複数のルールを格納するルールデータベースと、
前記ルールデータベースに格納されたルールを管理するルール管理部と、をさらに備える、ことを特徴とする請求項１０乃至１４のいずれか１項に記載の通信システム。
【請求項１６】
前記コントローラは、前記ルールデータベースに格納されている１つのルールと他のルールとの間の重複を、前記重複するルールのうちの１つを互いに重複しない複数のルールに分割、前記重複するルールの１つを縮小、又は前記重複するルールの１つを削除することにより除去するように構成され、前記重複しないルールを前記ネットワーク要素に送信する、ことを特徴とする請求項１０乃至１５のいずれか１項に記載の通信システム。
【請求項１７】
前記ネットワーク要素は、
パケットを受信し、前記ネットワーク要素に格納されているルールを検索して前記パケットにマッチするルールを見つけ、前記監視部及び前記ルール検証部に、前記パケットと前記パケットにマッチするルールとを提供するパケット転送部を、
さらに備え、
前記パケットと前記ルールの両方が、その認証情報の検証に合格すると、監視部は前記パケットの認証情報を生成し、
前記パケット転送部は、前記ルールに従って、前記認証情報と共に前記パケットを次のノードに転送する、ことを特徴とする請求項１０乃至１６のいずれか１項に記載の通信システム。
【請求項１８】
前記コントローラは、
パケットの送信側及び受信側をそれぞれ形成する一対のネットワーク要素により共有され、前記送信側及び前記受信側により前記パケットの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成する鍵生成部と、
前記鍵生成部は、ルールの送信側及び受信側をそれぞれ形成する前記コントローラ及び前記ネットワーク要素により共有され、前記コントローラ及び前記ネットワーク要素により前記ルールの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成するように構成され、
前記ネットワーク要素のためにルールを生成するルール生成部と、
前記コントローラ及び前記ネットワーク要素が共有する前記秘密鍵を用いて、前記生成されたルールに対する認証情報を生成するルール管理部と、
前記ルールの認証情報と共に前記ルールを前記ネットワーク要素に送信するルール配付部と、
を含む、ことを特徴とする請求項１０乃至１７のいずれか１項に記載の通信システム。
【請求項１９】
前記コントローラは、注入されるパケットの認証情報を算出し、前記パケットを前記認証情報と共に前記ネットワーク要素のうちの第１のネットワーク要素に送信し、
前記第１のネットワーク要素は、前記パケットの認証情報を生成することなく、前記ネットワーク要素のうちの第２のネットワーク要素に前記認証情報と共に前記パケットを転送し、前記第２のネットワーク要素は、前記コントローラと前記第２のネットワーク要素との間で共有される秘密鍵を用いて前記パケットの検証を行う、ことを特徴とする請求項１０乃至１８のいずれか１項に記載の通信システム。
【請求項２０】
前記エンドホストに接続され、エッジネットワーク要素と前記エンドホストとの間の少なくとも１つのリンクが暗号化されている前記エッジネットワーク要素と、
前記エッジネットワーク要素と隣接するネットワーク要素との間で暗号化されている
リンクと、
を備える、ことを特徴とする請求項１０乃至１９のいずれか１項に記載の通信システム。
【請求項２１】
エッジネットワーク要素に接続され、エンドツーエンド暗号化（Ｅ２ＥＥ）を行うエンドホストを備える、ことを特徴とする請求項１０乃至１９のいずれか１項に記載の通信システム。
【請求項２２】
エッジネットワーク要素と、前記エッジネットワーク要素に対向するエンドホストとの間に配置されたボックスを備え、
前記ボックスは、
前記エッジネットワーク要素から受信したパケットの認証情報を検証し、前記パケットの認証情報を生成する監視部を含む、ことを特徴とする請求項１０乃至２０のいずれか１項に記載の通信システム。
【請求項２３】
複数のネットワーク要素を制御するコントローラであって、
パケットの送信側及び受信側をそれぞれ形成する一対のネットワーク要素により共有され、前記送信側及び前記受信側により前記パケットの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成する鍵生成部を備え、
前記鍵生成部は、ルールの送信側及び受信側をそれぞれ形成する前記コントローラ及び前記ネットワーク要素により共有され、前記コントローラ及び前記ネットワーク要素により、前記ルールの認証情報の生成と検証にそれぞれ使用される複数の秘密鍵を生成し、
前記コントローラは、
前記ネットワーク要素のためにルールを生成するルール生成部と、
前記コントローラ及び前記ネットワーク要素が共有する前記秘密鍵を用いて、前記生成されたルールに対する認証情報を生成するルール管理部と、
前記ルールを前記認証情報と共に前記ネットワーク要素に送信するルール配付部と、
を備え、
前記ネットワーク要素は、
受信したパケットの認証情報を検証し、前記パケットにマッチするルールの認証情報を検証し、
認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成する、ことを特徴とするコントローラ。
【請求項２４】
前記ルール管理部は、前記ルールデータベースに格納された１つのルールと他のルールとの間の重複を、
前記重複するルールのうちの１つを互いに重複しない複数のルールに分割、
前記重複するルールの１つを縮小、又は、
前記重複するルールの１つを削除、
することで、除去するように構成され、
前記ルール配付部は、前記重複しないルールを、前記ＭＡＣと共に前記ネットワーク要素に送信する、ことを特徴とする請求項２３記載のコントローラ。
【請求項２５】
ネットワーク要素による通信方法であって、
受信したパケットの認証情報を検証する検証プロセスを行い、
前記パケットにマッチするルールの認証情報を検証する検証プロセスを行い、
前記ルールは前記コントローラから前記ネットワーク要素に設定され、
前記パケットの認証情報を生成する生成プロセスを行い、
認証情報が検証された前記ルールに基づき、前記パケットを、前記生成されたパケットの認証情報と共に転送する、ことを特徴とする通信方法。
【請求項２６】
前記ルールが前記認証情報の検証に成功した場合、前記パケットにマッチしパケットの変更を示す前記ルールに基づいて、前記パケットを変更する、ことを特徴とする請求項２５記載の通信方法。
【請求項２７】
パケットを受信し、ルールを検索して前記パケットにマッチするルールを見つけ、前記受信したパケットと前記パケットにマッチするルールとを前記パケット及び前記ルールの検証プロセスに提供し、
前記パケットと前記ルールとの両方が、その検証プロセスに合格した場合、前記パケットの認証情報を生成し、
前記ルールに従って、前記認証情報と共に前記パケットを次のノードに転送する、ことを特徴とする請求項２５又は２６記載の通信方法。
【請求項２８】
受信したパケットの認証情報を検証し、
前記パケットにマッチするルールの認証情報を検証し、
認証情報が検証された前記ルールに従って転送するパケットの認証情報を生成する、ことを含む処理をコンピュータに実行させるプログラム。
【請求項２９】
認証情報が検証され、パケット変更を示し前記ルールに従って前記パケットを変更することをさらに含む、請求項２８記載のプログラム。
【請求項３０】
パケットの送信側及び受信側をそれぞれ形成する一対のネットワーク要素により共有され、前記送信側及び前記受信側により前記パケットの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成する鍵生成処理であって、
ルールの送信側及び受信側をそれぞれ形成する前記コントローラ及び前記ネットワーク要素により共有され、前記コントローラ及び前記ネットワーク要素により、前記ルールの認証情報の生成と検証にそれぞれ使用される複数の秘密鍵を生成する鍵生成処理と、
前記ネットワーク要素のためにルールを生成するルール生成処理と、
前記コントローラ及び前記ネットワーク要素が共有する前記秘密鍵を用いて、前記生成されたルールに対する認証情報を生成するルール管理処理と、
前記ルールを前記認証情報と共に前記ネットワーク要素に送信するルール配付処理と、
を有し、
前記ネットワーク要素は、受信したパケットの認証情報を検証し、前記パケットにマッチするルールの認証情報を検証し、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成し、
鍵生成処理、ルール生成処理、ルール管理処理、ルール配付処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、システム、方法及びプログラムに関する。
【背景技術】
【０００２】
SDN（Software Defined Network）アーキテクチャでは、コントロールプレーンとデータプレーンが分離され、ネットワークインテリジェンスとその状態が論理的に集中化され、基盤となるネットワークインフラストラクチャがアプリケーションから抽象化される。その結果、これ迄にないプログラマビリティ、自動化、ネットワーク制御が提供され、通信事業者は、例えば、変化する環境やニーズに容易に適応できる、高度にスケーラブルで柔軟なネットワークが構築可能である（非特許文献１）。
【０００３】
図１９に示されるように、SDNアーキテクチャは、通常、SDNコントローラ１と、SDNノースバウンドインターフェース４を介してSDNコントローラ１に接続されたSDNアプリケーション２と、SDNコントロールデータプレーンインターフェース（SDNサウスバウンドインターフェース５）を介してSDNコントローラ１に接続されたネットワーク要素３とを含む。SDNコントローラ１は、SDNノースバウンドインターフェース４を介してSDNアプリケーション２（ノースバウンドアプリケーション）から指示、または要件を受信し、受信した指示または要件を、SDNサウスバウンドインターフェース５を介してネットワーク要素３に中継する。
【０００４】
これに限定されるものではないが、ネットワークポリシーは、例えば、一連の要件を満たすポリシーベースの仮想ネットワークを動的に作成するために使用される。SDNコントローラ１は、ネットワークトポロジに基づいて経路計算を実行してもよい。また、SDNコントローラ１は、ネットワークトポロジに加えて、ネットワークポリシーに基づいて経路計算を実行してもよい。ネットワーク要素３は、パケットデータの転送および処理の機能を実行する１つ以上のスイッチを含んでもよい。ネットワーク要素３がさらに１つ以上のミドルボックスを含むネットワークシステムもあり得る。ミドルボックスは、セキュリティルールに基づいてパケットをフィルタリングするファイアウォール、NAT（Network Address Translation：ネットワークアドレス変換）を通過するパケットの送信元および／または宛先ＩＰ（Internet Protocol）アドレスを置き換えるNAT、IDS（Intrusion Detection System：侵入検知システム）、ロードバランサーなどの内の少なくとも１つを含んでもよい。SDNのデータプレーンは、エッジスイッチ及びコアスイッチを含んでもよい。エッジスイッチはネットワークの境界で動作し、ネットワークの入口および出口として機能する一方、コアスイッチはネットワークの中心で動作し、各コアスイッチはパケットに一致するルールに基づいてパケットを転送する。以下にSDNの１つの例として、オープンフロー（OpenFlow）の概要を示す。なお、オープンフローは、SDNで利用可能な唯一のプロトコルではない。
【０００５】
スイッチ（OpenFlow Switch（OFS）とも称される）は、フローテーブルに格納される、１つ以上のフローエントリ（ルール）を含むフローテーブルを備える。各フローエントリは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数や受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダフィールド情報がマッチフィールドと一致する受信パケットをどのように処理すべきかスイッチに指示する、ゼロ又はそれ以上のアクションを示すアクションフィールドとを含む。パケットを受信すると、スイッチは、受信パケットのヘッダフィールド情報を用いて、自らのフローテーブルを検索する。ミスヒット（不一致）の場合、スイッチは、セキュアチャネルを介して、Packet-Inメッセージを用いて受信パケット（第１のパケット）をコントローラ（SDNコントローラ）に送信する。
【０００６】
Packet-Inメッセージを受信すると、コントローラ（図１９のSDNコントローラに対応）は、第１のパケットの送信元と宛先の情報に基づき、ネットワークトポロジ情報を参照してパケットの経路を算出する。当該経路に基づき、コントローラは経路上に配置された各スイッチに対してフローエントリを生成し、フロー変更（Flow-Mod）メッセージを経路上に配置された各スイッチに送信することにより、生成されたフローエントリをそれぞれのスイッチに対して設定する。
【０００７】
フロー変更メッセージには、例えば、スイッチのフローテーブルにフローエントリを追加するflow_mod_add、スイッチのフローテーブルからフローエントリを削除するflow_mod_delete、スイッチのフローテーブル内のフローエントリを変更するflow_mod_modifyが含まれる。Flow_mod_addは、追加されるフローエントリのマッチ条件とアクションを指定する。Flow_mod_addコマンドにおいては、追加するフローエントリの優先度を指定する優先度、フローエントリのライフサイクルを指定するハードタイムアウト、又は、同じ優先度を持つフローエントリの重複が見つかった場合、フローテーブルに新規のフローエントリを追加しないようにするチェック重複フラグ= trueなど情報項目を任意に指定してもよい。コントローラにより設定されたフローエントリのマッチフィールドに一致するヘッダを有する、第１のパケットに続く１つ以上のパケットを受信すると、経路上の各スイッチは、上記１つ以上のパケットを、例えば、フローエントリのアクションフィールドに定義されているように、次のノードに転送する。オープンフローの詳細は、以下の非特許文献２に記載されている。
【０００８】
SDNは、データプレーンにおいて多くの脆弱性を持つ。より具体的には、パケット転送用の、ソフトウェアでプログラム可能なネットワークスイッチは、ソフトウェア面の脆弱性を示し、攻撃（データプレーンへの攻撃）の影響を受けやすい。悪意を持つパケットが、ネットワークスイッチの動作を変更させようとする恐れがあり、侵害を受けたスイッチは、セキュリティ上重要なデータを漏洩する可能性がある。また、侵害を受けたスイッチは、攻撃者によって制御されているホストにトラフィックをリダイレクトする恐れもある。IDS（Intrusion Detection System：侵入検知システム）/IPS（Intrusion Prevention System：侵入防止システム）はリダイレクトされたトラフィックを検出できないため、既存のファイアウォールやIDS/IPSは役に立たない。
【０００９】
基本的に、IDS／IPSは、所定の攻撃シグネチャに基づいてトラフィックをチェックする。攻撃シグネチャは、Webアプリケーションとそのコンポーネントに対する攻撃または攻撃のクラスを識別するルール又はパターンである。
【００１０】
非特許文献１には、各スイッチが、パケットに対して算出されたメッセージ認証コード（Message Authentication Code：MAC）を埋め込み、次のスイッチがMACを確認し、パケットの変更、リダイレクト、及びドロップなどの悪意のあるスイッチ動作を検出できるようにした故障箇所特定技術が開示されている。
【００１１】
MACは、メッセージに対して生成され、メッセージの信頼性を保証するためにメッセージとともに送信される、一種の暗号化されたチェックサムである。MACアルゴリズムは、秘密鍵と認証対象のメッセージとを入力し、秘密鍵を用いて、任意の長さの入力メッセージを固定長のMACに圧縮する。図１８に示すように、メッセージの送信者は、秘密鍵K（暗号化対称鍵）を用いてメッセージに対してMACアルゴリズムを実行してMACを生成し、MACとともにメッセージを受信者に送信する。メッセージとMACを受信した受信者は、メッセージと、送信者と受信者との間で共有される秘密鍵K（暗号化対称鍵）とをMACアルゴリズムに供給してMACを算出する。受信者は、算出されたMACと、送信者から受信したMACとが等しいことを検証する。算出されたMACと送信者から受信したMACとが一致する場合、受信者は、メッセージが侵害されておらず、またメッセージが不正に変更、または改ざんされていないと確実に判断できるため、受信者は受信したメッセージを受け入れることができる。送信者から送信されたMACと算出されたMACが一致しない場合、受信者は、メッセージが本物でないと確実に判断できる。
【００１２】
非特許文献２には、データプレーンがエッジスイッチとコアスイッチとからなるSDNsecが開示されている。エッジスイッチはネットワークの境界で動作する。コアスイッチはネットワークの中央で動作し、パケット中の転送情報に基づき、そのパケットを転送する。エッジスイッチは、送信元ホストからパケットを受信し、転送情報（SDN secパケットヘッダ）を上記パケットに埋め込む入口スイッチを含む。さらに、エッジスイッチには、コアスイッチからパケットを受信し、そのパケットを宛先に転送する出口スイッチが含まれる。パケットの転送エントリはMACを含む。 経路上の各スイッチはMACをチェックし、パス情報が変更されているか否かを検出する。さらに、各スイッチはパケットに暗号化マーキングを追加し、出口スイッチは上記マーキングをコントローラに送信するため、コントローラはパケットが実際に通過した経路を確認できる。コントローラは秘密鍵を生成し、データプレーン内のすべてのスイッチと共有する。
【００１３】
特許文献１には、リモートコンピューティング装置の、高信頼性実行環境において確立された、対応するリモート高信頼性メッセージモジュールとの通信に基づいて、上記リモートコンピューティング装置の認証を行うローカルコンピューティング装置が開示されている。ローカルコンピューティング装置は、リモートコンピューティング装置の認証の成功に応答して、上記リモート高信頼性モジュールと暗号鍵を交換する。発信メッセージをリモートコンピューティング装置に安全に送信するために、ローカルの高信頼性メッセージモジュールは、発信メッセージを暗号化し、リモートコンピューティング装置に送信された発信メッセージに暗号的に署名する。リモートコンピューティング装置のリモート高信頼性メッセージモジュールから着信メッセージを安全に受信するために、ローカル高信頼性メッセージモジュールは、交換された暗号鍵に基づき、着信メッセージを復号し、着信メッセージの暗号署名を検証する。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】米国特許公報第２０１６／００６５３７６号明細書
【非特許文献】
【００１５】
【非特許文献１】“Software-Defined Networking: The New Norm for Networks”、ONF White Paper、［平成２４（２０１２）年４月１３日］、インターネット〈URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/white-papers/wp-sdn-newnorm.pdf〉
【非特許文献２】“OpenFlow Switch Specification Version 1.5.0 (Protocol version 0x06)”、［平成２６（２０１４）年１２月１９日］、インターネット URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.0.noipr.pdf
【非特許文献３】“Network Fault Localization with Small TCB“、Xin Zhan、Zongwei Zhou、Geoff Hasker、Adrian Perrig、Virgil Gligor、ICNP 2011、<インターネット URL:http://www.netsec.ethz.ch/publications/papers/TrueNet.pdf>
【非特許文献４】“SDNsec: Forwarding Accountability for the SDN Data Plane”、Takayuki Sasaki、Christos Pappas、Taeho Lee、Torsten Hoefler、Adrian Perrig、ICCCN 2016、<インターネット URL:http://www.netsec.ethz.ch/publications/papers/sdnsec2016.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上記の特許文献１及び非特許文献１乃至４の各開示の全内容を、本明細書に引用をもって繰り込むものとする。
【００１７】
以下の分析は、本発明の発明者によって与えられたものである。
【００１８】
スイッチが侵害されると、そのスイッチはセキュリティ上重要なデータを漏洩させる可能性がある。侵害を受けたスイッチは、攻撃者によって制御されるホストにトラフィックをリダイレクトする可能性もある。
【００１９】
関連技術においては、不要な、又は悪意のあるトラフィックをフィルタリングするファイアウォールやパケットの送信元アドレスと宛先アドレスを変更するネットワークアドレス変換器を含むミドルボックス、そしてパケットを変更する可能性があるSDNスイッチが考慮されていない。パケットの変更は、MACが無効になるため誤判定の原因となる。
【００２０】
トラスト・コンピューティング技術の関連技術として、インテル（登録商標）SGX（Software Guard Extensions）を使用した、安全なネットワークアーキテクチャが研究テーマになっている。インテルSGXは、ユーザーレベルのコードが、通常のプロセスメモリとは異なり、より高い特権レベルの処理実行から保護されている、エンクレーブと呼ばれるメモリのプライベート領域を割り当てることを可能にする、インテルによる一連の新しい指示である。
【００２１】
したがって、本発明の目的は、ネットワークセキュリティを強化するために、データプレーンからの攻撃に対する耐性を向上させることができる通信装置、システム、方法およびプログラムを提供することである。
【課題を解決するための手段】
【００２２】
本開示の第１の側面によれば、受信したパケットの認証情報を検証する監視部と、前記パケットにマッチするルールの認証情報を検証するルール検証部とを備え、前記監視部は、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成する通信装置が提供される。
【００２３】
本開示の他の側面によれば、コントローラと、複数のネットワーク要素と、を備え、
前記ネットワーク要素は、受信したパケットの認証情報を検証する監視部と、前記パケットにマッチするルールの認証情報を検証するルール検証部と、を含み、前記監視部は、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成する通信システムが提供される。
【００２４】
本開示のなお他の側面によれば、複数のネットワーク要素を制御するコントローラであって、パケットの送信側及び受信側をそれぞれ形成する一対のネットワーク要素により共有され、前記送信側及び前記受信側により前記パケットの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成する鍵生成部を備え、
前記鍵生成部は、ルールの送信側及び受信側をそれぞれ形成する前記コントローラ及び前記ネットワーク要素により共有され、前記コントローラ及び前記ネットワーク要素により、前記ルールの認証情報の生成と検証にそれぞれ使用される複数の秘密鍵を生成し、
前記コントローラは、
前記ネットワーク要素のためにルールを生成するルール生成部と、
前記コントローラ及び前記ネットワーク要素が共有する前記秘密鍵を用いて、前記生成されたルールに対する認証情報を生成するルール管理部と、
前記ルールを前記認証情報と共に前記ネットワーク要素に送信するルール配付部と、
を備え、
前記ネットワーク要素は、
受信したパケットの認証情報を検証し、前記パケットにマッチするルールの認証情報を検証し、
認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成するコントローラが提供される。
【００２５】
本開示のさらなる側面によれば、ネットワーク要素による通信方法であって、
受信したパケットの認証情報を検証する検証プロセスを行い、
前記パケットにマッチするルールの認証情報を検証する検証プロセスを行い、
前記ルールは前記コントローラから前記ネットワーク要素に設定され、
前記パケットの認証情報を生成する生成プロセスを行い、
認証情報が検証された前記ルールに基づき、前記パケットを、前記生成されたパケットの認証情報と共に転送する通信方法が提供される。
【００２６】
本開示のさらに他の側面によれば、
受信したパケットの認証情報を検証し、
前記パケットにマッチするルールの認証情報を検証し、
認証情報が検証された前記ルールに従って転送するパケットの認証情報を生成する、ことを含む処理をコンピュータに実行させるプログラムが提供される。
【００２７】
本開示のなおさらなる側面によれば、パケットの送信側及び受信側をそれぞれ形成する一対のネットワーク要素により共有され、前記送信側及び前記受信側により前記パケットの認証情報の生成と検証にそれぞれ使用される秘密鍵を生成する鍵生成処理であって、
ルールの送信側及び受信側をそれぞれ形成する前記コントローラ及び前記ネットワーク要素により共有され、前記コントローラ及び前記ネットワーク要素により、前記ルールの認証情報の生成と検証にそれぞれ使用される複数の秘密鍵を生成する鍵生成処理と、
前記ネットワーク要素のためにルールを生成するルール生成処理と、
前記コントローラ及び前記ネットワーク要素が共有する前記秘密鍵を用いて、前記生成されたルールに対する認証情報を生成するルール管理処理と、
前記ルールを前記認証情報と共に前記ネットワーク要素に送信するルール配付処理と、
を有し、
前記ネットワーク要素は、受信したパケットの認証情報を検証し、前記パケットにマッチするルールの認証情報を検証し、認証情報が検証された前記ルールに従って、転送するパケットの認証情報を生成し、
鍵生成処理、ルール生成処理、ルール管理処理、ルール配付処理をコンピュータに実行させるプログラムが提供される。
【００２８】
本開示の他の側面によれば、本開示の上記の側面によるプログラムが記憶されている、ROM（Read Only Memory）、又はRAM（Random Access Memory）、又はEEPROM（Electrically and Erasable Programmable Read Only Memory）、ハードディスクドライブ(HDD)、CD（Compact Disk）又はDVD（Digital Versatile Disk）などの半導体記憶装置のようなコンピュータが読み取り可能な記録媒体または非一時的な記録媒体が提供される。
【発明の効果】
【００２９】
本開示によれば、ネットワークセキュリティを強化するために、データプレーンからの攻撃に対する耐性を向上させることが可能になる。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている最良の形態の単なる例示により、本発明の実施形態のみを図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。従って、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【００３０】
【図１】本開示の一側面における通信装置の構成を示す図である。
【図２】本開示の一側面におけるコントローラの構成を示す図である。
【図３】本開示の第１の実施形態の通信システムを模式的に示す図である。
【図４】本開示の第１の実施形態におけるスイッチの構成を模式的に示す図である。
【図５】本開示の第１の実施形態におけるスイッチの動作を模式的に示す図である。
【図６】本開示の第１の実施形態におけるスイッチ又はボックスの構成を模式的に示す図である。
【図７】本開示の第１の実施形態におけるスイッチ又はボックスの動作を模式的に示す図である。
【図８】本開示の第１の実施形態におけるパケット注入の例を模式的に示す図である。
【図９】本開示の第２の実施形態におけるスイッチを示す図である。
【図１０】ルールの重複の解決策の一例を示す図である。
【図１１】ルールの重複の解決策の他の一例を示す図である。
【図１２】ルールの重複の解決策のさらに他の一例を示す図である。
【図１３】迂回路の一例を示す図である。
【図１４】迂回に対する解決策の一例を示す図である。
【図１５】迂回に対する解決策の一例を示す図である。
【図１６】迂回に対する解決策の一例を示す図である。
【図１７】本開示のさらなる実施形態における構成を示す図である。
【図１８】送信者におけるMAC生成と受信者における確認を示す図である。
【図１９】SDNアーキテクチャを説明する図である。
【発明を実施するための形態】
【００３１】
以下に本開示の実施形態を説明する。
【００３２】
＜通信装置＞
図１は、本開示の一側面による通信装置を示す図である。図１を参照すると、通信装置１００は、隔離された実行環境１０１とパケット転送部１０４とを含む。通信装置１００は、隔離された実行環境１０１に配置された監視部１０２と、隔離された実行環境１０１に配置されたルール検証部１０３とを備える。
【００３３】
パケット転送部１０４は、特に限定されないが、例えば、レイヤ２、レイヤ３のパケットスイッチング、経路検索、パケット転送などを行う。パケット転送部１０４は、その入出力インタフェース（ポート）間でパケット転送を行う。
【００３４】
隔離された実行環境１０１は、他のプロセス、OS（オペレーティングシステム）/ハイパーバイザ、デバイスドライバなどに割り当てられたメモリ領域から隔離され保護されているメモリ内（図１７の４０２）の物理アドレス空間の領域内において、プロセッサ上（図１７の４０１）で実行される特定の指示、コマンド、またはシステムコールによって作成され得るプログラミング環境である。例えば、メモリ分割技術を使用して、時間領域および空間領域におけるプロセスの保護および隔離のために隔離された実行環境１０１を実現してもよい。重要度が低いプロセスが、より高いレベルの重要度を持つ他のプロセスを侵害することはできない。
【００３５】
ハードウェアに実装される、仮想ページアドレスを物理ページアドレスに変換するメモリ管理ユニット（Memory Management Unit；MMU）を、パーティション内で実行中のプロセスが他のパーティションに割り当てられたアドレス空間に読み書きするのを防ぐためのメモリ分割（隔離）に使用してもよい。MMUは、プロセスのためのメモリ空間のベースアドレスが設定されているリロケーションレジスタを使用することにより、各プロセスの仮想（論理）アドレスから物理アドレスへのアドレス変換を行ってもよい。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。また、MMUは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあるか否かチェックしてもよい。これはメモリ保護の仕組みとして機能する。MMUは、メモリアクセス違反の発生を検出すると（例えば、プロセスがアクセス権を持たないメモリ空間へのアクセス、又は、ベースアドレスにより定義された範囲やプロセスに割り当てられた制限外のアクセスを検出した場合）、故障処理は、例外処理によりアドレス指定エラーを通知されるか、アドレス指定エラーの通知で中断される。
【００３６】
隔離された実行環境１０１は、TEE（Trusted Execution Environment）に準拠するような環境として実現されてもよい。あるいは、これに限定されないが、隔離された実行環境１０１として、インテル（登録商標）SGX（Software Guard Extensions）などの詮索攻撃を防ぐためのより洗練されたアプローチを採用してもよい。
【００３７】
隔離された実行環境１０１に配置された監視部１０２は、前段の通信装置から受信したパケットのMAC（Message Authentication Code）を検証する。監視部１０２は、通信装置１０及びパケットの送信者の両者間で共有される鍵（暗号化対称鍵）を用いて、受信したパケットのメッセージに対してMACアルゴリズムを実行し、通信装置１０がMACアルゴリズムを用いて算出したMACが、受信したMACと一致するか否かを検証する。算出したMACが、送信者から受信したMACと同一である場合、監視部１０２は、パケットが変更されていないと確実に判断することができる。
【００３８】
監視部１０２は、通信装置１０と、パケットに一致するルールによりパケットの転送先となる次のノードとの間で共有される秘密鍵（暗号化対称鍵）を用いてMACアルゴリズムを実行し、ルールに従って、上記次のノードに転送するパケットのMACを再計算（更新）する。
【００３９】
パケットに対する秘密鍵を使用しMACアルゴリズムによって算出されたMACは、パケットに埋め込まれてもよい。すなわち、パケットは、その中にMACを収容するために、例えばパケットのヘッダ内に情報フィールドを有するように構成されてもよい。パケットに対するMACは、ヘッダフィールド及びパケットのペイロードに関して算出されてもよい。あるいは、 MACはヘッダフィールドのみについて算出されてもよい。この場合、ペイロードの完全性は保証されないが、パケット全体について計算するよりも軽量になる。
【００４０】
隔離された実行環境１０１に配置されたルール検証部１０３は、ルールのMACを検証する。通信装置１０は、コントローラ（不図示）からルールを受け取る。
【００４１】
ルールは、当該ルールのマッチフィールドに定義された所定のマッチ条件に一致するパケットに適用される１つ以上のアクションを定義するアクションフィールドを持つ。 このルールは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数や受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダフィールド情報がマッチフィールドと一致する受信パケットをどのように処理すべきかスイッチに指示する、ゼロ又はそれ以上のアクションを示すアクションフィールドとを含むオープンフローネットワーク上のフローエントリでもよい。
【００４２】
パケットを受信すると、パケット転送部１０４は、受信したパケットと一致するマッチフィールド（条件）を持つルールを見つけるために、受信パケットのヘッダフィールド情報を用いてルールを検索する。パケット転送部１０４は、受信パケットにマッチするルールとを隔離された実行環境１０１に供給する。監視部１０２は、上述したように受信したパケットのMACの確認を行う。
【００４３】
ルール検証部１０３は、コントローラ（不図示）と通信装置１００との間で共有される秘密鍵（暗号化対称鍵）を用いて、パケット転送部１０４から供給されたルールのMACを算出し、その算出したMACがコントローラから受信したルールのMACと一致するかどうかを検証する。算出したMACがコントローラから受信したMACと一致する場合、ルール検証部１０３は、ルールが変更されていないと判断する。
【００４４】
MACは、暗号ハッシュ関数を用いて構築されたHMAC（Hash-based Message Authentication Code：ハッシュベース・メッセージ認証コード）でもよい。あるいは、MACを、CBC-MAC（Cipher Block Chaining Message Authentication Code）などのブロック暗号アルゴリズムを用いて構築してもよい。
【００４５】
通信装置１００は、ネットワークスイッチ、ミドルボックスなどを含むことができるが、これらに限定されない。通信装置１００は、例えばNFV（Network Functions Virtualization）を用いてサーバ上に実現することができる。
【００４６】
＜コンロトーラ及びスイッチ＞
図２は、本開示の一側面によるコントローラ２０及びスイッチ１０−１／１０−２の構成を模式的に示す図である。図２において、スイッチ１０−１、１０−２は、それぞれ、図１を参照して説明した通信装置１００に対応する。スイッチ１０−１、１０−２における隔離された実行環境１１、監視モジュール１１１、ルール検証モジュール１１２、そしてパケット転送エンジン１２は、それぞれ、図１を参照して説明した通信装置１００における隔離された実行環境１０１、監視部１０２、ルール検証部１０３、そしてパケット転送部１０４に対応する。スイッチ１０−１及び１０−２は、ソフトウェアでプログラム可能なネットワークスイッチとして実現されてもよい。コントローラ２０は、SDNコントローラとして実現されてもよい。
【００４７】
図２を参照すると、コントローラ２０は、プロセッサ２００と、送受信部２０７と、記憶装置２０８とを含む。プロセッサ２００は、鍵生成部（プロセス）２０１と、鍵管理部（プロセス）２０２と、ルール管理部（プロセス）２０３と、ルール配付部（プロセス）２０４と、ルール生成部（プロセス）２０５と、パス算出部（プロセス）２０６とを含む。各部（プロセス）２０１〜２０６のうちの少なくとも１つは、プロセッサ２００上で実行される１つ以上のソフトウェアプログラムによって実現されてもよい。
【００４８】
鍵生成部２０１は、一対のスイッチ１０−１及び１０−２間で共有され、その一対のスイッチ１０−１及び１０−２によりパケットのMACの生成および確認に使用される秘密鍵（対称鍵）を生成する。
【００４９】
鍵生成部２０１は、コントローラ２０と各スイッチ１０−１及び１０−２との間で共有され、コントローラ２０によりルールのMACを生成するため、そしてスイッチ１０−１及び１０−２のそれぞれによりルールのMACを検証するためにそれぞれ使用される秘密鍵（対称鍵）を生成する。あるいは、鍵生成部２０１は、スイッチ１０−１及び１０−２に対してマスター鍵を生成してもよい。スイッチ１０−１及び１０−２は、それぞれ、コントローラ２０から配付されたマスター鍵から秘密鍵を生成してもよい。
【００５０】
鍵管理部２０２は、パケットのMACを生成し検証するための秘密鍵を一対のスイッチ１０−１及び１０−２に配付する。鍵管理部２０２は、ルールのMACを検証するための秘密鍵をスイッチ１０−１及び１０−２にそれぞれ配付する。鍵管理部２０２は、鍵が記憶装置２０８に配付される各スイッチ１０−１、１０−２のノードＩＤ（アイデンティティ）（スイッチＩＤ）に対応付けて生成した各鍵を保持し管理してもよい。
【００５１】
ルール生成部２０５は、パス算出部２０６によるパス算出結果に基づいてルールを生成する。ルールは、ルールの送信先であるスイッチ１０−１／１０−２がパスに従って受信パケットを次のノードに転送するように構成されている。
【００５２】
パス算出部２０６は、送受信部２０７がスイッチ１０−１／１０−２からPacket_Inメッセージを受信した場合、記憶装置２０８に記憶されているネットワークトポロジ情報に基づいてパスを算出する。
【００５３】
ルール管理部２０３は、ルール生成部２０５により生成されたルールを管理する。ルール管理部２０３は、コントローラ２０とスイッチ１０−１／１０−２との間で共有される秘密鍵を用いてルールのMACを算出する。ルール管理部２０３は、スイッチ１０−１／１０−２のアイデンティティ（ノードID）、ルールのアイデンティティ又は番号（ルールID）、ルールのMACに対応付けて、各ルールを記憶装置２０８に保持してもよい。
【００５４】
ルール配付部２０４は、例えば、Flow_mod_addメッセージを用いて、ルールをスイッチ１０−１／１０−２に送信してもよい。ルール配付部２０４は、ルールと共に当該ルールのMACを送信してもよい。あるいは、ルール管理部２０３は、例えば、ルールのMAC送信要求に対するスイッチ１０−１／１０−２のルール検証モジュール１１２からの応答として、ルールとは別に、ルールのMACを送信してもよい。
【００５５】
スイッチ１０−１／１０−２のルール検証モジュール１１２は、ルールが侵害されるのを防ぐために、コントローラ２０から送信されたMACを、隔離された実行環境１０１内のルール（ルールID）に対応付けて保持してもよい。
【００５６】
コントローラ２０の鍵管理部２０２は、鍵生成部２０１によって生成された秘密鍵（対称鍵）を、スイッチ１０によって公開されている公開鍵を用いて暗号化し、暗号化された秘密鍵をスイッチ１０に配付してもよい。コントローラ２０は、オープンフローチャネルを用いてスイッチ１０と通信する。
【００５７】
スイッチ１０は、スイッチ１０−１／１０−２の秘密鍵を用いて、コントローラ２０から配付された暗号化された秘密鍵を復号する。監視モジュール１１１は、一対のスイッチ１０−１及び１０−２間で共有される復号化された秘密鍵を用いて、スイッチ１０−１／１０−２がMACとともに受信したパケットを検証する。
【００５８】
スイッチ１０−１／１０−２のルール検証モジュール１１２は、スイッチ１０−１／１０−２とコントローラ２０との間で共有される、復号化された秘密鍵を用いて、スイッチ１０−１／１０−２に格納されているルールのMACを検証する。スイッチ１０−１／１０−２のルール検証モジュール１１２は、算出されたMACがコントローラ２０から送信されたルールのMACと一致するか否かをチェックする。
【００５９】
＜通信システム＞
図３は、本開示の第１の実施形態の通信システムを模式的に示す図である。図３を参照すると、コントローラ２０と、スイッチ１０と、スイッチ（SDNスイッチ）A／ボックスA１０Ａと、エンドホスト３０−１及び３０−２とが設けられている。コントローラ２０は、スイッチ１０と、スイッチA／ボックスA１０Ａと、エンドホスト３０−１及び３０−２とに接続されている。図３では、簡略化のために２つのスイッチを図示しているが、スイッチの数とエンドホストの数は、勿論２つに限定されない。
【００６０】
コントローラ２０は、図２を参照して説明したように構成されてもよい。コントローラ２０は、隣接する二者間で共有される秘密鍵（対称鍵）を生成する。 例えば、図３の場合、
秘密鍵：エンドホスト３０−１とスイッチ１０との間で共有されるK１、
秘密鍵：スイッチ１０とスイッチＡ（ボックスＡ）１０Ａとの間で共有されるK２、
秘密鍵：スイッチＡ／ボックスＡ１０Ａとエンドホスト３０−２との間で共有されるK３。
【００６１】
コントローラ２０は、生成した秘密鍵K１を、エンドホスト３０−１によって公開されている公開鍵pk１を用いて暗号化し、暗号化された鍵ENC（pk１、K１）をエンドホスト３０−１に配付する。
【００６２】
エンドホスト３０−１は、自身が有する秘密鍵sk１を用いて、暗号化された鍵ENC（pk１、K１）をDEC（sk１、ENC（pk１、K１））に復号し、スイッチ１０に転送されるパケットのMACの生成に用いる秘密鍵K１を得る。
【００６３】
コントローラ２０は、生成した秘密鍵K１を、スイッチ１０によって公開されている公開鍵pk２を用いて暗号化し、暗号化された鍵ENC（pk２、K１）をスイッチ１０に配付する。スイッチ１０は、自身が有する秘密鍵sk２を用いて、暗号化された鍵をDEC（sk２、ENC（pk１、K１））に復号し、エンドホスト３０−１から受信したパケットのMACの生成に用いる秘密鍵K１を得る。
【００６４】
スイッチ１０とスイッチＡ／ボックスＡ１０Ａとの間で共有される鍵K２、スイッチＡ／ボックスＡ１０Ａとエンドホスト３０−２との間で共有される鍵Ｋ３についても同様である。
【００６５】
コントローラ２０は、コントローラ２０とスイッチ１０との間で共有される秘密鍵（対称鍵）k１と、コントローラ２０とスイッチ１０Ａとの間で共有される秘密鍵（対称鍵）k２を生成し、それぞれの秘密鍵は、それらの間のルールの生成および確認に使用される。
【００６６】
コントローラ２０は、生成した秘密鍵k１を、スイッチ１０によって公開されている公開鍵pk２を用いて暗号化し、暗号化された鍵ENC（pk１、K１）をスイッチ１０に配付する。
【００６７】
スイッチ１０は、自身が有する秘密鍵sk２を用いて、暗号化された鍵ENC（pk２、k１）をDEC（sk２、ENC（pk１、K１））に復号し、受信パケットがマッチするルールのMACの確認に用いる秘密鍵k１を得る。
【００６８】
コントローラ２０は、スイッチ１０又は１０Ａから送信された Packet-Inメッセージを受信すると、記憶装置（図２の２０８）に記憶されているネットワークトポロジ情報を参照してフローの経路計算を行う。 算出されたパスに基づいて、コントローラ２０は、パス上に配置されている各スイッチについてルールを生成し、例えば、Flow_Modメッセージを用いて、パス上に配置された各スイッチに対して生成されたルールを送信する。
【００６９】
ルールは、受信したパケットのパケットヘッダと照合するマッチフィールドと、パケットが、ルールのマッチフィールドの条件に一致するヘッダを有する場合、そのパケットに適用される１つ以上のアクションを定義するアクションフィールドとを含むように構成されてもよい。
【００７０】
コントローラ２０は、コントローラ２０とスイッチ１０又は１０Ａとの間で共有される秘密鍵k１を用いてルールのMACを算出する。コントローラ２０は、Packet-Inメッセージをコントローラ２０に送信したスイッチ１０又は１０Ａに、算出したMACと共にルールを送信する。
【００７１】
スイッチ１０は、コントローラから受信したルールのMACを秘密鍵K１を用いて生成し、MACアルゴリズムによって生成されたMACがコントローラ２０から受信したMACと一致するか否かを検証する。MACアルゴリズムにより生成されたMACが受信したMACと一致する場合、監視モジュール１１１は、コントローラ２０からスイッチ１０への送信中にパケットが改ざんされていないと見なす。
【００７２】
各エンドホスト３０−１及び３０−２は、隔離された実行環境３１に配置された監視モジュール３１１と、レイヤ２及びレイヤ３のパケットスイッチング、経路検索、及びパケット転送を行うパケット転送エンジン３２とを含む。パケット転送エンジン３２は、入力インタフェースと出力インタフェースとの間でパケットを転送する。
【００７３】
エンドホスト３０−１の監視モジュール３１１は、秘密鍵K１を用いて、エンドホスト３０−２宛てのパケットのMACを生成する。パケット転送エンジン３２は、パケット及びMACをスイッチ１０に接続されている出力インタフェースに転送する。
【００７４】
図３において、スイッチ１０は、図２を参照して説明したように構成されている。スイッチ１０は、両方とも隔離された実行環境１１に配置された監視モジュール１１１及びルール検証モジュール１１２、ならびにパケット転送エンジン１２を含む。
【００７５】
監視モジュール１１１は、エンドホスト３０−１から受信したパケットのMAC（Message Authentication Code）を検証する。監視モジュール１１１は、スイッチ１０とエンドホスト３０−１との間で共有される鍵（K１）を用いて、受信したパケットのメッセージに対してMACアルゴリズムを実行し、MACアルゴリズムで生成したMACが、受信したMACと一致するか否かを検証する。MACアルゴリズムで生成したMACが、受信したMACと同一である場合、監視モジュール１１１は、パケットの送信者からスイッチ１０への送信中にパケットが変更されていないと判断する。
【００７６】
ルール検証モジュール１１２は、コントローラから受信したルールのMACを秘密鍵K１を用いて生成し、MACアルゴリズムによって生成されたMACがコントローラ２０から受信したMACと一致するか否かを検証する。
【００７７】
ボックスAは、IPアドレス、ポート番号など、パケット又はフレームのヘッダの情報項目の少なくとも１つを変更するNAT（Network Address Translation：ネットワークアドレス変換）機能、パケットフィルタリング、又はVLAD（仮想LAN）IDを変更するタグ変換機能などを含んでもよい。スイッチＡ／ボックスＡ１０Ａは、スイッチ１０Ａと称される。
【００７８】
スイッチ１０Ａは、スイッチ１０に含まれる構成要素に加えて、パケット変更モジュール１２１を含む。ルール検証モジュール１１２によるMACの確認にルールがパスした場合、パケット変更モジュール１２１は、受信したパケットのヘッダと一致するマッチフィールドと、パケット変更を示すアクションフィールドとを有するルールに基づき、受信パケットのヘッダ情報の変更を許可される。監視モジュール１１１は、パケット変更モジュール１２１によって変更されたパケットのMACを再計算（更新）する。
【００７９】
図３において、パケット転送エンジン１２は、ルール検証モジュール１１２によって確認されたルールに基づき、MACと共に、変更されたパケット（変更されたパケットとMAC）をエンドホスト３０−２に接続された出力インタフェースに転送する。
【００８０】
ボックスＡは、IPアドレス、ポート番号など、パケット又はフレームのヘッダの情報項目の少なくとも１つを変更するNAT（Network Address Translation：ネットワークアドレス変換）機能、パケットフィルタリング、又はVLAD  IDを変更するタグ変換機能などを含んでもよい。ボックスA又はSDNスイッチA１０Ａは、スイッチ１０Ａと称される。
【００８１】
スイッチ１０Ａは、スイッチ１０に含まれる構成要素に加えて、パケット変更モジュール１２１を含む。パケット変更モジュール１２１は、受信したパケットのヘッダと一致するマッチフィールドと、パケット変更を示すアクションフィールドとを有するルールに基づき、受信パケットのヘッダ情報を変更する。
【００８２】
図３において、パケット転送エンジン１２は、ルール検証モジュール１１２によって確認されたルールに基づき、変更されたパケットとMACをエンドホスト３０−２に接続された出力インタフェースに転送する。
【００８３】
以下に図３のシステムの動作を説明する。
【００８４】
＜初期鍵設定＞
コントローラ２０（またはネットワーク管理者）は、全てのスイッチ１０及び１０Ａの公開鍵を有する。全てのスイッチ１０及び１０Ａは、コントローラ２０の公開鍵を有する。これらの公開鍵は、スイッチ１０及び１０Ａがネットワーク管理者によって物理的に配置されるときに手動でインストールされてもよい。
【００８５】
＜パケット確認用の鍵＞
コントローラ２０は、スイッチiとスイッチjとの間で共有される対称鍵K（i、j）を生成する。コントローラ２０は、鍵K（i、j）を隣接する一対のスイッチi、jに配付する。上述したように、コントローラ２０は、スイッチ（エッジスイッチ）とエンドホストとの間で共有される対称鍵も生成する。
【００８６】
コントローラ２０は、スイッチi、jの公開鍵を用いて、鍵をスイッチi、jに安全に配付する。コントローラ２０は、スイッチi、jの公開鍵pk１及びpk２を用いて鍵K（i、j）を暗号化する。
CK1=ENC(pk1, K(i,j))
CK2=ENC(pk2, K(i,j))
そして、暗号化された鍵CK１とCK２とを、それぞれスイッチiとスイッチjとに送る。また、コントローラ２０は、スイッチ１０／１０Ａがエンドホスト３０−１／３０−２に接続されたエッジスイッチであると仮定した場合、スイッチ１０／１０Ａとエンドホスト３０−１／３０−２との間で共有される対称鍵を、スイッチ１０／１０Ａとエンドホスト３０−１／３０−２とに配付する。
【００８７】
スイッチi、jは、スイッチi、jのそれぞれの秘密鍵sk１及びsk２を用いて、暗号化された鍵を復号して鍵K（i、j）を取得する。
Key(i,j)=DEC(sk1, CK1)
Key(i,j)=DEC(sk2, CK2)
【００８８】
エンドホスト３０−１／３０−２は、エンドホスト３０−１／３０−２のそれぞれの秘密鍵を用いて、暗号化された鍵を復号し、スイッチ１０／１０Ａとエンドホスト３０−１／３０−２との間で共有される秘密鍵を取得する。
【００８９】
鍵K（i、j）は、パケットを送信するスイッチi及びjのうちの一方によってMACを生成するために使用される。MACと共にパケットを受信するスイッチi及びjのうちの他方のスイッチは、受信したパケットの確認のためにMACを計算する際、鍵K（i、j）を使用する。
【００９０】
隣接する一対のスイッチi、j（図３の１０及び１０Ａ）は、ディフィー・ヘルマン鍵交換（RFC（Request for Comments）２６３１）を用いて鍵を交換してもよい。大きな素数pと巡回群Z/pZ = {0、1、…、p-1}の生成元である数gは、公開されている。剰余環Z／pZは、モジュロｐによる除算から生じる剰余の演算を有する。 スイッチｉ、jは、０からｐ−２の間でランダムに選択された、それぞれの秘密の番号ａおよびｂを有する。 スイッチiは、A=g^a mod pを計算し、Aをスイッチjに送信し、スイッチjはB=g^b mod pを計算し、Bをスイッチiに送信する。スイッチiがKA=B^a mod pを計算する一方、スイッチjはKB=A^b mod pを計算する。
KA=B^a mod={g^(b)}^a mod ={g^a}^b mod p=KB、
ここで、KA、KBは、スイッチi、jにより対称鍵として使用される鍵である。鍵KA、KB は、パケットのMACの生成および確認のために、隣接する一対のスイッチによって使用されてもよい。図３の隣接する一対のスイッチ１０／１０Ａ及びエンドホスト３０−１／３０−２も、スイッチ１０／１０Ａがエンドホスト３０−１／３０−２に接続されたエッジスイッチであると仮定した場合、ディフィー・ヘルマン鍵交換を用いて鍵を交換してもよい。鍵を交換した隣接する一対のスイッチは、鍵をコントローラ２０に通知してもよい。コントローラ２０は、隣接する一対のスイッチのノードIDに対応付けて鍵を保持してもよい。
【００９１】
スイッチ（図３の１０および１０Ａ）はマスター鍵から鍵を生成してもよい。コントローラ（図３の２０）はマスター鍵MKをスイッチに配付する。ここで、コントローラ２０は、各スイッチの公開鍵を用いてマスター鍵MKを暗号化してスイッチに配付してもよい。スイッチは、スイッチのそれぞれの秘密鍵を用いて、コントローラ２０から受信した暗号化されたマスター鍵を復号化する。
【００９２】
次に、隣接する一対のスイッチｉ、ｊ（図３の１０と１０Ａ）は、マスター鍵から秘密鍵を導出する鍵導出関数kdf、又は擬似ランダム関数を使用するパスワードを用いて、スイッチi、jの間で共有され、パケットのMACを計算するために使用される対称鍵（ｉ、ｊ）を生成してもよい。
Key(i,j)=kdf(MK, ID(i), ID(j))   if ID(i) > ID(j)
Key(i,j)=kdf(MK, ID(j), ID(i))   if ID(i) < ID(j)
【００９３】
ここで、ID（i）及びID（j）は、それぞれスイッチｉ及びスイッチｊのスイッチIDを示す。
【００９４】
さらに、コントローラ２０及びスイッチｉは、マスター鍵MKから、コントローラとスイッチIとの間で共有される対称鍵（c、i）を生成してもよい。
Key(c,i)=kdf(MK, ID(i))
【００９５】
機密性を保証するために、エンドホスト３０−１／３０−２又はスイッチ１０／１０Ａがパケットの暗号化を望む場合、エンドホスト３０−１／３０−３又はスイッチ１０／１０Ａは、鍵導出関数kdfを用いてマスター鍵から暗号化用の鍵を生成するように構成されてもよい。
Encryption key=kdf(MK,"D")
【００９６】
なお、"D"は、鍵を引き伸ばすための文字列であり、任意の文字列を使用することができる。
【００９７】
MACの生成および確認のための秘密鍵を配付するために、３つ以上のスイッチが秘密鍵を共有することを可能にするグループ鍵共有方式を使用してもよいのは勿論である。
【００９８】
＜ルール確認用の鍵＞
コントローラ２０は、コントローラとスイッチi（ｉ＝１…N）との間で共有される対称鍵k（c、i）を生成する。Nはスイッチの数である（図３には２つのスイッチ１０及び１０Ａが示されている）。この鍵k（c、i）は、MAC算出やルールの確認に用いられる。さらに、鍵k（c、i）は、スイッチiからコントローラ２０に送信される統計報告の暗号化に使用されてもよい。鍵k（c、i）もまた、スイッチiの公開鍵pkiを用いて安全に配付することができる。
【００９９】
コントローラ２０は、暗号化された鍵ENC（pki、k（c、i））をスイッチiに送信する。スイッチiは、暗号化された鍵を受け取ると、自身の秘密鍵skiを用いて暗号化された鍵ENC（pki、k（c、i））を復号し、ルールのMACの生成および確認のために、コントローラ２０とスイッチIとの間で共有される対称鍵ｋ（ｃ、i）を取得する。
【０１００】
＜スイッチアーキテクチャ＞
図４は、図３のスイッチ１０の構成を模式的に示す図である。図４を参照すると、スイッチ１０は、隔離された実行環境１１と、パケット転送エンジン１２と、ルールデータベース１３と、ネットワークスタック１５とを含む。
【０１０１】
隔離された実行環境１１は、監視モジュール１１１と、ルール検証モジュール１１２と、鍵管理機能１１６とを含む。
【０１０２】
ネットワークスタック１５は、例えば、１つ以上のNIC（Network Interface Card）と、ネットワークドライバソフトウェアを含む。ネットワークスタック１５において、NICは、少なくとも隣接するノード（前段のノードと次段のノード）及びコントローラ２０に接続されている。
【０１０３】
ルールデータベース１３は、コントローラから供給されたルールを格納する記憶部である。ルールデータベース１３は、オープンフロースイッチのフローテーブルに対応する。
【０１０４】
パケット転送エンジン１２は、NICからパケットを受信し、ルールデータベース１３を検索する。パケット転送エンジン１２は、隔離された実行環境１１を呼び出す、又は起動する。
【０１０５】
隔離された実行環境１１内の鍵管理機能１１６は、コントローラ２０から配付された鍵を取得する。コントローラ２０から配付される鍵は以下を含む。
前段のノードから受信したパケットのMACを検証するために使用される第１の鍵、
次段のノードへ転送するパケットのMACを生成するために使用される第２の鍵、
コントローラ２０から受信したルールのMACを検証するために使用される第３の鍵。
【０１０６】
鍵管理機能１１６は、隔離された実行環境１１において、安全に保護された方法でコントローラ２０から配付された鍵を保持し管理してもよい。
【０１０７】
監視モジュール１１１は、第１の鍵を用いて受信パケットに添付されたMACを検証するMAC検証機能１１３と、次段のスイッチとスイッチ１０との間で共有される第２の鍵を用いてMACを更新するMAC更新機能１１４とを含む。MAC更新機能１１４によって更新されたMACは、パケットと共に、パケット転送エンジン１２及びネットワークスタック１５を介して次段のノードに送信される。鍵管理機能１１６は、パケットに対するMACの確認および生成のために、対応する秘密鍵をMAC検証機能１１３及びMAC更新機能に提供する。
【０１０８】
ルール検証モジュール１１２は、パケットが有効なルールに従って転送されることを保証するためにルールを検証するルール検証機能１１５を含む。具体的には、コントローラ２０は、スイッチ１０とコントローラ２０との間で共有される鍵を用いて、ルールを検証するためのMACを生成する。ルール検証機能１１５は、鍵を用いてMACを算出することによりルールを確認し、そのルールについて計算されたMACと、コントローラ２０からルールと共に送信されたMACとの同等性をチェックする。鍵管理機能１１６は、ルールに対するMACを検証するために、対応する秘密鍵をルール検証機能１１５に提供する。
【０１０９】
ルール検証モジュール１１２によって確認されたルールは、パケット転送エンジン１２によって参照されるルールデータベース１３に格納されてもよい。すなわち、パケット転送エンジン１２は、送信者（前段のノード）からパケットを受信すると、当該パケットにマッチするルールを見つけるために、ルールデータベース１３内のルールを検索する。
【０１１０】
ルールには、マッチとそれに対応するアクションが含まれる。マッチは、マッチがパケットのフローを特定するように、パケットヘッダ内のフィールドにおいて特定の値（又は「ドントケア」ワイルドカード値）を使用して表現される。これに限定されないが、フローマッチステートメント（条件）は、例えば、Xかつ範囲[X1、X2]内にある送信元IPアドレス又はMACアドレス、及び／又は、指定されているか、ある範囲内にある宛先IPアドレス又はMACアドレス、TCP（Transmission Control Protocol）又はUDP（User Datagram Protocol）であるプロトコル、及び／又は、何らかの値を有する、又は何らかの範囲内にあるTCP又はUDPの送信元又は宛先ポート、又はワイルドカードについてのマッチを含んでもよい。
【０１１１】
＜パケット転送手順＞
以下、図５を参照して、図４のスイッチ１０におけるパケット転送手順について説明する。
【０１１２】
＜ステップＳ１＞
パケットを受信すると、パケット転送エンジン１２は、ルールデータベース１３を参照して、受信したパケットのヘッダ情報にマッチするルールを検索する。
【０１１３】
＜ステップＳ２＞
受信パケットのヘッダ情報に一致するルールのアクションがパケットの転送を指定している場合（ステップＳ２Ａの「Ｙｅｓ」）、パケット転送エンジン１２は、隔離された実行環境１１を起動し、受信パケットと、それにマッチするルールとを隔離された実行環境１１に供給する（ステップS２B）。さらに、パケット転送エンジン１２は、監視モジュール１１１がパケット確認に使用される鍵を決定できるように、前段のスイッチ情報を与える。
【０１１４】
＜ステップＳ３＞
監視モジュール１１１のMAC検証機能１１３は、前段のスイッチと共有する対称鍵を用いて、受信したパケットのMACの確認を行う。MACの確認が失敗した場合、MAC検証機能１１３はエラーコードをパケット転送エンジン１２に返信してもよい。この場合、パケット転送エンジン１２は、受信パケットの転送を行わない。ステップＳ３は、必ずしもステップＳ２の後でなくともよい。ステップＳ２とステップＳ３の順序は逆でもよい。
【０１１５】
＜ステップＳ４＞
受信パケットが確認に成功した場合（確認ＯＫ）、ルール検証機能１１５は、コントローラ２０とスイッチ１０との間で共有される対称鍵を用いて、マッチするルールのMACを検証する。マッチするルールについて算出されたMACと、コントローラ２０から受信したMACとが同一である場合、次のステップ５がMAC更新機能１１４によって実行される。ステップS４において、ルール検証機能１１５は、マッチするルールのMACを計算し、計算したMACと、コントローラ２０からルールと共に送信され隔離された実行環境１１に保持されているMACとを比較してもよい。あるいは、ルール検証機能１１５は、スイッチ１０のルールID及びノードID（スイッチID）を指定して、マッチするルールについてのMACの送信要求をコントローラ２０に発行し、コントローラ２０は、上記ルールのMAC又は上記ルールのMACを上記ルールとともに返信してもよい。マッチするルールについて算出されたMACと、コントローラ２０から送信されたMACとが一致しない場合（確認ＮＧ（不可））、処理はステップＳ８に進んでよい。
【０１１６】
＜ステップＳ５＞
MAC更新機能１１４は、次段のスイッチと共有する対称鍵を用いてパケットのMACを再計算（更新）する。ここで、ステップＳ４の確認において成功したルールに従い次段のスイッチが決定される。
【０１１７】
＜ステップＳ６＞
次に、隔離された実行環境１１は、更新したMACと共に、パケットをパケット転送エンジン１２に返す。
さらに、隔離された実行環境１１は、受信パケットにマッチするルールが、ルール検証機能１１５により行われた確認に成功した旨をパケット転送エンジン１２に通知してもよい。
【０１１８】
＜ステップＳ７＞
パケット転送エンジン１２は、ルール検証機能１１５による確認に成功した、マッチするルールで指定された特定のポートに、パケットを更新されたMACと共に出力する。
【０１１９】
＜ステップＳ８＞
パケット転送エンジン１２は、残りのルールについても上記ステップＳ１からＳ７を繰り返す。パケット転送エンジン１２は、ルールデータベース１３に残っている、検索されるべき他のルールをチェックし、残っていればステップＳ１に進む。図５は、図４のスイッチ１０におけるパケット転送手順の一例を示す図であり、パケット転送エンジン１２は、受信したパケットと、受信パケットにマッチするルールとを隔離された実行環境１１に提供する。パケット転送手順に関して、ステップＳ３の監視モジュール１１１による受信パケットのMACの確認を、ステップＳ１（受信パケットにマッチするルールの検索）の前に行うような変形も可能である。この場合、パケット転送エンジン１２は、隔離された実行環境１１を起動し、隔離された実行環境１１に配置された監視モジュール１１１に受信したパケットを提供してもよい。受信パケットが監視モジュール１１１によるMACの確認に成功した後、パケット転送エンジン１２は、図５のステップS１（受信パケットにマッチするルールの検索）を実行し、受信パケットにマッチするルールを、隔離された実行環境１１に配置されたルール検証モジュール１１２に提供してもよい。
【０１２０】
＜パケット変更モジュールを備えたスイッチアーキテクチャ ＞
図６は、図３のスイッチ１０Ａを示す図である。図６を参照すると、スイッチ１０Ａにおいて、隔離された実行環境１１Ａは、監視モジュール１１１及びルール検証モジュール１１２に加えて、パケット変更モジュール１２１を含む。パケット変更モジュール１２１は、パケット転送エンジン１２により受信パケットとマッチすると判断されたルールに基づいて、例えば、受信パケットのヘッダ情報など、パケットを変更するように構成される。
【０１２１】
ルールのアクションフィールドはmodify-field、すなわち、送信元／宛先IPアドレスフィールドやVLAN（仮想LAN（Local Area Network））タグなどの受信パケットのヘッダフィールドの変更を指定していると仮定する。パケット転送エンジン１２は、ルールデータベース１３を参照して、受信したパケットのヘッダ情報にマッチするルールの検索を行う。 マッチするルールのアクションフィールドがmodify-fieldを特定している場合、パケット転送エンジン１２は、受信したパケットと、マッチするルールとを隔離された実行環境１１Ａに供給する。
【０１２２】
監視モジュール１１１は、受信パケットのMACの確認を行う。パケット変更モジュール１２１は、マッチするルールのMACの確認を行う。MAC確認が成功した場合、パケット変更モジュール１２１は、マッチするルールのアクションに基づいて、受信パケットのヘッダフィールドを変更する。MAC更新機能１１４はパケットのMACを算出し、パケット転送エンジン１２は更新されたMACと共にパケットを転送する。
【０１２３】
＜パケット転送手順＞
以下、図７を参照して、図６のスイッチ１０Ａにおけるパケット転送手順について説明する。
【０１２４】
＜ステップＳ１１＞
パケット転送エンジン１２はパケットを受信し、次にパケット転送エンジン１２はルールデータベース１３の検索を実行する。
【０１２５】
＜ステップＳ１２＞
マッチするルールがパケット変更を指定している場合（ステップ１２Ａの「Yes」）、パケット転送エンジン１２は、隔離された実行環境を起動し、パケット及びマッチするルールを隔離された実行環境に供給する。
【０１２６】
＜ステップＳ１３＞
監視モジュール１１１は、受信パケットのMACの確認を行う。MACの確認が失敗した場合、MAC検証機能１１３はエラーコードをパケット転送エンジン１２に返信してもよい。この場合、パケット転送エンジン１２は、受信パケットの転送を行わない。
【０１２７】
＜ステップＳ１４＞
受信パケットが確認に成功した場合（確認ＯＫ）、ルール検証機能１１５は、コントローラ２０とスイッチ１０との間で共有される対称鍵を用いて、マッチするルールのMACを検証する。ルール検証機能１１５は、コントローラ２０とスイッチ１０Ａとの間で共有される鍵を用いて、ルールのMACをチェックすることにより、パケット転送エンジン１２から与えられたルールを検証する。ルール検証機能１１５は、鍵を用いてルールのMACを算出し、計算したMACと、コントローラ２０によりそのルールについて算出されたMACとを比較する。マッチするルールについて算出されたMACとコントローラ２０から送信されたMACとが同一でない場合（確認ＮＧ（不可））、処理はステップＳ１８に進んでよい。なお、ステップＳ１４とステップＳ１３とは順番を入れ替えてもよい。
【０１２８】
＜ステップＳ１５＞
パケット変更モジュール１２１は、ルールのマッチ条件が実際に受信したパケットと一致するか否かをチェックする（ステップＳ１５Ａ）。ルールのマッチ条件が実際に受信パケットと一致する場合、パケット変更機能１２２はルールに従ってパケットの変更を行う（ステップＳ１５Ｂ）。ルールのマッチ条件が実際に受信パケットと一致しない場合、ステップS８に進み、何らかのエラーコードがパケット転送エンジン１２に返信されてもよい。
【０１２９】
＜ステップＳ１６＞
監視モジュール１１１は、受信パケットのMACを更新する。
【０１３０】
＜ステップＳ１７＞
次に、隔離された実行環境１１は、パケットをパケット転送エンジン１２に返す。
【０１３１】
＜ステップＳ１８＞
パケット転送エンジン１２は、パケットを指定されたポートに出力する。パケット転送エンジン１２は、ルールデータベース１３に残っている、検索されるべき他のルールをチェックしてもよく、残っていれば、図５同様、ステップＳ１１に進んでもよい。ステップＳ１３の監視モジュール１１１による受信パケットのMACの確認を、ステップＳ１１（受信パケットにマッチするルールの検索）の前に行うような変形も可能である。
【０１３２】
＜パケットの注入＞
オープンフロープロトコルは、スイッチにパケットを送信させるPacket_Outメッセージをサポートする。コントローラ２０は、特定のスイッチのデータプレーンにパケットを注入することができる。図８は、第１の実施形態によるパケット注入を模式的に示す図である。
【０１３３】
Packet_Outメッセージは、スイッチのデータプレーンに注入される生パケットの位置を示す、ヘッダ及びbuffer_idフィールドと、一連のアクションが消費するバイト数を示すin_portフィールド、actions_lenと、生パケットに適用するアクションのリストであるaction[]フィールドと、生パケットを格納するバイト配列であるdata[]フィールドとを含む。
【０１３４】
Packet_Outメッセージは、生パケットを運んでスイッチに注入するか、解放する生パケットを格納するスイッチ上のローカルバッファを示すことができる。0xffffffffの値のBuffer_idは、生パケットがバイト配列data[]内に格納されていることを示し、それ以外の場合、buffer_id値は、生パケットを格納するスイッチに、ローカルのパケットバッファを示す。
【０１３５】
Packet_outメッセージは、パケットとMACの両方を運ぶ。スイッチ１０−１は、Packet_Outメッセージに含まれるパケットを、Packet_Outメッセージで指定されたポートから転送する。次段のスイッチがMACを確認できるように、パケットには、Packet_Outメッセージが有するMACも含まれている必要がある。
【０１３６】
スイッチ上の隔離された実行環境内での追加機能を回避するために、コントローラ２０は、次段のスイッチ１０−２の鍵を用いてパケットのMACを算出する。
【０１３７】
次段のスイッチ１０−２は、コントローラ２０と共有する鍵を用いて、スイッチ１０−１から転送されたパケットのMACを算出し、計算したMACと、スイッチ１０−１からパケットと共に送信されたMACとの同等性をチェックする。
【０１３８】
コントローラ２０は全てのper-neighbor鍵を有する。この場合、Packet_Outメッセージに含まれるパケットのMACを算出するためにコントローラ２０が使用する鍵と、MACを検証するためにスイッチ１０−２が使用する鍵である。
【０１３９】
＜パケットドロップ＞
スイッチ１０の隔離された実行環境１１は、コントローラ２０が統計を比較することによりパケットドロップを検出できるように、定期的にルールの統計報告をコントローラ２０に送信してもよい。
【０１４０】
コントローラ２０が、 正当なアクションと悪意のあるスイッチによるパケットドロップとを区別できるように、パケットドロップは、隔離された実行環境１１においても実行される。
【０１４１】
パケット変更時と同様に、パケット転送エンジン１２は、受信したパケットと、当該パケットのヘッダと一致し、パケットドロップを示すアクションフィールドを有するルールとを隔離された実行環境１１に与える。オープンフローのフローエントリには、明示的にドロップを表すアクションは存在しない。
【０１４２】
その代わり、アクションセットに出力アクションがないパケットはドロップされる。これは、空の命令セットもしくは空のアクションバケットから、又はクリアアクション命令の実行後に発生する可能性がある。勿論、ルールのアクションフィールドは明示的にパケットドロップを示す。
【０１４３】
ルール検証モジュール１１２は、パケットドロップを示すルールのMAC確認を行う。ルール検証モジュール１１２はルールのMACを算出し、算出したMACをコントローラ２０から送信されたMACと比較する。それらのMACが同一である場合、パケット変更モジュール１２１はパケットをドロップする。
【０１４４】
＜ルールの配付＞
図９は、第２の実施形態を示す図である。図９を参照すると、スイッチ１０Ｂは、図６を参照して説明したスイッチ１０Ｂの構成に加えて、さらにルール管理要素１４を含む。重複を避けるために、スイッチ１０Ａ内の他の構成要素の説明は省略する。
【０１４５】
ルール管理要素１４は、コントローラ２０から送信された１つ以上のルールを受信し、ルールデータベース１３に登録する。ルールデータベース１３は、オープンフローの場合と同様に、ルール（フローエントリ）をフローテーブル形式で格納してもよい。ルール管理要素１４とコントローラ２０との間のチャネルは、オープンフローチャネルである。
【０１４６】
ルール管理要素１４は、隔離された実行環境１１の外部に配置される。これにより、隔離された実行環境１１において実行されるコードやプログラムのサイズの増大を防ぐことができる。
【０１４７】
ルールデータベース１３内の複数のルールがパケットヘッダと一致する場合は、最も優先度の高いルールをパケットに適用するというポリシーである。パケット転送エンジン１２は、パケットと、優先度の最も高いルールとを隔離された実行環境１１に提供する。ルール管理要素１４は、コントローラ２０が設定する、ルールデータベース１３内のルールに対する優先順位を保持してもよい。
【０１４８】
＜フローエントリのキャッシュ＞
一部のソフトウェアスイッチの実現においては、パフォーマンス向上のためにフローエントリのキャッシュを使用する。例えば、Open vSwitchは、最初のパケットを受信すると、ワイルドカードを含むエントリから完全一致エントリを生成する。コントローラによりMACが生成されないため、キャッシュエントリには有効なMACがない。Open vSwitchは、分散仮想マルチレイヤスイッチの製品品質のオープンソース実装である。Open vSwitchは、ハイパーバイザ上の仮想スイッチとして実現されてもよい。
【０１４９】
元のエントリをルール検証モジュール１１２に渡すために、キャッシュエントリは元のエントリへのリンクを有してもよい。キャッシュエントリが受信したパケットと一致すると、パケット転送エンジン１２は、リンクを参照することによって元のエントリを取得し、元のエントリをルール検証モジュール１１２に渡す。
【０１５０】
あるいは、ルール検証モジュール１１２は、キャッシュエントリのMACを生成してもよい。まず、パケット転送エンジン１２はパケットと元のエントリとを隔離された実行環境１１Ａに渡し、次にルール検証モジュール１１２が自身の鍵を用いて完全一致のキャッシュエントリ及びそのMACを生成する。ルール検証モジュール１１２は、キャッシュエントリとそのMACをパケット転送エンジン１２に返す。パケット転送エンジン１２は、キャッシュエントリがパケットと一致すると、キャッシュエントリ及びそのMACをルール検証モジュール１１２に渡す。
【０１５１】
＜カウンタ＞
MACに加えて、監視モジュール１１１はパケットにカウンタを追加してもよい。カウンタはパケットごとにインクリメントされる。カウンタを用いて、次段のスイッチはパケットドロップ、パケットの重複、及びパケットの並べ替えをチェックできる。例えば、スイッチが同じカウンタ値を受信した場合、監視モジュール１１１はパケットの重複が発生したと見なす。また、あるカウンタ値が欠落している場合は、パケットドロップが発生したと見なされる。さらに、パケットの並べ替えは、カウンタの順序をチェックすることによって検出することができる。
【０１５２】
カウンタを保護するために、パケットヘッダとペイロードに加えて、パケットのMACは、カウンタについても算出できる。
【０１５３】
＜ルールの優先順位の確保＞
隔離された実行環境１１外の悪意のあるコードが、隔離された実行環境１１に優先度の低いルールを付与する場合がある。
【０１５４】
例として、以下のような攻撃（優先度のスプーフィング攻撃）を想定する。悪意のある（侵害された）パケット転送エンジン１２は、隔離された実行環境１１に低い優先順位のルールを提供することがある。これは意志決定コントローラ２０への侵害につながる可能性がある。
【０１５５】
この場合、優先度の低いルールは有効なMACを有するため、MAC検証機能１１３は攻撃を検出することができない。
【０１５６】
本実施形態では、以下のようにして優先度のスプーフィング攻撃を防止することができる。
【０１５７】
この優先度のスプーフィング攻撃の原因の根本は、複数のルールが１つのパケットに一致することである。パケットに一致するルールが１つだけなら、加害者はこの攻撃を実行できない。
【０１５８】
そこで、コントローラ２０（図２のルール管理部２０３）は、ルールを重複しないルールに分割することで、ルールの重複を解消してもよい。
【０１５９】
＜解決例Ａ＞
図１０は、高優先度ルールと重複する低優先度ルールを複数の非重複ルール（ルール１とルール２）に分割した例Ａを示す図である。
【０１６０】
IPアドレス＝１９２．１６８．０．１６〜３１のマッチ条件を有する高優先度のルールと、IPアドレス＝１９２．１６８．０．０〜６３のマッチ条件を有する低優先度のルールとが設けられているとする。
【０１６１】
高優先度ルールと低優先度ルールは、例えば、宛先IPアドレス＝１９２．１６８．０．２０のヘッダを持つパケットと一致する。低優先度ルールは、それぞれ、高優先度ルールのマッチ条件と重複しないIPアドレス＝１９２．１６８．０．０〜１５、IPアドレス＝１９２．１６８．０．３２〜６３のマッチ条件を有する、ルール１と２に分割される。
【０１６２】
ルール１と２は上記パケットとマッチしなくなり、１つのルール（高優先度ルール）のみがこのパケットにマッチする。したがって、加害者は、優先度のスプーフィング攻撃を実行できない。
【０１６３】
＜解決例Ｂ＞
図１１は、低優先度ルールのマッチ条件を縮小する例Ｂを示す図である。 IPアドレス＝１９２．１６８．０．１６〜３１のマッチ条件を有する高優先度のルールと、高優先度のルールと重複するIPアドレス＝１９２．１６８．０．０〜６３のマッチ条件を有する低優先度のルールとが設けられているとする。図１１では、IPアドレス＝１９２．１６８．０．１６〜１５のマッチ条件を有する低優先度のルールが、 高優先度のルールと重複しない１９２．１６８．０．３２〜６１の範囲に絞り込まれている。
【０１６４】
＜解決例Ｃ＞
図１２は、不要な場合に低優先度ルールを削除する例Ｃを示す図である。 IPアドレス＝１９２．１６８．０．１６〜３１のマッチ条件を有する高優先度のルールと、高優先度のルールと重複するIPアドレス＝１９２．１６８．０．０〜６３のマッチ条件を有する低優先度のルールとが設けられているとする。高優先度ルールのIPアドレスの範囲は、低優先度ルールの範囲を含んでいる。この場合、低優先度ルールと高優先度ルールと間の重複を解決する１つの方法は、低優先度ルールを削除することである。
【０１６５】
＜悪意のあるエッジスイッチ＞
SGXなどの隔離された実行環境は、NICなどのデバイスに安全な入出力チャネルを提供しない。したがって、スイッチのネットワークスタックが侵害されると、攻撃者はエッジスイッチの監視モジュールを迂回することができる。この攻撃はデータの流出を可能にする。データの流出は、標的のネットワークから、攻撃者が制御する場所への情報データの無許可転送である。
【０１６６】
＜データの流出＞
図１３は、データの流出を示す図である。悪意のあるエッジスイッチ内の侵害されたパケット転送エンジン１２は、エンドホスト３０又はスイッチ１０から受信したパケットを、攻撃者のエンドホスト３０−２に転送する。
【０１６７】
さらに、侵害されたネットワークスタック（図４、６、９の１５）は、監視モジュール１１１がパケットをチェックする前に着信パケットを変更することができる。このような攻撃は、エッジスイッチとエンドホストとの間に実行点が存在しないので、検出および防止することができない。
【０１６８】
悪意のあるエッジスイッチによる攻撃の防止には３つの選択肢がある。リンク暗号化、エンドツーエンド暗号化、及びスモールボックスである。
【０１６９】
＜解決策１：リンク暗号化 ＞
悪意のあるエッジスイッチによる攻撃を回避するために、図１４に示すようにリンク暗号化が導入される。
ａ）エッジスイッチとエンドホスト間のリンク。
ｂ）エッジスイッチとその隣接スイッチ間のリンク。
【０１７０】
エッジスイッチ１０とエンドホスト３０との間のリンク暗号化の場合、エッジスイッチ１０は、隔離された実行環境１１内に配置されたリンク暗号化モジュール１２０を含む。リンク暗号化モジュール１２０は、エンドホスト３０に転送されるパケットを暗号化する。
【０１７１】
エンドホスト３０は、エッジスイッチ１０からパケットを受信したパケット転送エンジン３２からのパケットを復号化するリンク暗号化モジュール３３を含み、復号化されたパケットデータをアプリケーション３４に提供する。リンク暗号化モジュール３３は、アプリケーション３４からのパケットデータを暗号化し、暗号化されたパケットデータをパケット転送エンジン３２に提供する。パケットのヘッダ部分は暗号化されない。エンドホスト３０のパケット転送エンジン３２は、暗号化されたパケットをエッジスイッチ１０に転送する。エッジスイッチ１０のパケット転送エンジン１２は、受信したパケットのヘッダにマッチするルールを見つけるためにエッジスイッチ１０に格納されているルールを検索し、パケットをリンク暗号化モジュール１２０に提供する。リンク暗号化モジュール１２０は、エンドホスト３０からパケットを受信したパケット転送エンジン１２により供給された暗号化されたパケットを復号し、復号されたパケットを隔離された実行環境１１内の監視モジュール１１１に提供する。
【０１７２】
エッジスイッチ１０とその隣接スイッチ（不図示）との間のリンク暗号化の場合、エッジスイッチ１０のリンク暗号化モジュール１２０は、パケットを確認した監視モジュール１１１から供給された当該パケットを暗号化して、暗号化されたパケットをパケット転送エンジン１２に提供してもよい。パケット転送エンジン１２は、確認されたMACを有するルールに従って、監視モジュール１１１によって算出されたMACと共に暗号化されたパケットを隣接スイッチに転送してもよい。リンク暗号化モジュール１２０は、隣接スイッチから暗号化されたパケットを受信したパケット転送エンジン１２により供給された上記パケットを復号化して、隔離された実行環境１１内の監視モジュール１１１に提供してもよい。 パケットの送信者は受信者の公開鍵を用いてパケットを暗号化し、受信者は受信者の秘密鍵を用いてパケットを復号化してもよい。あるいは、送信者と受信者は対称鍵を用いてパケットの暗号化および復号化を行ってもよい。
【０１７３】
図１５に示すように、エンドホスト３０は、隔離された実行モジュール３１を有してもよい。リンク暗号化モジュール３３は、隔離された実行環境３１に配置されている。リンク暗号鍵と暗号アルゴリズムは隔離された実行環境３１で保護されている。
【０１７４】
＜解決策２：エンドツーエンド暗号化＞
エンドツーエンド暗号化（End-to-end encryption；E２EE）は、データが一方の端（送信元）から、もう一方の端（宛先）に転送される間、第三者がデータにアクセスすることを防ぐことができる、安全な通信を実現するためのシステムまたはスキームである。エンドツーエンド暗号化では、送信元が暗号鍵でデータを暗号化し、暗号化されたデータは、暗号化されたデータが安全に宛先に到達するまで復号化されない。送信元のエンドホストは、暗号鍵を保護するために隔離された実行環境で暗号化を行ってもよい。エンドツーエンド暗号化は、PIN（Personal Identification Number）やパスワードなどのデータが、一方のエンドホスト上のアプリケーション（例えば、ブラウザ）と、もう一方のエンドホストとの間のどの中間ノードにも知らされないように、アプリケーション層において安全性を実現できる。
【０１７５】
＜解決策３：スモールボックス＞
暗号化の代わりに、スモールボックスをネットワークの境界上（例えば、イントラネットとインターネットとの間の境界上）に配置することができる。図１６は、スモールボックスの構成を示す図である。図１６には、エッジスイッチ１０とエンドホスト３０との間に配置されたスモール（又はボックス）５０の構成が示されている。
【０１７６】
ボックス５０は、自身を通過するパケットのMACを検証するために、隔離された実行環境５１内に監視モジュール５１１を含む。ボックス５０は、コントローラ２０に接続されている。コントローラは、エッジスイッチ１０とボックスとの間、およびボックスとエンドホスト３０との間で共有される秘密鍵を配付する。
【０１７７】
エッジスイッチ１０内の侵害されたネットワークスタック（図４、６、９の１５）又はパケット転送エンジン１２が、監視モジュール１１１がパケットをチェックして、そのパケットをエンドホスト３０に転送する前に、上記パケットを変更すると想定する。エッジスイッチ１０は監視モジュール１１１を迂回する。パケット転送エンジン１２は、パケット及びMACを監視モジュール１１１に提供せずに、パケットをMACと共にエンドホスト３０に転送する。ボックス５０は、エッジスイッチ１０から転送されたMACと共にパケットを捕捉し、パケットのMACを検証する。
【０１７８】
ボックス５０がエッジスイッチ１０から受信したMACは、スイッチ１０の監視モジュール１１１によって生成されていないため、このMACは、ボックス５０の監視モジュール５１１により受信パケットについて算出されたMACとは異なり、受信パケットは確認に失格する。ボックス５０は、エッジスイッチ１０から受信したパケットをエンドホスト３０に転送しない。ボックス５０が存在しなければ、エッジスイッチ１０からの変更されたパケットが、エンドホスト３０に転送される可能性がある。
【０１７９】
この解決策は、エンドホスト３０上にSGXなどの隔離された実行環境を必要としない。
【０１８０】
＜コンピュータプログラムの実装＞
図１７は、図１の通信装置１００、又は図２もしくは図３のスイッチ２０もしくは２０Aの処理の一部または全部を、コンピュータ（プロセッサ）上で動作するソフトウェアプログラムに基づいて実現する、さらなる実施形態を示す。あるいは、図２のコントローラ２０の各部２０１から２０６の処理の一部または全部を、コンピュータ（プロセッサ）上で動作するソフトウェアプログラムによって実現してもよい。この場合、図２のプロセッサ２００は、図１５のプロセッサ４０１に対応する。
【０１８１】
コンピュータシステム４００は、プロセッサ４０１と、メモリ４０２と、送信機４０５及び受信機４０６を含むネットワークインターフェース４０４とを含む。メモリは、図１、図２又は図３を参照して説明した通信装置１００、スイッチ１０、１０Ａ、又はコントローラ２０の処理をプロセッサ４０１に実行させるためのプログラムを格納するROM（Read Only Memory）、RAM（Random Access Memory）、又はEEPROM（Electrically and Erasable Programmable Read Only Memory）、ハードディスクドライブ(HDD)、CD（Compact Disk）又はDVD（Digital Versatile Disk）などの半導体記憶装置を含んでもよい。
【０１８２】
上記の実施形態では、スイッチやコントローラへの適用例を説明したが、勿論、本発明の適用は、SDNやオープンフローネットワークのみに限定されるものではない。本実施形態は、認証情報としてMACを用いたシステムに限定されず、例えば暗号鍵やパスワードなどを用いて生成されたデータ確認や認証情報に適用してもよい。
【０１８３】
なお、上記の特許文献および非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１８４】
１  SDNコントローラ
２  SDNアプリケーション
３  ネットワーク要素
４  SDNノースバウンドインターフェース
５  SDNサウスバウンドインターフェース
１０、１０Ａ、１０Ｂ  スイッチ
１１、１１Ａ、３１、５１、１０１  隔離された実行環境
１２、３２  パケット転送エンジン
１３  ルールデータベース
１４  ルール管理モジュール
２０  コントローラ
３０、３０−１、３０−２  エンドホスト
１００  通信装置
１０２  監視部
１０３  ルール検証部
１０４  パケット転送部
１１１、３１１、５１１  監視モジュール
１１２  ルール検証モジュール
１１３  MAC検証機能
１１４  MAC更新機能
１１５  ルール検証機能
１１６  鍵管理機能
１２１  パケット変更モジュール
１２２  パケット変更機能
２００  プロセッサ
２０１  鍵生成部
２０２  鍵管理部
２０３  ルール管理部
２０４  ルール配付部
２０５  ルール生成部
２０６  パス算出部
２０７  送受信部
２０８  記憶装置
４００  コンピュータシステム
４０１  プロセッサ
４０２  メモリ
４０３  ネットワークインターフェース
４０４  送信機
４０５  受信機
【図１】
2019530344.tif 000003
【図２】
2019530344.tif 000004
【図３】
2019530344.tif 000005
【図４】
2019530344.tif 000006
【図５】
2019530344.tif 000007
【図６】
2019530344.tif 000008
【図７】
2019530344.tif 000009
【図８】
2019530344.tif 000010
【図９】
2019530344.tif 000011
【図１０】
2019530344.tif 000012
【図１１】
2019530344.tif 000013
【図１２】
2019530344.tif 000014
【図１３】
2019530344.tif 000015
【図１４】
2019530344.tif 000016
【図１５】
2019530344.tif 000017
【図１６】
2019530344.tif 000018
【図１７】
2019530344.tif 000019
【図１８】
2019530344.tif 000020
【図１９】
2019530344.tif 000021
【国際調査報告】
2019530344.tif 000022
2019530344.tif 000023
2019530344.tif 000024