LoRaWAN에서는 데이터 전송 시 네트워크 접속 과정에서 생성된 암 호화 키를 이용하여 메시지를 암호화하여 메시지 전송 중간에 패킷이 유출 또는 도청 당하더라도 해당 메시지를 확인하기 어렵게 만들고 있 다. 또한 메시지 무결성 검사를 이용하여 중간에 위/변조된 사항에 대 한 검사를 수행하게 된다.
(1) AES128 암호화 방법
LoRaWAN에서 사용하는 암호화 방법은 AES128방식을 기본으로 사용 하고 있다. AES(Advanced Encryption Standard) 128방식은 128비트의 블록을 128, 192 또는 256비트의 키 길이로 암호화 및 복호화를 수행 하는 방법이다. LoRaWAN에서는 128비트의 키를 사용하여 암호화를 진 행한다. 알고리즘은 아래와 같은 방식을 통해서 동작한다.
그림 1-15 A Block format
위 그림은 암호화 과정에서 사용되는 A Block(128 비트 키)의 생 성 방법을 나타낸다. Direction (DIR) 필드의 값은 Uplink 시 0, Downlink 시 1을 가진다. 마지막 바이트인 i 는 암호화 대상의 길이를 128 비트 단위로 나누었을 때 순서를 나타낸다. A block과 NwkSKey 또 는 AppSKey를 사용하여 AES128 암호화 연산을 진행한 후 획득한 프레
임은 암호화를 원하는 프레임과 XOR 과정을 거쳐 암호화를 완료한다.
암호화 대상의 프레임이 16 바이트 (128비트) 단위로 나누어 지지 않 는 경우는 나머지 정보를 절단해서 전달하게 된다. 복호화 과정은 암 호화 과정을 반복함으로써 기존 데이터를 추출할 수 있다.
암호화 알고리즘은 키 스케줄링 (Key Scheduling), 초기 라운드 (Init round), 반복 라운드(Repeat round) 및 마지막 라운드(Final round)의 총 4단계를 거쳐서 처리된다. 아래 그림은 AES 알고리즘을 사용하여 암호문을 만드는 방법을 도식화한 그림이다.
그림 1-16 AES 128 Encryption 과정
키 스케줄링 단계에서는 키 확장(Key Expansion) 단계를 수행하여 암호문에 사용이 되는 키를 미리 작성하는 과정을 수행한다. 키 확장 과정은 LoRaWAN Network Server와 LoRaWAN End Device간에 정의된 비
밀의 키(cipher key: NwkSKey or AppSKey)를 암호화 과정 때 그대로
(2) AES128-CMAC 무결성 검사 방법
메시지의 무결성을 검사하는 방법은 아래 그림과 같은 B Block과 무결성을 검사하려는 메시지(B Block | Message)를 이용하여 NwkSKey 와 AES128_CMAC 연산을 통해 나온 값의 [0..3] 번 바이트를 취하여 MIC(Message Integrity Code)로 이용하게 된다. A Block 과 비교하여 B Block은 첫 바이트의 값이 상이하며, 마지막 바이트의 값이 무결성 검사를 하려는 메시지의 길이를 나타내게 된다.
그림 1-17 B Block Format
AES128 CMAC의 연산은 메시지 길이가 B Block의 길이의 배수가 되 는지 아닌지에 따라서 상이하다. 아래 그림은 메시지 길이에 따른 CMAC 계산 방법을 도식화한 그림이다.
그림 1-18 AES CMAC 연산 도식도
메시지 길이가 B Block의 길이의 배수가 되는 경우 NwkSKey를 사 용하여 CMAC 값을 연산하고 해당 값의 최상위 4 바이트를 활용하여 MIC 코드를 생성하게 된다. 이 때 마지막으로 사용되는 Key는 sub Key 1(K 1)이 사용된다. 메시지가 배수가 되지 못하는 경우는 sub Key 2(K 2)를 사용하게 된다. 아래 그림은 RFC 4493에 정의된 AES-CMAC을 연산 하기 위한 알고리즘 슈도코드이다.
그림 1-19 RFC 4493: AES-CMAC Algorithm Pseudo Code