Ⅰ. 서 론
다양한 기기들이 인터넷에 연결되어 인간의 조작이나 도움 없이 서로 정보를 교환하고 공유하는 사물인터넷(IoT: Internet of Things) 기술이 빠른 속도로 실용화 되고 있으며, 스마트 홈, 스마트 보안, 지능형 교통정보 시스템 등 다양한 분야에 폭 넓게 적용되고 있다. IoT는 복잡하고 이질적인 네트워크에서 다양한 형태의 데이터를 처리하고 전송하므로, 해커나 악의적인 소프트웨어, 바이러스 등에 의해 정보가 유출, 조작, 변조되는 정보보안 위험에 노출될 수 있다. IoT 보안은 센서 네트워크, 인터넷과 유사한 보안 이슈를 가지며 프라이버시, 인증 및 접속 제어, 정보 저장 및 관리 등의 정보보안 이슈들을 포함한다[1,2].
정보보안을 위해 사용되는 대표적인 기술이 암호이다. 암호(Cryptography)는 그리스어에서 기원한 용어로서 비밀기록(secret writing)을 의미하지만, 오늘날에는 다양한 형태의 보안 공격에 안전하도록 정보를 변형하는 기술을 뜻한다. 암호화는 컴퓨터에 저장되어 있거나 네트워크를 통해 전달되는 정보를 제삼자가 가로채어 그 내용을 노출시키거나 의도적으로 조작하는 보안공격으로부터 정보를 보호하기 위한 수단으로 사용되며, IoT 시스템을 구현하는 핵심 기술 요소 중 하나로 평가되고 있다. IoT 보안을 위해서는 기존의 유무선 인터넷 보안과 동일한 대칭키 블록암호 방식과 공개키 암호 방식이 사용된다. 센서 네트워크, RFID 태그, 스마트카드 등 하드웨어/소프트웨어 자원이 제한되는 IoT 네트워크와 단말기의 보안을 위해서는 저전력, 작은 하드웨어/소프트웨어 자원을 소모하는 경량 암호(lightweight cryptography) 알고리듬의 사용이 요구된다[3]. 최근에는 IoT 보안에 적합도록 개발된 HIGHT(HIGh security and light weigHT) [4], LEA (Lightweight Encryption Algorithm) [5], CLEFIA [6], PRESENT [7], mCrypton [8], TEA (Tiny Encryption Algorithm) [9] 등 다양한 경량 블록암호 방식들이 제안되고 있다.
보안 알고리듬은 소프트웨어 또는 하드웨어로 구현되며, 물리적인 안전성과 저전력 소모가 중요한 시스템에서는 전용 하드웨어 구현 방식이 사용된다. 최근에는 IoT, 스마트카드, NFC 보안을 위한 저전력/저면적 하드웨어 구현 결과들이 발표되고 있다[10,11].
본 논문에서는 국가보안기술연구소(NSRI)에서 개발한 128비트 블록암호 알고리듬 LEA를 IoT 환경에 적합하도록 최적화한 LEA 프로세서를 설계하고, FPGA 구현을 통해 하드웨어 동작을 검증하였다. Ⅱ장에서는 블록암호 알고리듬 LEA에 대해 간략히 설명하고, Ⅲ장에서는 LEA-128/192/256 암호/복호 프로세서 설계에 대해 설명한다. 설계된 회로의 기능 검증 및 FPGA 구현에 대해 Ⅳ장에서 기술하며, Ⅴ장에서 결론을 맺는다.
Ⅱ. 경량 블록암호 알고리듬 LEA [5]
블록암호 LEA는 128비트의 평문/암호문 블록을 128/192/256비트의 마스터키로 암호화/복호화하여 128비트의 암호문/평문을 생성하는 대칭키 방식의 암호 알고리듬이다. LEA는 ARX(Addition, Rotation, XOR) 연산을 기반으로 한 Feistel 유사 구조이며, 마스터키의 길이에 따라 24/28/32 라운드의 연산을 통해 암호화/복호화가 이루어진다. 128/192/256비트의 마스터키로부터 생성되는 192비트의 라운드 키가 라운드 변환에 사용된다. 라운드 함수는 32비트 단위의 ARX 연산으로 구성되어 이들 연산을 지원하는 범용 32비트 소프트웨어 플랫폼에서 고속으로 동작한다. 또한 라운드 함수 내부의 ARX 연산 배치는 충분한 안전성을 보장함과 동시에 S-box의 사용을 배제하여 경량 구현이 가능하도록 한다. LEA의 암호화 및 복호화 과정은 그림 1과 같으며, 라운드 키를 생성하는 키 스케줄러와 암호화/복호화를 수행하는 라운드 함수로 구성된다.
그림 1.LEA 블록암호 알고리듬 Fig. 1 LEA block cipher algorithm
암호화 과정과 복호화 과정은 서로 역순으로 이루어지며, 암호화 과정에서의 모듈로 가산은 복호화 과정에서 모듈로 감산으로 구현되고, 순환이동도 반대방향으로 이루어진다. 암호화 과정은 비밀키 K로 부터 Nr개의 192비트 암호화 라운드 키 (단, 0 ≤ i ≤ Nr-1)를 생성하는 암호화 키 스케줄 함수 와 라운드 키 와 라운드 함수 Roundenc를 이용하여 128비트 평문 P를 128비트 암호문 C로 변환하는 암호화 함수 EncryptK로 구성된다. 암호화 함수의 슈도 코드는 그림 2(a)와 같다. 복호화 과정은 비밀키 K로부터 Nr개의 192비트 복호화 라운드 키 (단, 0 ≤ i ≤ Nr-1)를 생성하는 키 스케줄 함수 와 라운드 키 와 라운드 함수 Round dec를 이용하여 128비트 암호문 C 를 128비트 평문 P 로 변환하는 복호화 함수 Decrypt로 구성된다. 복호화 함수의 슈도 코드는 그림 2(b)와 같다.
그림 2.LEA 암호화/복호화의 슈도 코드 (a) 암호화 (b) 복호화 Fig. 2 Pseudo code for encryption/decryption of LEA (a) Encryption (b) Decryption
암호화 과정의 i (단, 0 ≤ i ≤ Nr-1) 번째 라운드연산은 그림 3(a)와 같이 구성된다. 128비트 상태변수 Xi = (Xi[0], Xi[1], Xi[3], Xi[3])와 192비트 암호화 라운드 키 가산, 32비트 modulo 가산, 비트 순환이동(ROL9, ROL5, ROL3), 32비트 단위의 순환이동을 통해 상태 변수 Xi+1 = (Xi+1[0], Xi+1[1], Xi+1[2], Xi+1[3])가 생성된다. 복호화 과정의 i (단, 0 ≤ i ≤ Nr-1) 번째 라운드연산은 그림 3(b)와 같이 구성된다. 128비트 상태변수 Xi = (Xi[0], Xi[1], Xi[3], Xi[3])와 192비트 암호화 라운드 키 의 가산, 32비트 modulo 가산, 비트 순환이동 (ROR9, ROL5, ROL3), 32비트 단위의 순환이동을 통해 상태변수 Xi+1 = (Xi+1[0], Xi+1[1], Xi+1[2], Xi+1[3])가 생성된다. LEA의 키 스케줄링은 AR(Addition-Rotation) 연산과 32비트 modulo 연산에 사용되는 상수를 생성하는 상수생성부로 구성된다.
그림 3.LEA 암호화/복호화 라운드 함수 (a) 암호화 (b) 복호화 Fig. 3 Round functions for LEA encryption/decryption (a) Encryption (b) Decryption
마스터키 길이에 따라 생성되는 상수의 개수가 달라 지며, 암호화/복호화에 따라 AR 연산의 순서가 반대로 적용된다. 암호화 키 스케줄링은 마스터키 K로부터 암 호화 연산에 필요한 Nr개의 192비트 라운드 키 (단, 0 ≤ i ≤ Nr-1)를 생성하는 과정이며, 마스터키와 상수를 32비트 modulo 가산한 후, 비트 순환이동을 통해 이루어진다.
복호화 라운드 키는 의 관계를 제외하면 암호화 키 생성과 동일한 방법으로 생성된다. LEA- 128/192/256의 암호화 키 스케줄 함수의 슈도 코드는 그림 4와 같다.
그림 4.LEA 암호화 키 스케줄 함수의 슈도 코드 (a) LEA-128 (b) LEA-192 (c) LEA-256 Fig. 4 Pseudo code for LEA encryption key schedule (a) LEA-128 (b) LEA-192 (c) LEA-256
Ⅲ. LEA 암호/복호 회로 설계
본 논문에서는 128비트의 평문/암호문 블록을 128/192/256비트의 마스터키로 암호화/복호화하여 128비트의 암호문/평문을 생성하는 LEA 암호/복호 프로세서 를 설계하였다. 설계된 LEA 코어의 전체 구조는 그림 5와 같으며, 라운드 블록, 키 스케줄링 블록, 제어 블록으로 구성된다. 라운드 블록은 마스터키 길이 128/192/256비트에 따라 24/28/32번의 라운드 변환을 통해 암호/복호 연산을 수행하며, 키 스케줄링 블록은 각 라운드 연산에 사용되는 192비트의 라운드 키를 on-the-fly 방식으로 생성한다. 저면적 구현을 위해 라운드 블록을 32비트 회로로 설계하였으며, 입력 핀(data_in)을 공유하여 마스터키와 평문/암호문이 시분할 방식으로 입력되도록 하였다. 또한, 마스터키의 길이에 따른 3가지 모드와 암호화/복호화 연산의 하드웨어 자원이 공유되도록 설계하였다.
그림 5.LEA 암호/복호 프로세서 Fig. 5 LEA encryption/decryption processor
3.1. 라운드 블록
라운드 블록은 128비트의 평문/암호문과 키 스케줄러에 의해 생성되는 192비트의 라운드 키를 입력받아 라운드 연산을 반복적으로 처리하여 암호/복호 연산을 수행한다. 라운드 블록은 그림 6과 같이 4개의 32비트 레지스터(X0 ∼ X3), XOR 연산기, 32비트 modulo 가산기, 비트 순환이동(ROL,ROR) 등으로 구성된다.
그림 6.라운드 블록 다이어그램 Fig. 6 Round block diagram
Text_in 포트를 통해 입력되는 128비트의 평문/암호문은 32비트 단위로 4클록 주기에 걸쳐 상태변수 레지스터 X0, X1, X2, X3에 저장된다.
128비트 평문/암호문의 최상위 32비트가 레지스터 X0에 입력되고, 매 클록마다 32비트씩 순차적으로 레지스터 X0에 입력되어 X0→X1→X2→X3으로 이동한다. 따라서 4클록이 지난 후에는 128비트의 평문/암호문이 32비트 단위로 나누어져 4개의 레지스터 X0, X1, X2, X3에 저장된다. 128비트의 평문/암호문의 입력이 완료된 후, mode 신호에 따라 mode=0이면 암호화 라운드 연산이 수행되고, mode=1이면 복호화 라운드 연산이 수행된다. 라운드 블록의 내부 레지스터 X0, X1, X2, X3, XOR, 32비트 modulo 가산/감산 등이 암호화 동작과 복호화 동작에 공유되어 하드웨어 자원이 최소화되도록 하였다. 라운드 연산은 마스터키의 길이 128/192/256비트에 따라 각각 3/3/4 클록 주기가 소요되며, 라운드 연산이 24/28/32회 반복된 후, 마지막 라운드 연산이 끝나면 암호문/복호문이 출력된다.
가) 암호화 모드 동작
키 스케줄링 블록에서 생성된 라운드 키 rk0와 레지스터 X2 값이 XOR 연산되고, 라운드 키 rk1과 레지스터 X3 값이 XOR 연산된다. XOR 연산의 두 결과 값이 32비트 modulo 가산되고, modulo 가산 결과는 라운드 연산의 클록 순서에 따라 다음과 같이 순환 이동된다. 첫 번째 클록에서는 오른쪽으로 3비트 순환이동 (ROR3) 되고, 두 번째 클록에서는 오른쪽으로 5비트 순환이동(ROR5) 되며, 세 번째 클록에서는 왼쪽으로 9비트 순환이동(ROL9) 된다. 순환 이동된 결과 값은 다시 레지스터 X0에 저장되며, 동시에 각 레지스터에 저장되어 있던 값은 X0→X1→X2→X3으로 이동된다. 이와 같은 연산이 3 클록 주기 동안 반복되어 한 라운드연산이 완료된다. 결과적으로 레지스터 X0, X1, X2, X3에 저장된 값은 (X2, X3), (X1, X2), (X0, X1)이 짝을 이루어 순차적으로 연산이 적용된다.
나) 복호화 모드 동작
복호화 모드에서는 암호화 모드와 반대의 순서로 라운드 키가 사용된다. 암호화 과정의 XOR→Addition→Rotation의 연산 순서는 복호화 과정에서는 Rotation→Subtraction→XOR의 순서로 적용된다. 비트 순환이동도 반대 방향으로 이루어지며, 32비트 modulo 가산은 감산으로 대체된다. 또한, 내부 레지스터의 데이터 이동방향도 X3→X2→X1→X0로 암호화 모드와 반대방향이 된다. 암호화 모드와 동일하게 한 라운드 연산은 3 클록 주기 동안 이루어지며, 레지스터 X0의 데이터는 라운드 연산의 클록 순서에 따라 다음과 같이 순환 이동된다. 첫 번째 클록에서는 오른쪽으로 9비트 순환이동(ROR9) 되고, 두 번째 클록에서는 왼쪽으로 5비트 순환이동(ROL5) 되며, 세 번째 클록에서는 왼쪽으로 3비트 순환이동(ROL3) 된다.
3.2. 키 스케줄링 블록
암호/복호 라운드 연산에 사용되는 192비트의 라운드 키는 키 스케줄링 알고리듬에 의해 생성된다.
본 논문에서 설계된 키 스케줄링 블록은 그림 7과 같으며, 8개의 32비트 내부 레지스터(T0 ∼ T7), XOR 연산기, 32비트 modulo 가산기, 비트 순환이동 (ROL,ROR) 등으로 구성되며, 키 생성에 사용되는 상수값 δ를 만드는 상수생성기를 포함한다. 상수값 생성기는 그림 8과 같이 구현하였다.
그림 7.키 스케줄링 블록 다이어그램 Fig. 7 Key scheduling block diagram
그림 8.상수값 δ 생성 블록 다이어그램 Fig. 8 Constant δ generation block diagram
키 스케줄링 블록은 마스터키의 길이(128/192/256비트)와 암호화/복호화 동작모드에 따라 회로의 동작이 달라진다. 신호 mode=0일 때 암호화 키 스케줄링이 이루어지고, mode=1일 때 복호화 키 스케줄링이 이루어 진다. 마스터키의 길이를 지정하는 2비트의 신호 k_mode에 따라 멀티플렉서(MUX)의 동작이 제어되어 LEA-128, LEA-192, LEA-256 모드의 키 스케줄링이 선택적으로 수행된다. 레지스터(T0 ∼ T7), XOR 연산기, 32비트 modulo 가산기/감산기 등이 암호화/복호화와 마스터키 길이에 따른 모드에서 공유되도록 하여 하드웨어 자원이 최소화되도록 하였다.
본 논문에서는 그림 7과 같이 32비트 레지스터 8개 (T0 ∼ T7)를 짝수 인덱스 레지스터 T0, T2, T4, T6와 홀수 인덱스 레지스터 T1, T3, T5, T7로 분할하여 구성하고 이들을 병렬로 동작시키는 방법을 적용하였다. 마스터키는 32비트 단위로 레지스터 T0와 T1에 교대로 입력되며, 32비트 단위로 T0→T2→T4→T6, T1→T3→T5→T7으로 시프트 되어 T 레지스터에 저장된다.
LEA-128 모드는 32비트 레지스터 4개를 사용하여 4클록 주기로 구현이 가능하지만, 32비트 레지스터 6개를 사용하여 생성된 키를 저장하고 멀티플렉서를 통해 출력하는 방법을 적용하였다. 본 논문의 방법은 라운드키 생성에 3클록 주기가 소요되며, 키 스케줄링에 소요되는 클록 주기를 감소시킬 수 있다. 한편, 문헌 [12]의 방법에서는 라운드 키 생성에 4클록 주기가 소요된다. LEA-256 모드의 동작에서는 해당 라운드의 키 스케줄링에 사용되지 않는 중간 변환 값이 레지스터 T6, T7에 저장되도록 함으로써 라운드 키 생성에 총 4클록 주기(키 스케줄링을 위한 3클록 주기와 키 시프트/저장을 위한 1클록 주기)가 소요되도록 하였다.
그림 9는 본 논문에서 제안한 방법(그림 7)과 문헌[12]의 방법에 의한 키 스케줄링의 라운드 연산에 소요되는 클록 수를 비교한 것이다. 그림 9-(a),(b)는 마스터 키가 128-비트인 LEA-128 모드의 동작을 보이고 있다. 문헌 [12]의 방식은 라운드 당 4클록 주기가 필요한 반면에, 본 논문의 방식은 라운드 당 3클록 주기가 소요되어 암호 연산에 20%, 복호 연산에 23%의 속도 개선이 얻어진다. 그림 9-(c),(d)는 마스터키가 256-비트인 LEA-256 모드의 동작을 보이고 있다. 문헌 [12]의 방식은 라운드 당 6클록 주기가 필요한 반면에, 본 논문의 방식은 라운드 당 4클록 주기가 소요되어 암호 연산에 약 33%, 복호 연산에 32%의 속도 개선이 얻어진다.
그림 9.키 스케줄링 및 라운드 변환의 동작 타이밍 (a) 문헌[12]의 LEA-128 모드의 키 스케줄링 (b) LEA-128 모드의 제안된 키 스케줄링 (c) 문헌 [12]의 LEA-256 모드의 키 스케줄링 (d) LEA-256 모드의 제안된 키 스케줄링 Fig. 9 Operation timing of key scheduling and round transformation (a) key scheduling of LEA-128 mode in [12] (b) proposed key scheduling of LEA-128 mode (c) key scheduling of LEA-256 mode in [12] (d) proposed key scheduling of LEA-256 mode
Ⅳ. 기능검증 및 FPGA 구현
Verilog HDL로 설계된 LEA 코어의 기능검증 결과는 그림 10과 같으며, 128비트의 평문 “30313233 34353637 38393a3b 3c3d3e3f”와 256비트의 마스터키 “0f1e2d3c 4b5a6978 8796a5b4 c3d2e1f0 f0e1d2c3 b4a59687 78695a4b 3c2d1e9f”를 사용한 시뮬레이션 결과를 보이고 있다. 암호화 결과로 암호문 “f6af51d6 c189b147 ca00893a 97e1f927”이 출력되었고, 이를 다시 복호화하여 평문 “30313233 34353637 38393a3b 3c3d3e3f”이 출력되었으며, 설계된 LEA 프로세서의 논리기능이 정상 동작함을 확인하였다.
그림 10.LEA 코어의 기능검증 결과 Fig. 10 Simulation result of LEA crypto-core
기능검증이 완료된 LEA 코어는 FPGA 구현을 통해 하드웨어 동작을 검증하였다. 그림 11(a)는 FPGA 보드, UART 인터페이스, 구동 소프트웨어로 구성된 검증시스템 구성도이며, Xilinx Virtex5 XC5VSX-50T 디바이스가 사용되었다. PC에서 입력된 비밀키와 평문/암호문 데이터가 RS232C 통신을 통해 FPGA로 입력되고, FPGA에서 출력되는 암호문/평문 데이터가 표시된다.
그림 11.LEA 코어의 FPGA 검증 결과 (a) FPGA 검증 시스템 (b) FPGA 검증 결과 Fig. 11 FPGA verification result of LEA core (a) FPGA verification system (b) FPGA verification result
그림 11(b)는 FPGA 검증 결과를 보이고 있다. 평문을 암호화하고, 암호문을 복호화하여 원래의 평문과 일치하는 복호결과가 출력되어 FPGA에 구현된 LEA 프로세서가 올바르게 동작함을 확인하였다. 설계된 LEA 프로세서는 FPGA 합성 결과 2,364 슬라이스로 구현되었다. FPGA에서 최대 113 MHz 클록 주파수로 동작할 때, 128/192/256비트의 마스터키 길이에 따른 암호화 동작 시 각각 181/162/109 Mbps, 복호화 동작 시 각각 188/162/109 Mbps의 성능을 갖는 것으로 평가되었다.
표 1은 본 논문에서 설계된 LEA 코어와 문헌 [12]에 발표된 사례의 성능 비교를 보이고 있다. 문헌 [12]의 LEA 코어는 단일 마스터키 길이만 지원하는 반면에 본 논문의 설계는 세 가지 키 길이를 동시에 지원하므로, 하드웨어 복잡도에 대한 직접적인 비교는 어렵다. 100 MHz 클록으로 동작하는 경우에, 본 논문의 LEA 코어는 99~177 Mbps의 출력율을 가져 문헌 [12]의 LEA 코어에 비해 30% 정도 높은 성능을 갖는 것으로 평가되었다.
표 1.LEA 코어의 비교 Table. 1 Comparison of LEA cores
Ⅴ. 결 론
본 논문에서는 한국정보통신기술협회(TTA) 표준으로 등록된 128비트 블록암호 알고리듬 LEA-128/192/256을 하드웨어로 구현하여 동작을 확인하였다. 마스터키 길이에 따른 3가지 동작모드와 암호/복호 연산의 하드웨어 자원이 공유되도록 최적화하여 설계하였다. 키 스케줄러의 구조와 동작방식을 개선하여 암호/복호 동작속도를 20~30% 향상시켰다. 설계된 LEA 프로세서는 Xilinx Vertex5 FPGA에서 최대 113 MHz 클록으로 동작 가능하며, 마스터키 길이 128/192/256-비트 모드에서 각각 181/162/109 Mbps의 성능을 갖는 것으로 평가 되었다. 설계된 LEA-128/192/256 암호/복호 프로세서는 IoT 및 모바일 기기 보안 등과 같이 저전력과 경량화가 요구되는 응용분야의 보안 IP로 활용이 가능하다.
피인용 문헌
- An Efficient Hardware Implementation of Lightweight Block Cipher Algorithm CLEFIA for IoT Security Applications vol.20, pp.2, 2016, https://doi.org/10.6109/jkiice.2016.20.2.351
- IoT/QR/전자태그용 저용량 메시지 데이터 암호화 적용을 위한 새로운 방식의 스트림 경량 암호화 알고리즘 모티브 제안 vol.10, pp.1, 2015, https://doi.org/10.17661/jkiiect.2017.10.1.46
- 경량 블록암호 LEA에 대한 상관관계 전력분석 공격 및 마스킹 대응 기법 vol.21, pp.7, 2017, https://doi.org/10.6109/jkiice.2017.21.7.1276