弱者は決して許すことができない。許しは強者の態度である── ガンディー
ネットワーク

鍵の材料を先に交換し、守れる状態にしてから相手を確かめる

図 11 が使う取り決めを、まだ守られていない道でどうやって作るか。守る通信が来るまで打合せは始まらず、合意するまでデータ用の取り決めは 1 本も無い

ぴぐおv1人の校閲なし(AI のみ)訂正なし
ネットワークikeipsecvpnconcept
目次

図 11 では、送信用の SA に書かれた方式と鍵で暗号化する、と書きました。

その方式と鍵がどこから来るかには触れていません。 まだ封のできていない道で、相手と方式を決め、鍵の材料をやり取りするしかありません。 この記事は、図 7 で挙げた 3 つの問題を直接解く図ではなく、図 11 が使う取り決めを作る段を扱います。

この連載は、ネットワークの言葉を 3 つの層に置いて読みます。 もの(物理か論理か)、結びつき(人が設定で付ける手動か、機器が学習する自動か、製造時に決まる固定か)、通信フロー(1 本の通信がそれらを順に通る道筋)の 3 つです。

登場するもの

管理用の SA

論理のもので、自動でできます。 打合せそのものを守るための取り決めです。 相手 1 つにつき 1 つです。

データ用の SA

論理のもので、自動でできます。 図 11 で実際にデータを包むのに使う取り決めです。 送信用と受信用の 2 本できます。

事前共有鍵

論理のもので、人が書きます。 相手の IP と対で登録する合言葉です。 両側に同じ文字列を設定します。 値は図にも記録にも書きません。

打合せの通信そのもの

UDP のポート番号 500 を使います。 間に NAT があるときは 4500 も使います。 図 11 のデータのほうはポート番号を持ちません。

結びつき

  • 事前共有鍵 ⇄ 相手の IP は手動です。両側で同じ文字列でないと、フェーズ 1 で止まります。
  • 方式の候補(暗号・ハッシュ・DH グループ)⇄ 相手は手動です。両側に共通のものが 1 つも無ければ、合意に至りません。
  • 守る通信の並び ⇄ 相手も手動です。ここが食い違うと、フェーズ 1 は上がるのにデータが通りません。
  • SA ⇄ 打合せの結果は自動です。人が SA を直接書くことはありません。

通信フロー

① 守る通信、つまり外向きの口に貼った並びに一致するパケットが、ルータ 1 に届きます。図 11 の ① と同じパケットです。

② ルータ 1 は「封をすべき通信なのに、使える取り決めが 1 本も無い」と気づきます。そこで ① は落とし、相手の外側 IP へ打合せを持ちかけます。初回の通信が失敗するのはこのためです。

③ フェーズ 1。まず使える方式の候補を出し合い、鍵の材料を交換します。その材料でできた鍵で中身を守れるようになってから、相手が本物かを確かめます。確かめ方は事前共有鍵です。合意すると、管理用の SA が 1 つできます。

④ フェーズ 2。その守られた中で、守る通信の範囲とデータを守る方式を決めます。合意すると、データ用の SA が送信用・受信用の 2 本できます。

⑤ ここでやっと ① のパケットが ESP で包まれて流れます(図 11 の ② から ⑤)。SA には寿命があり、切れる前に打合せをやり直します。

図 12

図の上半分が構成図と 2 段階の打合せ・切り分け、下半分が設定と増えるもの・通信の中身の推移です。

IKE:封をする前の打合せ。方式と鍵を、まだ守られていない道で決める 図 7 の 3 つの問題を直接解く図ではなく、図 11(問題 3 の解)が使う取り決めを作る段。フェーズ 1 で管理用の SA、その中でフェーズ 2 がデータ用の SA を 2 本作る 支店(自分のもの) インターネット(他人のもの) データセンター(自分のもの) PC-A 192.168.10.10 GW 192.168.10.1 ルータ 1 Gi0 192.168.10.1 Gi1 203.0.113.10 (グローバル IP) Gi0 Gi1 ISP-1 他人の ルータ ISP-2 他人の ルータ ISP-3 他人の ルータ ルータ 2 Gi0 198.51.100.20 (グローバル IP) Gi1 192.168.3.1 Gi0 Gi1 PC-C 192.168.3.10 GW 192.168.3.1 crypto map Gi1 に貼る(手動) crypto map Gi0 に貼る(手動) 打合せ(IKE)。まだ封のできていない道で、方式と鍵を決める 3 4 打合せもこの中を通る。だから「相手が本物か」を確かめる段が要る 合意ができるまで、データ用の取り決め(SA)は 1 本も無い 1 2 5 SA が無い 合意できてから、初めてデータが ESP で流れる(図 11) ③④ の中身:打合せは 2 段階に分かれている ルータ 1 ルータ 2 ③ フェーズ 1:管理用の取り決めを作る(メインモードの段取り) 使える方式の候補を出す → 鍵の材料を交換する → その上で相手が本物か確かめる 合意。管理用の SA が 1 つできる。ここから先の打合せは守られる ④ フェーズ 2:データ用の取り決めを作る 守る通信の範囲と、データを守る方式を決める(もう読まれない道の中で) 合意。データ用の SA が 送信用・受信用 の 2 本できる ⑤ ここでやっと、①のパケットが ESP で包まれて流れる 打合せが始まるきっかけ 口に貼っただけでは、打合せは まだ始まらない 守る通信の並びに一致する パケットが実際に来てから、 相手に声をかける 勉強会の観察:初回の通信を するまで状態は ACTIVE に ならず、Active SAs も 0 のまま (この動きの一次資料は未確認) つながらないときの切り分け セッションが DOWN のまま = フェーズ 1 が合っていない  方式の候補・事前共有鍵・相手の IP のどれかが両側で違う フェーズ 1 は上がるのに通らない = フェーズ 2 が合っていない  守る通信の並び(ACL)が両側で食い違っている どちらも「両側で同じものを人が設定する」でしか合わない 新旧(IKEv2 の表で今どれを使うか) IKEv1 は Historic(役割を終えた文書)に移された 今の現行は IKEv2。段取りの呼び名も変わっている DH グループ 1 は MUST NOT(使ってはいけない) グループ 2 は SHOULD NOT、グループ 14 が MUST 勉強会の group 1 は、この表では「使ってはいけない」側 フロー ① 守る通信(外向きの口に貼った並びに一致するパケット)が、ルータ 1 に届く。図 11 の ① と同じパケット ② ルータ 1 は「封をすべき通信なのに、使える取り決め(SA)が 1 本も無い」と気づく。そこで ① は落とし、相手の外側 IP へ打合せを持ちかける ③ フェーズ 1。まず使える方式の候補を出し合い、鍵の材料を交換する。その材料でできた鍵で中身を守れるようになってから、相手が本物かを確かめる 確かめ方は事前共有鍵(両側に同じ文字列を人が手で設定したもの)。合意すると、管理用の SA が 1 つできる ④ フェーズ 2。その守られた中で、データ用の取り決めの中身(守る通信の範囲・暗号の方式)を決める 合意すると、データ用の SA が 送信用・受信用 の 2 本できる(片道に 1 本ずつ) ⑤ ここでやっと ① のパケットが ESP で包まれて流れる(図 11 の ②〜⑤)。SA には寿命があり、切れる前に打合せをやり直す 増えたもの 管理用の SA(論理・自動):打合せそのものを守るための取り決め。1 つの相手につき 1 つ 事前共有鍵(論理・手動):相手の IP と対で登録する合言葉。両側に同じ文字列を人が設定する 3 層で見ると もの:管理用の SA・データ用の SA(どちらも論理)・事前共有鍵(論理)・UDP ポート番号 500 結びつき:事前共有鍵 ⇄ 相手の IP(手動・両側で同じ文字列)/方式の候補 ⇄ 相手(手動・両側で合わないと決まらない)/SA は合意の結果できる(自動) フロー:図 11 の ②「送信用の SA で暗号化する」の前に、その SA を作る往復が入る。通信が来るまで始まらない 設定と、打合せが進むにつれて増えるもの(③④ の番号は上のフローに対応。青字) ルータ 1: フェーズ 1 の設定(手動) 相手を確かめる方法:事前共有鍵 暗号の方式・ハッシュの方式 DH グループ番号(鍵の材料の作り方) ③この 4 つが両側で合わないと先へ進まない ルータ 1: 事前共有鍵の登録(手動) 相手の IP:198.51.100.20 その相手に使う合言葉:両側で同じ文字列 (値そのものは図にも記録にも書かない) ルータ 1: フェーズ 2 の設定(手動) 守る通信の並び(図 9 の ACL) データを守る暗号の組合せ 相手:198.51.100.20 ④守る通信の並びが両側で食い違うと通らない 打合せの前(②の時点) 管理用の SA:0 データ用の SA:0 セッションの状態:DOWN この状態で ① のパケットが来て、③ が始まる フェーズ 1 の後 ③管理用の SA:1(相手 1 つにつき 1 つ) データ用の SA:0 まだデータは 1 バイトも流れない フェーズ 2 の後(⑤ が流れる状態) 管理用の SA:1 ④データ用の SA:2(送信用・受信用) 勉強会の表示 Active SAs: 2 はこの 2 本 寿命が切れる前に、また打合せが起きる 通信の中身の推移(フローごとのフレーム/パケット) ① 守る通信が届く(図 11 の ① と同じ。これが打合せのきっかけ) 宛先 MAC MAC R1-Gi0 送信元 MAC MAC A 宛先 IP 192.168.3.10 送信元 IP 192.168.10.10 データ ping フレーム=全部。ただしスイッチが見るのは MAC とタグの部分だけ パケット=この部分。ルータはここ(IP)を見る ② ルータ 1 の中 守る通信の並びには一致した。しかし使えるデータ用の SA が無い。そこで ① は落とし(初回の通信が失敗するのはこのため)、相手へ打合せの通信を出す ③ フェーズ 1 の往復(ルータ 1 → ルータ 2。中身はまだ守られていない) 宛先 MAC MAC ISP-1 送信元 MAC MAC R1-Gi1 宛先 IP 198.51.100.20 送信元 IP 203.0.113.10 UDP ポート番号 500 データ 方式の候補 ③ の途中から 鍵の材料を交換し終えた後は、同じ UDP ポート番号 500 のまま、中身が守られた状態になる。相手が本物かを確かめるやり取りは、その守られた中で行う ④ フェーズ 2 の往復(同じ口・同じポート番号。中身はもう読めない) 宛先 MAC MAC ISP-1 送信元 MAC MAC R1-Gi1 宛先 IP 198.51.100.20 送信元 IP 203.0.113.10 UDP ポート番号 500 暗号化されて読めない部分 データ用の取り決めの中身 ⑤ データ(図 11 の ③ と同じ。ここで初めて封ができる) 宛先 MAC MAC ISP-1 送信元 MAC MAC R1-Gi1 外側 宛先 IP 198.51.100.20 外側 送信元 IP 203.0.113.10 ESP ヘッダ SPI・連番 暗号化されて読めない部分 内側 IP ヘッダ+データ+末尾 認証データ 改ざん検知用 打合せは UDP ポート番号 500 を使う。間に NAT があるときは 4500 も使う(RFC 7296 §2、NAT 越えを扱う §2.23) 図 11 のデータ(ESP)のほうはポート番号を持たない。外側 IP ヘッダのプロトコルの欄 50 で見分ける データ用の SA は必ず送信用・受信用の対でできる。片方を消すときは両方消す(RFC 7296 §1.4.1)。勉強会で見た Active SAs: 2 はこの対のこと 「フェーズ 1・フェーズ 2」は IKEv1 の言い方。IKEv2 では IKE_SA_INIT と IKE_AUTH の 2 往復で、管理用の SA と最初のデータ用 SA まで作ってしまう(RFC 7296 §1.2)  CREATE_CHILD_SA を使うのは、データ用の SA を 2 本目以降足すときと、寿命が来て作り直すとき(RFC 7296 §1.3)。IKEv2 は 2 段階に分かれていない 古い方式について: IKEv1(RFC 2409)と、その土台の RFC 2408・2407 は Historic(役割を終えた文書)に移された(RFC 9395)。勉強会の crypto isakmp の設定は IKEv1 側 DH グループ 1(768 ビット)は MUST NOT、グループ 2(1024 ビット)は SHOULD NOT、グループ 14(2048 ビット)が MUST(RFC 8247 §2.4) 勉強会で使った group 1 は、この表では「使ってはいけない」側にあたる 同じく IKEv2 では 3DES が MAY まで下がり、SHA-1 を使う鍵生成は MUST-(SHA-1 への攻撃を理由に格下げ)(RFC 8247 §2.1・§2.2) 出典(IKEv2 の段取り・ポート番号・SA の対): RFC 7296 https://www.rfc-editor.org/rfc/rfc7296 出典(IKEv1 が Historic に移されたこと): RFC 9395 https://www.rfc-editor.org/rfc/rfc9395 出典(DH グループと方式の新旧): RFC 8247 https://www.rfc-editor.org/rfc/rfc8247 未検証: 「守る通信が実際に来てから打合せを始める」は、勉強会で初回の通信をするまで状態が ACTIVE にならなかった観察を一般化したもの。この動きを定めた一次資料は確認できていない 未検証: 上の帯のフェーズ 1・フェーズ 2 の往復は、IKEv1 のメインモードの段取りを 1 往復ずつに単純化して描いている     実際の通信の数と、どの欄がどこまで守られるかは、この図では確かめていない ## 図 11・図 9 との接続

図 11 の ②「送信用の SA で暗号化する」の前に、その SA を作る往復が入ります。 図 10・図 11・図 12 の 3 枚で 1 つの流れになります。

図 9 の行の並びが、ここでもう一度出てきます。 フェーズ 2 で「守る通信の範囲」として合意の材料になり、両側で食い違うと通りません。 つながらないときの切り分けは、この 2 段階に対応します。 セッションが DOWN のままならフェーズ 1 で、方式の候補・事前共有鍵・相手の IP のどれかが両側で違います。 フェーズ 1 は上がるのに通らないならフェーズ 2 で、守る通信の並びが両側で食い違っています。

図 1 でルーティングテーブルの行を人が書いたのと同じで、方式・鍵・守る範囲は人が両側で揃えます。

未検証・注意

  • 「守る通信が実際に来てから打合せを始める」は、勉強会で初回の通信をするまで状態が ACTIVE にならず、SA の数も 0 のままだった観察を一般化したものです。この動きを定めた一次資料は確認できていません。
  • 図の帯では、フェーズ 1 とフェーズ 2 を 1 往復ずつに単純化して描いています。実際の通信の数と、どの欄がどこまで守られるかは確かめていません。フェーズ 1 の途中で中身が守られるようになる切り替わりの位置も、図では大まかにしか描けていません。
  • 「フェーズ 1・フェーズ 2」は IKEv1 の言い方です。勉強会が使ったのが IKEv1 だったので、図もその言葉で描いています。③ の往復は IKEv1 のメインモードの段取りです。
  • IKEv2 では段取りが違います。IKE_SA_INIT と IKE_AUTH の 2 往復で、管理用の SA と最初のデータ用 SA まで作ってしまいます。CREATE_CHILD_SA を使うのは、データ用の SA を 2 本目以降足すときと、寿命が来て作り直すときです。フェーズ 1 を IKE_SA_INIT と IKE_AUTH、フェーズ 2 を CREATE_CHILD_SA に対応づける読み方はできません。
  • IKEv1 は「非推奨」ではなく、Historic(役割を終えた文書)に移されました。RFC 2409 と、その土台の RFC 2408・RFC 2407 が対象です。
  • 古い方式について書くとき、参照した表は IKEv2 向けのものです。勉強会が使った IKEv1 の設定を、IKEv2 の表で評価していることになります。その表では DH グループ 1(768 ビット)が MUST NOT、グループ 2(1024 ビット)が SHOULD NOT、グループ 14(2048 ビット)が MUST、グループ 19 が SHOULD です。3DES は MAY まで下がり、SHA-1 を使う鍵生成は MUST- です。勉強会で使ったグループ 1 は、この表では使ってはいけない側にあたります。
  • 事前共有鍵の値、SPI の値、鍵の寿命の実数は書いていません。

出典

関連

この記事の校閲記録

誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。

段落 32 のうち出典つき 13・出典なし 19

v1 2 件
  • AIAI (claude-fable-5) が AI 確認未解決

    出典 3 件を再取得した。RFC 7296 §1.2 で IKE_SA_INIT が方式の合意と鍵の材料の交換を行い、IKE_AUTH が相手の確認と最初のデータ用 SA の作成まで行うこと、§1.3 で CREATE_CHILD_SA が 2 本目以降の作成と作り直しに使われること、§1.4.1 で ESP と AH の SA が必ず片道ずつの対でできること、§2 と §2.23 で UDP ポート番号 500 と NAT 越えの 4500 を確認した。この確認にもとづき、フェーズ 1 を IKE_SA_INIT と IKE_AUTH に、フェーズ 2 を CREATE_CHILD_SA に対応づける書き方は誤りとして避け、フェーズという言い方が IKEv1 のものであることを本文に明記した。RFC 9395 が IKEv1(RFC 2409)と RFC 2408・RFC 2407 を Historic に移したことを確認したので、非推奨ではなく Historic に移されたと書いた。RFC 8247 §2.1・§2.2・§2.4 で 3DES が MAY、PRF_HMAC_SHA1 が MUST-、DH グループ 1 が MUST NOT、グループ 2 が SHOULD NOT、グループ 14 が MUST、グループ 19 が SHOULD であることを確認し、この表が IKEv2 向けであることを断ってから使った。守る通信が来てから打合せを始めるという動きは本人の観察を一般化したもので、一次資料を確認できていないため未検証に残した。帯の往復を 1 往復ずつに単純化していることも未検証として引き継いだ。事前共有鍵の文字列・鍵の寿命の実数は書いていない。校正チェックリストを通し、例え話・体言止め・断定を示す禁止語の混入を機械検査した。守秘: 実名・社名・会場名・地名・金額なし

  • AIAI (claude-fable-5) が 編集未解決

    公開前の校閲。frontmatter のタグ IKE・IPsec・VPN を小文字に直した。本文は、フェーズ 1・フェーズ 2 が IKEv1 の言い方であること、IKEv2 では IKE_AUTH までで最初のデータ用 SA ができ CREATE_CHILD_SA は 2 本目以降と作り直しに使うこと、IKEv1 が非推奨ではなく Historic であることが注に書き分けられているのを確認し、修正はしていない。

参考文献

更新履歴

  • 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
  • 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新

機械可読の記録