2. もくじ
• IPsecの概要
• Introduction(Section 1)
– 用語、Exchangeの概要
• Exchanges and Payloads(Appendix C)
• IKE Protocol Details and Variations(Section 2)
– 細かいところ
• RFC 4306(旧IKEv2のRFC)との差分
• Header and Payload Formats(Section 3)
• まとめやすさ重視でRFCと順番を変えている。
3. IPsecの概要(1/7)
• 関連する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など 大量にある
16. Introduction(7/11)
• 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の作成完了。
17. Introduction(8/11)
• 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に設定する。
18. Introduction(9/11)
• 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で識別する。
①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. Exchanges and Payloads(3/10)
• 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
24. Exchanges and Payloads(4/10)
• 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+]
25. Exchanges and Payloads(5/10)
• 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
26. Exchanges and Payloads(6/10)
• 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+]
27. Exchanges and Payloads(7/10)
• 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
28. Exchanges and Payloads(8/10)
• 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の要求
29. Exchanges and Payloads(9/10)
• CREATE_CHILD_SA Exchange for Rekeying the IKE SA(Request/Response)
SA, Ni, KEi
[V+][N+]
Response
SA, Nr, KEr
[V+][N+]
Request
42. Header and Payload Formats(1/35)
• IKEメッセージはUDP Port 500/4500を使用
– UDP 500 Port
• UDPヘッダの直後がIKEメッセージ
– UDP 4500 Port
• UDPヘッダの後、4オクテットの0の後にIKEメッセージ
※4オクテットの0はIKEメッセージではない。length、
checksumの計算には含まれない。
43. Header and Payload Formats(2/35)
• IKEv2のPayloadとPayload Type
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
44. Header and Payload Formats(3/35)
• 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45. Header and Payload Formats(4/35)
• 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 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のオクテット長。
46. Header and Payload Formats(5/35)
• 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
54. Header and Payload Formats(13/35)
• Security Association Payload:
Transform Substructureフィールド(1/3)
Field Length 説明
0 (last) or 3(more) 1 octet 最後のProposalであるかを示す。
RESERVED 1 octet 0を設定し、無視すること。
Transform Length 2 octets Attributeを含むTransform Substructureのオクテット長。
Transform Type 1 octet プロトコルの種別。オプション。
Transform ID 1 octet Transform Typeの識別子。
Transform Attributes 1 octet 8:IKE。4:ESP/AH。Initial IKE SA Exchangeでは0。
説明 Trans. Type プロトコル
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
55. Header and Payload Formats(14/35)
• Security Association Payload:
Transform Substructureフィールド(1/3)
Transform Type 1(Encryption Algorithm)
Name Number Defined In
---------------------------------------------------
ENCR_DES_IV64 1 (UNSPECIFIED)
ENCR_DES 2 (RFC2405), [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)
56. Header and Payload Formats(15/35)
• Security Association Payload:
Transform Substructureフィールド(1/3)
Transform Type 2(Pseudorandom function)
Transform Type 3(Integrity Algorithm)
Name Number Defined In
------------------------------------------------------
PRF_HMAC_MD5 1 (RFC2104), [MD5]
PRF_HMAC_SHA1 2 (RFC2104), [SHA]
PRF_HMAC_TIGER 3 (UNSPECIFIED)
Name Number Defined In
----------------------------------------
NONE 0
AUTH_HMAC_MD5_96 1 (RFC2403)
AUTH_HMAC_SHA1_96 2 (RFC2404)
AUTH_DES_MAC 3 (UNSPECIFIED)
AUTH_KPDK_MD5 4 (UNSPECIFIED)
AUTH_AES_XCBC_96 5 (RFC3566)
57. Header and Payload Formats(16/35)
• Security Association Payload:
Transform Substructureフィールド(1/3)
Transform Type 4(Diffie-Hellman group)
Transform Type 5(Extended Sequence Numbers)
Name Number Defined In
----------------------------------------
NONE 0
768-bit MODP 1 Appendix B
1024-bit MODP 2 Appendix B
1536-bit MODP 5 [ADDGROUP]
2048-bit MODP 14 [ADDGROUP]
3072-bit MODP 15 [ADDGROUP]
4096-bit MODP 16 [ADDGROUP]
6144-bit MODP 17 [ADDGROUP]
8192-bit MODP 18 [ADDGROUP]
Name Number
--------------------------------------------
No Extended Sequence Numbers 0
Extended Sequence Numbers 1
59. Header and Payload Formats(18/35)
• 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
61. Header and Payload Formats(20/35)
• 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:秘密鍵