참고 영상 |
참고 그림 |
[PNG image (131.6 KB)] |
[PNG image (415.5 KB)] |
분류 | 내용 |
장점 | 저비용 구축 및 통신비 절감 |
Network을 관리하는데 소요되는 운용비용 절감 | |
기업 입장에서 Netowork을 선택하고 교체하는데 필요한 선택기회 증가 (근무자의 위치가 이동하여도 유연하게 대응이 가능) | |
정보통신 관련 전문기술 활용 가능 | |
단점 | 공개된 망을 이용함에 따른 보안성 우려 |
Public Network(공중망, 인터넷)의 여러 외부요인에 의한 불안정성 | |
장비간 호환성 | |
관리의 편의성면에서는 떨어짐 | |
QoS 보장 (Internet은 기본적으로 통제가 되지 않는 신뢰성이 약한 Network들의 모임이기 때문에 안전 및 품질을 보장하기 어렵다는 점) | |
표준화 (단일화된 표준의 부재) |
기술 | 설명 |
터널링(Tunneling) | 양단간 가상의 통신경로를 설정하는 기술로써 Tunnel의 외부 환경에서는 내부에 있는 Protocol을 파악하기 어렵다는 특징이 있습니다. |
인증(Authentication) | 외부에서 통신을 변조하지 못하도록 양단간을 확고하게 신뢰할 수 있도록 하여 외부로부터 변조된 내용이 삽입, 누락등을 유도하더라도 이를 판별할 수 있습니다. |
암호화(Encryption) | 각 Tunnel을 안전하게 보호하기 위해서 암호화 기법을 사용하게 되며 이를 통해서 외부 환경에서는 암호화된 내용을 해독할 수 없습니다. |
접근제어(AccessControl) | VPN내부 통신자원을 제어하여 불필요한 접근등을 차단하는 기능을 제공합니다. |
종류 | 암호화를 수행하는 Layer | 주요 용도 | 비고 | |
IPSec(https://en.wikipedia.org/wiki/IPsec) VPN | (Generic) IPSec VPN | Layer 3 이상 | 본사와 지사간 연결 | 보통 대규모 VPN에 많이 사용되며 가장 기본적인 VPN이라고 할 수 있습니다. |
GRE(Generic Routing Encapsulation)(https://en.wikipedia.org/wiki/Generic_Routing_Encapsulation) IPSec VPN | Layer 3 이상 | 본사와 지사간 연결 | GRE(Generic Routing Encapsulation)(https://en.wikipedia.org/wiki/Generic_Routing_Encapsulation)를 이용하여 Routing을 해결하는 IPSec VPN | |
Dynamic Multipoint VPN (DMVPN)(https://en.wikipedia.org/wiki/Dynamic_Multipoint_Virtual_Private_Network) | Layer 3 이상 | 본사와 지사간 연결 | 대규모 VPN | |
IPSec Virtual Tunnel Interface (IPSec VTI) | Layer 3 이상 | 본사와 지사간 연결 | 설정이 비교적 간편한 VPN | |
Easy VPN | Layer 3 이상 | 본사와 PC간 연결 | 외부 근무자에게 내부망으로의 접속을 허용하기 위한 VPN | |
Flex VPN | Layer 3 이상 | 본사와 지사간 연결 또는 본사와 PC간 연결 | IKEv2 기반 통합 VPN | |
Group Encrypted Transport VPN (Get VPN) | Layer 4 이상 | 본사와 지사간 연결 | 대규모 VPN, Multicast, QoS지원 | |
SSL(https://en.wikipedia.org/wiki/Transport_Layer_Security) VPN | Layer 5 이상 | 서버와 PC 연결 | 전자상거래등의 용도로 많이 사용하며 다양한 정책들을 수립하기 좋습니다. | |
PPTP(https://en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol) VPN | Layer 2 이상 | 본사와 PC 연결 | 외부근무자에게 내부망으로의 접속을 허용하기 위해서 많이 사용합니다. | |
L2TP(https://en.wikipedia.org/wiki/Layer_2_Tunneling_Protocol) VPN | Layer 2 이상 | 본사와 PC 연결 | 외부근무자에게 내부망으로의 접속을 허용하기 위해서 많이 사용하지만 요즘에는 비교적 많이 쓰이지는 않습니다. | |
MPLS(https://en.wikipedia.org/wiki/Multiprotocol_Label_Switching) VPN | 암호화 하지 않음 | 본사와 지사간 연결 | 보통은 ISP측에서 제공하므로 사용자 입장에서는 별도의 장비구입이 필요없는 경우가 대부분이며, IPSec VPN과 함께 사용합니다. |
MAC header | IP header | UDP header | ISAKMP packet |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Initiator Cookie (8 octets) | |||||||||||||||||||||||||||||||
Responder Cookie (8 octets) | |||||||||||||||||||||||||||||||
Next Payload (1 octet) | Major version (4 bits) | Minor version (4 bits) | Exchange Type (1 octet) | Flags (1 octet) | |||||||||||||||||||||||||||
Message ID (4 octets) | |||||||||||||||||||||||||||||||
Length (4 octets) |
값 | 의미 | |
0 | NONE (No Next Payload) | |
1 | Security Association (SA, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
2 | Proposal (P, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
3 | Transform (T, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
4 | Key Exchange (KE, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
5 | Identification (ID: IDi/IDr, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
6 | Certification (CERT, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
7 | Cerificate Request (CR, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
8 | Hash (HASH) | (AUTH, RFC2408(https://tools.ietf.org/html/rfc2408)) |
9 | Signature (SIG, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
10 | Nonce (NONCE, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
11 | Notification (N, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
12 | Delete (D, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
13 | Vendor (VID, RFC2408(https://tools.ietf.org/html/rfc2408)) | |
14 | Attributes Payload (ISAKMP Mode Config, aka configuration payload, https://tools.ietf.org/tools/rfcmarkup/rfcmarkup.cgi?draft=draft-ietf-ipsec-isakmp-mode-cfg-05.txt) | |
15 | SA KEK Payload (SAK, RFC3547(https://tools.ietf.org/html/rfc3547), RFC6407(https://tools.ietf.org/html/rfc6407)) | |
16 | SA TEK Payload (SAT, RFC3547(https://tools.ietf.org/html/rfc3547), RFC6407(https://tools.ietf.org/html/rfc6407)) | |
17 | Key Download (KD, RFC3547(https://tools.ietf.org/html/rfc3547)) | |
18 | Sequence Number (SEQ, RFC3547(https://tools.ietf.org/html/rfc3547)) | |
19 | Proof of Possession (POP, RFC3547(https://tools.ietf.org/html/rfc3547)) | |
20 | NAT Discovery (NAT-D, RFC3947(https://tools.ietf.org/html/rfc3947)) | |
21 | NAT Original Address (NAT-OA, RFC3947(https://tools.ietf.org/html/rfc3947)) | |
22~32 | RESERVED | |
33 | Security Association (SA, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
34 | Key Exchange (KE, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
35 | Identification - Initiator (IDi, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
36 | Identification - Responder (IDr, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
37 | Certificate (CERT, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
38 | Certificate Request (CERTREQ, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
39 | Authentication (AUTH, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
40 | Nonce (Ni/Nr, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
41 | Notify (N, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
42 | Delete (D, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
43 | Vendor ID (V, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
44 | Traffic Selector - Initiator (TSi, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
45 | Traffic Selector - Responder (TSr, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
46 | Encrypted and Authenticated (SK, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
47 | Configuration (CP, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
48 | Extensible Authentication (EAP, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
49 | Generic Secure Password Method (GSPM, RFC7296(https://tools.ietf.org/html/rfc7296)) | |
50 | Group Identification (IDg, draft-yeung-g-ikev2) | |
51 | Group Security Association (GSA, draft-yeung-g-ikev2) | |
52 | Key Download (KD, draft-yeung-g-ikev2) | |
53 | Encrypted and Authenticated Fragment (SKF, RFC7383(https://tools.ietf.org/html/rfc7383)) | |
54 | Puzzle Solution (PS, RFC8019(https://tools.ietf.org/html/rfc8019)) | |
55~127 | RESERVED | |
128~255 | Private Use |
IKEv1 | |
값 | 의미 |
0 | None (RFC2408(https://tools.ietf.org/html/rfc2408)) |
1 | Base (RFC2408(https://tools.ietf.org/html/rfc2408)) |
2 | Identify Protection (RFC2408(https://tools.ietf.org/html/rfc2408)) |
3 | Authentication Only (RFC2408(https://tools.ietf.org/html/rfc2408)) |
4 | Aggressive (RFC2408(https://tools.ietf.org/html/rfc2408)) |
5 | Informational (RFC2408(https://tools.ietf.org/html/rfc2408)) |
6~31 | ISAKMP Future Use |
32 | Quick Mode (RFC2409(https://tools.ietf.org/html/rfc2409)) |
33 | New Group Mode (RFC2409(https://tools.ietf.org/html/rfc2409)) |
34 | IKE_SA_INIT (RFC7296(https://tools.ietf.org/html/rfc7296)) |
35 | IKE_AUTH (RFC7296(https://tools.ietf.org/html/rfc7296)) |
36 | CREATE_CHILD_SA (RFC7296(https://tools.ietf.org/html/rfc7296)) |
37 | INFORMATIONAL (RFC7296(https://tools.ietf.org/html/rfc7296)) |
38 | IKE_SESSION_RESUME (RFC7296(https://tools.ietf.org/html/rfc7296)) |
39 | GSA_AUTH (draft-yeung-g-ikev2) |
40 | GSA_REGISTRATION (draft-yeung-g-ikev2) |
41 | GSA_REKEY (draft-yeung-g-ikev2) |
42~239 | DOI(Domain of Interpretation) Specific Use (RESERVED TO IANA) |
240~255 | Reserved for private use |
Bit(0 ~ 7) | 의미 |
0 | E(ncryption Bit) |
1 | C(ommit Bit) |
2 | A(uthentication Only Bit) |
3 ~ 7 | RESERVED(항상 0으로 설정되어 있어야 함) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | RESERVED (1 octet) | Payload Length | |||||||||||||||||||||||||||||
(Payload) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
AF (1 bit) | Attribute Type (15 bits) | AF=0 ? Attibute Length (2 octets) AF=1 ? Attribute Value (2 octets) | |||||||||||||||||||||||||||||
AF=0 ? Attibute Value (Variable size: Attibute Length) AF=1 ? Not Transmitted |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | RESERVED (1 octet) | Payload Length | |||||||||||||||||||||||||||||
Domain of Interpretation (DOI) (4octets) | |||||||||||||||||||||||||||||||
(Situation) (Variable length) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
IKE SA Initiator's SPI (8 octets) | |||||||||||||||||||||||||||||||
IKE SA Responder's SPI (8 octets) | |||||||||||||||||||||||||||||||
Next Payload (1 octet) | Major version (4 bits) | Minor version (4 bits) | Exchange Type (1 octet) | Flags (1 octet) | |||||||||||||||||||||||||||
Message ID (4 octets) | |||||||||||||||||||||||||||||||
Length (4 octets) |
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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IKEv1 | |
값 | 의미 |
34 | IKE_SA_INIT (RFC7296(https://tools.ietf.org/html/rfc7296)) |
35 | IKE_AUTH (RFC7296(https://tools.ietf.org/html/rfc7296)) |
36 | CREATE_CHILD_SA (RFC7296(https://tools.ietf.org/html/rfc7296)) |
37 | INFORMATIONAL (RFC7296(https://tools.ietf.org/html/rfc7296)) |
Bit(0 ~ 7) | 의미 |
0 | X (0 cleared and ignored) |
1 | X (0 cleared and ignored) |
2 | X (0 cleared and ignored) |
3 | I (Initiator) |
4 | V (Version) |
5 | R (Response) |
6 | X (0 cleared and ignored) |
7 | X (0 cleared and ignored) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
(Payload) |
표기법(Notation) | 값 | 의미 |
- | 0 | No Next Payload |
SA | 33 | Security Association |
KE | 34 | Key Exchange |
IDi | 35 | Identification - Initiator |
IDr | 36 | Identification - Responder |
CERT | 37 | Certificate |
CERTREQ | 38 | Certificate Request |
AUTH | 39 | Authentication |
Ni, Nr | 40 | Nonce |
N | 41 | Notify |
D | 42 | Delete |
V | 43 | Vendor ID |
TSi | 44 | Traffic Selector - Initiator |
TSr | 45 | Traffic Selector - Responder |
SK | 46 | Encrypted and Authenticated |
CP | 47 | Configuration |
EAP | 48 | Extensible Authentication |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
AF (1 bit) | Attribute Type (15 bits) | AF=0 ? Attibute Length (2 octets) AF=1 ? Attribute Value (2 octets) | |||||||||||||||||||||||||||||
AF=0 ? Attibute Value (Variable size: Attibute Length) AF=1 ? Not Transmitted |
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 ) | | | +-- Transform ENCR ( Name = ENCR_AES_CBC ) | | +-- Attribute ( Key Length = 192 ) | | | +-- Transform ENCR ( Name = ENCR_AES_CBC ) | | +-- Attribute ( Key Length = 256 ) | | | +-- Transform INTEG ( Name = AUTH_HMAC_SHA1_96 ) | +-- Transform INTEG ( Name = AUTH_AES_XCBC_96 ) | +-- Transform ESN ( Name = ESNs ) | +-- Transform ESN ( Name = No ESNs ) | +--- 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 ENCR ( Name = AES-GCM with a 8 octet ICV ) | +-- Attribute ( Key Length = 256 ) | +-- Transform ESN ( Name = ESNs ) +-- Transform ESN ( Name = No ESNs )
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Last Substruc (1 octet) | RESERVED (1 octet) | Proposal Length (2 octets) | |||||||||||||||||||||||||||||
Proposal Num (1 octet) | Protocol ID (1 octet) | SPI Size (1 octet) | Num Transforms (1 octet) | ||||||||||||||||||||||||||||
SPI (variable) | |||||||||||||||||||||||||||||||
<Transforms> (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Last Substruc (1 octet) | RESERVED (1 octet) | Transform Length (2 octets) | |||||||||||||||||||||||||||||
Transform Type (1 octet) | RESERVED (1 octet) | Transform ID (2 octets) | |||||||||||||||||||||||||||||
Transform Attributes (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Diffie-Hellman Group Num (2 octets) | RESERVED (2 octets) | ||||||||||||||||||||||||||||||
Key Exchange Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
ID Type (1 octet) | RESERVED (3 octets) | ||||||||||||||||||||||||||||||
Identification Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Cert Encoding (1 octet) | Certificate Data (variable) | ||||||||||||||||||||||||||||||
Certificate Data (...) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Cert Encoding (1 octet) | Certification Authority (variable) | ||||||||||||||||||||||||||||||
Certification Authority (...) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Auth Method (1 octet) | RESERVED (3 octets) | ||||||||||||||||||||||||||||||
Authentication Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Nonce Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Protocol ID (1 octet) | SPI Size (1 octet) | Notify Message Type (2 octets) | |||||||||||||||||||||||||||||
Security Parameter Index (SPI, variable) | |||||||||||||||||||||||||||||||
Notification Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Protocol ID (1 octet) | SPI Size (1 octet) | Num of SPIs (2 octets) | |||||||||||||||||||||||||||||
Security Parameter Index(es) (SPI, variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Vendor ID (VID, variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Number of TSs (1 octet) | RESERVED (3 octets) | ||||||||||||||||||||||||||||||
<Traffic Selectors> (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
Initialization Vector (length is block size for encryption algorithm) | |||||||||||||||||||||||||||||||
Encrypted IKE Payloads (variable) | |||||||||||||||||||||||||||||||
Padding (0-255 octets) | Pad Length (1 octet) | ||||||||||||||||||||||||||||||
Integrity Checksum Data (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
CFG Type (1 octet) | RESERVED (3 octets) | ||||||||||||||||||||||||||||||
Configuration Attributes (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Next Payload (1 octet) | Critical (1 bit) | RESERVED (7 bits) | Payload Length (2 octets) | ||||||||||||||||||||||||||||
EAP Message (variable) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Security Parameters Index (SPI, 4 octets) | |||||||||||||||||||||||||||||||
Sequence Number (4 octets) | |||||||||||||||||||||||||||||||
Payload Data (variable) | |||||||||||||||||||||||||||||||
Padding (0-255 bytes) | Pad Length | Next Header | |||||||||||||||||||||||||||||
Authentication Data (variable) |
0 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Security Parameters Index (SPI) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Data (variable) | ~ ~ | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Padding (0-255 bytes) | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Pad Length | Next Header | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication Data (variable) | ~ ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
=> 입력 key, message, hash function, block size, output(digest) size 를 사용하여 구함. function hmac is input: key: Bytes // Array of bytes message: Bytes // Array of bytes to be hashed hash: Function // The hash function to use (e.g. SHA-1) blockSize: Integer // The block size of the hash function (e.g. 64 bytes for SHA-1) outputSize: Integer // The output size of the hash function (e.g. 20 bytes for SHA-1) // Keys longer than blockSize are shortened by hashing them if (length(key) > blockSize) then key ← hash(key) // key is outputSize bytes long // Keys shorter than blockSize are padded to blockSize by padding with zeros on the right if (length(key) < blockSize) then key ← Pad(key, blockSize) // Pad key with zeros to make it blockSize bytes long o_key_pad ← key xor [0x5c * blockSize] // Outer padded key i_key_pad ← key xor [0x36 * blockSize] // Inner padded key return hash(o_key_pad ∥ hash(i_key_pad ∥ message))
{NewIP-Header:20bytes} + AssociationData({ESP-Header:8bytes} + If-ESN[{ESN-SeqHi:4bytes}]) + {IV:16bytes} + CBC_Encrypt({OriginIP-Header:20bytes}+{IP-Payload:16bytes}+{Pad:10bytes}+{PadLen:1byte}+{NextHeader:1byte}) + {ESP-Tailer:12bytes} ESP-Tailer 에는 ESP-Header 부터 ESP-Tailer 직전까지를 HMAC-SHA1 계산하여 결과를 Auth trunc size 만큼 잘라서 붙입니다.
Requirement Encryption Algorithm (notes) ----------- -------------------- MUST NULL (1) MUST- TripleDES-CBC [RFC2451] SHOULD+ AES-CBC with 128-bit keys [RFC3602] SHOULD AES-CTR [RFC3686] SHOULD NOT DES-CBC [RFC2405] (3) Requirement Authentication Algorithm (notes) ----------- ------------------------ MUST HMAC-SHA1-96 [RFC2404] MUST NULL (1) SHOULD+ AES-XCBC-MAC-96 [RFC3566] MAY HMAC-MD5-96 [RFC2403] (2)
Forwarding Client Traffic sysctl net.ipv4.ip_forward=1 sysctl net.ipv6.conf.all.forwarding=1 Hosts on the Internet iptables -t nat -A POSTROUTING -s 10.0.3.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT iptables -t nat -A POSTROUTING -s 10.0.3.0/24 -o eth0 -j MASQUERADE General NAT problems iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT MTU/MSS issues iptables -t mangle -A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360 iptables -t mangle -A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
Initiator Responder SAD_GETSPI (inbound SA) -----------> {select algorithms and derive keys} SAD_ADD (outbound SA) SAD_GETSPI (inbound SA) {derive keys} <----------- SAD_UPDATE (inbound SA) SAD_UPDATE (inbound SA) SAD_ADD (outbound SA)
Authenticated Encryption with Associated Data (AEAD) 의 약자입니다. 즉, Associated Data 관련 데이터와 인증된 암호화 라는 뜻인데, ... AE는 인증 암호화(암호화 + 인증)을 의미 ... AD를 일반적으로 AAD(Addtional Associated Data)라고도 부릅니다. ... GCM mode는 GF(Galois Field) 상에서 정의된 GHASH 함수를 이용하여 인증을 보장합니다. CCM mode와 비교했을때 데이터 암호화는 CTR mode를 사용하는 것은 같지만 CBC-MAC 대신 GMAC이라고 불리는 연산을 사용합니다. ... CCM은 Decryption 후에 MAC 계산을 하는 번거로움이 있었지만 GCM은 그러지 않아도 된다는 것이지요~ ...
kernel crypto API | IPSEC Layer | +-----------+ | | | (1) | aead | <----------------------------------- esp_output | (seqiv) | ---+ +-----------+ | | (2) +-----------+ | | | <--+ (2) | aead | <----------------------------------- esp_input | (gcm) | ------------+ +-----------+ | | (3) | (5) v v +-----------+ +-----------+ | | | | | skcipher | | ahash | | (ctr) | ---+ | (ghash) | +-----------+ | +-----------+ | +-----------+ | (4) | | <--+ | cipher | | (aes) | +-----------+
kernel crypto API | Caller | +-----------+ (1) | | | <------------------ some_function | ahash | | (hmac) | ---+ +-----------+ | | (2) +-----------+ | | | <--+ | shash | | (sha256) | +-----------+