[질문]Key Derivation & CMAC Digest in WiMAX
질문 내용은 Dot16KDF에 대한 내용입니다. WiMAX의 PKMv2에서는 PMK->AK->CMAC_KEY_*, KEK
순서로 키를 생성합니다. 제가 생성한 방식에 문제가 있는 것 같은데, 어디서부터 잘못된 것인지
모르겠습니다.
아래는 제가 시험에 사용했던 데이터 입니다.
[ MSK ]
unsigned char received_msk[64] =
{
0xc1, 0xef, 0xbe, 0xb7, 0x95, 0x9a, 0x9b, 0xca, 0xbd, 0x8b, 0xf8, 0x2a, 0xf8, 0x15, 0xea, 0xfe
0x7e, 0xe1, 0x1e, 0x5f, 0x8d, 0x5c, 0x73, 0x40, 0x68, 0x85, 0xa9, 0x5d, 0x2d, 0xc3, 0x0b, 0x2c
0xbb, 0x86, 0x74, 0xa6, 0x51, 0x40, 0x6d, 0xbe, 0x54, 0x21, 0xe8, 0xb4, 0xc1, 0x57, 0xbe, 0x38
0x80, 0x60, 0xe5, 0xd4, 0x35, 0xa3, 0xa5, 0xec, 0x85, 0x11, 0xcc, 0xb4, 0x5b, 0x26, 0x4f, 0x38
};
[ PMK ] Truncated( MSK, 160 )
unsigned char calculated_pmk[20] =
{
0xc1, 0xef, 0xbe, 0xb7, 0x95, 0x9a, 0x9b, 0xca, 0xbd, 0x8b, 0xf8, 0x2a, 0xf8, 0x15, 0xea, 0xfe
0x7e, 0xe1, 0x1e, 0x5f
};
[ AK ] Dot16KDF( PMK, SS MAC Address | BS ID | "AK", 160 )
- SS MAC Address :
unsigned char ss_mac_address[6] = { 0x00, 0x15, 0xB9, 0xB8, 0x48, 0xFC };
- BS ID :
unsigned char bs_id[6] = { 0x01, 0x02, 0x03, 0x02, 0x15, 0x82 };
- ASTRING( 14Bytes ) = SS MAC Address | BS ID | "AK"
unsigned char calculated_astring[14] =
{ 0x00, 0x15, 0xb9, 0xb8, 0x48, 0xfc, 0x01, 0x02, 0x03, 0x02, 0x15, 0x82, 0x41, 0x4b };
unsigned char calculated_ak[20] =
{
0x2c, 0x0d, 0x64, 0xc9, 0x9a, 0x53, 0xdc, 0x8a, 0x95, 0x4c, 0x53, 0x77, 0x92, 0x4f, 0x83, 0x03
0x84, 0x4b, 0xd0, 0x60
};
계산된 AK가 정확한지 모르겠습니다. 저처럼 시험한 후 작성된 문서를 찾질못해서 확인하지 못했습니다.
[ CMAC_KEY_*, KEK ] Dot16KDF( AK, SS MAC Address | BS ID | "CMAC_KEYS+KEK", 384 )
- SS MAC Address, BS ID는 전과 동일
- ASTRING( 25Bytes ) = SS MAC Address | BS ID | "CMAC_KEYS+KEK"
unsigned char calculated_astring[25] =
{
0x00, 0x15, 0xb9, 0xb8, 0x48, 0xfc, 0x01, 0x02, 0x03, 0x02, 0x15, 0x82, 0x43, 0x4d, 0x41, 0x43
0x5f, 0x4b, 0x45, 0x59, 0x53, 0x2b, 0x4b, 0x45, 0x4b
};
unsigned char calculated_cmac_keys_kek[48] =
{
0xfb, 0x08, 0xf9, 0xa5, 0x48, 0xe1, 0x55, 0x95, 0xc7, 0xe0, 0xdb, 0xd3, 0x2f, 0x45, 0x7c, 0xa1 // CMAC_KEY_U
0x8d, 0x6d, 0xf6, 0x9f, 0xdd, 0x53, 0xb3, 0xe5, 0x92, 0x73, 0x66, 0xa1, 0xe4, 0x8c, 0xee, 0x25 // CMAC_KEY_D
0xb1, 0xce, 0xe3, 0x1b, 0x8c, 0xb2, 0xe2, 0xec, 0x21, 0xc3, 0xd0, 0xe0, 0x66, 0xdd, 0x63, 0xd9 // KEK
};
여기까지 계산과정에 어떠한 문제가 있는 것으로 보입니다, 왜냐하면 생성된 CMAC KEY를 가지고
CMAC 값을 계산하면, 값이 틀리기 때문입니다. 그런데 도저히 찾질 못하겠습니다. 참고로 CMAC 연산을 수행하는
함수는 이미 확인을 한 상태입니다.
<< PKM-RSP SA-TEK Challenge >>
UINT8 test_sa_tek_challenge[46] =
{
0x0A, 0x14, 0x02, 0x22, 0x08, 0xCC, 0x98, 0x64, 0x30, 0xFC, 0xC8, 0x94, 0x60, 0x0A, 0x01, 0x00,
0x2D, 0x08, 0xFF, 0x8B, 0x0C, 0xA1, 0xD3, 0x46, 0x29, 0xD5, 0x09, 0x04, 0x00, 0x01, 0x51, 0x80,
0x28, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x4D, 0x6D, 0x3F, 0xF6, 0x05, 0x9F, 0xF0, 0x20
};
1) Current Primary CID = 0x0513
2) SA-TEK Challenge TLV 분석 :
- PN = 1
- AKID = 0xFF, 0x8B, 0x0C, 0xA1, 0xD3, 0x46, 0x29, 0xD5
- Expected CMAC Value = 0x4D, 0x6D, 0x3F, 0xF6, 0x05, 0x9F, 0xF0, 0x20
- CMAC을 계산해야 하는 실제 길이 : 32( 48 - 14 )
3) 계산된 CMAC 값 : 0x58, 0x34, 0xa0, 0x79, 0x12, 0xab, 0x9a, 0x81
보시는 바와같이 결과가 서로 상이합니다. KDF의 어떤 과정에서 연산이 잘못된 것일까요?? 첫번째 AK부터
잘못된 것일 가능성이 높은데, 이에 대한 문서를 찾질 못해 확인을 하지 못하고 있는 상황입니다
고견 부탁드립니다.
SA-TEK Challenge의
SA-TEK Challenge의 CMAC-Digest 계산에 쓰인
Key는 무엇이고, plain text는 무엇인가요?
제가 가지고 있는 CMAC 함수로
1)Key 값 :
0x8d, 0x6d, 0xf6, 0x9f, 0xdd, 0x53, 0xb3, 0xe5, 0x92, 0x73, 0x66, 0xa1, 0xe4, 0x8c, 0xee, 0x25 // CMAC_KEY_D
2)plain text : (길이 : 48 byte)
0xFF, 0x8B, 0x0C, 0xA1, 0xD3, 0x46, 0x29, 0xD5,
0x00, 0x00, 0x00, 0x01,
0x05, 0x13, //primary cid
0x00, 0x00,
0x0A, 0x14, 0x02, 0x22, 0x08, 0xCC, 0x98, 0x64, 0x30, 0xFC, 0xC8, 0x94, 0x60, 0x0A, 0x01, 0x00, 0x2D, 0x08, 0xFF, 0x8B, 0x0C, 0xA1, 0xD3, 0x46, 0x29, 0xD5, 0x09, 0x04, 0x00, 0x01, 0x51, 0x80
를 한 결과가 0x58, 0x34, 0xa0, 0x79, 0x12, 0xab, 0x9a, 0x81
이 나오지 않았습니다.
댓글 달기