8 HIP 세부정보2 매개변수

junpkim·2024년 5월 10일
0

Host Identity Protocol

목록 보기
9/11

R1_COUNTER


Type: 129
Length: 12
R1 패킷의 유효성을 보장하기 위해 사용됩니다.
Big-Endian 방식으로 64비트 unsigned int로 표현되며, 현재 유효한 퍼즐 세대 번호를 나타냅니다.
이 카운터는 발신자가 주기적으로 증가시켜야 합니다 (SHOULD).
R1 패킷에서 이 매개변수를 사용하는 것이 필수는 아니지만 (SHOULD) 포함할 경우 반드시 서명으로 보호되어야 하며 I2에 echo 되어야 합니다 (MUST).

PUZZLE


Type: 257
Length: 4 + RHASH_len / 8
#K: 검증해야 할 비트의 수
Lifetime: 퍼즐의 유효시간으로 2^(Lifetime - 32) 만큼 유효합니다.
Opaque: 응답자가 설정한 퍼즐 인덱싱용 데이터
Random #I: RHASH 길이의 비트로 표현되는 랜덤 정수

Random #I는 n비트 정수(n=RHASH_len)로, #K와 수명은 8비트 정수로 표시되며 Big-Endian 방식으로 표시됩니다.
퍼즐 난이도는 #K로 결정되며, 개시자는 Lifetime 안에 퍼즐을 풀어야 합니다.
응답자는 ECHO_REQUEST_SIGNED 또는 ECHO_REQUEST_UNSIGNED 매개변수로 퍼즐을 확장할 수 있으며, 이를 통해 개시자는 ECHO_RESPONSE 매개변수에 요청을 반환하여 응답자가 퍼즐 처리를 할 수 있게 도와줍니다.
Opaque와 Random #I 필드는 HIP_SIGNATURE_2 매개변수에 포함되지 않습니다.

SOLUTION


Type: 321
Length: 4 + RHASH_len / 4
#K: 검증해야 할 비트의 수
Reserved: 0 전송시, 수신 무시됨.
Opaque: 수신한 PUZZLE 매개변수에서 수정되지 않은 복사된 데이터
Random #I: 퍼즐을 위한 랜덤 정수 (RHASH 길이 비트)
Puzzle solution #J: 퍼즐 솔루션을 위한 랜덤 정수 (RHASH 길이 비트)

Random #I와 Random #J는 n비트 정수(n=RHASH_len)로, #K와 수명은 8비트 정수로 표시되며 Big-Endian 방식으로 표시됩니다.

Solution 매개변수에는 퍼즐의 해답이 포함됩니다. 이를 통해 응답자는 개시자가 제공한 솔루션이 올바른지 검증할 수 있습니다.
#K, Opaque, #I 를 echo 합니다.

DH_GROUP_LIST


Type: 511
Length: 호스트가 지원하는 D-H 그룹의 ID 수
DH Group ID: 호스트가 지원하는 D-H 그룹 ID, 각 1바이트.

호스트가 지원하는 Diffie-Hellman 그룹의 목록을 제공합니다.
개시자는 이 목록을 I1 패킷에 포함하여 보냅니다.
응답자는 자신이 지원하는 그룹을 R1 패킷의 서명된 부분에 포함시킵니다.
DH 그룹 ID는 선호하는 순서대로 나열됩니다. 앞에 있는 그룹이 호스트에서 더 선호하는 그룹입니다.
응답자는 자신의 DH_GROUP_LIST에서 개시자의 DH_GROUP_LIST와 호환되는 가장 우선순위가 높은 그룹을 선택해야 합니다 (MUST).
R1 패킷 D-H 매개변수에 대한 D-H 그룹을 선택할 때, 응답자는 DH_GROUP_LIST에 있는 첫 번째 D-H 그룹 ID를 선택해야 하며 (MUST), 두 목록에 포함된 다른 D-H 그룹 ID를 선택하지 않아햡니다 (MUST NOT).

호스트는 계산 복잡도가 애플리케이션에 크게 부담되지 않는 한, 약한 그룹보다 강한 그룹을 선호해야 합니다.

DIFFIE_HELLMAN


Type: 513
Length: 길이 (Byte 단위, Type, Length, Padding 제외)
Group ID: 'p'와 'g' 값, 키 유도 함수(KDF)를 식별
Public Value Length: 다음 공개 키 값의 길이
Public Value: 발신자의 공개 D-H 키

그룹 ID

3 : 1536-bit MODP group (RFC 3526)
4 : 3072-bit MODP group (RFC 3526)
7 : NIST P-256 (RFC 5903)
8 : NIST P-384 (RFC 5903)
9 : NIST P-521 (RFC 5903)
10 : SECP160R1 (SECG)
11 : 2048-bit MODP group (RFC 3526)

모든 HIP 구현은 반드시 그룹 ID 3을 구현해야 합니다 (MUST).
160-bit SECP160R1 그룹은 낮은 보안으로도 충분할 때 사용할 수 있습니다.
구현은 그룹 ID 4와 8을 구현해야 합니다 (SHOULD).
각 그룹 ID는 대칭 키 및 HMAC를 유도하기 위해 특정 KDF(HKDF)를 사용합니다.
ECDH 그룹은 반드시 공인자(co-factor)를 1을 설정해야 합니다 (MUST).
BEX 중 불필요한 장애를 방지하려면 다른 그룹은 호스트가 충분히 자원을 가질 때 구현되어야 합니다.

HIP_CIPHER


Type: 579
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
Cipher ID: ENCRYPTED 매개변수의 내용을 암호화하는 데 사용할 암호 알고리즘을 식별

Cipher ID

0 : RESERVED (예약됨)
1 : NULL-ENCRYPT (암호화 없음, RFC 2410)
2 : AES-128-CBC (RFC 3602)
3 : RESERVED (사용되지 않는 값)
4 : AES-256-CBC (RFC 3602)

HIP_CIPHER 매개변수를 보내는 사람은 하나의 HIP_CIPHER 매개변수에 최대 6개의 Cipher ID만 포함해야 합니다 (MUST).
반대로, 수신자는 6개를 초과하는 Cipher ID를 받으면, 처음 6개만 수용하고 나머지는 폐기해야 합니다 (MUST)
HIP_CIPHER 매개변수에는 최소한 하나의 Cipher ID를 포함해야 합니다 (MUST).

응답자는 R1에서 선호하는 순서대로 Cipher ID를 최대 6개까지 나열합니다.
개시자는 응답자가 제공한 Cipher ID 중 하나를 선택해야 하며 (MUST), 이 Cipher ID를 사용해 ENCRYPTED 파라미터를 생성합니다.

AES-128-CBC는 모든 HIP 구현에서 반드시 지원해야 합니다 (MUST).
NULL-ENCRYPT는 테스트/디버깅 목적으로만 사용해야 하며 그 외에는 제공하거나 수용해서는 안됩니다 (SHOULD).

HOST_ID


Type: 579
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
HI Length: HI의 길이 (바이트 단위)
DI-Type: 도메인 식별자(Domain Identity)의 유형
DI Length: 도메인 식별자의 길이 (바이트 단위)
Algorithm: 사용된 알고리즘의 인덱스
Host Identity: 실제 호스트 식별자
Domain Identifier: 발신자의 도메인 식별자

DI-Type

0 : 포함된 도메인 식별자 없음
1 : FQDN (Fully Qualified Domain Name, 완전한 도메인 이름)
2 : NAI (Network Access Identifier, 네트워크 액세스 식별자)

Algorithm

0 : RESERVED (예약됨)
3 : DSA (RECOMMENDED)
5 : RSA (REQUIRED, RFC 3447)
7 : ECDSA (REQUIRED)
8 : ECDSA_LOW (RECOMMENDED)

DSA, RSA, ECDSA key 유형의 경우, 최소한 112비트의 보안 강도를 사용해야 합니다.
RSA 패딩의 경우, PSS (Probabilistic Signature Scheme) 패딩 방법을 사용해야 합니다.

호스트 ID는 RSA, DSA의 DNSKEY 형식에서 파생됩니다. 여기에는 RFC 4034의 RDATA 부분 공개 키 필드가 사용됩니다.

타원 곡선 암호화

타원 곡선 암호화(Elliptic Curve Cryptography, ECC)에는 두 가지 종류가 있습니다.

  • ECDSA : NIST에서 승인한 곡선을 사용하며, RFC 4754에 정의되어 있습니다.
  • ECDSA_LOW : 계산 능력이 낮은 디바이스를 위해 설계되었으며, SECG(Standards for Efficient Cryptography Group)의 짧은 곡선을 사용합니다.

HIP와 사용되는 모든 ECDSA는 co-factor 값이 1이어야 합니다.

ECDSA 및 ECDSA_LOW의 경우 HI는 다음 필드로 표시됩니다.

ECDSA를 알고리즘으로 구현하는 호스트의 경우 다음 ECC 커브가 필요합니다.
0 : RESERVED
1 : NIST P-256 (RFC 4754)
2 : NIST P-384 (RFC 4754)

ECDSA_LOW를 알고리즘으로 구현하는 호스트의 경우 다음 커브가 필요합니다.
0 : RESERVED
1(SECG) : SECP160R1

HIT_SUITE_LIST

응답자는 R1 패킷의 서명된 부분으로 HIT_SUITE_LIST를 전송합니다. 개시자는 HIT_SUITE_LIST를 기반으로 응답자가 지원하는 소스 HIT Suite ID를 확인할 수 있습니다.

Type: 715
Length: HIT Suite ID의 수
ID: 호스트가 지원하는 HIT Suite ID, 각 ID는 1바이트로 표현됩니다.

ID 필드의 상위 4비트는 ORCHID OGA ID 필드의 HIT 제품군 ID에 해당합니다. 4개의 하위 비트는 예약되어있으며, 발신자가 0으로 설정합니다. 하위 비트가 0으로 설정되지 않은 ID의 수신은 UNSUPPORTED_HIT_SUITE 알림을 발생시킬 수 있는 오류로 간주되어야 합니다 (SHOULD).
0 : RESERVED (8비트 인코딩 -> 0x00)
1 : RSA, DSA/SHA-256 (MUST) (8비트 인코딩 -> 0x10)
2 : ECDSA/SHA-384 (RECOMMENDED) (8비트 인코딩 -> 0x20)
3 : ECDSA_LOW/SHA-1 (RECOMMENDED) (8비트 인코딩 -> 0x30)

TRANSPORT_FORMAT_LIST

응답자가 지원하는 HIP 전송 형식(TF) 목록이 포함되어 있습니다. 응답자는 R1 패킷의 서명된 부분에 TRANSPORT_FORMAT_LIST를 전송합니다. 발신자는 전송 형식 목록에 따라 적합한 전송 형식을 하나 선택하고 응답 패킷에 해당 HIP 전송 형식 매개변수를 포함합니다.

Type: 2049
Length: TF 개수의 2배
TF Type: 호스트에서 지원하는 TF 유형을 식별합니다.

현재 정의된 유일한 전송 형식은 IPsec ESP (RFC 7402)입니다.

나열된 각 TF 유형에 대해 TRANSPORT_FORMAT_LIST 매개변수의 발신자는 HIP 패킷에 해당 전송 형식 파라미터를 반드시 포함해야 합니다. 패킷에 일치하는 전송 형식 매개변수가 없는 경우 수신자는 TRANSPORT_FORMAT_LIST의 TF 유형을 무시해야 합니다.

HIP_MAC


Type: 61505
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
HMAC: HIP 패킷을 통해 계산된 HMAC으로, HIP_MAC 매개변수와 다음 매개변수(ex. HIP_SIGNATURE, HIP_SIGNATURE_2, ECHO_REQUEST_UNSIGNED, ECHO_RESPONSE_UNSIGNED)를 제외한 값입니다.
체크섬 필드는 0으로 설정해야 하며(MUST), HMAC 계산 시 제외된 매개변수를 포함하지 않아야 합니다 (MUST).
HMAC은 해시 알고리즘으로 RHASH를 사용합니다.
사용한 해시 함수에 따라 HMAC의 길이가 결정됩니다.

HIP_MAC_2

HIP_MAC_2는 HIP에서 인증된 메시지 무결성을 보장하기 위해 사용되는 메시지 인증 코드(MAC)입니다.
매개변수 구조는 HIP_MAC에 표시된 구조와 동일합니다.
Type: 61569
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
HMAC: HIP 패킷을 통해 계산된 HMAC으로, HIP_MAC 매개변수와 다음 매개변수(ex. HIP_SIGNATURE, HIP_SIGNATURE_2, ECHO_REQUEST_UNSIGNED, ECHO_RESPONSE_UNSIGNED)를 제외하고, 발신자의 HOST_ID 매개변수를 추가하여 HMAC를 계산합니다.
체크섬 필드는 0으로 설정해야 하며(MUST), HMAC 계산 시 제외된 매개변수를 포함하지 않아야 합니다 (MUST).
HMAC은 해시 알고리즘으로 RHASH를 사용합니다.
사용한 해시 함수에 따라 HMAC의 길이가 결정됩니다.

HIP_SIGNATURE


Type: 61697
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
SIG alg: 서명 알고리즘
Signature: 서명은 HIP_SIGNATURE 매개 변수와 HIP_SIGNATURE 매개 변수 뒤에 오는 모든 매개변수를 제외하고 HIP 패킷을 통해 계산됩니다. 서명을 계산할 때 체크섬 필드는 0으로 설정해야 하며 HIP 공통 헤더의 HIP 헤더 길이는 HIP_SIGNATURE 매개변수의 시작 부분까지만 계산해야 합니다.

서명 알고리즘은 HOST_ID에 정의되어 있습니다. 서명은 서명 알고리즘에 따른 방법을 사용하여 인코딩 됩니다. (예: RSA/SHA-1의 경우 RFC 3110, RSA/SHA-256의 경우 RFC 5702, DSA의 경우 RFC 2536, ECDSA의 경우 RFC 6090에 따름).

HIP_SIGNATURE_2

HIP_SIGNATURE_2는 R1 패킷에서 가변 매개변수를 제외하여 R1 사전 생성을 허용하며, 매개변수 구조는 HIP_SIGNATURE에 표시된 구조와 동일합니다.
Type: 61633
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
SIG alg: 서명 알고리즘
Signature: HIP_SIGNATURE_2 매개변수가 포함된 R1 패킷 내에서 개시자의 HIT, 체크섬, PUZZLE 매개변수의 불투명 및 랜덤 #I 필드를 0으로 설정해야 합니다 (MUST). 또한 HIP 헤더의 HIP 패킷 길이는 서명 계산 중에 HIP_SIGNATURE_2이 패킷에 없는 것처럼 조정되어야 합니다. (MUST)

개시자의 HIT를 0으로 설정하면 R1 패킷을 미리 생성하여 가능한 DoS 공격의 영향을 최소화 할 수 있습니다.

SEQ


Type: 385
Length: 4
Update ID: 32bit 시퀀스 번호

Update ID는 Big-Endian 형식의 unsigned number로, ESTABLISHED 상태로 변경될 때 호스트에 의해 0으로 초기화됩니다.
Update ID는 단일 HIP 연결 내에서 범위를 갖습니다.
Update ID는 호스트에서 보내는 각 새 UPDATE 전에 1씩 증가합니다.
첫 번째 UPDATE 패킷의 ID는 0입니다.

ACK


Type: 449
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
peer Update ID: ACK되는 32bit 시퀀스 번호에 해당하는 Update ID

ACK 매개변수에는 피어에서 수신한 하나 이상의 Update ID가 포함됩니다.
피어 Update ID의 수는 길이를 4로 나누어 유추할 수 있습니다.

ENCRYPTED


Type: 641
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
Reserved: 0 수신시 무시됨.
IV: Initialization vector, 필요 없다면 제외됨. IV의 길이는 HIP_CIPHER 에서 유추됩니다.
Encrypted data: HIP_CIPHER 매개변수에 정의된 암호화 알고리즘을 사용하여 암호화 된 데이터.

ENCRYPTED 매개변수는 하나 이상의 HIP 매개변수를 블록 암호화하여 포함합니다.
각 매개변수는 8바이트 단위로 정렬됩니다 (패딩 포함).
일부 암호화 알고리즘에서는 암호화할 데이터의 크기가 암호화 알고리즘 블록 크기의 배수여야 합니다 (MUST). 그렇지 않은 경우 데이터 블록은 패딩을 추가하여야 합니다 (MUST).
암호화 알고리즘은 0이 아닌 패딩 바이트를 지정할 수 있습니다. (ex. AES에서의 PKCS5 패딩 방식)
암호화 과정에서 데이터가 압축되거나 추가패딩이 추가될 수 있으므로 암호화 할 매개변수 집합의 길이와 다를 수 있습니다.

NOTIFICATION

NOTIFICATION 매개변수는 오류 상태 및 상태 전환과 같은 정보 데이터를 HIP 피어에게 전송하는데 사용됩니다. NOTIFICATION 매개 변수는 NOTIFY ㅍ킷에서 사용됩니다.

Type: 832
Length: 길이 (바이트 단위, Type, Length, Padding 제외)
Reserved: 0 수신시 무시됨.
Notify Message Type: 알림 유형
Notification Data: 알림 메시지 유형 외에 전송된 정보 또는 오류 데이터.

알림 정보는 HIP 보안 연결을 설정할 수 없는 이유를 명시하는 오류 메시지이거나 HIP 구현이 피어 프로세스와 통신하고자 하는 상태 데이터일 수 있습니다.
여러 문제가 존재하거나 여러 개의 독립적인 정보를 전송해야 하는 경우 HIP 패킷에 여러 개의 매개변수가 포함될 수 있습니다.
응답자는 퍼즐 솔루션을 성공하지 않은 호스트에 알림을 보내지 않아야 합니다.

알림 메시지 유형 (오류)

1 : UNSUPPORTED_CRITICAL_PARAMETER_TYPE
매개변수 유형에 "critical" 비트가 설정되어 있고 매개변수 유형이 인식되지 않은 경우 전송됩니다.

7 : INVALID_SYNTAX
유형, 길이 또는 값이 범위를 벗어났거나 요청의 형식이 잘못되었기 때문에 수신된 HIP 메시지가 유효하지 않음을 나타냅니다.
DDoS 공격을 방지하기 위해 이 상태는 HIP_MAC(있는 경우) 및 SIGNATURE가 확인된 패킷에 대해서만 반환될 수 있습니다.
이 상태는 다른 상태 유형 중 하나에서 다루지 않은 응답으로 전송되어야 하며 (MUST) 노드를 조사하는 누군가에게 정보가 유출되지 않도록 세부 정보를 포함하지 않아야 합니다 (SHOULD NOT) 디버깅을 돕기 위해 더 자세한 오류 정보는 콘솔이나 로그에 기록해야 합니다 (SHOULD).

14 : NO_DH_PROPOSAL_CHOSEN
제안된 그룹 ID는 모두 허용되지 않았습니다.

15 : INVALID_DH_CHOSEN
D-H 그룹 ID 필드가 응답자가 제공한 필드와 일치하지 않습니다.

16 : NO_HIP_PROPOSAL_CHOSEN
제안된 HIT Suite 도는 HIP 암호화 알고리즘 중 어느 것도 받아들여지지 않았습니다.

17 : INVALID_HIP_CIPHER_CHOSEN
HIP_CIPHER 암호화 ID가 응답자가 제공한 것과 일치하지 않습니다.

20 : UNSUPPORTED_HIT_SUITE
HIP Suite가 지원되지 않는 I1 또는 R1 패킷에 대한 응답으로 전송됩니다.

24 : AUTHENTICATION_FAILED
NOTIFY 메시지에서 서명 확인이 실패한 경우를 제외하고, HIP 서명 실패에 대한 응답으로 전송됩니다.

26 : CHECKSUM_FAILED
HIP 체크섬 실패에 대한 응답으로 전송됩니다.

28 : HIP_MAC_FAILED
HIP HMAC 실패에 대한 응답으로 전송됩니다.

32 : ENCRYPTION_FAILED
응답자가 암호화된 매개변수 해독에 실패했습니다.

40 : INVALID_HIT
해당 HI에서 상대방의 HIT를 확인하지 못했을 때 전송됩니다.

42 : BLOCKED_BY_POLICY
응답자가 정책상의 이유로 연결을 설정하지 않으려는 경우
ex) 수신된 HIT가 NULL이고 정책에서 기회주의 모드를 허용하지 않는 경우.

44 : RESPONDER_BUSY_PLEASE_RETRY
응답자가 과부하로 인해 연결 설정을 원하지 않으며, 개시자의 요청을 거부하여 부하를 줄이기로 결정한 경우. 개시자는 재시도 할 수 있지만, 이러한 재시도에 대해 반드시 다른 퍼즐 솔루션을 찾아야 합니다 (MUST). 개시자는 새로운 I1/R1 교환을 통해 새로운 퍼즐을 얻어야 할 수도 있습니다.

알림 메시지 유형 (상태)

16384 : I2_ACKNOWLEDGEMENT
퍼즐이 올바르게 풀렸고, 응답자가 연결을 설정할 의향이 있지만 처리 대기열에 여러 개의 I2 패킷이 있어서 개시자의 I2의 패킷을 보관 중임을 알림.

ECHO_REQUEST_SIGNED


Type: 897
Length: 불투명 데이터의 길이 (바이트 단위)
Opaque data: 불투명 데이터
ECHO_REQUEST_SIGNED 매개변수는 발신자가 원하는 상태 정보를 요청 패킷에 실어 보내고 응답 패킷에서 동일한 데이터를 수신할 때 사용됩니다.
이 매개변수는 HIP_MAC과 SIGNATURE로 보호됩니다.
하나의 HIP 패킷에는 ECHO_REQUEST_SIGNED 매개변수를 하나만 포함할 수 있습니다.
ECHO_REQUEST_SIGNED 매개변수는 ECHO_RESPONSE_SIGNED로 응답해야 합니다 (MUST).

ECHO_REQUEST_UNSIGNED


Type: 63661
Length: 불투명 데이터의 길이 (바이트 단위)
Opaque data: 불투명 데이터

ECHO_REQUEST_UNSIGNED 매개변수는 발신자가 원하는 상태 정보를 요청 패킷에 실어 보내고 응답 패킷에서 동일한 데이터를 수신할 때 사용됩니다.
이 매개변수는 HIP_MAC과 SIGNATURE로 보호되지 않습니다.
하나의 HIP 패킷에 여러 개의 ECHO_REQUEST_UNSIGNED 매개변수를 포함할 수 있습니다.
중간의 네트워크 장비도 HIP 패킷에 ECHO_REQUEST_UNSIGNED 매개변수를 추가할 수 있습니다.
이 매개변수는 반드시 ECHO_RESPONSE_UNSIGNED 매개변수로 응답되어야 합니다 (MUST).
매개변수를 생성하는 호스트 또는 네트워크 장비는 나중에 해당 ECHO_RESPONSE_UNSIGNED를 식별하고 제거할 수 있도록 반드시 불투명 필드를 생성해야 합니다.

ECHO_RESPONSE_SIGNED


Type: 961
Length: 불투명 데이터의 길이 (바이트 단위)
Opaque data: 수정되지 않고 복사된 ECHO_REQUEST_SIGNED의 불투명 데이터

Opaque data는 ECHO_REQUEST_SIGNED 매개변수에서 복사된 데이터를 변형 없이 그대로 포함합니다.
이 매개변수는 HIP_MAC과 SIGNATURE로 보호됩니다.

ECHO_RESPONSE_UNSIGNED


Type: 63425
Length: 불투명 데이터의 길이 (바이트 단위)
Opaque data: 수정되지 않고 복사된 ECHO_REQUEST_UNSIGNED의 불투명 데이터

Opaque data는 ECHO_REQUEST_UNSIGNED 매개변수에서 복사된 데이터를 변형 없이 그대로 포함합니다.
이 매개변수는 HIP_MAC과 SIGNATURE로 보호되지 않습니다.

0개의 댓글