My Knowledge

ISAKMP 본문

Network Security

ISAKMP

행복한하루 2010. 12. 16. 23:24
이번 글도 이전 글과 마찬가지로 제가 예전에 홈페이지에 적었던 글들을 가져온 것인데, ISAKMP (Internet Security Association and Key Management Protocol) 에 대한 설명입니다.

ISAKMP는 약자에서도 알수 있듯이 보안협상 (Security Association)과 Key Exchange 관리 등 전반적인 것들을 병합하기 위하여 설계된 프로토콜입니다. IPSec을 이용할 때에 통신 하려고 하는 Peer들간에 보안 협상을 하게 되는데, 이때 SA을 서로 교환하고 결정하는 과정 중에 쓰이는 것이 바로 ISAKMP 프로토콜입니다. ISAKMP는 SA를 개설, 변경, 삭제하는 작업을 수행하고 각종 보안 알고리즘을 지원하여 원활한 상위 계층 통신을 지원하며, 보안 알고리즘 변경이 용이하도록 되어 있습니다.

현재 IPSec에서 Key Exchange와 SA개설 시에 이 프로토콜을 이용하는데, 실제 프로토콜은 IKE을 이용하고 Packet 포맷은 ISAKMP의 패킷 포맷을 따르도록 되어 있습니다. 이 내용은 ISAKMP (rfc2408)에 자세하게 나와 있습니다.

ISAKMP placement


ISAKMP는 위와 같은 구조 속에서 동작합니다.

ISAKMP는 그림에서도 알 수 있듯이 UDP port 500을 이용하여 통신을 합니다. 그래서 방화벽이 있을 경우 UDP port 500을 열어 놓아야 ISAKMP의 통신이 가능하게 됩니다. 그리고 구조에서 보면 DOI 가 있는데 DOI 는 Domain of Interpreter의 약자로 통신 할 때 사용되는 값들이 무슨 의미를 가지고 있는지를 정의해 놓은 것입니다. 그리고 Key Exchange는 다음에 자세히 설명되겠지만 Diffie-Hellman과 같은 Key 교환 방법을 정의해 놓은 것이고,  API는 ISAKMP와 Security Protocol과의 인터페이스를 위한 것입니다. 현재 Security Protocol로 쓰이는 것은 IPSec Architecture에 있는 ESP(Encapsulating Security Payload)AH(Authentication Header) 이렇게 두가지가 사용되고 있는데, 이 두 프로토콜은 IP 레벨에서 작동하는 것으로 L3 의 Security을 담당하고 L3 VPN에 사용됩니다. 

ISAKMP Phasesd

위와 같은 구조로 동작하는 ISAKMP는 Phase 1과 Phase 2의 두 단계로 동작합니다. Phase 1에서는 Phase 2에서 Negotiation 하는 과정을 보호하기 위하여 쓰일 SA을 개설하는 과정이고 Phase 2는 실제 Security Protocol들이 사용할 SA을 개설하는 과정입니다. 즉 Phase 1에서 개설된 SA는 Phase 2 Negotiation 할 때 그 데이터 값들을 암호화 하는데 이용되는데, 다른 사용자들이 협상 과정을 볼 수 없게 하는 역할을 수행합니다. 그렇게 해서 Phase 2에서 생긴 SA을 이용하여 실제 데이터 통신을 하게 되는 것입니다. 이렇게 두 단계로 나누어 하는 가장 큰 이유는 이렇게 함으로서 Protocol SA을 개설하는데 있어서 강한 보안성을 부여 할 수 있기 때문입니다. 그리고 실제 동작 절차는 IKEISAKMP의 헤더 포맷을 빌려 작동하기 때문에 IKE에서 볼 수 있습니다.

ISAKMP Payload

여기서는 이제 실제 ISAKMP가 동작할 때 서로 주고 받는 Payload들이 어떤 것 들이 있는지를 설명하도록 하겠습니다. 

- ISAKMP Header


ISAKMP헤더는 ISAKMP가 동작할 때 기본적으로 붙는 Payload입니다. 기본적으로 cookie정보가 들어가는데, cookie정보는 Random 함수를 이용하여 만드는 게 보통입니다.

(ISAKMP negotiation 을 시작한 쪽이 Initiator가 되고 받아주는 쪽이 Responder가 됩니다.)

그리고 Next Payload는 다음에 붙은 Payload가 어떤 것인지를 나타내는데 다음과 같은 것들이 있습니다.

Next Payload Type
   Value
NONE    0
Security Association (SA)
   1
Proposal (P)
   2
Transform (T)
   3
Key Exchange (KE)
   4
Identification (ID)
   5
Certificate (CERT)
   6
Certificate Request (CR)
   7
Hash (HASH)
   8
Signature (SIG)
   9
Nonce (NONCE)
   10
Notification (N)
   11
Delete (D)
   12
Vendor ID (VID)
   13
RESERVED
   14 ~ 127
Private USE
   128 ~ 255

그 다음에 보이는 것이 Major version 과 Minor Version 인데 현재는 1.0을 의미하는 10으로 쓰고 있습니다. 그리고 Exchange type은 이용될 Exchange 방식을 의미하는데 다음과 같은 것들이 있습니다.
 
Exchange Type
   Value
NONE    0
Base
   1
Identity Protection
   2
Authentication Only
   3
Aggressive
   4
Informational
   5
ISAKMP Future Use
   6 ~ 31
DOI Specific Use
   32 ~ 239
Private Use
   240 ~ 255

일반적으로 많이 쓰이는 Exchange Type에는 Identity Protection 과 Aggressive 가 있습니다.

그리고 Flag에는 세가지 flag가 존재하는데, E (Encryption bit) C (Commit bit) A (authentication bit) 이렇게 세 가지 입니다.

E는 Encryption유무를 나타내는 것으로 이 bit가 set 되어 있으면 헤더 뒤의 Payload들이 암호화 되어 있다는 것을 의미합니다. 그리고 C는 SA 가 설립되기 전에 패킷을 받지 못했을 경우 이용되고, 마지막으로 A는 Authentication security service만 이용한다는 의미입니다.
 
Message ID는 Phase 2 협상 과정 동안에 protocol 상태를 나타내주는 unique한 Message identifier로 이용되는데, 이 값은 initiator가 random하게 만들어 사용합니다. 마지막으로 Length는 헤더와 Payload의 총 길이를 의미합니다.  

- SA (Security Association) Payload


Next payload와 reserved 그리고 payload length 필드는 ISAKMP의 generic 필드로 앞으로 나올 payload들에 공통적으로 들어가는 필드들입니다. 그리고 DOI (Domain of interpretation)필드는 현재 1로 정해져 있는데 1을 쓸경우 IPSec DOI for ISAKMP (rfc2407)에 정의되어 있는 값들을 쓴다는 의미입니다. situation에 대한 것도 IPSec DOI for ISAKMP에 정의 되어 있는데 현재 세가지로 정의되어 있습니다. 

Situation
   Value
SIT_IDENTITY_ONLY    0x01
SIT_SECRECY
   0x02
SIT_INTEGRITY
   0x04

각각의 Situation에 대한 설명은 IPSec DOI for ISAKMP에서 볼 수 있으므로, 여기서는 자세한 설명은 생략하기로 하겠습니다. 그리고 IPSec DOI을 구현할 때 기본적으로 SIT_IDENTITY_ONLY 는 지원하도록 정의 되어 있습니다. 

- Proposal Payload


Proposal Payload도 SA Payload와 마찬가지로 Generic Header를 가지고 있다. Proposal Payload는 SA 협상동안 이용될 정보를 가지고 있는데, 보안 메커니즘이나 Transforms (Transform Payload)같은 정보들을 포함하고 있습니다. 각 필드들을 살펴보면 먼저 Proposal #는 여러 개의 Proposal 들이 있을 때 각각에 대한 번호를 붙일 때 이용하고 Proto ID는 현재 협상을 위한 프로토콜을 설명하는 것입니다. (여기에는 ISAKMP, IPSec ESP, IPSec AH등이 있습니다.) 

그리고 SPI size는 말 그대로 SPI의 크기를 얘기하는 것이고 #of transforms는 앞서 얘기했듯이 Proposal Payload가 Transform Payload을 포함하는데 그 개수가 몇 개인지를 나타냅니다. 마지막으로 SPI (Security Parameter Index)는 나중에 SA 협상이 끝났을 때 index로 이용하기 위하여 사용하는 것입니다.
 
- Transform Payload


Transform Payload는 앞서 얘기했듯이 Proposal Payload에 같이 들어가는데 주로 보안 알고리즘이나 인증 알고리즘 같은 SA의 속성을 정의하고 이것을 알려주는 역할을 합니다. Payload구조도 Generic Payload는 같고 Transform #는 Proposal Payload에서 정의된 총 개수에서 순서대로 1,2,3,4,... 이런 식으로 들어가고 Transform ID는 현재의 Proposal안에서 protocol을 위한 식별자로 쓰입니다. 즉 Proposal의 protocol ID가 1이고 trans ID가 1이라면 ISAKMP 프로토콜에서 IKE을 쓴다는 의미로 해석하시면 됩니다. (이 각 값에 대한 정의도 IPSec DOI for ISAKMP (rfc2407)에 자세히 설명되어 있습니다.)

그리고 마지막으로 SA attributes는 Transform-ID필드에 정의된 것에 대한 속성 값들을 정하는 용도로 이용되는데, 이 값에 대한 설명도 IPSec DOI for ISAKMP (rfc2407)에 설명되어 있습니다.

- Key Exchange Payload 


Key Exchange Payload는 다양한 Key 교환을 지원하기 위하여 설계되습니다. 예를 들어 Oakley나 Diffie-Helman과 같은 Key 교환 방식을 지원하기 위하여, Key Exchange Data필드에 Session Key을 만들기 위해 필요한 data을 담아 보내줍니다. 그러면 이 data을 이용하여 session key을 만들어 실제 Encryption/Decryption시에 이용하게 됩니다.
 
다음 글에서는 나머지 payload 들에 대해서 알아보도록 하겠습니다.

'Network Security' 카테고리의 다른 글

IPsec Action Type  (0) 2011.01.11
ISAKMP Exchange Type  (0) 2010.12.29
ISAKMP payload  (0) 2010.12.17
Public Key cryptography (공개키 암호화)  (31) 2010.11.04
Security Services  (0) 2010.10.31