SlideShare a Scribd company logo
1 of 132
/132
RFC 5996
Internet Key Exchange Protocol Version 2 (IKEv2)
第2版
by 長谷川
1
/132
もくじ
• IPsecの概要(オリジナル)
• Introduction(Section 1)
– 用語、Exchangeの概要
• Header and Payload Formats(Section 3)
• Exchanges and Payloads(Appendix C)
• IKE Protocol Details and Variations(Section 2)
– 細かいところ
• RFC 4306(旧IKEv2のRFC)との差分
まとめやすさ重視でRFCと順番を変えている。
2
/132
IPsecの概要
3
/132
IPsecの概要(1/10)
• 関連するRFCが多い
カテゴリ RFC タイトル
アーキテクチャ RFC 4301 Security Architecture for the Internet Protocol
IKEプロトコル RFC 5996 (新 IKEv2) Internet Key Exchange Protocol
Version 2 (IKEv2)
RFC 4306 (旧 IKEv2) Internet Key Exchange (IKEv2)
Protocol
RFC 2409 (IKEv1) The Internet Key Exchange (IKE)
IKE関連 RFC 3526 More Modular Exponential (MODP) Diffie-
Hellman groups for Internet Key Exchange (IKE)
RFC 4307 Cryptographic Algorithms for Use in the
Internet Key Exchange Version 2 (IKEv2)
セキュリティプロトコル RFC 4302 IP Authentication Header(AH)
RFC 4303 IP Encapsulating Security Payload (ESP)
セキュリティプロトコル関連 RFC 4305など 大量にある
4
/132
IPsecの概要(2/10)
• IPsecとIKEv2は独立したもの。
※IKEv2がなくても手動で鍵管理ができればIPsecできる。
• IPsec
– AH/ESPによるIPパケットの暗号化、認証
• IKEv2
– 暗号化鍵の管理
• パケットの暗号化、完全性保証
• パケットの認証、通信相手の認証
• 秘密鍵の共有
5
/132
IPsecの概要(3/10)
IPsecの動作(トンネルモードの例)
送信PC 受信PC
ローカルIP リモートIP プロト
コル
動作
(PROTECT/BYPASS/DISCARD)
セキュリ
ティプロ
トコル
モード
送信PC 受信PC ANY PROTECT(IPsec適用) ESP トンネル
192.168.1.1 10.0.0.10 ANY BYOASS(IPsec非適用) - -
Selector
RT#1のSPD(Security Policy Database)
①RT#1はSPDのSelectorを検索し、IPsec適用/非適用/破棄を判断する。
RT#1 RT#2
IPパケット
処理
6
/132
暗号化
(SPI=1)
IPsecの概要(4/10)
IPsecの動作(トンネルモードの例)
送信PC 受信PC
SPI ローカルIP リモートIP プロトコル セキュリ
ティプロ
トコル
暗号化ア
ルゴリズ
ム
鍵
1 送信PC 受信PC ANY ESP 3DES 2938417
Selector
RT#1のSAD(Security Association Database)
②RT#1はSelectorでSADを検索し、IPsecに適用するパラメータを決定する。
③RT#1はSADのパラメータに従ってパケットを暗号化し、送信する。
RT#1 RT#2
IPパケット
パラメータ
IPパケット
7
/132
IPsecの概要(5/10)
IPsecの動作(トンネルモードの例)
送信PC 受信PC
SPI ローカルIP リモートIP プロトコル セキュリ
ティプロ
トコル
暗号化ア
ルゴリズ
ム
鍵
1 受信PC 送信PC ANY ESP 3DES 2938417
Selector
RT#2のSAD(Security Association Database)
④RT#2はSPIでSADを検索し、IPsecに適用するパラメータを決定する。
⑤RT#2はSADのパラメータに従ってパケットを復号する。
RT#1 RT#2
パラメータ
IPパケット
暗号化
(SPI=1)
IPパケット
8
/132
IPsecの概要(6/10)
IPsecの動作(トンネルモードの例)
送信PC 受信PC
ローカルIP リモートIP プロト
コル
動作
(PROTECT/BYPASS/DISCARD)
セキュリ
ティプロ
トコル
モード
送信PC 受信PC ANY PROTECT(IPsec適用) ESP トンネル
192.168.1.1 10.0.0.10 ANY BYOASS(IPsec非適用) - -
Selector
RT#2のSPD(Security Policy Database)
⑥RT#2はSPDのSelectorを検索し、転送/破棄を判断する。
RT#1 RT#2
IPパケット
処理
9
/132
IPsecの概要(7/10)
• 以上の手順中でのIKEv2の役割
– SPD、SAD作成のための情報のやりとり
– SADの鍵管理
10
/132
• IPsecには様々な運用シナリオがある。
– トンネルモード
• PCはIPsecを実装していない。
• SeGWはPCにInner IPを割り当てる。
• SeGW配下のPCが送受信するInner IPのパケットが保
護される。
Outer IP
パケット
(暗号化)
IPsecの概要(8/10)
運用シナリオ
11
送信PC 受信PC
Inner IP
パケット Inner IP
パケット
Inner IP
パケット
SeGW SeGW
/132
IPsecの概要(9/10)
運用シナリオ
– トンネルモード その2
• PCがIPsecを実装している。
• VPN等で企業ネットワークに繋いだりする例。
• 送信PCはSeGWからIPを割り当てられる。
12
送信PC 企業
NW
SeGW
Outer IP
パケット
(暗号化)
Inner IP
パケット Inner IP
パケット
/132
IPsecの概要(10/10)
運用シナリオ
– トランスポートモード
• PCがIPsecを実装している。
• 一般的にInner IPは使用しない。
• End to Endの機密性を確保できる。
• NAT配下に複数PCがあり、NAT越えが必要な場合に関
しては後述。
13
送信PC 受信PC
パケット
(暗号化)
パケット
(暗号化)
パケット
(暗号化)
/132
Introduction
14
/132
用語、Exchange
• 用語
• Exchangeの種類と用途
• 信頼性の保証
メッセージの信頼性の保証はrequest送信側が保証する。
Response受信がタイムアウトした場合、requesterは再送するか切断する。
用語 意味
Child SA IKE SAで設定されるESP/AHのためのSA。
Exchange Response/Requestのペア。すべてのIKE通信はExchangeである。
Exchange 用途
IKE_SA_INIT IKE SAパラメータのネゴシエーション。IKEの最初のexchange。
IKE_AUTH 認証。Child SAの確立。IKE_SA_INITの後のexchange。
CREATE_CHILD_SA Child SAの確立。Rekey(IKE SA/Child SAのキー更新)。
INFORMATIONAL Housekeeping(ヘルスチェック)。SAの削除。エラー通知等。
15Introduction(1/12)
/132
Payload
• シーケンス上の略称
表記 Payload
AUTH Authentication
CERT/CERTREQ Certificate/Certificate Request
CP Configuration
D Delete
EAP Extensible Authentication
HDR IKE header
IDi/IDr Initiator’s Identification/Responder’s Identification
KE Key Exchange
Ni/Nr Nonce
N Notify
SA Security Asscociation
SK Encrypted and Authentication
TSi/TSr Initiator’s Traffic Selector/Responder’s Traffic Selector
V Vendor ID
16Introduction(2/12)
/132
Initial Exchange(1/3)
• IKEの開始時に実行されるexchange
Initiator Responder
HDR SAi1 KEi Ni
【HDR】SPI、バージョンなど 【SAi1】SA用の暗号化パラメーター
【KEi】InitiatorのDiffie-Hellman値 【Ni】Nonce
HDR SAr1 KEr Nr
[CERTREQ]
option
①InitiatorがIKEを開始する。
②ResponderはSAi1から暗号化アルゴリズムを決定し、SAr1に設定する。
IKE_SA_INIT Response
③Initiator、ResponderはKEi/KEr/Ni/NrからIKE SA、Child SAのKeyを算出する。
以降のメッセージは暗号化/完全性保証される。
IKE_SA_INIT Request
17
[ ]のpayloadはオプション。
Introduction(3/12)
/132
Initial Exchange(2/3)
• IKEの開始時に実行されるexchange
Initiator Responder
HDR IDi
[CERT]
option
SK
暗号化→
[CERTREQ]
option
[IDr]
option
AUTH SAi2 TSi TSr
【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。
④IDと認証データ(AUTH)を送信する。
⑤ResponderはIDr、Child SA用のパラメーターを通知をする。
IKE_AUTH Response
⑥Child SAの作成完了。※Child SA確立が失敗した場合はChild SA無しでIKE SAが確立する。
IKE_AUTH Request
HDR IDr
[CERT]
option
SK
暗号化→
[IDr]
option
AUTH SAr2 TSi TSr
【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。
18
IDiを認証する。
Introduction(4/12)
/132
Initial Exchange(3/3)
• 最小で4メッセージ(2 exchange)で完了する。
• IKE_AUTHでChild SA作成が失敗した場合でもIKE SAを維持し
てよい。
• IKE_AUTHで通知されるNotify Message。詳細は後述。
– NO_PROPOSAL_CHOSEN
– TS_UNACCEPTABLE
– SINGLE_PAIR_REQUIRED
– INTERNAL_ADDRESS_FAILURE
– FAILED_CP_REQUIRED
• Initial Exchange終了(IKE SA確立)までCREATE_CHILD_SA
exchange、INFORMATIONAL exchangeは実行できない。
19Introduction(5/12)
/132
CREATE_CHILD_SA Exchange
• 2つの役割がある。
– 新しいChild SAの作成
– IKE SA/Child SAのRekey(*1)
• IKEv1のPhase 2 exchangeに相当。
• IKE SAの確立後、どちらから開始してもよい。
• CREATE_CHILD_SA requestを拒否してよい。
*1:新しいSAを作成し、古いSAを削除すること。
20Introduction(6/12)
/132
Creating New Child SA
(CREATE_CHILD_SA Exchange)
• 新しいChild SAを作成する。
Initiator Responder
SAは複数個要求してよい。
①Initiatorがexchangeを開始する。開始した方がInitiator。
②Responderは応答する。KEiが含まれていた場合KErを送信。
CREATE_CHILD_SA Response
Child SA作成に失敗した場合でもIKE SAは削除しないこと。
CREATE_CHILD_SA Request
HDR SA Ni
SK
暗号化→
TSi TSr
[KEi]
option
HDR SA Nr
SK
暗号化→
TSi TSr
[KEr]
option
③Child SAの作成完了。
21
【KEi】 forward secrecyのためにDiffie-
Hellman値を変更する場合に設定する。
【KEr】requestにKEiがあった場合に設定する。
Introduction(7/12)
/132
Rekeying IKE SA
(CREATE_CHILD_SA Exchange)
• IKE SAをrekeyする。
Initiator Responder
HDR SA Ni
SK
暗号化→
KEi
ResponderはIKE SA Rekey用のCREATE_CHILD_SA requestを受信したIKE SAで新規にCREATE_CHILD_SA exchangeを
開始しないこと。
①Initiatorがrekeyを開始する。開始した方がInitiator。
②Responderは応答する。
CREATE_CHILD_SA Response
③IKE SAのrekey完了。
CREATE_CHILD_SA Request
HDR SA Nr
SK
暗号化→
KEr
新しいInitiatorのIKE SA SPIはSA
のSPI filedに設定する。
22
新しいResponderのIKE SA SPIは
SAのSPI filedに設定する。
新しいIKE SA:message counter、Message IDは0。Window Sizeは1。 Original Initiator はRekeyを開始した側。
古いIKE SA:IKE SAを削除するまでパラメーターは維持する。
Introduction(8/12)
/132
Rekeying Child SA
(CREATE_CHILD_SA Exchange)
• Child SAをrekeyする。
Initiator Responder
HDR N(REKEY_SA)
SK
暗号化→
SA Ni
[KEi]
option
TSi TSr
RekeyされるSAはNotification payloadのSPI filedで識別する。Protocol IDはESP 2, AH 3。
通常は元のSAと同じSA、TSが設定される。
①InitiatorがRekeyを開始する。開始した方がInitiator。
②Responderは応答する。KEiが含まれていた場合KErを送信。
CREATE_CHILD_SA Response
③Child SAのrekey完了。
CREATE_CHILD_SA Request
HDR SA Nr
SK
暗号化→
[KEr]
option
TSi TSr
【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。
23
【KEi】 forward secrecyのためにDiffie-
Hellman値を変更する場合に設定する。
Introduction(9/12)
/132
INFORMATIONAL Exchange
• 役割
– エラー、状態の通知。
– Housekeeping(payloadを含まないRequest/Responseで実現)。
• 0以上のNotification payload /Delete payload/Configuration payloadを含む。
• 応答がない場合、再送する。
HDR
[N]
option
SK
暗号化→
[D]
option
[CP]
option
処理内容はpayloadによって決まる。
①Initiatorが送信。開始した方がInitiator。
②Responderが応答。
INFORMATIONAL Response
INFORMATIONAL Request
Initiator Responder
HDR
[N]
option
SK
暗号化→
[D]
option
[CP]
option
24Introduction(10/12)
/132
Deleting SA
(INFORMATIONAL Exchange)
• Child SAを削除する場合、双方のSAを同一のexchangeで削除すること。
• INFORMATIONAL exchange(Delete payloadで削除SPIを指定)で削除する。
(exchange=双方向のメッセージのやりとりで削除される)
• IKE SAを削除する場合
– そのIKE SAでネゴシエーションされたChild SAも同時に削除すること。
– 応答はempty INFORMATIONAL response。
• Half-close connection、送受信不可能になった場合でも上記の方法でSA
を削除すること。
• 例外:同時にDelete payloadを送信した場合は同時に削除してもよい。
• 例外:既に削除したSAの削除を要求された場合、受信したSAを削除し、
応答にはDelete Payloadを含めないこと。
※誤った削除が行われないようにするため。
25Introduction(11/12)
/132
IKE SA外のメッセージ
• 認識しないSPIでESP/AHパケットを受信した。
– Notify PayloadでINVALID_SPIを送信してよい。
– IKE SAがある場合
• 暗号化の保護ありで送信。
– IKE SAがない場合
• 暗号化の保護なしで送信。※偽装パケットの可能性もあるので受信した場合は参考情報程度に
する。
– 上記のINFORMATIONAL requestの受信側は応答しないこと。
• IKE SPIは意味のない値(0、乱数等)。Initiator flagは1。Responder flagは0。
• 暗号化されたIKE requestをPort 500/4500で認識しないSPIで受信した。
– IKE SA外のため、Notify payloadでINVALID_IKE_SPIを送信する。
– IKE SPI、Message ID、Exchange Typeは受信パケットのコピー。Response flagは1。
– IPアドレスとポート番号は送信側を指定する。
– IKE responseには応答しないこと。
• IKE requestを対応しないメジャーバージョンで受信した。
– IKE SA外のため、Notify payloadでINVALID_MAJOR_VERSIONを送信する。
– IKE SPI、Message ID、Exchange Typeは受信パケットのコピー。Response flagは1。
– IPアドレスとポート番号は送信側を指定する。
26Introduction(12/12)
/132
Header and Payload Formats
27
/132
Header and Payload Formats
• IKEメッセージはUDP Port 500/4500を使用する。
– UDP 500 Port
• UDPヘッダの直後がIKEメッセージ
– UDP 4500 Port
• UDPヘッダの後、4オクテットの0の後にIKEメッセージ
※4オクテットの0はIKEメッセージではない。length、checksumの計算には含まない。
※UDPカプセル化の際にESPパケットと区別するために設定する。
• UNSPECIFIEDのパラメーターは相互運用のため
には使用しないこと。
28Header and Payload Formats(1/55)
/132
IKEv2のPayloadとPayload Type
• Payload Type 1~32はIKEv1で割り当てられているため、使用しないこと。
Payload 略記 Payload Type
No Next Payload - 0
Security Association SA 33
Key Exchange KE 34
Identification Initiator / Responder IDi / IDr 35 / 36
Certificate CERT 37
Certificate Request CERTREQ 38
Authentication AUTH 39
Nonce Ni / Nr 40
Notify N 41
Delete D 42
Vendor ID V 43
Traffic Selector Initiator/ Responder TSi / TSr 44 / 45
Encrypted SK 46
Configuration C 47
Extensible Authentication Protocol(EAP) EAP 48
29Header and Payload Formats(2/55)
/132
IKE Header:フォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IKE SA Initiator's SPI |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IKE SA Responder's SPI |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload | MjVer | MnVer | Exchange Type | Flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30Header and Payload Formats(3/55)
/132
IKE Header:フィールド
Field Length 説明
IKE SA Initiator's SPI 8 octets Initiatorが選択したIKE SAの識別子。0以外の値。
IKE SA Responder's
SPI
8 octets Responderが選択したIKE SAの識別子。IKE Initial
Exchangeの最初のメッセージでは0であること。
Next Payload 1 octet Headerの次のpayloadのPayload Type。
MjVer 4 bits IKEのメジャーバージョン。RFC5996は2。ISAKAMPは1。2
より大きい場合はN(INVALID_MAJOR_VERSION)で、メッ
セージを拒否すること。
MnVer 4 bits IKEのマイナーバージョン。RFC5996は0。受信側では無
視すること。
Exchange Type 1 octet ExchangeのType。次スライド参照。
Flags 1 octet ビットフィールドで表されるオプション。次スライド参照。
Message ID 4 octets 0から始まり、Request毎に1増える。Responseでは
Requestと同じ値を設定する。
双方向で別のMessage IDをもつ。
Length 4 octets IKE Header + Payloadのオクテット長。
31Header and Payload Formats(4/55)
/132
IKE Header:Exchange Type、Flag
Exchange Type Value
IKE_SA_INIT 34
IKE_AUTH 35
CREATE_CHILD_SA 36
INFORMATIONAL 37
Flag 意味
X 送信時にCleared、受信時は無視する。
R(Response) 同じMessage IDのResnponseである。
RequsetでCleared、ResponseでSetする。
V(Version) 送信者がMjVerより高いMjVerを使用できることを示す。
IKEv2では送信時にCleared、受信時は無視する。
I(Initiator) IKE SAのInitiatorがSetし、ResponderはClearedする。
IKE SAをRekeyした場合はRekeyを開始した方がInitiatorになる。
受信側がI/RどちらのSPIを使用するか判別するのに使用する。
X X R V I X X X
Set:1
Cleared:0
32Header and Payload Formats(5/55)
/132
Generic Payload Header:フォーマット
IKE PayloadはGeneric Payload Headerで始まる。
以降の各payloadの説明では記載を省略する。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33Header and Payload Formats(6/55)
/132
Generic Payload Header:フィールド
Field Length 説明
Next Payload 1 octet 次のpayloadのPayload Type。このPayloadが最後の場合は0。
Encrypted payloadの場合、Encrypted payload内の最初の
payloadのPayload Typeが設定される。
C(Critical) 1 bit 前のNext Payload filedのPayload Typeに対応していない場合
にこのpayloadを無視して欲しい場合、送信側が1を設定する。
IKEv2に準拠する場合は常に0を設定すること。
RESERVED 7 bits 0を設定し、受信側は無視すること。
Payload Length 2 octets Generic Payload Header + Payloadのオクテット長。
34Header and Payload Formats(7/55)
/132
Security Association Payload:フォーマット
SAのネゴシエーションに使用される。
3階層 Proposal – Transform – AttributeでSAを表現する。
SA Payload
|
+--- Proposal #1 ( Proto ID = ESP(3), SPI size = 4,
| | 7 transforms, SPI = 0x052357bb )
| |
| +-- Transform ENCR ( Name = ENCR_AES_CBC )
| +-- Attribute ( Key Length = 128 )|
|
+--- Proposal #2 ( Proto ID = ESP(3), SPI size = 4,
| 4 transforms, SPI = 0x35a1d6f2 )
|
+-- Transform ENCR ( Name = AES-GCM with a 8 octet ICV )
| +-- Attribute ( Key Length = 128 )
|
+-- Transform ESN ( Name = ESNs )
+-- Transform ESN ( Name = No ESNs )
35Header and Payload Formats(8/55)
/132
Security Association Payload:フォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ <Proposals> ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Proposals:可変長。1以上のProposalを含む。
36Header and Payload Formats(9/55)
/132
Security Association Payload:フォーマット
Proposal Substructureフォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 (last) or 2 | RESERVED | Proposal Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Proposal Num | Protocol ID | SPI Size |Num Transforms|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ SPI (variable) ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ <Transforms> ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Transforms:可変長。1以上のTransformを含む。
37Header and Payload Formats(10/55)
/132
Security Association Payload:フィールド
Proposal Substructureフィールド
Field Length 説明
0 (last) or 2(more) 1 octet 最後のProposalであるかを示す。
RESERVED 1 octet 0を設定し、無視すること。
Proposal Length 2 octets Transform、Attributeを含むProposalのオクテット長。
Proposal Num 1 octet 最初のProposalは1。以降インクリメントされる。
Protocol ID 1 octet 1:IKE SA。2:AH。3:ESP。
SPI Size 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。
Num Transforms 1 octet Proposalに含まれるTransformの数。
SPI variable 送信側のSPI。
SPI Sizeが0の場合、このfieldは含めないこと。
<Transforms> variable 1つ以上のTransform Substructure。
38Header and Payload Formats(11/55)
/132
Security Association Payload:フォーマット
Transform Substructureフォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 (last) or 3 | RESERVED | Transform Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Transform Type | RESERVED | Transform ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Transform Attributes ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39Header and Payload Formats(12/55)
/132
Security Association Payload:フィールド
Transform Substructureフィールド(1/4)
Field Length 説明
0 (last) or 3(more) 1 octet 最後のProposalであるかを示す。
RESERVED 1 octet 0を設定し、無視すること。
Transform Length 2 octets Header、Attributeを含むTransformのオクテット長。
Transform Type 1 octet プロトコルの種別。オプション。
Transform ID 1 octet Transform Typeの識別子。
Transform Attributes 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。
説明 Transform Type プロトコル
Optional(Responder任せ) 0 IKE、AH、ESP、
Encryption Algorithm(ENCR) 1 IKE、ESP
Pseudorandom Function(PRF) 2 IKE
Integrity Algorithm(INTEG) 3 IKE、AH、ESP(option)
Diffie-Hellman group(D-H) 4 IKE、AH(option)、ESP(option)
Extended Sequence Numbers (ESN) 5 AH、ESP
40Header and Payload Formats(13/55)
/132
Security Association Payload:フィールド
Transform Substructureフィールド(2/4)
Transform Type 1(Encryption Algorithm)の場合
41
Name Trans Form ID Number 定義
ENCR_DES_IV64 1 UNSPECIFIED
ENCR_DES 2 RFC2305、DES
ENCR_3DES 3 RFC2451
ENCR_RC5 4 RFC2451
ENCR_IDEA 5 RFC2451、IDEA
ENCR_CAST 6 RFC2451
ENCR_BLOWFISH 7 RFC2451
ENCR_3IDEA 8 UNSPECIFIED
ENCR_DES_IV32 9 UNSPECIFIED
ENCR_NULL 11 RFC2410
ENCR_AES_CBC 12 RFC3602
ENCR_AES_CTR 13 RFC3686
Header and Payload Formats(14/55)
/132
Security Association Payload:フィールド
Transform Substructureフィールド(3/4)
Transform Type 2(Pseudorandom function)の場合
Transform Type 3(Integrity Algorithm)の場合
42
Name Trans Form ID Number 定義
PRF_HMAC_MD5 1 RFC2104、MD5
PRF_HMAC_SHA1 2 RFC2104、SHA
PRF_HMAC_TIGER 3 UNSPECIFIED
Name Trans Form ID Number 定義
NONE 0
AUTH_HMAC_MD5_96 1 RFC2403
AUTH_HMAC_SHA1_96 2 RFC2403
AUTH_DES_MAC 3 UNSPECIFIED
AUTH_KPDK_MD5 4 UNSPECIFIED
AUTH_AES_XCBC_96 5 RFC3566
Header and Payload Formats(15/55)
/132
Security Association Payload:フィールド
Transform Substructureフィールド(4/4)
Transform Type 4(Diffie-Hellman group)
Transform Type 5(Extended Sequence Numbers)
43
Name Trans Form ID Number 定義
NONE 0
768-bit MODP 1 RFC5996
1024-bit MODP 2 RFC5996
1536-bit MODP 5 RFC2451
2048-bit MODP 14 RFC2451、IDEA
3072-bit MODP 15 RFC2451
4096-bit MODP 16 RFC2451
6144-bit MODP 17 RFC3526
8192-bit MODP 18 RFC3526
Name Trans Form ID Number
No Extended Sequence Numbers 0
Extended Sequence Numbers 1
Header and Payload Formats(16/55)
/132
Security Association Payload:フィールド
プロトコル毎に必須/オプションのTransform Typeが異なる。
※Encrypted payloadにIntegrity algorithmを使用するのが必須のため。
必須のアルゴリズムは規定しない。
(アルゴリズムが危殆化、陳腐化する場合があるため)
44
Protocol Mandatory Type Optional Type
IKE ENCR、PRF、INTEG※、D-H
ESP ENCR、ESN INTEG、D-H
AH INTEG、ESN D-H
Header and Payload Formats(17/55)
/132
Security Association Payload:フォーマット
Attributeフォーマット
設定可能なAttributeはTransformによって異なる。
フォーマットはType/ValueまたはType/Length/Value。
現状、1つのAttribute typeのみが規定される。
Key Length Attribute:特定のEncryption Transformのキー長を規定する。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|A| Attribute Type | AF=0 Attribute Length |
|F| | AF=1 Attribute Value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AF=0 Attribute Value |
| AF=1 Not Transmitted |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45Header and Payload Formats(18/55)
/132
Security Association Payload:フィールド
Data Attributesフィールド
Field Length 説明
Attribute Format(AF) 1 bit AttributeがType/Length/Value(TLV)かType/Value(TV)か
を示す。0:TLV。1:TV。
Attribute Type 15 bits AttributeのType。
※Value 0~13、15~17はIKEv1で使用されるので使用
しないこと。
Attribute Value variable AF=1:2 octets。AF=0:Attribute Lengthのオクテット長。
Transform Type 1 octet プロトコルの種別。オプション。
Transform ID 1 octet Transform Typeの識別子。
Transform Attributes 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。
Attribute Type Value Attribute Format
Key Length (in bits) 14 TV
46Header and Payload Formats(19/55)
/132
Security Association Payload:補足
• Key Length attributeの設定
– 固定長keyのTransformに設定しないこと。
• 例:ENCR_DES、ENCR_IDEA、Type 2 Transform、Type 3
Transform
– 可変長keyのTransformに設定されていない場合、デ
フォルトのlengthを使用すること。
• 例:ENCR_RC5、ENCR_BLIWFISH
– 必須のTransformに含まれない場合、そのProposal
を拒否すること。
• 例:ENCR_AES_CBC、ENCR_AES_CTR
47Header and Payload Formats(20/55)
/132
Security Association Payload:ネゴシエーション
• Attributeのネゴシエーション
– Responder
• InitiatorのProposalから1つだけProposalを選択し、応答する。
– 選択できるProposalが無い場合、拒否する
(NO_PROPOSAL_CHOSEN)。
• 未知のProposal、Transformは無視して処理する。
※将来拡張のため、未知のパラメーターはスキップする。
– Initiator
• 応答が送信したProposalと一致しているか確認する。
– 一致していない場合、exchangeを終了する。
• Diffie-Hellman groupのネゴシエーション
– Responder
• Initiatorと異なるD-H groupを選択する場合、そのD-H groupと
INVALID_KE_PAYLOADで応答する。
• NONEを選択する場合、InitiatorのKEを無視し、KEを送信しない。
– Initiator
• そのD-H groupをSA、KEに設定し、再試行する。
※MITM防止のため、Proposalは全てを送信する。
48Header and Payload Formats(21/55)
/132
Key Exchange Payload:フォーマット
Diffie-Hellman鍵交換用のデータの交換に使用する。
Diffie-Hellman鍵交換については次スライド参照。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Diffie-Hellman Group Num | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Key Exchange Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
• Diffie-Hellman Group Num:次スライドのpを決定するパラメータ。
SAの最初のD-H group Proposalと一致すること。
SAでD-H groupが無い場合、KEは設定しないこと。
• Key Exchange Data:次スライドのg。
Key Exchange Dataはpと同じバイト数になるように0パディングすること。
49
p:素数
g:pの原始根
Header and Payload Formats(22/55)
/132
Diffie-Hellman鍵交換
• 安全に秘密鍵を共有する方法。
Initiator Responder
a:秘密鍵
p:素数
g:pの原始根
p、g
b:秘密鍵
b:秘密鍵
p、g
AA:g^a mod p
B B:g^b mod p
s:B^a mod p
s:秘密鍵
s:A^b mod p
s:秘密鍵
Responderはaを知らない。
Initiatorはbを知らない。
相手の秘密鍵を知ること無く秘密鍵sを生成できた。
通信路を流れるp、g、A、Bからsを計算するのは困難。
50
←Diffie、Hellmanについて詳しく知りたい場合
下記の書籍がお薦めです。
暗号化:スティーブン・レビー
暗号解読:サイモン・シン
Header and Payload Formats(23/55)
/132
Identification Payload:フォーマット
• 相手の確認と認証データ(PAD:Peer Auth DB)の照会に使用する。
– IDにIPアドレスを使用する場合、TSと一致する必要はない。
– CERT payloadと一致する必要はない。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ID Type | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Identification Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51Header and Payload Formats(24/55)
/132
Identification Payload:フィールド
Field Length 説明
ID Type 1 octet IDのType。下記参照。
RESERVED 3 octets 0を設定し、無視すること。
Identification Data variable ID Typeの値。Lengthはheaderから算出する。
ID Type Value 説明
ID_IPV4_ADDR 1 IPv4アドレス。4オクテット。
ID_FQDN 2 FQDN。NULL、CRなどで終端しないこと。
ID_RFC822_ADDR 3 RFC822のemail address。NULL、CRなどで終端しないこと。EAPで
realmを含むNAIをIDに使用する場合にも使用される。
ID_IPV6_ADDR 5 IPv6アドレス。16オクテット。
ID_DER_ASN1_DN 9 X.500のANS.1。
ID_DER_ASN1_GN 10 X.509のANS.1。
ID_KEY_ID 11 ベンダー固有で規定するバイト列。realmを含まないNAIをIDに
使用する場合にも使用される。
52Header and Payload Formats(25/55)
/132
Identification Payload:補足
• 異なるID Type同士で運用してもよい。
• 相互運用を保証するためには下記のID Typeを生成、許容で
きること。
• EAPの場合のID Typeは
– realmを含むNAIを使用する場合、ID_RFC822_ADDRを使用する。
※ResponderはRFC5322(Mail format)ではなくRFC4282(NAI)でチェックする。
– realmを含まないNAIを使用する場合、 ID_KEY_IDを使用する。
53
運用 ID Type
IPv4のみ ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV4_ADDR
IPv4 and IPv6 ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV4_ADDR、ID_IPV6_ADDR
IPv6のみ ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV6_ADDR
Header and Payload Formats(26/55)
/132
Certificate Payload:フォーマット
• 証明書、認証関連のデータを送信する。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cert Encoding | |
+-+-+-+-+-+-+-+-+ |
~ Certificate Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54Header and Payload Formats(27/55)
/132
Certificate Payload:フィールド
Field Length 説明
Certificate Encoding 1 octet Certificate Data filedに含まれる証明書の種別。
Certificate Data variable Certificate Encoding fieldで指定されたデータ。
Certificate Encoding Value
PKCS #7 wrapped X.509 certificate 1
PGP Certificate 2
DNS Signed Key 3
X.509 Certificate - Signature 4
Kerberos Token 6
Certificate Revocation List (CRL) 7
Authority Revocation List (ARL) 8
SPKI Certificate 9
X.509 Certificate – Attribute 10
Raw RSA Key 11
Hash and URL of X.509 certificate 12
Hash and URL of X.509 bundle 13
55Header and Payload Formats(28/55)
/132
Certificate Request Payload:フォーマット
• 証明書、認証関連データを要求する。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cert Encoding | |
+-+-+-+-+-+-+-+-+ |
~ Certification Authority ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56Header and Payload Formats(29/55)
/132
Certificate Request Payload:フィールド
57
HTTP-based URLで証明書を参照したい場合、CERTREC payloadに
HTTP_CERT_LOOKUP_SUPPORTED notificationを設定する。
Field Length 説明
Certificate Encoding 1 octet Certificate Data filedに含まれる証明書の種別。
Certification Authority variable Certificate Encoding fieldで指定されたデータ。
Certificate Encoding Value
PKCS #7 wrapped X.509 certificate 1
PGP Certificate 2
DNS Signed Key 3
X.509 Certificate - Signature 4
Kerberos Token 6
Certificate Revocation List (CRL) 7
Authority Revocation List (ARL) 8
SPKI Certificate 9
X.509 Certificate – Attribute 10
Raw RSA Key 11
Hash and URL of X.509 certificate 12
Hash and URL of X.509 bundle 13
Header and Payload Formats(30/55)
/132
Authentication Payload:フォーマット
• 認証に使用するデータが含まれる。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth Method | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Authentication Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58Header and Payload Formats(31/55)
/132
Authentication Payload:フィールド
Field Length 説明
Auth Method 1 octet 使用される認証方法のMechanism。
Authentication Data variable 認証データ。認証方法の詳細は後述。
59
Mechanism Value 説明
RSA Digital Signature 1 RSA秘密鍵(SASSA-PKCS1-v1_5)を使用して認証する。
Shared Key Message Integrity Code 2 ID payloadのidentityと関連付くshared keyとネゴシエー
ションされたPRFを使用して認証する。
DSS Digital Signature 3 SHA-1ハッシュのDSS秘密鍵使用して認証する。
Header and Payload Formats(32/55)
/132
Nonce Payload:フォーマット
• IKE SAのKeyの計算に使用するランダムな値。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Nonce Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Nonce Data:送信側によって生成されたランダムな値。16~256オクテッ
トであること。
60Header and Payload Formats(33/55)
/132
Notify Payload:フォーマット
• エラー、状態変化等の情報を送信する。
– Response(Requestを拒否した理由を示す 等)
– INFORMATIONAL exchange(エラー通知 等)
– 設定の変更、取得 等
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol ID | SPI Size | Notify Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Security Parameter Index (SPI) ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Notification Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61Header and Payload Formats(34/55)
/132
Notify Payload:フィールド
Field Length 説明
Protocol ID 1 octet 既存のSAに関連する場合、SAの種別を設定する。
IKE 1、AH 2、ESP 3。
INVALID_SELECTORS、REKEY_SAの場合のみ設定される。
それ以外の場合は0が設定され、受信側は無視すること。
SPI Size variable Protocol IDで規定されたSPIのオクテット長。
SPIが有効でない場合、IKE SAに関するnotificationではSPI
Size=0、SPI fieldは無し。
Notify Message Type 2 octets Notification MessageのType。
SPI variable SPI。
Notification Data variable Status、Error data等。
Notify Message Typeによって異なる。
62Header and Payload Formats(35/55)
/132
Notify Payload:Notify Message Type
• Notify Message Type
– 0~16383:Error Typeに使用される。
– 16384~ :Status Typeに使用される。
• 認識できないNotify Message Typeは無視し、ログに記録すること。
Requestは失敗したと想定すること。
Notify Message Type Value 設定するケース Payload Data
UNSUPPORTED_CRITICAL_PAYLO
AD
1 Critical flagで指定されたpayload typeを認識で
きない場合。
1 octet:認識できなかったpayload type。
INVALID_IKE_SPI 4 IKE SAのコンテキスト外でIKE_SA_INIT以外の
メッセージを受信した場合。
INVALID_MAJOR_VERSION 5 Major Versionが3以上の場合。メッセージは拒
否するか無視する。
INVALID_SYNTAX 7 T、L、Vが範囲外またはrequestがポリシーに合
致しない場合。
INVALID_MESSAGE_ID 9 異常なMessage IDを受信した場合。 4 octets:Invalid Message ID。
INVALID_SPI 11 IKE SAのコンテキスト内で認識しないESP/AHの
パケットを受信した場合。
4 octets:Invalid SPI。
NO_PROPOSAL_CHOSEN 14 許容できるCrypto suitesが無い場合。(例:SA
payload、USE_TRANSPORT_MODE、
IPCOMP_SUPPORTED)
INVALID_KE_PAYLOAD 17 Initiatorが指定したD-H group以外を
Responderが希望する場合。
2 octets:D-H group番号。
63Header and Payload Formats(36/55)
/132
Notify Payload:Notify Message Type
Notify Message Type Value 設定するケース Payload Data
AUTHENTICATION_FAILED 24 認証に失敗した場合、IKE_AUTHの応答に使用する。
SINGLE_PAIR_REQUIRED 34 1つのTraffic Selectorペアのみを許容するため、
CREATE_CHILD_SA requestを拒否する場合。
NO_ADDITIONAL_SAS 35 IKE SAで追加Child SA作成を許容しないResponderが
CREATE_CHILD_SA requestを拒否する場合。
INTERNAL_ADDRESS_FAILURE 36 ResponderがInitiatorへのIPアドレス割り当て中にエラー
を検出した場合。
FAILED_CP_REQUIRED 37 ResponderがCP(CFG_REQUEST)を希望しているが、
Initiatorが送信しなかった場合。
TS_UNACCEPTABLE 38 Responderが提案されたTSの一部でも許容できない場合。
INVALID_SELECTORS 39 Selectorに合致しないESP/AHパケットを受信した場合。 4 octets:SPI。
問題のパケットの先頭。
TEMPORARY_FAILURE 43 • 削除する、削除したIKE SA、Child SAのrekey requestを
受信した場合。
• Rekey中のIKE SAでChild SAのcreate/rekeyのrequestを
受信した場合。
• IKE SAのrekey requestを受信したときに、そのIKE SA
のChild SAがcreating/rekey/closingしている場合。
CHILD_SA_NOT_FOUND 44 存在しないChild SAへのrekey requestを受信した場合。
64Header and Payload Formats(37/55)
/132
Notify Payload:Notify Message Type
Notify Message Type Value 設定するケース Payload Data
INITIAL_CONTACT 16384 そのIKE SAが同じ認証IDをもつIKE SAで唯一アクティブであることを
示す場合。
最初のIKE_AUTH request/responseでのみ送信できる。受信側は
同じIDの他のIKE SAを削除してもよい。
SET_WINDOW_SIZE 16385 Windows Sizeを設定する場合。 4 octets:Windows size
ADDITIONAL_TS_POSSIBLE 16386 ResponderはTSを狭める変更をしたが、そのSAで追加のTSを受け
入れ可能なことを示す場合。
IPCOMP_SUPPORTED 16387 IP compression algorithmを使用する場合。
Child SAを作成するSA payloadを含むメッセージにのみ含まれる。
2 octets:IP Comp CPI
1 octets:Transform ID
Option:Attribute
NAT_DETECTION_SOURCE_IP 16388 NAT traversalを使用する場合。 20 octets:SPI、IP Address、
PortのSHA-1 digest
NAT_DETECTION_DESTINATION_IP 16389 NAT traversalを使用する場合。
COOKIE 16390 COOKIEを使用する場合。
≒Responderが大量のhalf-open IKE SAを検出した場合。
1~64 octets:Cookie
USE_TRANSPORT_MODE 16391 トランスポートモードのSAを作成する場合。
HTTP_CERT_LOOKUP_SUPPORTED 16392 HTTP-based URLによる証明書の取得をする場合。
REKEY_SA 16393 Rekeyする場合。
CREATE_CHILD_SAに含まれる。
ESP_TFC_PADDING_NOT_SUPPORTED 16394 Traffic Flow confidentiality(TFC) をサポートしない場合。
NON_FIRST_FRAGMENTS_ALSO 16395 Fragmentationの制御に使用する。詳細:RFC4301。
65Header and Payload Formats(38/55)
/132
Delete Payload:フォーマット
• 送信者がSADから削除するSA SPIを通知する。
• 同じプロトコル(IKE/ESP/AH)のSPIならば1 Delete Payloadに複数含んでよ
い。
• 1 INFORMATIONAL Exchangeに複数Delete Payloadが含まれてもよい。
• IKE SAの削除ではSPIを含まない。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol ID | SPI Size | Num of SPIs |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Security Parameter Index(es) (SPI) ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66Header and Payload Formats(39/55)
/132
Delete Payload:フィールド
Field Length 説明
Protocol ID 1 octet 1:IKE SA。2:AH。3:ESP。
SPI Size 1 octet 0:IKE。4:AH/ESP。
Num of SPIs 2 octets Delete Payloadに含まれるSPIの数。
SPI variable 削除するSAのID
67Header and Payload Formats(40/55)
/132
Vendor ID Payload:フォーマット
• ベンダー定義の定数が含まれる。
• デバッグ、プロトコル拡張に使用される。
• 任意のExchangeに任意の数のVendor ID Payloadを含めてよい。
• 未知のVendor ID Payloadは無視すること。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Vendor ID (VID) ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68Header and Payload Formats(41/55)
/132
Traffic Selector Payload:フォーマット
• IPsecで処理するフローを識別するTS(Traffic Selector)を設定する。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Number of TSs | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ <Traffic Selectors> ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Payload LengthにはTS headerと全てのTraffic Selectorのサイズが含まれる。
69Header and Payload Formats(42/55)
/132
Traffic Selector Payload:フィールド
• TSi/TSrを同数含む必要はない。
例:下記のTSが設定された場合
TSi = ((17, 100, 198.51.100.66-198.51.100.66),
(17, 200, 198.51.100.66-198.51.100.66))
TSr = ((17, 300, 0.0.0.0-255.255.255.255),
(17, 400, 0.0.0.0-255.255.255.255))
198.51.100.66から任意のアドレスへのパケットは、src/dstの組が
青:(100,300)(100,400)、赤:(200,300)、 (200, 400)のいずれかにマッチする。
src/dstが緑:(100,300)(200,400)のみにマッチするポリシーは上記の例では作成
できないため、1つのChild SAではネゴシエーションできない。
Field Length 説明
Number of TSs 1 octet Traffic Selectorの数。
RESERVERD 3 octets 0を設定し、無視すること。
Traffic Selectors variable 1個以上のTS。
70Header and Payload Formats(43/55)
/132
Traffic Selector:フォーマット
• TS TypeとSelector Length以外のfieldはTS Typeによって異なる。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TS Type |IP Protocol ID*| Selector Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Start Port* | End Port* |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Starting Address* ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Ending Address* ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71Header and Payload Formats(44/55)
/132
Traffic Selector:フィールド
Field Length 説明
TS Type 1 octet Traffic SelectorのType。
IP protocol ID 1 octet IPプロトコルID(例:UDP、TCP、ICMP等)。
0は全てのプロトコルを意味する。
Selector Length 2 octets Headerを含めたTraffic Selector substructureの
length。
Start Port 2 octets 許可する最小のport番号。ポート未定義のプロト
コル、全ポート許可の場合は0を設定する。
End port 2 octets 許可する最大のport番号。ポート未定義のプロト
コル、全ポート許可の場合は65535を設定する。
Starting Address 4 or 16 octets 許可する最小のアドレス。
Ending Address 4 or 16 octets 許可する最大のアドレス。
72
TS Type Value 説明
TS_IPV4_ADDR_RANGE 7 IPv4アドレスの範囲。
TS_IPV6_ADDR_RANGE 8 IPv6アドレスの範囲。
Header and Payload Formats(45/55)
/132
Encrypted Payload:フォーマット
• 暗号化した他のpayloadを含む。
• メッセージの最後のpayloadであること。多くの場合、メッセージで唯一のpayload
である。
• Encrypted and Authenticated payloadともいう。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Initialization Vector |
| (length is block size for encryption algorithm) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Encrypted IKE Payloads ~
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Padding (0-255 octets) |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
| | Pad Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Integrity Checksum Data ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73Header and Payload Formats(46/55)
/132
Encrypted Payload:フィールド
Field Length 説明
Next Payload 1 octet 最初のEncrypted IKE PayloadのPayload Type。
Payload Length 2 octets Header、IV、Encrypted IKE Payload、Padding、Pad
Length、Integrity Checksum Dataを合計したlength。
Initialization Vector(IV) variable 暗号化用のInitialization Vector。
詳細は各暗号の仕様参照。
Encrypted IKE Payload variable IKE Payload。
暗号化される。
Padding 0~255 octets 任意の値のPadding。Payload、Padding、Pad Lengthの
サイズの合計が暗号化ブロックサイズの倍数になる
こと。
暗号化される。
Pad Length 1 octet Paddingのlength。ブロックサイズが最小になるように
Pad Lengthを設定すること。受信者は任意のlengthを
許容する。
暗号化される。
Integrity Checksum Data variable IKE header~Pad Lengthまでのencryptedメッセージの
チェックサム。Lengthはネゴシエーションされた
integrity algorithmで決まる。
74Header and Payload Formats(47/55)
/132
Configuration Payload:フォーマット
• 設定情報の交換に使用する。
例:Internal IP Address等を取得する。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CFG Type | RESERVED |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Configuration Attributes ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75Header and Payload Formats(48/55)
/132
Configuration Payload:フィールド
• CFG_REQUEST/CFG_REPLYは情報要求。
– CFG_REPLYで値を返す。requestに含まれないattributeを追加してもよ
い。
– 認識できない、未サポートのattributeは無視すること。
• CFG_SET/CFG_ACKは情報設定。
– 受け入れる場合、length 0で受け入れたattributeを返す。
– 受け入れない場合、空のCFG_ACKかCFG_ACKの無いresponseを返す。
– 規定の使い方は無い。実装ではCFG_SETを無視してよい。
Field Length 説明
CFG Type 1 octet Exchangeのタイプ。
CFG_REQUEST:1、CFG_REPLY:2、CFG_SET:3、CFG_ACK:4
RESERVED 3 octets 0を設定し、無視すること。
Configuration Attributes variable 設定情報を示すTLV(Type Length Value)構造体。
76Header and Payload Formats(49/55)
/132
Configuration Attribute:フィールド
Field Length 説明
R(Reserved) 1 bit 0を設定し、無視すること。
Attribute Type 15 bits Configuration Attributeのtype。
Length 2 octets Configuration Attributeのオクテット長。
Value variable Configuration Attribute。
77
Configuration Attribute フォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R| Attribute Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Value ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Header and Payload Formats(50/55)
/132
Configuration Attribute:フィールド
78
Attribute Type Value Multi-Valued Length 説明
INTERNAL_IP4_ADDRESS 1 YES
複数の値がrequestされた場合。
0 or 4 octets Internal network address。特定のアドレスを要求しない場合
は0 lengthを設定する。
INTERNAL_IP4_NETMASK 2 NO 0 or 4 octets Internal networkのnetmask。Requestでは0 lengthであること。
Link boundaryを意味する。
INTERNAL_IP4_DNS 3 YES 0 or 4 octets DNSサーバーのアドレス。
INTERNAL_IP4_NBNS 4 YES 0 or 4 octets NBNSサーバーのアドレス。
INTERNAL_IP4_DHCP 6 YES 0 or 4 octets DHCPサーバーのアドレス。
APPLICATION_VERSION 7 NO 0以上octets IPsecホストのバージョンまたはアプリケーション情報。NULL
終端しない、ASCII文字列。
INTERNAL_IP6_ADDRESS 8 YES
複数の値がrequestされた場合。
0 or 17 octets Internal network address。特定のアドレスを要求しない場合
は0 lengthを設定する。
IPv6 addressと1 octetのprefixで構成される。
INTERNAL_IP6_DNS 10 YES 0 or 16 octets DNSサーバーのアドレス。
INTERNAL_IP6_DHCP 12 YES 0 or 16 octets DHCPサーバーのアドレスにDHCP requestを送信する。
INTERNAL_IP4_SUBNET 13 YES 0 or 8 octets IPsec保護するサブネットワーク。IPアドレスとnetmaskで構成
される。
SUPPORTED_ATTRIBUTES 14 NO 2の倍数octets Requestでは0 lengthであること。
Responderはサポートするattribute typeを送信する。
INTERNAL_IP6_SUBNET 15 YES 17 octets IPsec保護するサブネットワーク。IPアドレスとprefixで構成さ
れる。
Header and Payload Formats(51/55)
/132
Configuration Payload:IPv6設定の例
IPv6アドレスでは全てのIPv6機能は使用できない。例えば、リンクローカルアドレス
を必ずしももたないため、MLDv2の使用が困難である。
• IPv6アドレス、IPv6DNSアドレスを要求。アドレスは任意。
CP(CFG_REQUEST) =
INTERNAL_IP6_ADDRESS()
INTERNAL_IP6_DNS()
TSi = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)
TSr = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)
• 割り当てたIPv6アドレス、IPv6DNSアドレスを応答。
TSiを範囲指定。
CP(CFG_REPLY) =
INTERNAL_IP6_ADDRESS(2001:DB8:0:1:2:3:4:5/64)
INTERNAL_IP6_DNS(2001:DB8:99:88:77:66:55:44)
TSi = (0, 0-65535, 2001:DB8:0:1:2:3:4:5 - 2001:DB8:0:1:2:3:4:5)
TSr = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)
79Header and Payload Formats(52/55)
/132
Configuration Payload:アドレス割り当て失敗
• Responder
– 全てのIPアドレスの割り当てに失敗した場合
INTERNAL_ADDRESS_FAILURE notificationで応答する。
※IKE_AUTHで発生した場合、Child SA無しIKE SA有りになる。
※同一アドレスタイプで1つでも割り当てに成功した場合はfailure応答しない。
– Configuration Payloadをサポートしない場合
全てのConfiguration Payloadを無視してよい。
• Initiator
– 必要なIPアドレスを受信しなかった場合
適当なリトライ時間にConfiguration payload再送 or
Delete payloadでIKE SAを削除して最初からやり直し
※エラーは即座に復旧しない可能性が高いため、数分程度待つことが望ましい。
80Header and Payload Formats(53/55)
/132
EAP Payload:フォーマット
• EAP認証で使用するPayload。
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ EAP Message ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
EAP Messageフォーマット
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Type_Data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
81Header and Payload Formats(54/55)
/132
EAP Payload:フィールド
Field Length 説明
Code 1 octet Request (1), Response (2), Success (3), Failure (4)を示す。
Identifier 1 octet メッセージのID。再送の識別に使用される。
Length 2 octets EAP Messageのlength。Generic Payload Headerを含まないため、
Payload Lengthより4 octets小さい。
Type 1 octet Request(1) / Response(2)の場合に存在する。
Request(1):要求するデータ。
Response(2):要求されたデータ or NAK。
Type_Data variable Request(1) / Response(2)で存在する。
EAP Methodによって異なる。
詳細はRFC3748参照。
82Header and Payload Formats(55/55)
/132
Exchanges and Payloads
83
/132
Exchanges and Payloads
• IKEv2 exchangeのpayload確認用。
• Vendor ID(V) payloadはすべてのメッセージ
の任意の場所に含まれてよい。
• 以降のexchangeでは最適な場所に記載され
ている。
• [X]はpayload Xがoptionであることを示す。
84Exchanges and Payloads(1/10)
/132
IKE_SA_INIT Exchange
(Request/Response)
[N(COOKIE)],
SA, KE, Ni,
[N(NAT_DETECTION_SOURCE_IP)+,
N(NAT_DETECTION_DESTINATION_IP)],
[V+][N+]
Request
SA, KE, Nr,
[N(NAT_DETECTION_SOURCE_IP),
N(NAT_DETECTION_DESTINATION_IP)],
[[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+],
[V+][N+]
Response
(cookieなし)
N(COOKIE),
[V+][N+]
Response
(cookieあり)
N(INVALID_KE_PAYLOAD),
[V+][N+]
異なる
Diffie-Hellman groupの要求
85Exchanges and Payloads(2/10)
/132
IKE_AUTH Exchange without EAP
(Request)
IDi, [CERT+],
[N(INITIAL_CONTACT)],
[[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+],
[IDr],
AUTH,
[CP(CFG_REQUEST)],
[N(IPCOMP_SUPPORTED)+],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, TSi, TSr,
[V+][N+]
Request
86Exchanges and Payloads(3/10)
/132
IKE_AUTH Exchange without EAP
(Response)
IDr, [CERT+],
AUTH,
[CP(CFG_REPLY)],
[N(IPCOMP_SUPPORTED)],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, TSi, TSr,
[N(ADDITIONAL_TS_POSSIBLE)],
[V+][N+]
Response
Child SA作成に失敗
IDr, [CERT+],
AUTH,
N(error),
[V+][N+]
87Exchanges and Payloads(4/10)
/132
IKE_AUTH Exchange with EAP
(Request/Response)
IDi,
[N(INITIAL_CONTACT)],
[[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+],
[IDr],
[CP(CFG_REQUEST)],
[N(IPCOMP_SUPPORTED)+],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, TSi, TSr,
[V+][N+]
Request
IDr, [CERT+], AUTH,
EAP,
[V+][N+]
最初のResponse
88Exchanges and Payloads(5/10)
/132
IKE_AUTH Exchange with EAP
(Request/Response)
EAP
Request
AUTH
最後のResponse
EAP
Response
… 1~N回繰り返し
最後のRequest
AUTH,
[CP(CFG_REPLY)],
[N(IPCOMP_SUPPORTED)],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, TSi, TSr,
[N(ADDITIONAL_TS_POSSIBLE)],
[V+][N+]
89Exchanges and Payloads(6/10)
/132
CREATE_CHILD_SA Exchange
for Creating or Rekeying Child SAs(Request)
[N(REKEY_SA)],
[CP(CFG_REQUEST)],
[N(IPCOMP_SUPPORTED)+],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, Ni, [KEi], TSi, TSr
[V+][N+]
Request
90Exchanges and Payloads(7/10)
/132
CREATE_CHILD_SA Exchange
for Creating or Rekeying Child SAs(Response)
[CP(CFG_REPLY)],
[N(IPCOMP_SUPPORTED)],
[N(USE_TRANSPORT_MODE)],
[N(ESP_TFC_PADDING_NOT_SUPPORTED)],
[N(NON_FIRST_FRAGMENTS_ALSO)],
SA, Nr, [KEr], TSi, TSr,
[N(ADDITIONAL_TS_POSSIBLE)]
[V+][N+]
Response
N(error)
エラー
N(INVALID_KE_PAYLOAD),
[V+][N+]
異なる
Diffie-Hellman groupの要求
91Exchanges and Payloads(8/10)
/132
CREATE_CHILD_SA Exchange for Rekeying
the IKE SA(Request/Response)
SA, Ni, KEi
[V+][N+]
Response
SA, Nr, KEr
[V+][N+]
Request
92Exchanges and Payloads(9/10)
/132
INFORMATIONAL Exchange
(Request/Response)
[N+],
[D+],
[CP(CFG_REQUEST)]
Response [N+],
[D+],
[CP(CFG_REPLY)]
Request
93Exchanges and Payloads(10/10)
/132
IKE Protocol Details and Variations
94
/132
Retransmission
• IKEはUDP(コネクションレス)なので再送はIKEで保証する。
• IKEメッセージ(request/response)はinitiatorが再送を担う。
• 再送responseはもとのメッセージと同一であること。(IP/UDPレ
ベルでは異なってよい)
• IKE_SA_INIT request受信時の振る舞い
– 既存のIKE SA:無視
– 新規のIKE SA:新規のIKE_SA_INIT responseを返す。
上記で既存/新規の判別にはパケット全体 or パケットのハッシュ or Ni
payloadで判別する。
※NAT配下では同一Initiatorで同一SPI使用される可能性があるため。
• 一方向のメッセージ(エラーメッセージ等)は再送しない。
95IKE Protocol Details and Variations(1/36)
/132
Message ID
• 全てのIKEメッセージはMessage IDをもつ。
– Request/Responseの照合、再送の識別に使用される。
– IKE_SA_INIT、 IKE SA Rekey後に0が設定され、以降+1される。
– エンドポイントは2つのMessage IDを管理する。
• 自分のRequest用 :Request送信のたびに+1
• 相手へのResponse用:Request受信のたびに+1
– Message IDが32bitオーバーする場合、IKE SAをClose or Rekeyする。
96IKE Protocol Details and Variations(2/36)
/132
Window size
• 同時に複数(Window size)のexchangeを維持できる機能。
• Window sizeは
– Initial exchangeが完了するまでは1。
– 以降、SET_WINDOW_SIZE notificationで設定された場合、それに従う。
– Window sizeを小さくする変更はできない。
– Rekeyで1にリセットされる。
• 複数exchange中にRekeyされたら大丈夫?
• Window sizeオーバーするMessage IDを受信した場合
– オプションでINFORMATIONAL を送信する。
• INVALID_MESSAGE_ID notification(4 octetsのinvalid message含む)
– このメッセージはresponseではない。無効なrequestにはresponseしない。
97IKE Protocol Details and Variations(3/36)
/132
Synchronization、Connection Timeout
• クラッシュ、再起動した場合の状態通知(単一ID運用の場合)
– クラッシュ、再起動した側
• IKE_AUTH request or responseでINITIAL_CONTACT notificationを送信してよい。
※同一IDで唯一アクティブなIKE SAであることの通知。
– された側
• 上記を受信した場合、同じIDの他のIKE SAを削除してよい。
• Dead Peer Detection、DPD、ヘルスチェック
– 空のINFORMATIONA exchangeで行う。
IKE header+payload無しのEncrypted payload
• リトライ
– リトライ回数、タイムアウト時間は規定しない。Increase exponentiallyが望ましい。
• Inactive time
– InactiveなChild SAはDelete payloadで削除してもよい。
98IKE Protocol Details and Variations(4/36)
/132
Version Number
• 本ドキュメントのIKEv2はmajor=2、minor=0。
– 互換性を維持できない場合はmajorをインクリメントする。
– 互換性を維持できる場合はminorをインクリメントする。
• major=n,mをサポートする場合、n~mをサポートすること。
• Peer間で共通で最大のmajorにネゴシエーションすること。
• Payload typeの処理確認のためにcritical flagが使用される。
– Requestのcritical flagがsetされた場合
※Responseのcritical flagはsetしないこと
• Payload typeが認識できない場合、
UNSUPPORTED_CRITICAL_PAYLOAD notifyを通知する。
• Payload typeが未サポートの場合、無視する。
99IKE Protocol Details and Variations(5/36)
/132
SPI
• IKEパケットの識別子。
• IKE:双方向のSA
– Initiator、ResponderのSPIがメッセージに設定される。
– Initial exchangeではResponder SPIがわからないため、0を設定する。
– IKE SA作成に失敗した場合、ResponseのResponder SPIは0になる。
※ただし、0でなかった場合でもInitiatorは許容する。
• ESP/AH:片方向のSA
– ResponderのSPIがメッセージに設定される。
100IKE Protocol Details and Variations(6/36)
/132
Cookie
• 大量のhalf-open IKE SAを検出した場合、ResponderはCOOKIE Notificationに
よるCOOKIE認証をしてもよい。
– COOKIE Notificationは1~64オクテット
– Cookie = <VersionIDofSecret> | Hash(Ni | IPi | SPIi | <secret>)
<secret>:Responderが生成する乱数。
<VersionIDofSecret> :<secret>が変更される毎に変更される数。
• InitiatorはResponderから通知されたCOOKIE Notificationをそのまま返す。
HDR(A, 0), SAi1, KEi, Ni
HDR(A, 0) N(COOKIE), SAi1, KEi, Ni
HDR(A, 0) N(COOKIE)
HDR(A, B), SAr1, KEr, Nr, [CERTREQ]
HDR(A,B), SK { IDi, [CERT,] [CERTREQ.] [IDr,] AUTH, SAi2, TSi, TSr}
HDR(A,B), SK { IDr, [CERT,] AUTH, SAr2, TSi, TSr}
HDR(X, Y)
X:InitiatorのSPI
Y:ResponderのSPI
101
大量のhalf-open connection検出
COOKIE認証の決定
COOKIE認証
COOKIE生成のアルゴリズムは規定しない。
下記は一例。
IKE Protocol Details and Variations(7/36)
/132
Cookie:INVALID_KE_PAYLOAD notification
• COOKIE+Diffie-Hellman group変更(INVALID_KE_PAYLOAD)の場合
– 初回のIKE_SA_INIT(COOKIE無し)とリトライのIKE_SA_INIT(COOKIE有り)でKEiが変わる。
HDR(A, 0), SAi1, KEi, Ni
HDR(A, 0) N(COOKIE), SAi1, KEi, Ni
HDR(A, 0) N(COOKIE)
HDR(A, 0),N(INVALID_KE_PAYLOAD)
HDR(X, Y)
X:InitiatorのSPI
Y:ResponderのSPI
102
大量のhalf-open connection検出
COOKIE認証の決定
D-H group拒否
HDR(A, 0) N(COOKIE), SAi1, KEi', Ni
HDR(A, B), SAr1, KEr, Nr, [CERTREQ]
COOKIE認証
IKE Protocol Details and Variations(8/36)
/132
Rekey
• Rekey = ライフタイム切れのSAの代わりにSAを確立すること。
• SAにはライフタイムがあること。
– ライフタイムはネゴシエーションされない。
• ライフタイム切れになった場合、そのSAを使用しないこと。
– ライフタイム以外にも通信有無もSA削除の判定に使ってもよい。
• Rekeyのサポートはオプション。
– RekeyのCREATE_CHILD_SA requestは拒否してよい。
• RekeyされたChild SAは古いChild SAと同じTraffic Selectorをもつ。
103IKE Protocol Details and Variations(9/36)
/132
Rekey:同時Child SAのRekeyその①
• Child SAが同時にRekeyされた場合、冗長SAになる。
– 避けるためにライフタイム満了後にランダム秒間隔をあけることが望ましい。
• 冗長SAが作成された場合
– 冗長SAの4つのNonceのうち最小のNonce(Octet単位)で生成されたSAを新
しいSA確立後にRekeyトリガ側が閉じることが望ましい。
104
N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,...
SA(..,SPIa3,..), Nr1,...
N(REKEY_SA,SPIb1), SA(..,SPIb2,..), Ni2,...
SA(..,SPIb3,..), Nr2,..
Rekey要求
Rekey要求
同時Rekey検出同時Rekey検出
Nonce比較
Nonce比較
Nr1が最小のNonceだった場合、SA②をホストBが削除する。
SA①
SA②
SA②
SA①
ホストBホストA
IKE Protocol Details and Variations(10/36)
/132
Rekey:同時Child SAのRekeyその②
• 再送により発生するケース。
105
N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,...
SA(..,SPIa3,..), Nr1,...
N(REKEY_SA,SPIb1), SA(..,SPIb2,..), Ni2,...
N(CHILD_SA_NOT_FOUND)
Rekey要求
Rekey要求
無視
SA①
SA②
SA②
SA②
ホストBホストA
☓
N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,...SA②Rekey要求(再送)
D(SPIb1)
D(SPIa1) Rekey完了Rekey完了
削除済みのSPIのため、
CHILD_SA_NOT_FOUND応答。
パケットロスト
IKE Protocol Details and Variations(11/36)
/132
Rekey:同時IKE SAのRekey
• 両方が同時にRekeyをした場合はChild SAと同じ動作。
– 残ったIKE SAが全てのChild SAを継承する。
• 片方がRekey実行前に片方のRekeyが終了した場合
106
SA(..,SPIa1,..),Ni1,..
SA(..,SPIb2,..),Nr2,..
SA(..,SPIb1,..),Ni2,..
Rekey要求
Rekey要求
SA①
SA①
SA②
ホストBホストA
N(TEMPORARY_FAILURE)
D()
D()
古いIKE SA削除
Rekey要求は再送しない古いIKE SA削除
IKE Protocol Details and Variations(12/36)
/132
Reauthentication
• Reauthenticationでは再認証によるSA作成と古いSAの削除をする。
– Rekeyは再認証はしない。
• Authentication lifetimeはKey lifetimeより長くないと意味がない。
• IKEv2ではresponderがReauthを開始することができない。
– EAP, Configurationがoriginal IKE SAと同一方向から実施される必要がある。
• REAUTH拡張[RFC 4478]を追加することで両方向からReauthを開
始できる。
107IKE Protocol Details and Variations(13/36)
/132
Traffic Selector:Negotiation
• Traffic Selector payload(TS)でpeerにSPD情報を送信する。
– SDPとIKEのAPIはPF_KEY API::SADB_ACQUIRE message等が使用される。
• Child SA作成時、2 TS(TSi、TSr)が設定される。
– TSはIP address range、port range、IP protocol IDで構成される。
• TSi:InitiatorのChild SAから受信するトラフィックのsrc addressとChild SAに送信するdst address
• TSr:ResponderのChild SAから受信するトラフィックのsrc addressとChild SAに送信するdst address
• Responderはinitiatorから受信したTSとポリシーをもとにTSを決定する。
– TS全てを許可しない場合、TS_UNACCEPTABLEを通知する。
– TSの全てがポリシーと一致した場合、TSi/TSrをそのまま応答する。
– 複数のTSがあり、一部だけ許容する場合、そのTSを応答する。
• 追加のTSを許容できる場合、ADDITIONAL_TS_POSSIBLEを通知する。
– 複数のTSi/TSrを許容しない場合、SINGLE_PAIR_REQUIREDを通知し、requestを拒否
する。
108IKE Protocol Details and Variations(14/36)
/132
Nonce
• 暗号化機能で使用する乱数。
• 下記のメッセージに含まれる。
– IKE_SA_INIT Request/Response
– CREATE_CHILD_SA Request/Response
• 新たなChild SA用のKey算出、Diffie-Hellman Keyから安
全な乱数の生成のため。
• 128bit以上であること。
• さらに、ネゴシエーションされたPRFの半分以上であること。
– 初回のNonceはPRFネゴシエーション前なので、サポート
するPRFに対して十分な長さのものを設定する。
109IKE Protocol Details and Variations(15/36)
/132
Keying Materialの生成(PRF)
• IKE SAでは4つのCryptographic algorithmがネゴシエートされる。
– Encryption algorithm
– Integrity Protection algorithm
– Diffie-Hellman group
– Pseudorandom Function(PRF)
• PRFはすべてのCryptographic algorithmのkey生成に使用する。
• prf+(PRF stream)は下記のように定義される。
prf+ (K, S)= T1 | T2 | T3 | ...
T1 = prf (K, S | 0x01)
T2 = prf (K, T1 | S | 0x02)、 T3= prf (K, T2| S | 0x03) 、、、最大T255まで。
“prf+”をpseudorandom function(擬似乱数関数)と定義する。
“|”を連結と定義する。
境界に関係なく、必要なbitだけ繰り返す。
110
AES(256bit)、HMAC(160bit)、PRF(160bit)の場合、
AES=T1, T2、HMAC=T2、T3
T1、T2、T3=160bitのため。
IKE Protocol Details and Variations(16/36)
/132
IKE SA Keying Materialの生成
• 下記のように双方向のkeyが生成される。
SKEYSEED = prf(Ni | Nr, g^ir) ※g^irはDiffie-Hellman共有鍵
{SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr}
= prf + (SKEYSEED, Ni | Nr | SPIi | SPI r)
Key Payload
SK_d Child SAのkey生成に使用するkey。
SK_ai/SK_ar Encrypted payloadの完全性保護用のkey。
SK_ei/SK_er Encrypted payloadの暗号化用のkey。
SK_pi/SK_pr Authentication payload生成用のkey。
111IKE Protocol Details and Variations(17/36)
/132
IKE SAの認証①:署名
• MACで認証する。
– Initiator
• IKE_SA_INIT Request(Message1)を使って署名を作成する。
– Responder
• IKE_SA_INIT Response(Message2)を使って署名を作成する。
• IKE_SA_INITが複数回ある場合最新のものを使用する。
• 署名の作成方法。相手のNonceを使うのがセキュリティ的に重要。
• IKE_AUTHのAuth payloadでIDi/IDrの証明書を送信してもよい。
112
Initiatorの署名
InitiatorSignedOctets = RealMessage1 | NonceRData | MACedIDForI
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
RealIKEHDR = SPIi | SPIr | . . . | Length
RealMessage1 = RealIKEHDR | RestOfMessage1
NonceRPayload = PayloadHeader | NonceRData
InitiatorIDPayload = PayloadHeader | RestOfInitIDPayload
RestOfInitIDPayload = IDType | RESERVED | InitIDData
MACedIDForI = prf(SK_pi, RestOfInitIDPayload)
Responderの署名
ResponderSignedOctets = RealMessage2 | NonceIData | MACedIDForR
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
RealIKEHDR = SPIi | SPIr | . . . | Length
RealMessage2 = RealIKEHDR | RestOfMessage2
NonceIPayload = PayloadHeader | NonceIData
ResponderIDPayload = PayloadHeader | RestOfRespIDPayload
RestOfRespIDPayload = IDType | RESERVED | RespIDData
MACedIDForR = prf(SK_pr, RestOfRespIDPayload)
IKE Protocol Details and Variations(18/36)
/132
IKE SAの認証②:Shared secret key
• Pre-shared keyで認証する。
• 辞書攻撃に強いように乱数のような値を用いることが望ましい。
– Initiator
– Responder
• AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2")
• Shared Secret
– null終端無しのASCII 17文字。
– prf( prf(Shared Secret, "Key Pad for IKEv2")で保存すること。
– 64文字以上のASCII文字を許容すること。
– Binaryエンコーディングを許容してもよい。
113IKE Protocol Details and Variations(19/36)
/132
IKE SAの認証③:EAP
• Initiator
– 最初のIKE_AUTHをAUTH無しで送信することでEAPの使用要求をする。
• Responder
– IKE_AUTH ExchangeでInitiatorを認証する。
• AAA認証に使用されるIDとID payloadのIDは異なってもよい。
• Message 7、Message 8に設定するAUTHには2つのタイプがある。
– Shared key(EAPではMaster Session Key(MSK)という)と同じ方法で生成。
– SK_pi、SK_prから生成。非推奨。
HDR, SAi1, KEi, Ni
HDR, SK{ IDi, SAi2, TSi , TSr }
HDR, SK { EAP}
HDR, SAr1, KEr, Nr
HDR, SK{ IDr, AUTH, EAP }
HDR, SK { EAP(Success)}
HDR, SK { AUTH}
HDR, SK { AUTH, SAr2, TSi, TSr}
114IKE Protocol Details and Variations(20/36)
/132
Child SA Keying Materialの生成
• Child SAのKeying Material生成式。必要な鍵長分prf+を繰り返す。
詳細はIKE SA Keying Material参照。
KEYMAT = prf+(SK_d, Ni | Nr)
• CREATE_CHILD SA exchangeでDiffie-Hellman exchange有りの場合
KEYMAT = prf+(SK_d, g^ir(new) | Ni | Nr)
※g^ir(new)は上位bitを0で埋めた新しいDiffie-Hellman共有秘密鍵。
• ESPで暗号化鍵、完全性保証鍵が必要な場合はその順番でkeyを
算出すること。
115IKE Protocol Details and Variations(21/36)
/132
IKE SA Keying Materialの生成:Rekeyの場合
• CREATE_CHILD_SA exchangeはIKE SAのRekeyに使用される。
• 新しいSPIはSA PayloadのSPI fieldに含まれる。
• 新しいSKEYSEEDは下記のように計算される。
SKEYSEED = prf+(SK_d(old), g^ir(new) | Ni | Nr)
※g^ir(new)は上位bitを0で埋めた新しいDiffie-Hellman共有秘密鍵。
• その他のKeying Materialは最初のIKE SAと同じ方法で計算される。
• 必ず新しいDiffie-Hellman共有秘密鍵が使用される。NONEは許
容しないこと。
116IKE Protocol Details and Variations(22/36)
/132
Requesting an Internal Address
• CP Payloadでアドレスを割り当ててよい。
• 一般的にはIKE_AUTH時に割り当てられる。
• CP(CFG_REQUEST)は一つ以上のINTERNAL_ADDRESS attributeを
含むこと。
• CP(CFG_REPLY)はCP(CFG_REQUEST)に依らず、何を返してもよい。
ただし、 CP(CFG_REQUEST)が無い場合は送信しないこと。
• CP必須の設定でInitiatorがCP(CFG_REQUEST) を送信しなかった
場合、ResponderはFAILED_CP_REQUIREDを通知し、Child SAを作
成しない。IKE SAは作成される。
– Initiatorは後ほどCP Payloadでリトライする。
HDR, SK {IDi, [CERT], [CERTREQ], [IDr], AUHT, CP(CFG_REQUEST), SAi2, TSi, TSr}
HDR, SK {IDr, [CERT], AUHT, CP(CFG_REPLY), SAr2, TSi, TSr}
117IKE Protocol Details and Variations(23/36)
/132
Version取得
• CP PayloadでSWバージョンを問い合わせできる。
– セキュリティのため、バージョン情報は返さず、空文字で応答してよい。
• INFORMATIONAL exchangeで実施される例。
HDR, SK{CP(CFG_REQUEST)}
CP(CFG_REQUEST)=APPLICATION_VERSION("")
CP(CFG_REPLY) APPLICATION_VERSION("foobar v1.3beta, (c) Foo Bar Inc.")
118IKE Protocol Details and Variations(24/36)
/132
Error handling:概要
• 一般的には
– 不正形式、ポリシー不一致のrequest受信時
IKE SAがあればNotify payloadでresponseする。
– 受信メッセージの解析エラーには応答を返さない。
そのようなIKE SAは削除(Delete payload)することが望ましい。
– INFORMATIONAL exchange(Delete payload)無しでIKE SA削除するケース
• 認証の失敗(AUTHENTICATION_FAILED、EAP failure)
EAP failureではAUTHENTICATION_FAILEDは送信されない。
• 不正なメッセージ形式(INVALID_SUNTAX)
ただし、他のエラー条件の組み合わせにより必要になる場合もある。
119IKE Protocol Details and Variations(25/36)
/132
Error handling:IKE_SA_INIT
• 暗号で保護されたIKE SAが確立する前のエラーには注意が必要。
– 問題解析の容易性と偽装メッセージによるDoS攻撃の容易性のトレードオフ。
• リトライで成功する可能性があるエラーがある。
– COOKIE、INVALID_KE_PAYLOAD、 INVALID_MAJOR_VERSION等。
– エラー受信側はしばらく待った後にリトライしてよい。
– エラー後の動作が規定されていない場合、即座に後続動作しないこと。
120IKE Protocol Details and Variations(26/36)
/132
Error handling:IKE_AUTH
• IKE_AUTH exchangeの認証失敗時はAUTHENTICATION_FAILEDが通知される。
– 認証失敗には無効なshared secret、invalid ID、証明書失効等がある。
– Initiator
• INFORMATIONAL exchange(他payload無し)で通知される場合がある。
※エラー時にexchangeを開始してはいけないルールの例外。
• RequestがUnsupported critical payloadを含んでいる場合
– UNSUPPORTED_CRITICAL_PAYLOADを通知。メッセージは無視。
• Requestのフォーマットが壊れている場合
– INVALID_SYNTAXを通知。メッセージは無視。
• Child SA確立に失敗した場合
– FAILED_CP_REQUIRED、NO_PROPOSAL_CHOSEN等がエラー原因の候補。
– IKE SAは削除されない。Initiatorのポリシーによっては後で削除してもよい。
– IKE_AUTHにChild SA失敗エラー()をpiggybackしてよい。
121IKE Protocol Details and Variations(27/36)
/132
Error handling:IKE SA確立後
• エラーが発生したrequestにはresponseでエラー通知すること。
– INFORMATIONAL exchangeでエラー通知するとループする可能性がある。
• INVALID_SYNTAXの場合(フォーマット異常)
– 両方のpeerにとって致命的な問題であることを示す。
– IKE SAをDelete payload無しに削除する。
122IKE Protocol Details and Variations(28/36)
/132
IP Compression
• Child SAの確立時にネゴシエーションできる。
– 仮想的にCompression associationが確立される。
• 各パケットに追加のヘッダー、compression parameter index(CPI)を付与する。
• 明示的に管理(削除、更新)されない。ESP/AHのSAに紐づく。
• ネゴシエーションは
– Initiator
• Child SA確立を要求するSA payloadを含むメッセージにIPCOMP_SUPPORTEDで
compression algorithmを通知する。
– Responder
• Child SA確立を要求するSA payloadを含むメッセージにIPCOMP_SUPPORTEDで
compression algorithmを1つ選び、通知する。
123
IPCOMP_SUPPORTED のpayload
2 octets:IP Comp CPI
1 octets:Transform ID
Option:Attribute
Name Number Define
IPCOMP_OUI 1
IPCOMP_DEFLATE 2 RFC2394
IPCOMP_LZS 3 RFC2395
IPCOMP_LZJH 4 RFC3051
IKE Protocol Details and Variations(29/36)
/132
NAT Traversal:全般
• NATがある場合の問題
– Transport mode:NATのIPアドレス変換によりchecksum NGになる。
– Tunnel mode :AH/ESPのNATのIPアドレス変換にロジックが必要になる。
• IKEv2ではIKE/ESPへのUDPカプセル化で上記を解決する。
– UDPカプセル化した場合IKE/ESPの識別
• IKE:IKE headerの先頭4 octetsのパディング0
• ESP:ESP headerの先頭4 octetsはSPIなので非0
– Port 4500を使用する。(NATの有無に関わらず本ポートを使用してよい)
– Port 500はUDPカプセル化に使用しないこと。
– IKE_SA_INITでNAT_DETECTION_*_IPがexchangeされた場合、両peerがUDPカプセル化/非カプ
セル化のESPパケットを処理できること。
• NATを検出した場合、両peerはUDPカプセル化すること。
• NAT traversalをサポートする場合
– IKE_SA_INITでNAT_DETECTION_SOURCE_IP、NAT_DETECTION_DESTINATION_IPを通知する。
PayloadはSPI、IP address、portのSHA-1 hash。
– NAT_DETECTION_*_IPを受信した場合、
Payloadと実際のhashを比較する。不一致の場合、NATがあると判断し、UDP Port 4500でカ
プセル化する。
124IKE Protocol Details and Variations(30/36)
/132
NAT Traversal:Transport mode①
• Initiatorは
– TSiはIKE SAのsrc addressのみであること。
– TSrはIKE SAのdst addressのみであること。
– 最初のTSi/TSrにrequestパケットのport、IP protocol番号を設定すること。
– 複数のTSi/TSrがあってもよい。
– ResponderからUSE_TRANSPORT_MODEを受信した場合
• src/dst addressとしてTSi/TSrを保存する。
• ResponderがNAT配下の場合、remote addressでTSrを書き換える。
• InitiatorがNAT配下の場合、local addressでTSiを書き換える。
• SPDを更新する。
• ResponderはInitiatorからUSE_TRANSPORT_MODE を受信した場合
• src/dst addressとしてTSi/TSrを保存する。
• ResponderがNAT配下の場合、local addressでTSrを書き換える。
• InitiatorがNAT配下の場合、remote addressでTSiを書き換える。
• SPDを更新する。
125IKE Protocol Details and Variations(31/36)
/132
NAT Traversal:Transport mode②
• 2 NATがある場合の例。他の場合もカバーできる。
– NAT A:IP1とIPN1をマッピングするdynamic NAT。
– NAT B:IP2とIPN2をマッピングするstatic NAT。
• [Client]IKE SA、Child SAの開始
– src/TSi:IP1、dst/TSr :IPN2、USE_TRANSPORT_MODE
• [NAT A]src変換 (IP1 → IPN1)
• [NAT B]dst変換(IPN2 → IP2)
• [Server]Transport mode、NAT検証。TSを置き換え、応答。
– Transport modeかつNATを検出した場合、src/dstでTSを置き換える。
• [Client]Serverと同様の動作を実施。
126IKE Protocol Details and Variations(32/36)
Client NAT A NAT B ServerIP1 IP2IPN1 IPN2
src dst TSi TSr
設定した IP1 IPN2 IP1 IPN2
届いた IPN1 IP2 IP1 IPN2
src dst TSi TSr
TSを置き換え後 IPN1 IP2 IPN1 IP2
/132
Explicit Congestion Notification(ECN):
• IKEv1ではECNのネゴシエーションが複雑だった。
• IKEv2では簡略化。
– 全てのtunnel mode Child SAのOuter IP headerにECNが使用可能。
– カプセル化/非カプセル化時に
ECN full-functionality option(RFC3168 )をサポート。
ECNの輻輳通知の破棄を防ぐため RFC4301の tunnelの処理を実装すること。
127IKE Protocol Details and Variations(33/36)
/132
Exchange Collisions:概要
• IKEv2 exchangeはどちらのpeerも開始できるため、競合する可能
性がある。
• 以下、Windows size 1の場合を規定する。
• Rekey等の処理中に完了できないrequestを受信した場合、
TEMPORARY_FAILUREを通知する。
• TEMPORARY_FAILUREを受信した側
– 即座にリトライしないこと。数分程度待つことが望ましい。
– 数分後に同じIKE SAでTEMPORARY_FAILUREを受信し続けた場合、
状態が同期していないということでIKE SAを削除することが望ましい。
• 存在しないChild SAへのrekey requestを受信した場合
– そのChild SAのSPIを設定したCHILD_SA_NOT_FOUNDを通知する。
– 受信側はそのChild SAを削除する。
128IKE Protocol Details and Variations(34/36)
/132
Exchange Collisions:Rekeying or Closing Child SA
• 受信したrekey requestの対象が
– 閉じようとしているChild SAの場合
• TEMPORARY_FAILUREを通知する。
– Rekey中のChild SAの場合
• 正常応答し、スライド「Rekey:」の動作で重複したSAを削除する。
– 存在しないChild SAの場合
• CHILD_SA_NOT_FOUNDを通知する。
– Child SAをcreating/rekeying/closingしているIKE SAの場合
• TEMPORARY_FAILUREを通知する。
• 受信したclose requestの対象が
– 閉じようとしているChild SAの場合
• Delete payload無しで応答。スライド「Deleting SA(INFORMATIONAL Exchange)」参照。
129IKE Protocol Details and Variations(35/36)
/132
Exchange Collisions:Rekeying or Closing IKE SA
• 受信したrekey requestの対象が
– 閉じようとしているIKE SAの場合
• TEMPORARY_FAILUREを通知する。
– Rekey中のIKE SAの場合
• 正常応答し、スライド「Rekey:」の動作で重複したSAを削除する。
– Child SAをcreating/rekeying/closingしているIKE SAの場合
• TEMPORARY_FAILUREを通知する。
• 受信したclose requestの対象が
– Rekey中のIKE SAの場合
• 正常応答し、自身のrekey requestは忘れることが望ましい。
– Close中のIKE SAの場合
• 正常応答し、自身のclose requestは忘れることが望ましい。
• Rekey中のIKE SAで
– Child SAのcreate or rekey requestを受信した場合
• TEMPORARY_FAILUREを通知する。
– Child SAのdeleteを受信した場合
• 正常応答し、Child SAを削除する。
130IKE Protocol Details and Variations(36/36)
/132
Summary of Changes from IKEv1
131
/132
RFC 4306(旧IKEv2のRFC)との差分
• 実装に大きな影響を与える変更なし。
• Initial exchangeの簡略化(最小8 msg → 最小4 msg)。さらにChild SAも同時
に確立可能。
• CREATE_CHILD_SAの簡略化(3 msg → 2 msg)。
• バージョン番号は変更なし。
– major 2、minor 0
• 要求事項の明確化(SHOULD、MUST)。
• AH/ESPの説明の削除。
• INTERNAL_ADDRESS_EXPIRY、INTERNAL_IP6_NBNS attributeの削除。
本仕様に準拠する場合はこれらのattributeが指定されても無視すること。
• “Payloadを右から読む”の記述削除。実装上は読む方向に依存しないこと。
• IKE SAのrekeyにKEi payloadが必須になった。
• Child SAのrekeyではTraffic Selectorとalgorithmが異ならないこと。
• Exchangeの競合処理の明確化。
132

More Related Content

What's hot

コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話Nobuhiro Fujita
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)Kuniyasu Suzaki
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース 【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース Juniper Networks (日本)
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発Yahoo!デベロッパーネットワーク
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向Yuya Rin
 
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?Yuya Rin
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話Masaru Oki
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜Akira Nakagawa
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方akira6592
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コースJuniper Networks (日本)
 
L3HA-VRRP-20141201
L3HA-VRRP-20141201L3HA-VRRP-20141201
L3HA-VRRP-20141201Manabu Ori
 

What's hot (20)

コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話コンテナ基盤であるLXC/LXDを 本番環境で運用する話
コンテナ基盤であるLXC/LXDを 本番環境で運用する話
 
IIJmio meeting #2 IIJmioとIPv6の話
IIJmio meeting #2 IIJmioとIPv6の話IIJmio meeting #2 IIJmioとIPv6の話
IIJmio meeting #2 IIJmioとIPv6の話
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース 【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
 
Dpdk pmd
Dpdk pmdDpdk pmd
Dpdk pmd
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
 
L3HA-VRRP-20141201
L3HA-VRRP-20141201L3HA-VRRP-20141201
L3HA-VRRP-20141201
 

More from Tetsuya Hasegawa

CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)Tetsuya Hasegawa
 
RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料Tetsuya Hasegawa
 
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料Tetsuya Hasegawa
 
面白いセキュリティツール その2
面白いセキュリティツール その2面白いセキュリティツール その2
面白いセキュリティツール その2Tetsuya Hasegawa
 
RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料Tetsuya Hasegawa
 
RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料Tetsuya Hasegawa
 
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料Tetsuya Hasegawa
 
RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。Tetsuya Hasegawa
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。Tetsuya Hasegawa
 
3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要Tetsuya Hasegawa
 
RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料Tetsuya Hasegawa
 
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)Tetsuya Hasegawa
 
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料Tetsuya Hasegawa
 
RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料Tetsuya Hasegawa
 
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料Tetsuya Hasegawa
 
RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料Tetsuya Hasegawa
 
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向Tetsuya Hasegawa
 
MCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモMCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモTetsuya Hasegawa
 
面白いセキュリティツール
面白いセキュリティツール面白いセキュリティツール
面白いセキュリティツールTetsuya Hasegawa
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめTetsuya Hasegawa
 

More from Tetsuya Hasegawa (20)

CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)
 
RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料
 
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
 
面白いセキュリティツール その2
面白いセキュリティツール その2面白いセキュリティツール その2
面白いセキュリティツール その2
 
RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料
 
RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料
 
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
 
RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。
 
3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要
 
RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料
 
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
 
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
 
RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料
 
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
 
RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料
 
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
 
MCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモMCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモ
 
面白いセキュリティツール
面白いセキュリティツール面白いセキュリティツール
面白いセキュリティツール
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

RFC5996(IKEv2)第2版

  • 1. /132 RFC 5996 Internet Key Exchange Protocol Version 2 (IKEv2) 第2版 by 長谷川 1
  • 2. /132 もくじ • IPsecの概要(オリジナル) • Introduction(Section 1) – 用語、Exchangeの概要 • Header and Payload Formats(Section 3) • Exchanges and Payloads(Appendix C) • IKE Protocol Details and Variations(Section 2) – 細かいところ • RFC 4306(旧IKEv2のRFC)との差分 まとめやすさ重視でRFCと順番を変えている。 2
  • 4. /132 IPsecの概要(1/10) • 関連するRFCが多い カテゴリ RFC タイトル アーキテクチャ RFC 4301 Security Architecture for the Internet Protocol IKEプロトコル RFC 5996 (新 IKEv2) Internet Key Exchange Protocol Version 2 (IKEv2) RFC 4306 (旧 IKEv2) Internet Key Exchange (IKEv2) Protocol RFC 2409 (IKEv1) The Internet Key Exchange (IKE) IKE関連 RFC 3526 More Modular Exponential (MODP) Diffie- Hellman groups for Internet Key Exchange (IKE) RFC 4307 Cryptographic Algorithms for Use in the Internet Key Exchange Version 2 (IKEv2) セキュリティプロトコル RFC 4302 IP Authentication Header(AH) RFC 4303 IP Encapsulating Security Payload (ESP) セキュリティプロトコル関連 RFC 4305など 大量にある 4
  • 5. /132 IPsecの概要(2/10) • IPsecとIKEv2は独立したもの。 ※IKEv2がなくても手動で鍵管理ができればIPsecできる。 • IPsec – AH/ESPによるIPパケットの暗号化、認証 • IKEv2 – 暗号化鍵の管理 • パケットの暗号化、完全性保証 • パケットの認証、通信相手の認証 • 秘密鍵の共有 5
  • 6. /132 IPsecの概要(3/10) IPsecの動作(トンネルモードの例) 送信PC 受信PC ローカルIP リモートIP プロト コル 動作 (PROTECT/BYPASS/DISCARD) セキュリ ティプロ トコル モード 送信PC 受信PC ANY PROTECT(IPsec適用) ESP トンネル 192.168.1.1 10.0.0.10 ANY BYOASS(IPsec非適用) - - Selector RT#1のSPD(Security Policy Database) ①RT#1はSPDのSelectorを検索し、IPsec適用/非適用/破棄を判断する。 RT#1 RT#2 IPパケット 処理 6
  • 7. /132 暗号化 (SPI=1) IPsecの概要(4/10) IPsecの動作(トンネルモードの例) 送信PC 受信PC SPI ローカルIP リモートIP プロトコル セキュリ ティプロ トコル 暗号化ア ルゴリズ ム 鍵 1 送信PC 受信PC ANY ESP 3DES 2938417 Selector RT#1のSAD(Security Association Database) ②RT#1はSelectorでSADを検索し、IPsecに適用するパラメータを決定する。 ③RT#1はSADのパラメータに従ってパケットを暗号化し、送信する。 RT#1 RT#2 IPパケット パラメータ IPパケット 7
  • 8. /132 IPsecの概要(5/10) IPsecの動作(トンネルモードの例) 送信PC 受信PC SPI ローカルIP リモートIP プロトコル セキュリ ティプロ トコル 暗号化ア ルゴリズ ム 鍵 1 受信PC 送信PC ANY ESP 3DES 2938417 Selector RT#2のSAD(Security Association Database) ④RT#2はSPIでSADを検索し、IPsecに適用するパラメータを決定する。 ⑤RT#2はSADのパラメータに従ってパケットを復号する。 RT#1 RT#2 パラメータ IPパケット 暗号化 (SPI=1) IPパケット 8
  • 9. /132 IPsecの概要(6/10) IPsecの動作(トンネルモードの例) 送信PC 受信PC ローカルIP リモートIP プロト コル 動作 (PROTECT/BYPASS/DISCARD) セキュリ ティプロ トコル モード 送信PC 受信PC ANY PROTECT(IPsec適用) ESP トンネル 192.168.1.1 10.0.0.10 ANY BYOASS(IPsec非適用) - - Selector RT#2のSPD(Security Policy Database) ⑥RT#2はSPDのSelectorを検索し、転送/破棄を判断する。 RT#1 RT#2 IPパケット 処理 9
  • 11. /132 • IPsecには様々な運用シナリオがある。 – トンネルモード • PCはIPsecを実装していない。 • SeGWはPCにInner IPを割り当てる。 • SeGW配下のPCが送受信するInner IPのパケットが保 護される。 Outer IP パケット (暗号化) IPsecの概要(8/10) 運用シナリオ 11 送信PC 受信PC Inner IP パケット Inner IP パケット Inner IP パケット SeGW SeGW
  • 12. /132 IPsecの概要(9/10) 運用シナリオ – トンネルモード その2 • PCがIPsecを実装している。 • VPN等で企業ネットワークに繋いだりする例。 • 送信PCはSeGWからIPを割り当てられる。 12 送信PC 企業 NW SeGW Outer IP パケット (暗号化) Inner IP パケット Inner IP パケット
  • 13. /132 IPsecの概要(10/10) 運用シナリオ – トランスポートモード • PCがIPsecを実装している。 • 一般的にInner IPは使用しない。 • End to Endの機密性を確保できる。 • NAT配下に複数PCがあり、NAT越えが必要な場合に関 しては後述。 13 送信PC 受信PC パケット (暗号化) パケット (暗号化) パケット (暗号化)
  • 15. /132 用語、Exchange • 用語 • Exchangeの種類と用途 • 信頼性の保証 メッセージの信頼性の保証はrequest送信側が保証する。 Response受信がタイムアウトした場合、requesterは再送するか切断する。 用語 意味 Child SA IKE SAで設定されるESP/AHのためのSA。 Exchange Response/Requestのペア。すべてのIKE通信はExchangeである。 Exchange 用途 IKE_SA_INIT IKE SAパラメータのネゴシエーション。IKEの最初のexchange。 IKE_AUTH 認証。Child SAの確立。IKE_SA_INITの後のexchange。 CREATE_CHILD_SA Child SAの確立。Rekey(IKE SA/Child SAのキー更新)。 INFORMATIONAL Housekeeping(ヘルスチェック)。SAの削除。エラー通知等。 15Introduction(1/12)
  • 16. /132 Payload • シーケンス上の略称 表記 Payload AUTH Authentication CERT/CERTREQ Certificate/Certificate Request CP Configuration D Delete EAP Extensible Authentication HDR IKE header IDi/IDr Initiator’s Identification/Responder’s Identification KE Key Exchange Ni/Nr Nonce N Notify SA Security Asscociation SK Encrypted and Authentication TSi/TSr Initiator’s Traffic Selector/Responder’s Traffic Selector V Vendor ID 16Introduction(2/12)
  • 17. /132 Initial Exchange(1/3) • IKEの開始時に実行されるexchange Initiator Responder HDR SAi1 KEi Ni 【HDR】SPI、バージョンなど 【SAi1】SA用の暗号化パラメーター 【KEi】InitiatorのDiffie-Hellman値 【Ni】Nonce HDR SAr1 KEr Nr [CERTREQ] option ①InitiatorがIKEを開始する。 ②ResponderはSAi1から暗号化アルゴリズムを決定し、SAr1に設定する。 IKE_SA_INIT Response ③Initiator、ResponderはKEi/KEr/Ni/NrからIKE SA、Child SAのKeyを算出する。 以降のメッセージは暗号化/完全性保証される。 IKE_SA_INIT Request 17 [ ]のpayloadはオプション。 Introduction(3/12)
  • 18. /132 Initial Exchange(2/3) • IKEの開始時に実行されるexchange Initiator Responder HDR IDi [CERT] option SK 暗号化→ [CERTREQ] option [IDr] option AUTH SAi2 TSi TSr 【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。 ④IDと認証データ(AUTH)を送信する。 ⑤ResponderはIDr、Child SA用のパラメーターを通知をする。 IKE_AUTH Response ⑥Child SAの作成完了。※Child SA確立が失敗した場合はChild SA無しでIKE SAが確立する。 IKE_AUTH Request HDR IDr [CERT] option SK 暗号化→ [IDr] option AUTH SAr2 TSi TSr 【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。 18 IDiを認証する。 Introduction(4/12)
  • 19. /132 Initial Exchange(3/3) • 最小で4メッセージ(2 exchange)で完了する。 • IKE_AUTHでChild SA作成が失敗した場合でもIKE SAを維持し てよい。 • IKE_AUTHで通知されるNotify Message。詳細は後述。 – NO_PROPOSAL_CHOSEN – TS_UNACCEPTABLE – SINGLE_PAIR_REQUIRED – INTERNAL_ADDRESS_FAILURE – FAILED_CP_REQUIRED • Initial Exchange終了(IKE SA確立)までCREATE_CHILD_SA exchange、INFORMATIONAL exchangeは実行できない。 19Introduction(5/12)
  • 20. /132 CREATE_CHILD_SA Exchange • 2つの役割がある。 – 新しいChild SAの作成 – IKE SA/Child SAのRekey(*1) • IKEv1のPhase 2 exchangeに相当。 • IKE SAの確立後、どちらから開始してもよい。 • CREATE_CHILD_SA requestを拒否してよい。 *1:新しいSAを作成し、古いSAを削除すること。 20Introduction(6/12)
  • 21. /132 Creating New Child SA (CREATE_CHILD_SA Exchange) • 新しいChild SAを作成する。 Initiator Responder SAは複数個要求してよい。 ①Initiatorがexchangeを開始する。開始した方がInitiator。 ②Responderは応答する。KEiが含まれていた場合KErを送信。 CREATE_CHILD_SA Response Child SA作成に失敗した場合でもIKE SAは削除しないこと。 CREATE_CHILD_SA Request HDR SA Ni SK 暗号化→ TSi TSr [KEi] option HDR SA Nr SK 暗号化→ TSi TSr [KEr] option ③Child SAの作成完了。 21 【KEi】 forward secrecyのためにDiffie- Hellman値を変更する場合に設定する。 【KEr】requestにKEiがあった場合に設定する。 Introduction(7/12)
  • 22. /132 Rekeying IKE SA (CREATE_CHILD_SA Exchange) • IKE SAをrekeyする。 Initiator Responder HDR SA Ni SK 暗号化→ KEi ResponderはIKE SA Rekey用のCREATE_CHILD_SA requestを受信したIKE SAで新規にCREATE_CHILD_SA exchangeを 開始しないこと。 ①Initiatorがrekeyを開始する。開始した方がInitiator。 ②Responderは応答する。 CREATE_CHILD_SA Response ③IKE SAのrekey完了。 CREATE_CHILD_SA Request HDR SA Nr SK 暗号化→ KEr 新しいInitiatorのIKE SA SPIはSA のSPI filedに設定する。 22 新しいResponderのIKE SA SPIは SAのSPI filedに設定する。 新しいIKE SA:message counter、Message IDは0。Window Sizeは1。 Original Initiator はRekeyを開始した側。 古いIKE SA:IKE SAを削除するまでパラメーターは維持する。 Introduction(8/12)
  • 23. /132 Rekeying Child SA (CREATE_CHILD_SA Exchange) • Child SAをrekeyする。 Initiator Responder HDR N(REKEY_SA) SK 暗号化→ SA Ni [KEi] option TSi TSr RekeyされるSAはNotification payloadのSPI filedで識別する。Protocol IDはESP 2, AH 3。 通常は元のSAと同じSA、TSが設定される。 ①InitiatorがRekeyを開始する。開始した方がInitiator。 ②Responderは応答する。KEiが含まれていた場合KErを送信。 CREATE_CHILD_SA Response ③Child SAのrekey完了。 CREATE_CHILD_SA Request HDR SA Nr SK 暗号化→ [KEr] option TSi TSr 【SAi2】Child SA用のSA 【IDr】ResponderのIDを指定する場合に使用。 23 【KEi】 forward secrecyのためにDiffie- Hellman値を変更する場合に設定する。 Introduction(9/12)
  • 24. /132 INFORMATIONAL Exchange • 役割 – エラー、状態の通知。 – Housekeeping(payloadを含まないRequest/Responseで実現)。 • 0以上のNotification payload /Delete payload/Configuration payloadを含む。 • 応答がない場合、再送する。 HDR [N] option SK 暗号化→ [D] option [CP] option 処理内容はpayloadによって決まる。 ①Initiatorが送信。開始した方がInitiator。 ②Responderが応答。 INFORMATIONAL Response INFORMATIONAL Request Initiator Responder HDR [N] option SK 暗号化→ [D] option [CP] option 24Introduction(10/12)
  • 25. /132 Deleting SA (INFORMATIONAL Exchange) • Child SAを削除する場合、双方のSAを同一のexchangeで削除すること。 • INFORMATIONAL exchange(Delete payloadで削除SPIを指定)で削除する。 (exchange=双方向のメッセージのやりとりで削除される) • IKE SAを削除する場合 – そのIKE SAでネゴシエーションされたChild SAも同時に削除すること。 – 応答はempty INFORMATIONAL response。 • Half-close connection、送受信不可能になった場合でも上記の方法でSA を削除すること。 • 例外:同時にDelete payloadを送信した場合は同時に削除してもよい。 • 例外:既に削除したSAの削除を要求された場合、受信したSAを削除し、 応答にはDelete Payloadを含めないこと。 ※誤った削除が行われないようにするため。 25Introduction(11/12)
  • 26. /132 IKE SA外のメッセージ • 認識しないSPIでESP/AHパケットを受信した。 – Notify PayloadでINVALID_SPIを送信してよい。 – IKE SAがある場合 • 暗号化の保護ありで送信。 – IKE SAがない場合 • 暗号化の保護なしで送信。※偽装パケットの可能性もあるので受信した場合は参考情報程度に する。 – 上記のINFORMATIONAL requestの受信側は応答しないこと。 • IKE SPIは意味のない値(0、乱数等)。Initiator flagは1。Responder flagは0。 • 暗号化されたIKE requestをPort 500/4500で認識しないSPIで受信した。 – IKE SA外のため、Notify payloadでINVALID_IKE_SPIを送信する。 – IKE SPI、Message ID、Exchange Typeは受信パケットのコピー。Response flagは1。 – IPアドレスとポート番号は送信側を指定する。 – IKE responseには応答しないこと。 • IKE requestを対応しないメジャーバージョンで受信した。 – IKE SA外のため、Notify payloadでINVALID_MAJOR_VERSIONを送信する。 – IKE SPI、Message ID、Exchange Typeは受信パケットのコピー。Response flagは1。 – IPアドレスとポート番号は送信側を指定する。 26Introduction(12/12)
  • 28. /132 Header and Payload Formats • IKEメッセージはUDP Port 500/4500を使用する。 – UDP 500 Port • UDPヘッダの直後がIKEメッセージ – UDP 4500 Port • UDPヘッダの後、4オクテットの0の後にIKEメッセージ ※4オクテットの0はIKEメッセージではない。length、checksumの計算には含まない。 ※UDPカプセル化の際にESPパケットと区別するために設定する。 • UNSPECIFIEDのパラメーターは相互運用のため には使用しないこと。 28Header and Payload Formats(1/55)
  • 29. /132 IKEv2のPayloadとPayload Type • Payload Type 1~32はIKEv1で割り当てられているため、使用しないこと。 Payload 略記 Payload Type No Next Payload - 0 Security Association SA 33 Key Exchange KE 34 Identification Initiator / Responder IDi / IDr 35 / 36 Certificate CERT 37 Certificate Request CERTREQ 38 Authentication AUTH 39 Nonce Ni / Nr 40 Notify N 41 Delete D 42 Vendor ID V 43 Traffic Selector Initiator/ Responder TSi / TSr 44 / 45 Encrypted SK 46 Configuration C 47 Extensible Authentication Protocol(EAP) EAP 48 29Header and Payload Formats(2/55)
  • 30. /132 IKE Header:フォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IKE SA Initiator's SPI | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IKE SA Responder's SPI | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload | MjVer | MnVer | Exchange Type | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 30Header and Payload Formats(3/55)
  • 31. /132 IKE Header:フィールド Field Length 説明 IKE SA Initiator's SPI 8 octets Initiatorが選択したIKE SAの識別子。0以外の値。 IKE SA Responder's SPI 8 octets Responderが選択したIKE SAの識別子。IKE Initial Exchangeの最初のメッセージでは0であること。 Next Payload 1 octet Headerの次のpayloadのPayload Type。 MjVer 4 bits IKEのメジャーバージョン。RFC5996は2。ISAKAMPは1。2 より大きい場合はN(INVALID_MAJOR_VERSION)で、メッ セージを拒否すること。 MnVer 4 bits IKEのマイナーバージョン。RFC5996は0。受信側では無 視すること。 Exchange Type 1 octet ExchangeのType。次スライド参照。 Flags 1 octet ビットフィールドで表されるオプション。次スライド参照。 Message ID 4 octets 0から始まり、Request毎に1増える。Responseでは Requestと同じ値を設定する。 双方向で別のMessage IDをもつ。 Length 4 octets IKE Header + Payloadのオクテット長。 31Header and Payload Formats(4/55)
  • 32. /132 IKE Header:Exchange Type、Flag Exchange Type Value IKE_SA_INIT 34 IKE_AUTH 35 CREATE_CHILD_SA 36 INFORMATIONAL 37 Flag 意味 X 送信時にCleared、受信時は無視する。 R(Response) 同じMessage IDのResnponseである。 RequsetでCleared、ResponseでSetする。 V(Version) 送信者がMjVerより高いMjVerを使用できることを示す。 IKEv2では送信時にCleared、受信時は無視する。 I(Initiator) IKE SAのInitiatorがSetし、ResponderはClearedする。 IKE SAをRekeyした場合はRekeyを開始した方がInitiatorになる。 受信側がI/RどちらのSPIを使用するか判別するのに使用する。 X X R V I X X X Set:1 Cleared:0 32Header and Payload Formats(5/55)
  • 33. /132 Generic Payload Header:フォーマット IKE PayloadはGeneric Payload Headerで始まる。 以降の各payloadの説明では記載を省略する。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 33Header and Payload Formats(6/55)
  • 34. /132 Generic Payload Header:フィールド Field Length 説明 Next Payload 1 octet 次のpayloadのPayload Type。このPayloadが最後の場合は0。 Encrypted payloadの場合、Encrypted payload内の最初の payloadのPayload Typeが設定される。 C(Critical) 1 bit 前のNext Payload filedのPayload Typeに対応していない場合 にこのpayloadを無視して欲しい場合、送信側が1を設定する。 IKEv2に準拠する場合は常に0を設定すること。 RESERVED 7 bits 0を設定し、受信側は無視すること。 Payload Length 2 octets Generic Payload Header + Payloadのオクテット長。 34Header and Payload Formats(7/55)
  • 35. /132 Security Association Payload:フォーマット SAのネゴシエーションに使用される。 3階層 Proposal – Transform – AttributeでSAを表現する。 SA Payload | +--- Proposal #1 ( Proto ID = ESP(3), SPI size = 4, | | 7 transforms, SPI = 0x052357bb ) | | | +-- Transform ENCR ( Name = ENCR_AES_CBC ) | +-- Attribute ( Key Length = 128 )| | +--- Proposal #2 ( Proto ID = ESP(3), SPI size = 4, | 4 transforms, SPI = 0x35a1d6f2 ) | +-- Transform ENCR ( Name = AES-GCM with a 8 octet ICV ) | +-- Attribute ( Key Length = 128 ) | +-- Transform ESN ( Name = ESNs ) +-- Transform ESN ( Name = No ESNs ) 35Header and Payload Formats(8/55)
  • 36. /132 Security Association Payload:フォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ <Proposals> ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Proposals:可変長。1以上のProposalを含む。 36Header and Payload Formats(9/55)
  • 37. /132 Security Association Payload:フォーマット Proposal Substructureフォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 (last) or 2 | RESERVED | Proposal Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Proposal Num | Protocol ID | SPI Size |Num Transforms| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ~ SPI (variable) ~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ <Transforms> ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Transforms:可変長。1以上のTransformを含む。 37Header and Payload Formats(10/55)
  • 38. /132 Security Association Payload:フィールド Proposal Substructureフィールド Field Length 説明 0 (last) or 2(more) 1 octet 最後のProposalであるかを示す。 RESERVED 1 octet 0を設定し、無視すること。 Proposal Length 2 octets Transform、Attributeを含むProposalのオクテット長。 Proposal Num 1 octet 最初のProposalは1。以降インクリメントされる。 Protocol ID 1 octet 1:IKE SA。2:AH。3:ESP。 SPI Size 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。 Num Transforms 1 octet Proposalに含まれるTransformの数。 SPI variable 送信側のSPI。 SPI Sizeが0の場合、このfieldは含めないこと。 <Transforms> variable 1つ以上のTransform Substructure。 38Header and Payload Formats(11/55)
  • 39. /132 Security Association Payload:フォーマット Transform Substructureフォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 (last) or 3 | RESERVED | Transform Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Transform Type | RESERVED | Transform ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Transform Attributes ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 39Header and Payload Formats(12/55)
  • 40. /132 Security Association Payload:フィールド Transform Substructureフィールド(1/4) Field Length 説明 0 (last) or 3(more) 1 octet 最後のProposalであるかを示す。 RESERVED 1 octet 0を設定し、無視すること。 Transform Length 2 octets Header、Attributeを含むTransformのオクテット長。 Transform Type 1 octet プロトコルの種別。オプション。 Transform ID 1 octet Transform Typeの識別子。 Transform Attributes 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。 説明 Transform Type プロトコル Optional(Responder任せ) 0 IKE、AH、ESP、 Encryption Algorithm(ENCR) 1 IKE、ESP Pseudorandom Function(PRF) 2 IKE Integrity Algorithm(INTEG) 3 IKE、AH、ESP(option) Diffie-Hellman group(D-H) 4 IKE、AH(option)、ESP(option) Extended Sequence Numbers (ESN) 5 AH、ESP 40Header and Payload Formats(13/55)
  • 41. /132 Security Association Payload:フィールド Transform Substructureフィールド(2/4) Transform Type 1(Encryption Algorithm)の場合 41 Name Trans Form ID Number 定義 ENCR_DES_IV64 1 UNSPECIFIED ENCR_DES 2 RFC2305、DES ENCR_3DES 3 RFC2451 ENCR_RC5 4 RFC2451 ENCR_IDEA 5 RFC2451、IDEA ENCR_CAST 6 RFC2451 ENCR_BLOWFISH 7 RFC2451 ENCR_3IDEA 8 UNSPECIFIED ENCR_DES_IV32 9 UNSPECIFIED ENCR_NULL 11 RFC2410 ENCR_AES_CBC 12 RFC3602 ENCR_AES_CTR 13 RFC3686 Header and Payload Formats(14/55)
  • 42. /132 Security Association Payload:フィールド Transform Substructureフィールド(3/4) Transform Type 2(Pseudorandom function)の場合 Transform Type 3(Integrity Algorithm)の場合 42 Name Trans Form ID Number 定義 PRF_HMAC_MD5 1 RFC2104、MD5 PRF_HMAC_SHA1 2 RFC2104、SHA PRF_HMAC_TIGER 3 UNSPECIFIED Name Trans Form ID Number 定義 NONE 0 AUTH_HMAC_MD5_96 1 RFC2403 AUTH_HMAC_SHA1_96 2 RFC2403 AUTH_DES_MAC 3 UNSPECIFIED AUTH_KPDK_MD5 4 UNSPECIFIED AUTH_AES_XCBC_96 5 RFC3566 Header and Payload Formats(15/55)
  • 43. /132 Security Association Payload:フィールド Transform Substructureフィールド(4/4) Transform Type 4(Diffie-Hellman group) Transform Type 5(Extended Sequence Numbers) 43 Name Trans Form ID Number 定義 NONE 0 768-bit MODP 1 RFC5996 1024-bit MODP 2 RFC5996 1536-bit MODP 5 RFC2451 2048-bit MODP 14 RFC2451、IDEA 3072-bit MODP 15 RFC2451 4096-bit MODP 16 RFC2451 6144-bit MODP 17 RFC3526 8192-bit MODP 18 RFC3526 Name Trans Form ID Number No Extended Sequence Numbers 0 Extended Sequence Numbers 1 Header and Payload Formats(16/55)
  • 44. /132 Security Association Payload:フィールド プロトコル毎に必須/オプションのTransform Typeが異なる。 ※Encrypted payloadにIntegrity algorithmを使用するのが必須のため。 必須のアルゴリズムは規定しない。 (アルゴリズムが危殆化、陳腐化する場合があるため) 44 Protocol Mandatory Type Optional Type IKE ENCR、PRF、INTEG※、D-H ESP ENCR、ESN INTEG、D-H AH INTEG、ESN D-H Header and Payload Formats(17/55)
  • 45. /132 Security Association Payload:フォーマット Attributeフォーマット 設定可能なAttributeはTransformによって異なる。 フォーマットはType/ValueまたはType/Length/Value。 現状、1つのAttribute typeのみが規定される。 Key Length Attribute:特定のEncryption Transformのキー長を規定する。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |A| Attribute Type | AF=0 Attribute Length | |F| | AF=1 Attribute Value | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AF=0 Attribute Value | | AF=1 Not Transmitted | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 45Header and Payload Formats(18/55)
  • 46. /132 Security Association Payload:フィールド Data Attributesフィールド Field Length 説明 Attribute Format(AF) 1 bit AttributeがType/Length/Value(TLV)かType/Value(TV)か を示す。0:TLV。1:TV。 Attribute Type 15 bits AttributeのType。 ※Value 0~13、15~17はIKEv1で使用されるので使用 しないこと。 Attribute Value variable AF=1:2 octets。AF=0:Attribute Lengthのオクテット長。 Transform Type 1 octet プロトコルの種別。オプション。 Transform ID 1 octet Transform Typeの識別子。 Transform Attributes 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。 Attribute Type Value Attribute Format Key Length (in bits) 14 TV 46Header and Payload Formats(19/55)
  • 47. /132 Security Association Payload:補足 • Key Length attributeの設定 – 固定長keyのTransformに設定しないこと。 • 例:ENCR_DES、ENCR_IDEA、Type 2 Transform、Type 3 Transform – 可変長keyのTransformに設定されていない場合、デ フォルトのlengthを使用すること。 • 例:ENCR_RC5、ENCR_BLIWFISH – 必須のTransformに含まれない場合、そのProposal を拒否すること。 • 例:ENCR_AES_CBC、ENCR_AES_CTR 47Header and Payload Formats(20/55)
  • 48. /132 Security Association Payload:ネゴシエーション • Attributeのネゴシエーション – Responder • InitiatorのProposalから1つだけProposalを選択し、応答する。 – 選択できるProposalが無い場合、拒否する (NO_PROPOSAL_CHOSEN)。 • 未知のProposal、Transformは無視して処理する。 ※将来拡張のため、未知のパラメーターはスキップする。 – Initiator • 応答が送信したProposalと一致しているか確認する。 – 一致していない場合、exchangeを終了する。 • Diffie-Hellman groupのネゴシエーション – Responder • Initiatorと異なるD-H groupを選択する場合、そのD-H groupと INVALID_KE_PAYLOADで応答する。 • NONEを選択する場合、InitiatorのKEを無視し、KEを送信しない。 – Initiator • そのD-H groupをSA、KEに設定し、再試行する。 ※MITM防止のため、Proposalは全てを送信する。 48Header and Payload Formats(21/55)
  • 49. /132 Key Exchange Payload:フォーマット Diffie-Hellman鍵交換用のデータの交換に使用する。 Diffie-Hellman鍵交換については次スライド参照。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Diffie-Hellman Group Num | RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Key Exchange Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ • Diffie-Hellman Group Num:次スライドのpを決定するパラメータ。 SAの最初のD-H group Proposalと一致すること。 SAでD-H groupが無い場合、KEは設定しないこと。 • Key Exchange Data:次スライドのg。 Key Exchange Dataはpと同じバイト数になるように0パディングすること。 49 p:素数 g:pの原始根 Header and Payload Formats(22/55)
  • 50. /132 Diffie-Hellman鍵交換 • 安全に秘密鍵を共有する方法。 Initiator Responder a:秘密鍵 p:素数 g:pの原始根 p、g b:秘密鍵 b:秘密鍵 p、g AA:g^a mod p B B:g^b mod p s:B^a mod p s:秘密鍵 s:A^b mod p s:秘密鍵 Responderはaを知らない。 Initiatorはbを知らない。 相手の秘密鍵を知ること無く秘密鍵sを生成できた。 通信路を流れるp、g、A、Bからsを計算するのは困難。 50 ←Diffie、Hellmanについて詳しく知りたい場合 下記の書籍がお薦めです。 暗号化:スティーブン・レビー 暗号解読:サイモン・シン Header and Payload Formats(23/55)
  • 51. /132 Identification Payload:フォーマット • 相手の確認と認証データ(PAD:Peer Auth DB)の照会に使用する。 – IDにIPアドレスを使用する場合、TSと一致する必要はない。 – CERT payloadと一致する必要はない。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ID Type | RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Identification Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 51Header and Payload Formats(24/55)
  • 52. /132 Identification Payload:フィールド Field Length 説明 ID Type 1 octet IDのType。下記参照。 RESERVED 3 octets 0を設定し、無視すること。 Identification Data variable ID Typeの値。Lengthはheaderから算出する。 ID Type Value 説明 ID_IPV4_ADDR 1 IPv4アドレス。4オクテット。 ID_FQDN 2 FQDN。NULL、CRなどで終端しないこと。 ID_RFC822_ADDR 3 RFC822のemail address。NULL、CRなどで終端しないこと。EAPで realmを含むNAIをIDに使用する場合にも使用される。 ID_IPV6_ADDR 5 IPv6アドレス。16オクテット。 ID_DER_ASN1_DN 9 X.500のANS.1。 ID_DER_ASN1_GN 10 X.509のANS.1。 ID_KEY_ID 11 ベンダー固有で規定するバイト列。realmを含まないNAIをIDに 使用する場合にも使用される。 52Header and Payload Formats(25/55)
  • 53. /132 Identification Payload:補足 • 異なるID Type同士で運用してもよい。 • 相互運用を保証するためには下記のID Typeを生成、許容で きること。 • EAPの場合のID Typeは – realmを含むNAIを使用する場合、ID_RFC822_ADDRを使用する。 ※ResponderはRFC5322(Mail format)ではなくRFC4282(NAI)でチェックする。 – realmを含まないNAIを使用する場合、 ID_KEY_IDを使用する。 53 運用 ID Type IPv4のみ ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV4_ADDR IPv4 and IPv6 ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV4_ADDR、ID_IPV6_ADDR IPv6のみ ID_FQDN、 ID_RFC822_ADDR、ID_KEY_ID、ID_IPV6_ADDR Header and Payload Formats(26/55)
  • 54. /132 Certificate Payload:フォーマット • 証明書、認証関連のデータを送信する。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cert Encoding | | +-+-+-+-+-+-+-+-+ | ~ Certificate Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 54Header and Payload Formats(27/55)
  • 55. /132 Certificate Payload:フィールド Field Length 説明 Certificate Encoding 1 octet Certificate Data filedに含まれる証明書の種別。 Certificate Data variable Certificate Encoding fieldで指定されたデータ。 Certificate Encoding Value PKCS #7 wrapped X.509 certificate 1 PGP Certificate 2 DNS Signed Key 3 X.509 Certificate - Signature 4 Kerberos Token 6 Certificate Revocation List (CRL) 7 Authority Revocation List (ARL) 8 SPKI Certificate 9 X.509 Certificate – Attribute 10 Raw RSA Key 11 Hash and URL of X.509 certificate 12 Hash and URL of X.509 bundle 13 55Header and Payload Formats(28/55)
  • 56. /132 Certificate Request Payload:フォーマット • 証明書、認証関連データを要求する。 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cert Encoding | | +-+-+-+-+-+-+-+-+ | ~ Certification Authority ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 56Header and Payload Formats(29/55)
  • 57. /132 Certificate Request Payload:フィールド 57 HTTP-based URLで証明書を参照したい場合、CERTREC payloadに HTTP_CERT_LOOKUP_SUPPORTED notificationを設定する。 Field Length 説明 Certificate Encoding 1 octet Certificate Data filedに含まれる証明書の種別。 Certification Authority variable Certificate Encoding fieldで指定されたデータ。 Certificate Encoding Value PKCS #7 wrapped X.509 certificate 1 PGP Certificate 2 DNS Signed Key 3 X.509 Certificate - Signature 4 Kerberos Token 6 Certificate Revocation List (CRL) 7 Authority Revocation List (ARL) 8 SPKI Certificate 9 X.509 Certificate – Attribute 10 Raw RSA Key 11 Hash and URL of X.509 certificate 12 Hash and URL of X.509 bundle 13 Header and Payload Formats(30/55)
  • 58. /132 Authentication Payload:フォーマット • 認証に使用するデータが含まれる。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Auth Method | RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Authentication Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 58Header and Payload Formats(31/55)
  • 59. /132 Authentication Payload:フィールド Field Length 説明 Auth Method 1 octet 使用される認証方法のMechanism。 Authentication Data variable 認証データ。認証方法の詳細は後述。 59 Mechanism Value 説明 RSA Digital Signature 1 RSA秘密鍵(SASSA-PKCS1-v1_5)を使用して認証する。 Shared Key Message Integrity Code 2 ID payloadのidentityと関連付くshared keyとネゴシエー ションされたPRFを使用して認証する。 DSS Digital Signature 3 SHA-1ハッシュのDSS秘密鍵使用して認証する。 Header and Payload Formats(32/55)
  • 60. /132 Nonce Payload:フォーマット • IKE SAのKeyの計算に使用するランダムな値。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Nonce Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Nonce Data:送信側によって生成されたランダムな値。16~256オクテッ トであること。 60Header and Payload Formats(33/55)
  • 61. /132 Notify Payload:フォーマット • エラー、状態変化等の情報を送信する。 – Response(Requestを拒否した理由を示す 等) – INFORMATIONAL exchange(エラー通知 等) – 設定の変更、取得 等 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Protocol ID | SPI Size | Notify Message Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Security Parameter Index (SPI) ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Notification Data ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 61Header and Payload Formats(34/55)
  • 62. /132 Notify Payload:フィールド Field Length 説明 Protocol ID 1 octet 既存のSAに関連する場合、SAの種別を設定する。 IKE 1、AH 2、ESP 3。 INVALID_SELECTORS、REKEY_SAの場合のみ設定される。 それ以外の場合は0が設定され、受信側は無視すること。 SPI Size variable Protocol IDで規定されたSPIのオクテット長。 SPIが有効でない場合、IKE SAに関するnotificationではSPI Size=0、SPI fieldは無し。 Notify Message Type 2 octets Notification MessageのType。 SPI variable SPI。 Notification Data variable Status、Error data等。 Notify Message Typeによって異なる。 62Header and Payload Formats(35/55)
  • 63. /132 Notify Payload:Notify Message Type • Notify Message Type – 0~16383:Error Typeに使用される。 – 16384~ :Status Typeに使用される。 • 認識できないNotify Message Typeは無視し、ログに記録すること。 Requestは失敗したと想定すること。 Notify Message Type Value 設定するケース Payload Data UNSUPPORTED_CRITICAL_PAYLO AD 1 Critical flagで指定されたpayload typeを認識で きない場合。 1 octet:認識できなかったpayload type。 INVALID_IKE_SPI 4 IKE SAのコンテキスト外でIKE_SA_INIT以外の メッセージを受信した場合。 INVALID_MAJOR_VERSION 5 Major Versionが3以上の場合。メッセージは拒 否するか無視する。 INVALID_SYNTAX 7 T、L、Vが範囲外またはrequestがポリシーに合 致しない場合。 INVALID_MESSAGE_ID 9 異常なMessage IDを受信した場合。 4 octets:Invalid Message ID。 INVALID_SPI 11 IKE SAのコンテキスト内で認識しないESP/AHの パケットを受信した場合。 4 octets:Invalid SPI。 NO_PROPOSAL_CHOSEN 14 許容できるCrypto suitesが無い場合。(例:SA payload、USE_TRANSPORT_MODE、 IPCOMP_SUPPORTED) INVALID_KE_PAYLOAD 17 Initiatorが指定したD-H group以外を Responderが希望する場合。 2 octets:D-H group番号。 63Header and Payload Formats(36/55)
  • 64. /132 Notify Payload:Notify Message Type Notify Message Type Value 設定するケース Payload Data AUTHENTICATION_FAILED 24 認証に失敗した場合、IKE_AUTHの応答に使用する。 SINGLE_PAIR_REQUIRED 34 1つのTraffic Selectorペアのみを許容するため、 CREATE_CHILD_SA requestを拒否する場合。 NO_ADDITIONAL_SAS 35 IKE SAで追加Child SA作成を許容しないResponderが CREATE_CHILD_SA requestを拒否する場合。 INTERNAL_ADDRESS_FAILURE 36 ResponderがInitiatorへのIPアドレス割り当て中にエラー を検出した場合。 FAILED_CP_REQUIRED 37 ResponderがCP(CFG_REQUEST)を希望しているが、 Initiatorが送信しなかった場合。 TS_UNACCEPTABLE 38 Responderが提案されたTSの一部でも許容できない場合。 INVALID_SELECTORS 39 Selectorに合致しないESP/AHパケットを受信した場合。 4 octets:SPI。 問題のパケットの先頭。 TEMPORARY_FAILURE 43 • 削除する、削除したIKE SA、Child SAのrekey requestを 受信した場合。 • Rekey中のIKE SAでChild SAのcreate/rekeyのrequestを 受信した場合。 • IKE SAのrekey requestを受信したときに、そのIKE SA のChild SAがcreating/rekey/closingしている場合。 CHILD_SA_NOT_FOUND 44 存在しないChild SAへのrekey requestを受信した場合。 64Header and Payload Formats(37/55)
  • 65. /132 Notify Payload:Notify Message Type Notify Message Type Value 設定するケース Payload Data INITIAL_CONTACT 16384 そのIKE SAが同じ認証IDをもつIKE SAで唯一アクティブであることを 示す場合。 最初のIKE_AUTH request/responseでのみ送信できる。受信側は 同じIDの他のIKE SAを削除してもよい。 SET_WINDOW_SIZE 16385 Windows Sizeを設定する場合。 4 octets:Windows size ADDITIONAL_TS_POSSIBLE 16386 ResponderはTSを狭める変更をしたが、そのSAで追加のTSを受け 入れ可能なことを示す場合。 IPCOMP_SUPPORTED 16387 IP compression algorithmを使用する場合。 Child SAを作成するSA payloadを含むメッセージにのみ含まれる。 2 octets:IP Comp CPI 1 octets:Transform ID Option:Attribute NAT_DETECTION_SOURCE_IP 16388 NAT traversalを使用する場合。 20 octets:SPI、IP Address、 PortのSHA-1 digest NAT_DETECTION_DESTINATION_IP 16389 NAT traversalを使用する場合。 COOKIE 16390 COOKIEを使用する場合。 ≒Responderが大量のhalf-open IKE SAを検出した場合。 1~64 octets:Cookie USE_TRANSPORT_MODE 16391 トランスポートモードのSAを作成する場合。 HTTP_CERT_LOOKUP_SUPPORTED 16392 HTTP-based URLによる証明書の取得をする場合。 REKEY_SA 16393 Rekeyする場合。 CREATE_CHILD_SAに含まれる。 ESP_TFC_PADDING_NOT_SUPPORTED 16394 Traffic Flow confidentiality(TFC) をサポートしない場合。 NON_FIRST_FRAGMENTS_ALSO 16395 Fragmentationの制御に使用する。詳細:RFC4301。 65Header and Payload Formats(38/55)
  • 66. /132 Delete Payload:フォーマット • 送信者がSADから削除するSA SPIを通知する。 • 同じプロトコル(IKE/ESP/AH)のSPIならば1 Delete Payloadに複数含んでよ い。 • 1 INFORMATIONAL Exchangeに複数Delete Payloadが含まれてもよい。 • IKE SAの削除ではSPIを含まない。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Protocol ID | SPI Size | Num of SPIs | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Security Parameter Index(es) (SPI) ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 66Header and Payload Formats(39/55)
  • 67. /132 Delete Payload:フィールド Field Length 説明 Protocol ID 1 octet 1:IKE SA。2:AH。3:ESP。 SPI Size 1 octet 0:IKE。4:AH/ESP。 Num of SPIs 2 octets Delete Payloadに含まれるSPIの数。 SPI variable 削除するSAのID 67Header and Payload Formats(40/55)
  • 68. /132 Vendor ID Payload:フォーマット • ベンダー定義の定数が含まれる。 • デバッグ、プロトコル拡張に使用される。 • 任意のExchangeに任意の数のVendor ID Payloadを含めてよい。 • 未知のVendor ID Payloadは無視すること。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Vendor ID (VID) ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 68Header and Payload Formats(41/55)
  • 69. /132 Traffic Selector Payload:フォーマット • IPsecで処理するフローを識別するTS(Traffic Selector)を設定する。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Number of TSs | RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ <Traffic Selectors> ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload LengthにはTS headerと全てのTraffic Selectorのサイズが含まれる。 69Header and Payload Formats(42/55)
  • 70. /132 Traffic Selector Payload:フィールド • TSi/TSrを同数含む必要はない。 例:下記のTSが設定された場合 TSi = ((17, 100, 198.51.100.66-198.51.100.66), (17, 200, 198.51.100.66-198.51.100.66)) TSr = ((17, 300, 0.0.0.0-255.255.255.255), (17, 400, 0.0.0.0-255.255.255.255)) 198.51.100.66から任意のアドレスへのパケットは、src/dstの組が 青:(100,300)(100,400)、赤:(200,300)、 (200, 400)のいずれかにマッチする。 src/dstが緑:(100,300)(200,400)のみにマッチするポリシーは上記の例では作成 できないため、1つのChild SAではネゴシエーションできない。 Field Length 説明 Number of TSs 1 octet Traffic Selectorの数。 RESERVERD 3 octets 0を設定し、無視すること。 Traffic Selectors variable 1個以上のTS。 70Header and Payload Formats(43/55)
  • 71. /132 Traffic Selector:フォーマット • TS TypeとSelector Length以外のfieldはTS Typeによって異なる。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TS Type |IP Protocol ID*| Selector Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Start Port* | End Port* | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Starting Address* ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Ending Address* ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 71Header and Payload Formats(44/55)
  • 72. /132 Traffic Selector:フィールド Field Length 説明 TS Type 1 octet Traffic SelectorのType。 IP protocol ID 1 octet IPプロトコルID(例:UDP、TCP、ICMP等)。 0は全てのプロトコルを意味する。 Selector Length 2 octets Headerを含めたTraffic Selector substructureの length。 Start Port 2 octets 許可する最小のport番号。ポート未定義のプロト コル、全ポート許可の場合は0を設定する。 End port 2 octets 許可する最大のport番号。ポート未定義のプロト コル、全ポート許可の場合は65535を設定する。 Starting Address 4 or 16 octets 許可する最小のアドレス。 Ending Address 4 or 16 octets 許可する最大のアドレス。 72 TS Type Value 説明 TS_IPV4_ADDR_RANGE 7 IPv4アドレスの範囲。 TS_IPV6_ADDR_RANGE 8 IPv6アドレスの範囲。 Header and Payload Formats(45/55)
  • 73. /132 Encrypted Payload:フォーマット • 暗号化した他のpayloadを含む。 • メッセージの最後のpayloadであること。多くの場合、メッセージで唯一のpayload である。 • Encrypted and Authenticated payloadともいう。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Initialization Vector | | (length is block size for encryption algorithm) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ~ Encrypted IKE Payloads ~ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Padding (0-255 octets) | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ | | Pad Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ~ Integrity Checksum Data ~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 73Header and Payload Formats(46/55)
  • 74. /132 Encrypted Payload:フィールド Field Length 説明 Next Payload 1 octet 最初のEncrypted IKE PayloadのPayload Type。 Payload Length 2 octets Header、IV、Encrypted IKE Payload、Padding、Pad Length、Integrity Checksum Dataを合計したlength。 Initialization Vector(IV) variable 暗号化用のInitialization Vector。 詳細は各暗号の仕様参照。 Encrypted IKE Payload variable IKE Payload。 暗号化される。 Padding 0~255 octets 任意の値のPadding。Payload、Padding、Pad Lengthの サイズの合計が暗号化ブロックサイズの倍数になる こと。 暗号化される。 Pad Length 1 octet Paddingのlength。ブロックサイズが最小になるように Pad Lengthを設定すること。受信者は任意のlengthを 許容する。 暗号化される。 Integrity Checksum Data variable IKE header~Pad Lengthまでのencryptedメッセージの チェックサム。Lengthはネゴシエーションされた integrity algorithmで決まる。 74Header and Payload Formats(47/55)
  • 75. /132 Configuration Payload:フォーマット • 設定情報の交換に使用する。 例:Internal IP Address等を取得する。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CFG Type | RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Configuration Attributes ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 75Header and Payload Formats(48/55)
  • 76. /132 Configuration Payload:フィールド • CFG_REQUEST/CFG_REPLYは情報要求。 – CFG_REPLYで値を返す。requestに含まれないattributeを追加してもよ い。 – 認識できない、未サポートのattributeは無視すること。 • CFG_SET/CFG_ACKは情報設定。 – 受け入れる場合、length 0で受け入れたattributeを返す。 – 受け入れない場合、空のCFG_ACKかCFG_ACKの無いresponseを返す。 – 規定の使い方は無い。実装ではCFG_SETを無視してよい。 Field Length 説明 CFG Type 1 octet Exchangeのタイプ。 CFG_REQUEST:1、CFG_REPLY:2、CFG_SET:3、CFG_ACK:4 RESERVED 3 octets 0を設定し、無視すること。 Configuration Attributes variable 設定情報を示すTLV(Type Length Value)構造体。 76Header and Payload Formats(49/55)
  • 77. /132 Configuration Attribute:フィールド Field Length 説明 R(Reserved) 1 bit 0を設定し、無視すること。 Attribute Type 15 bits Configuration Attributeのtype。 Length 2 octets Configuration Attributeのオクテット長。 Value variable Configuration Attribute。 77 Configuration Attribute フォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |R| Attribute Type | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Value ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Header and Payload Formats(50/55)
  • 78. /132 Configuration Attribute:フィールド 78 Attribute Type Value Multi-Valued Length 説明 INTERNAL_IP4_ADDRESS 1 YES 複数の値がrequestされた場合。 0 or 4 octets Internal network address。特定のアドレスを要求しない場合 は0 lengthを設定する。 INTERNAL_IP4_NETMASK 2 NO 0 or 4 octets Internal networkのnetmask。Requestでは0 lengthであること。 Link boundaryを意味する。 INTERNAL_IP4_DNS 3 YES 0 or 4 octets DNSサーバーのアドレス。 INTERNAL_IP4_NBNS 4 YES 0 or 4 octets NBNSサーバーのアドレス。 INTERNAL_IP4_DHCP 6 YES 0 or 4 octets DHCPサーバーのアドレス。 APPLICATION_VERSION 7 NO 0以上octets IPsecホストのバージョンまたはアプリケーション情報。NULL 終端しない、ASCII文字列。 INTERNAL_IP6_ADDRESS 8 YES 複数の値がrequestされた場合。 0 or 17 octets Internal network address。特定のアドレスを要求しない場合 は0 lengthを設定する。 IPv6 addressと1 octetのprefixで構成される。 INTERNAL_IP6_DNS 10 YES 0 or 16 octets DNSサーバーのアドレス。 INTERNAL_IP6_DHCP 12 YES 0 or 16 octets DHCPサーバーのアドレスにDHCP requestを送信する。 INTERNAL_IP4_SUBNET 13 YES 0 or 8 octets IPsec保護するサブネットワーク。IPアドレスとnetmaskで構成 される。 SUPPORTED_ATTRIBUTES 14 NO 2の倍数octets Requestでは0 lengthであること。 Responderはサポートするattribute typeを送信する。 INTERNAL_IP6_SUBNET 15 YES 17 octets IPsec保護するサブネットワーク。IPアドレスとprefixで構成さ れる。 Header and Payload Formats(51/55)
  • 79. /132 Configuration Payload:IPv6設定の例 IPv6アドレスでは全てのIPv6機能は使用できない。例えば、リンクローカルアドレス を必ずしももたないため、MLDv2の使用が困難である。 • IPv6アドレス、IPv6DNSアドレスを要求。アドレスは任意。 CP(CFG_REQUEST) = INTERNAL_IP6_ADDRESS() INTERNAL_IP6_DNS() TSi = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF) TSr = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF) • 割り当てたIPv6アドレス、IPv6DNSアドレスを応答。 TSiを範囲指定。 CP(CFG_REPLY) = INTERNAL_IP6_ADDRESS(2001:DB8:0:1:2:3:4:5/64) INTERNAL_IP6_DNS(2001:DB8:99:88:77:66:55:44) TSi = (0, 0-65535, 2001:DB8:0:1:2:3:4:5 - 2001:DB8:0:1:2:3:4:5) TSr = (0, 0-65535, :: - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF) 79Header and Payload Formats(52/55)
  • 80. /132 Configuration Payload:アドレス割り当て失敗 • Responder – 全てのIPアドレスの割り当てに失敗した場合 INTERNAL_ADDRESS_FAILURE notificationで応答する。 ※IKE_AUTHで発生した場合、Child SA無しIKE SA有りになる。 ※同一アドレスタイプで1つでも割り当てに成功した場合はfailure応答しない。 – Configuration Payloadをサポートしない場合 全てのConfiguration Payloadを無視してよい。 • Initiator – 必要なIPアドレスを受信しなかった場合 適当なリトライ時間にConfiguration payload再送 or Delete payloadでIKE SAを削除して最初からやり直し ※エラーは即座に復旧しない可能性が高いため、数分程度待つことが望ましい。 80Header and Payload Formats(53/55)
  • 81. /132 EAP Payload:フォーマット • EAP認証で使用するPayload。 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Payload |C| RESERVED | Payload Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ EAP Message ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ EAP Messageフォーマット 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Type_Data... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 81Header and Payload Formats(54/55)
  • 82. /132 EAP Payload:フィールド Field Length 説明 Code 1 octet Request (1), Response (2), Success (3), Failure (4)を示す。 Identifier 1 octet メッセージのID。再送の識別に使用される。 Length 2 octets EAP Messageのlength。Generic Payload Headerを含まないため、 Payload Lengthより4 octets小さい。 Type 1 octet Request(1) / Response(2)の場合に存在する。 Request(1):要求するデータ。 Response(2):要求されたデータ or NAK。 Type_Data variable Request(1) / Response(2)で存在する。 EAP Methodによって異なる。 詳細はRFC3748参照。 82Header and Payload Formats(55/55)
  • 84. /132 Exchanges and Payloads • IKEv2 exchangeのpayload確認用。 • Vendor ID(V) payloadはすべてのメッセージ の任意の場所に含まれてよい。 • 以降のexchangeでは最適な場所に記載され ている。 • [X]はpayload Xがoptionであることを示す。 84Exchanges and Payloads(1/10)
  • 85. /132 IKE_SA_INIT Exchange (Request/Response) [N(COOKIE)], SA, KE, Ni, [N(NAT_DETECTION_SOURCE_IP)+, N(NAT_DETECTION_DESTINATION_IP)], [V+][N+] Request SA, KE, Nr, [N(NAT_DETECTION_SOURCE_IP), N(NAT_DETECTION_DESTINATION_IP)], [[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+], [V+][N+] Response (cookieなし) N(COOKIE), [V+][N+] Response (cookieあり) N(INVALID_KE_PAYLOAD), [V+][N+] 異なる Diffie-Hellman groupの要求 85Exchanges and Payloads(2/10)
  • 86. /132 IKE_AUTH Exchange without EAP (Request) IDi, [CERT+], [N(INITIAL_CONTACT)], [[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+], [IDr], AUTH, [CP(CFG_REQUEST)], [N(IPCOMP_SUPPORTED)+], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, TSi, TSr, [V+][N+] Request 86Exchanges and Payloads(3/10)
  • 87. /132 IKE_AUTH Exchange without EAP (Response) IDr, [CERT+], AUTH, [CP(CFG_REPLY)], [N(IPCOMP_SUPPORTED)], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, TSi, TSr, [N(ADDITIONAL_TS_POSSIBLE)], [V+][N+] Response Child SA作成に失敗 IDr, [CERT+], AUTH, N(error), [V+][N+] 87Exchanges and Payloads(4/10)
  • 88. /132 IKE_AUTH Exchange with EAP (Request/Response) IDi, [N(INITIAL_CONTACT)], [[N(HTTP_CERT_LOOKUP_SUPPORTED)], CERTREQ+], [IDr], [CP(CFG_REQUEST)], [N(IPCOMP_SUPPORTED)+], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, TSi, TSr, [V+][N+] Request IDr, [CERT+], AUTH, EAP, [V+][N+] 最初のResponse 88Exchanges and Payloads(5/10)
  • 89. /132 IKE_AUTH Exchange with EAP (Request/Response) EAP Request AUTH 最後のResponse EAP Response … 1~N回繰り返し 最後のRequest AUTH, [CP(CFG_REPLY)], [N(IPCOMP_SUPPORTED)], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, TSi, TSr, [N(ADDITIONAL_TS_POSSIBLE)], [V+][N+] 89Exchanges and Payloads(6/10)
  • 90. /132 CREATE_CHILD_SA Exchange for Creating or Rekeying Child SAs(Request) [N(REKEY_SA)], [CP(CFG_REQUEST)], [N(IPCOMP_SUPPORTED)+], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, Ni, [KEi], TSi, TSr [V+][N+] Request 90Exchanges and Payloads(7/10)
  • 91. /132 CREATE_CHILD_SA Exchange for Creating or Rekeying Child SAs(Response) [CP(CFG_REPLY)], [N(IPCOMP_SUPPORTED)], [N(USE_TRANSPORT_MODE)], [N(ESP_TFC_PADDING_NOT_SUPPORTED)], [N(NON_FIRST_FRAGMENTS_ALSO)], SA, Nr, [KEr], TSi, TSr, [N(ADDITIONAL_TS_POSSIBLE)] [V+][N+] Response N(error) エラー N(INVALID_KE_PAYLOAD), [V+][N+] 異なる Diffie-Hellman groupの要求 91Exchanges and Payloads(8/10)
  • 92. /132 CREATE_CHILD_SA Exchange for Rekeying the IKE SA(Request/Response) SA, Ni, KEi [V+][N+] Response SA, Nr, KEr [V+][N+] Request 92Exchanges and Payloads(9/10)
  • 94. /132 IKE Protocol Details and Variations 94
  • 95. /132 Retransmission • IKEはUDP(コネクションレス)なので再送はIKEで保証する。 • IKEメッセージ(request/response)はinitiatorが再送を担う。 • 再送responseはもとのメッセージと同一であること。(IP/UDPレ ベルでは異なってよい) • IKE_SA_INIT request受信時の振る舞い – 既存のIKE SA:無視 – 新規のIKE SA:新規のIKE_SA_INIT responseを返す。 上記で既存/新規の判別にはパケット全体 or パケットのハッシュ or Ni payloadで判別する。 ※NAT配下では同一Initiatorで同一SPI使用される可能性があるため。 • 一方向のメッセージ(エラーメッセージ等)は再送しない。 95IKE Protocol Details and Variations(1/36)
  • 96. /132 Message ID • 全てのIKEメッセージはMessage IDをもつ。 – Request/Responseの照合、再送の識別に使用される。 – IKE_SA_INIT、 IKE SA Rekey後に0が設定され、以降+1される。 – エンドポイントは2つのMessage IDを管理する。 • 自分のRequest用 :Request送信のたびに+1 • 相手へのResponse用:Request受信のたびに+1 – Message IDが32bitオーバーする場合、IKE SAをClose or Rekeyする。 96IKE Protocol Details and Variations(2/36)
  • 97. /132 Window size • 同時に複数(Window size)のexchangeを維持できる機能。 • Window sizeは – Initial exchangeが完了するまでは1。 – 以降、SET_WINDOW_SIZE notificationで設定された場合、それに従う。 – Window sizeを小さくする変更はできない。 – Rekeyで1にリセットされる。 • 複数exchange中にRekeyされたら大丈夫? • Window sizeオーバーするMessage IDを受信した場合 – オプションでINFORMATIONAL を送信する。 • INVALID_MESSAGE_ID notification(4 octetsのinvalid message含む) – このメッセージはresponseではない。無効なrequestにはresponseしない。 97IKE Protocol Details and Variations(3/36)
  • 98. /132 Synchronization、Connection Timeout • クラッシュ、再起動した場合の状態通知(単一ID運用の場合) – クラッシュ、再起動した側 • IKE_AUTH request or responseでINITIAL_CONTACT notificationを送信してよい。 ※同一IDで唯一アクティブなIKE SAであることの通知。 – された側 • 上記を受信した場合、同じIDの他のIKE SAを削除してよい。 • Dead Peer Detection、DPD、ヘルスチェック – 空のINFORMATIONA exchangeで行う。 IKE header+payload無しのEncrypted payload • リトライ – リトライ回数、タイムアウト時間は規定しない。Increase exponentiallyが望ましい。 • Inactive time – InactiveなChild SAはDelete payloadで削除してもよい。 98IKE Protocol Details and Variations(4/36)
  • 99. /132 Version Number • 本ドキュメントのIKEv2はmajor=2、minor=0。 – 互換性を維持できない場合はmajorをインクリメントする。 – 互換性を維持できる場合はminorをインクリメントする。 • major=n,mをサポートする場合、n~mをサポートすること。 • Peer間で共通で最大のmajorにネゴシエーションすること。 • Payload typeの処理確認のためにcritical flagが使用される。 – Requestのcritical flagがsetされた場合 ※Responseのcritical flagはsetしないこと • Payload typeが認識できない場合、 UNSUPPORTED_CRITICAL_PAYLOAD notifyを通知する。 • Payload typeが未サポートの場合、無視する。 99IKE Protocol Details and Variations(5/36)
  • 100. /132 SPI • IKEパケットの識別子。 • IKE:双方向のSA – Initiator、ResponderのSPIがメッセージに設定される。 – Initial exchangeではResponder SPIがわからないため、0を設定する。 – IKE SA作成に失敗した場合、ResponseのResponder SPIは0になる。 ※ただし、0でなかった場合でもInitiatorは許容する。 • ESP/AH:片方向のSA – ResponderのSPIがメッセージに設定される。 100IKE Protocol Details and Variations(6/36)
  • 101. /132 Cookie • 大量のhalf-open IKE SAを検出した場合、ResponderはCOOKIE Notificationに よるCOOKIE認証をしてもよい。 – COOKIE Notificationは1~64オクテット – Cookie = <VersionIDofSecret> | Hash(Ni | IPi | SPIi | <secret>) <secret>:Responderが生成する乱数。 <VersionIDofSecret> :<secret>が変更される毎に変更される数。 • InitiatorはResponderから通知されたCOOKIE Notificationをそのまま返す。 HDR(A, 0), SAi1, KEi, Ni HDR(A, 0) N(COOKIE), SAi1, KEi, Ni HDR(A, 0) N(COOKIE) HDR(A, B), SAr1, KEr, Nr, [CERTREQ] HDR(A,B), SK { IDi, [CERT,] [CERTREQ.] [IDr,] AUTH, SAi2, TSi, TSr} HDR(A,B), SK { IDr, [CERT,] AUTH, SAr2, TSi, TSr} HDR(X, Y) X:InitiatorのSPI Y:ResponderのSPI 101 大量のhalf-open connection検出 COOKIE認証の決定 COOKIE認証 COOKIE生成のアルゴリズムは規定しない。 下記は一例。 IKE Protocol Details and Variations(7/36)
  • 102. /132 Cookie:INVALID_KE_PAYLOAD notification • COOKIE+Diffie-Hellman group変更(INVALID_KE_PAYLOAD)の場合 – 初回のIKE_SA_INIT(COOKIE無し)とリトライのIKE_SA_INIT(COOKIE有り)でKEiが変わる。 HDR(A, 0), SAi1, KEi, Ni HDR(A, 0) N(COOKIE), SAi1, KEi, Ni HDR(A, 0) N(COOKIE) HDR(A, 0),N(INVALID_KE_PAYLOAD) HDR(X, Y) X:InitiatorのSPI Y:ResponderのSPI 102 大量のhalf-open connection検出 COOKIE認証の決定 D-H group拒否 HDR(A, 0) N(COOKIE), SAi1, KEi', Ni HDR(A, B), SAr1, KEr, Nr, [CERTREQ] COOKIE認証 IKE Protocol Details and Variations(8/36)
  • 103. /132 Rekey • Rekey = ライフタイム切れのSAの代わりにSAを確立すること。 • SAにはライフタイムがあること。 – ライフタイムはネゴシエーションされない。 • ライフタイム切れになった場合、そのSAを使用しないこと。 – ライフタイム以外にも通信有無もSA削除の判定に使ってもよい。 • Rekeyのサポートはオプション。 – RekeyのCREATE_CHILD_SA requestは拒否してよい。 • RekeyされたChild SAは古いChild SAと同じTraffic Selectorをもつ。 103IKE Protocol Details and Variations(9/36)
  • 104. /132 Rekey:同時Child SAのRekeyその① • Child SAが同時にRekeyされた場合、冗長SAになる。 – 避けるためにライフタイム満了後にランダム秒間隔をあけることが望ましい。 • 冗長SAが作成された場合 – 冗長SAの4つのNonceのうち最小のNonce(Octet単位)で生成されたSAを新 しいSA確立後にRekeyトリガ側が閉じることが望ましい。 104 N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,... SA(..,SPIa3,..), Nr1,... N(REKEY_SA,SPIb1), SA(..,SPIb2,..), Ni2,... SA(..,SPIb3,..), Nr2,.. Rekey要求 Rekey要求 同時Rekey検出同時Rekey検出 Nonce比較 Nonce比較 Nr1が最小のNonceだった場合、SA②をホストBが削除する。 SA① SA② SA② SA① ホストBホストA IKE Protocol Details and Variations(10/36)
  • 105. /132 Rekey:同時Child SAのRekeyその② • 再送により発生するケース。 105 N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,... SA(..,SPIa3,..), Nr1,... N(REKEY_SA,SPIb1), SA(..,SPIb2,..), Ni2,... N(CHILD_SA_NOT_FOUND) Rekey要求 Rekey要求 無視 SA① SA② SA② SA② ホストBホストA ☓ N(REKEY_SA,SPIa1), SA(..,SPIa2,..), Ni1,...SA②Rekey要求(再送) D(SPIb1) D(SPIa1) Rekey完了Rekey完了 削除済みのSPIのため、 CHILD_SA_NOT_FOUND応答。 パケットロスト IKE Protocol Details and Variations(11/36)
  • 106. /132 Rekey:同時IKE SAのRekey • 両方が同時にRekeyをした場合はChild SAと同じ動作。 – 残ったIKE SAが全てのChild SAを継承する。 • 片方がRekey実行前に片方のRekeyが終了した場合 106 SA(..,SPIa1,..),Ni1,.. SA(..,SPIb2,..),Nr2,.. SA(..,SPIb1,..),Ni2,.. Rekey要求 Rekey要求 SA① SA① SA② ホストBホストA N(TEMPORARY_FAILURE) D() D() 古いIKE SA削除 Rekey要求は再送しない古いIKE SA削除 IKE Protocol Details and Variations(12/36)
  • 107. /132 Reauthentication • Reauthenticationでは再認証によるSA作成と古いSAの削除をする。 – Rekeyは再認証はしない。 • Authentication lifetimeはKey lifetimeより長くないと意味がない。 • IKEv2ではresponderがReauthを開始することができない。 – EAP, Configurationがoriginal IKE SAと同一方向から実施される必要がある。 • REAUTH拡張[RFC 4478]を追加することで両方向からReauthを開 始できる。 107IKE Protocol Details and Variations(13/36)
  • 108. /132 Traffic Selector:Negotiation • Traffic Selector payload(TS)でpeerにSPD情報を送信する。 – SDPとIKEのAPIはPF_KEY API::SADB_ACQUIRE message等が使用される。 • Child SA作成時、2 TS(TSi、TSr)が設定される。 – TSはIP address range、port range、IP protocol IDで構成される。 • TSi:InitiatorのChild SAから受信するトラフィックのsrc addressとChild SAに送信するdst address • TSr:ResponderのChild SAから受信するトラフィックのsrc addressとChild SAに送信するdst address • Responderはinitiatorから受信したTSとポリシーをもとにTSを決定する。 – TS全てを許可しない場合、TS_UNACCEPTABLEを通知する。 – TSの全てがポリシーと一致した場合、TSi/TSrをそのまま応答する。 – 複数のTSがあり、一部だけ許容する場合、そのTSを応答する。 • 追加のTSを許容できる場合、ADDITIONAL_TS_POSSIBLEを通知する。 – 複数のTSi/TSrを許容しない場合、SINGLE_PAIR_REQUIREDを通知し、requestを拒否 する。 108IKE Protocol Details and Variations(14/36)
  • 109. /132 Nonce • 暗号化機能で使用する乱数。 • 下記のメッセージに含まれる。 – IKE_SA_INIT Request/Response – CREATE_CHILD_SA Request/Response • 新たなChild SA用のKey算出、Diffie-Hellman Keyから安 全な乱数の生成のため。 • 128bit以上であること。 • さらに、ネゴシエーションされたPRFの半分以上であること。 – 初回のNonceはPRFネゴシエーション前なので、サポート するPRFに対して十分な長さのものを設定する。 109IKE Protocol Details and Variations(15/36)
  • 110. /132 Keying Materialの生成(PRF) • IKE SAでは4つのCryptographic algorithmがネゴシエートされる。 – Encryption algorithm – Integrity Protection algorithm – Diffie-Hellman group – Pseudorandom Function(PRF) • PRFはすべてのCryptographic algorithmのkey生成に使用する。 • prf+(PRF stream)は下記のように定義される。 prf+ (K, S)= T1 | T2 | T3 | ... T1 = prf (K, S | 0x01) T2 = prf (K, T1 | S | 0x02)、 T3= prf (K, T2| S | 0x03) 、、、最大T255まで。 “prf+”をpseudorandom function(擬似乱数関数)と定義する。 “|”を連結と定義する。 境界に関係なく、必要なbitだけ繰り返す。 110 AES(256bit)、HMAC(160bit)、PRF(160bit)の場合、 AES=T1, T2、HMAC=T2、T3 T1、T2、T3=160bitのため。 IKE Protocol Details and Variations(16/36)
  • 111. /132 IKE SA Keying Materialの生成 • 下記のように双方向のkeyが生成される。 SKEYSEED = prf(Ni | Nr, g^ir) ※g^irはDiffie-Hellman共有鍵 {SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr} = prf + (SKEYSEED, Ni | Nr | SPIi | SPI r) Key Payload SK_d Child SAのkey生成に使用するkey。 SK_ai/SK_ar Encrypted payloadの完全性保護用のkey。 SK_ei/SK_er Encrypted payloadの暗号化用のkey。 SK_pi/SK_pr Authentication payload生成用のkey。 111IKE Protocol Details and Variations(17/36)
  • 112. /132 IKE SAの認証①:署名 • MACで認証する。 – Initiator • IKE_SA_INIT Request(Message1)を使って署名を作成する。 – Responder • IKE_SA_INIT Response(Message2)を使って署名を作成する。 • IKE_SA_INITが複数回ある場合最新のものを使用する。 • 署名の作成方法。相手のNonceを使うのがセキュリティ的に重要。 • IKE_AUTHのAuth payloadでIDi/IDrの証明書を送信してもよい。 112 Initiatorの署名 InitiatorSignedOctets = RealMessage1 | NonceRData | MACedIDForI GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR RealIKEHDR = SPIi | SPIr | . . . | Length RealMessage1 = RealIKEHDR | RestOfMessage1 NonceRPayload = PayloadHeader | NonceRData InitiatorIDPayload = PayloadHeader | RestOfInitIDPayload RestOfInitIDPayload = IDType | RESERVED | InitIDData MACedIDForI = prf(SK_pi, RestOfInitIDPayload) Responderの署名 ResponderSignedOctets = RealMessage2 | NonceIData | MACedIDForR GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR RealIKEHDR = SPIi | SPIr | . . . | Length RealMessage2 = RealIKEHDR | RestOfMessage2 NonceIPayload = PayloadHeader | NonceIData ResponderIDPayload = PayloadHeader | RestOfRespIDPayload RestOfRespIDPayload = IDType | RESERVED | RespIDData MACedIDForR = prf(SK_pr, RestOfRespIDPayload) IKE Protocol Details and Variations(18/36)
  • 113. /132 IKE SAの認証②:Shared secret key • Pre-shared keyで認証する。 • 辞書攻撃に強いように乱数のような値を用いることが望ましい。 – Initiator – Responder • AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2") • Shared Secret – null終端無しのASCII 17文字。 – prf( prf(Shared Secret, "Key Pad for IKEv2")で保存すること。 – 64文字以上のASCII文字を許容すること。 – Binaryエンコーディングを許容してもよい。 113IKE Protocol Details and Variations(19/36)
  • 114. /132 IKE SAの認証③:EAP • Initiator – 最初のIKE_AUTHをAUTH無しで送信することでEAPの使用要求をする。 • Responder – IKE_AUTH ExchangeでInitiatorを認証する。 • AAA認証に使用されるIDとID payloadのIDは異なってもよい。 • Message 7、Message 8に設定するAUTHには2つのタイプがある。 – Shared key(EAPではMaster Session Key(MSK)という)と同じ方法で生成。 – SK_pi、SK_prから生成。非推奨。 HDR, SAi1, KEi, Ni HDR, SK{ IDi, SAi2, TSi , TSr } HDR, SK { EAP} HDR, SAr1, KEr, Nr HDR, SK{ IDr, AUTH, EAP } HDR, SK { EAP(Success)} HDR, SK { AUTH} HDR, SK { AUTH, SAr2, TSi, TSr} 114IKE Protocol Details and Variations(20/36)
  • 115. /132 Child SA Keying Materialの生成 • Child SAのKeying Material生成式。必要な鍵長分prf+を繰り返す。 詳細はIKE SA Keying Material参照。 KEYMAT = prf+(SK_d, Ni | Nr) • CREATE_CHILD SA exchangeでDiffie-Hellman exchange有りの場合 KEYMAT = prf+(SK_d, g^ir(new) | Ni | Nr) ※g^ir(new)は上位bitを0で埋めた新しいDiffie-Hellman共有秘密鍵。 • ESPで暗号化鍵、完全性保証鍵が必要な場合はその順番でkeyを 算出すること。 115IKE Protocol Details and Variations(21/36)
  • 116. /132 IKE SA Keying Materialの生成:Rekeyの場合 • CREATE_CHILD_SA exchangeはIKE SAのRekeyに使用される。 • 新しいSPIはSA PayloadのSPI fieldに含まれる。 • 新しいSKEYSEEDは下記のように計算される。 SKEYSEED = prf+(SK_d(old), g^ir(new) | Ni | Nr) ※g^ir(new)は上位bitを0で埋めた新しいDiffie-Hellman共有秘密鍵。 • その他のKeying Materialは最初のIKE SAと同じ方法で計算される。 • 必ず新しいDiffie-Hellman共有秘密鍵が使用される。NONEは許 容しないこと。 116IKE Protocol Details and Variations(22/36)
  • 117. /132 Requesting an Internal Address • CP Payloadでアドレスを割り当ててよい。 • 一般的にはIKE_AUTH時に割り当てられる。 • CP(CFG_REQUEST)は一つ以上のINTERNAL_ADDRESS attributeを 含むこと。 • CP(CFG_REPLY)はCP(CFG_REQUEST)に依らず、何を返してもよい。 ただし、 CP(CFG_REQUEST)が無い場合は送信しないこと。 • CP必須の設定でInitiatorがCP(CFG_REQUEST) を送信しなかった 場合、ResponderはFAILED_CP_REQUIREDを通知し、Child SAを作 成しない。IKE SAは作成される。 – Initiatorは後ほどCP Payloadでリトライする。 HDR, SK {IDi, [CERT], [CERTREQ], [IDr], AUHT, CP(CFG_REQUEST), SAi2, TSi, TSr} HDR, SK {IDr, [CERT], AUHT, CP(CFG_REPLY), SAr2, TSi, TSr} 117IKE Protocol Details and Variations(23/36)
  • 118. /132 Version取得 • CP PayloadでSWバージョンを問い合わせできる。 – セキュリティのため、バージョン情報は返さず、空文字で応答してよい。 • INFORMATIONAL exchangeで実施される例。 HDR, SK{CP(CFG_REQUEST)} CP(CFG_REQUEST)=APPLICATION_VERSION("") CP(CFG_REPLY) APPLICATION_VERSION("foobar v1.3beta, (c) Foo Bar Inc.") 118IKE Protocol Details and Variations(24/36)
  • 119. /132 Error handling:概要 • 一般的には – 不正形式、ポリシー不一致のrequest受信時 IKE SAがあればNotify payloadでresponseする。 – 受信メッセージの解析エラーには応答を返さない。 そのようなIKE SAは削除(Delete payload)することが望ましい。 – INFORMATIONAL exchange(Delete payload)無しでIKE SA削除するケース • 認証の失敗(AUTHENTICATION_FAILED、EAP failure) EAP failureではAUTHENTICATION_FAILEDは送信されない。 • 不正なメッセージ形式(INVALID_SUNTAX) ただし、他のエラー条件の組み合わせにより必要になる場合もある。 119IKE Protocol Details and Variations(25/36)
  • 120. /132 Error handling:IKE_SA_INIT • 暗号で保護されたIKE SAが確立する前のエラーには注意が必要。 – 問題解析の容易性と偽装メッセージによるDoS攻撃の容易性のトレードオフ。 • リトライで成功する可能性があるエラーがある。 – COOKIE、INVALID_KE_PAYLOAD、 INVALID_MAJOR_VERSION等。 – エラー受信側はしばらく待った後にリトライしてよい。 – エラー後の動作が規定されていない場合、即座に後続動作しないこと。 120IKE Protocol Details and Variations(26/36)
  • 121. /132 Error handling:IKE_AUTH • IKE_AUTH exchangeの認証失敗時はAUTHENTICATION_FAILEDが通知される。 – 認証失敗には無効なshared secret、invalid ID、証明書失効等がある。 – Initiator • INFORMATIONAL exchange(他payload無し)で通知される場合がある。 ※エラー時にexchangeを開始してはいけないルールの例外。 • RequestがUnsupported critical payloadを含んでいる場合 – UNSUPPORTED_CRITICAL_PAYLOADを通知。メッセージは無視。 • Requestのフォーマットが壊れている場合 – INVALID_SYNTAXを通知。メッセージは無視。 • Child SA確立に失敗した場合 – FAILED_CP_REQUIRED、NO_PROPOSAL_CHOSEN等がエラー原因の候補。 – IKE SAは削除されない。Initiatorのポリシーによっては後で削除してもよい。 – IKE_AUTHにChild SA失敗エラー()をpiggybackしてよい。 121IKE Protocol Details and Variations(27/36)
  • 122. /132 Error handling:IKE SA確立後 • エラーが発生したrequestにはresponseでエラー通知すること。 – INFORMATIONAL exchangeでエラー通知するとループする可能性がある。 • INVALID_SYNTAXの場合(フォーマット異常) – 両方のpeerにとって致命的な問題であることを示す。 – IKE SAをDelete payload無しに削除する。 122IKE Protocol Details and Variations(28/36)
  • 123. /132 IP Compression • Child SAの確立時にネゴシエーションできる。 – 仮想的にCompression associationが確立される。 • 各パケットに追加のヘッダー、compression parameter index(CPI)を付与する。 • 明示的に管理(削除、更新)されない。ESP/AHのSAに紐づく。 • ネゴシエーションは – Initiator • Child SA確立を要求するSA payloadを含むメッセージにIPCOMP_SUPPORTEDで compression algorithmを通知する。 – Responder • Child SA確立を要求するSA payloadを含むメッセージにIPCOMP_SUPPORTEDで compression algorithmを1つ選び、通知する。 123 IPCOMP_SUPPORTED のpayload 2 octets:IP Comp CPI 1 octets:Transform ID Option:Attribute Name Number Define IPCOMP_OUI 1 IPCOMP_DEFLATE 2 RFC2394 IPCOMP_LZS 3 RFC2395 IPCOMP_LZJH 4 RFC3051 IKE Protocol Details and Variations(29/36)
  • 124. /132 NAT Traversal:全般 • NATがある場合の問題 – Transport mode:NATのIPアドレス変換によりchecksum NGになる。 – Tunnel mode :AH/ESPのNATのIPアドレス変換にロジックが必要になる。 • IKEv2ではIKE/ESPへのUDPカプセル化で上記を解決する。 – UDPカプセル化した場合IKE/ESPの識別 • IKE:IKE headerの先頭4 octetsのパディング0 • ESP:ESP headerの先頭4 octetsはSPIなので非0 – Port 4500を使用する。(NATの有無に関わらず本ポートを使用してよい) – Port 500はUDPカプセル化に使用しないこと。 – IKE_SA_INITでNAT_DETECTION_*_IPがexchangeされた場合、両peerがUDPカプセル化/非カプ セル化のESPパケットを処理できること。 • NATを検出した場合、両peerはUDPカプセル化すること。 • NAT traversalをサポートする場合 – IKE_SA_INITでNAT_DETECTION_SOURCE_IP、NAT_DETECTION_DESTINATION_IPを通知する。 PayloadはSPI、IP address、portのSHA-1 hash。 – NAT_DETECTION_*_IPを受信した場合、 Payloadと実際のhashを比較する。不一致の場合、NATがあると判断し、UDP Port 4500でカ プセル化する。 124IKE Protocol Details and Variations(30/36)
  • 125. /132 NAT Traversal:Transport mode① • Initiatorは – TSiはIKE SAのsrc addressのみであること。 – TSrはIKE SAのdst addressのみであること。 – 最初のTSi/TSrにrequestパケットのport、IP protocol番号を設定すること。 – 複数のTSi/TSrがあってもよい。 – ResponderからUSE_TRANSPORT_MODEを受信した場合 • src/dst addressとしてTSi/TSrを保存する。 • ResponderがNAT配下の場合、remote addressでTSrを書き換える。 • InitiatorがNAT配下の場合、local addressでTSiを書き換える。 • SPDを更新する。 • ResponderはInitiatorからUSE_TRANSPORT_MODE を受信した場合 • src/dst addressとしてTSi/TSrを保存する。 • ResponderがNAT配下の場合、local addressでTSrを書き換える。 • InitiatorがNAT配下の場合、remote addressでTSiを書き換える。 • SPDを更新する。 125IKE Protocol Details and Variations(31/36)
  • 126. /132 NAT Traversal:Transport mode② • 2 NATがある場合の例。他の場合もカバーできる。 – NAT A:IP1とIPN1をマッピングするdynamic NAT。 – NAT B:IP2とIPN2をマッピングするstatic NAT。 • [Client]IKE SA、Child SAの開始 – src/TSi:IP1、dst/TSr :IPN2、USE_TRANSPORT_MODE • [NAT A]src変換 (IP1 → IPN1) • [NAT B]dst変換(IPN2 → IP2) • [Server]Transport mode、NAT検証。TSを置き換え、応答。 – Transport modeかつNATを検出した場合、src/dstでTSを置き換える。 • [Client]Serverと同様の動作を実施。 126IKE Protocol Details and Variations(32/36) Client NAT A NAT B ServerIP1 IP2IPN1 IPN2 src dst TSi TSr 設定した IP1 IPN2 IP1 IPN2 届いた IPN1 IP2 IP1 IPN2 src dst TSi TSr TSを置き換え後 IPN1 IP2 IPN1 IP2
  • 127. /132 Explicit Congestion Notification(ECN): • IKEv1ではECNのネゴシエーションが複雑だった。 • IKEv2では簡略化。 – 全てのtunnel mode Child SAのOuter IP headerにECNが使用可能。 – カプセル化/非カプセル化時に ECN full-functionality option(RFC3168 )をサポート。 ECNの輻輳通知の破棄を防ぐため RFC4301の tunnelの処理を実装すること。 127IKE Protocol Details and Variations(33/36)
  • 128. /132 Exchange Collisions:概要 • IKEv2 exchangeはどちらのpeerも開始できるため、競合する可能 性がある。 • 以下、Windows size 1の場合を規定する。 • Rekey等の処理中に完了できないrequestを受信した場合、 TEMPORARY_FAILUREを通知する。 • TEMPORARY_FAILUREを受信した側 – 即座にリトライしないこと。数分程度待つことが望ましい。 – 数分後に同じIKE SAでTEMPORARY_FAILUREを受信し続けた場合、 状態が同期していないということでIKE SAを削除することが望ましい。 • 存在しないChild SAへのrekey requestを受信した場合 – そのChild SAのSPIを設定したCHILD_SA_NOT_FOUNDを通知する。 – 受信側はそのChild SAを削除する。 128IKE Protocol Details and Variations(34/36)
  • 129. /132 Exchange Collisions:Rekeying or Closing Child SA • 受信したrekey requestの対象が – 閉じようとしているChild SAの場合 • TEMPORARY_FAILUREを通知する。 – Rekey中のChild SAの場合 • 正常応答し、スライド「Rekey:」の動作で重複したSAを削除する。 – 存在しないChild SAの場合 • CHILD_SA_NOT_FOUNDを通知する。 – Child SAをcreating/rekeying/closingしているIKE SAの場合 • TEMPORARY_FAILUREを通知する。 • 受信したclose requestの対象が – 閉じようとしているChild SAの場合 • Delete payload無しで応答。スライド「Deleting SA(INFORMATIONAL Exchange)」参照。 129IKE Protocol Details and Variations(35/36)
  • 130. /132 Exchange Collisions:Rekeying or Closing IKE SA • 受信したrekey requestの対象が – 閉じようとしているIKE SAの場合 • TEMPORARY_FAILUREを通知する。 – Rekey中のIKE SAの場合 • 正常応答し、スライド「Rekey:」の動作で重複したSAを削除する。 – Child SAをcreating/rekeying/closingしているIKE SAの場合 • TEMPORARY_FAILUREを通知する。 • 受信したclose requestの対象が – Rekey中のIKE SAの場合 • 正常応答し、自身のrekey requestは忘れることが望ましい。 – Close中のIKE SAの場合 • 正常応答し、自身のclose requestは忘れることが望ましい。 • Rekey中のIKE SAで – Child SAのcreate or rekey requestを受信した場合 • TEMPORARY_FAILUREを通知する。 – Child SAのdeleteを受信した場合 • 正常応答し、Child SAを削除する。 130IKE Protocol Details and Variations(36/36)
  • 131. /132 Summary of Changes from IKEv1 131
  • 132. /132 RFC 4306(旧IKEv2のRFC)との差分 • 実装に大きな影響を与える変更なし。 • Initial exchangeの簡略化(最小8 msg → 最小4 msg)。さらにChild SAも同時 に確立可能。 • CREATE_CHILD_SAの簡略化(3 msg → 2 msg)。 • バージョン番号は変更なし。 – major 2、minor 0 • 要求事項の明確化(SHOULD、MUST)。 • AH/ESPの説明の削除。 • INTERNAL_ADDRESS_EXPIRY、INTERNAL_IP6_NBNS attributeの削除。 本仕様に準拠する場合はこれらのattributeが指定されても無視すること。 • “Payloadを右から読む”の記述削除。実装上は読む方向に依存しないこと。 • IKE SAのrekeyにKEi payloadが必須になった。 • Child SAのrekeyではTraffic Selectorとalgorithmが異ならないこと。 • Exchangeの競合処理の明確化。 132