블록암호 LEA(Lightweight Encryption Algorithm)는 128비트 데이터 블록을 암호화하는 알고리즘으로 128, 192, 256비트 비밀키를 사용할 수 있으며 요구되는 안전성 기준에 따라 용도가 구분될 수 있다

 

1. LEA 규격

LEA를 각 키 길이에 따라 LEA-128, LEA-192, LEA-256으로 구분한다.

  • 블록 길이 : Nb 바이트
  • 비밀키 길이 : Nk 바이트
  • 라운드 수 : Nr

 

LEA 암호화 및 복호화 과정

LEA의 전체적인 동작 과정은 다음과 같다.

 

 

2. LEA 암호화

LEA의 암호화 과정은 k비트 키 K로부터 Nr개의 192비트 암호화용 라운드키 RK_i (0 ≤ i ≤ (Nr - 1))를 생성하는 키 스케줄 함수 KeySchedule_k와, 라운드키 RK_i 및 라운드 함수 Round를 이용하여 128비트 평문 P를 128비트 암호문 C로 변환하는 암호화 함수 Encrypt로 구성된다.

 

2.1. 암호화 키 스케줄

키 K로부터 암호화 과정에 필요한 Nr개의 192비트 암호화 라운드키 RK_i (0 ≤ i ≤ (Nr - 1))들을 생성하는 키 스케줄 과정을 설명한다

 

- 상수

키 스케줄 함수에서 사용되는 32비트 상수들 δ[i] (0 ≤ i ≤ 7)는 다음과 같다

 

- LEA-128 암호화 키 스케줄링

128비트 키 K = (K[0], K[1], … , K[15])에 대해 LEA-128의 암호화를 위해 사용되는 키 스케줄 함수 KeySchedule-128은 24개의 192비트 암호화 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5]) (0 ≤ i ≤ 23)를 다음 알고리즘3과 같이 생성한다.

이 과정에서 128비트 내부상태 변수 T = (T[0], T[1], T [2], T[3])가 사용된다

 

- LEA-192 암호화 키 스케줄링

192비트 키 K = (K[0], K[1], … , K[23])에 대해 LEA-192의 암호화를 위해 사용되는 키 스케줄 함수 KeySchedule-192는 28개의 192비트 암호화 라운드키 RK_i = (RK_i[0], RK_i[1] , … , RK_i[5]) (0 ≤ i ≤ 27)를 알고리즘4와 같이 생성한다.

이 과정에서 192비트 내부상태 변수 T = (T[0], T[1], … , T[5])가 사용된다.

 

- LEA-256 암호화 키 스케줄링

256비트 키 K = (K[0], K[1], … , K[31])에 대해 LEA-256의 암호화를 위해 사용되는 키 스케줄 함수 KeySchedule2 e5n 6 c는 32개의 192비트 암호화 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5]) (0 ≤ i ≤ 31)를 알고리즘5와 같이 생성한다.

이 과정에서 256비트 내부상태 변수 T = (T[0], T[1], … , T[7])가 사용된다.

 

 

 

2.2. 암호화 함수

- 암호화 라운드 함수

알고리즘 1에서 i (0 ≤ i ≤ (Nr - 1))번째 라운드의 라운드 함수 Round는 128비트 내부상태 변수 X_i = (X_i[0], X_i[1], X_i[2], X_i[3])와 198비트 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5])로부터 알고리즘 2를 수행하여 새로운 128비트 내부상태 변수 X_i+1 = (X_(i+1)[0], X_(i+1)[1], X_(i+1)[2], X_(i+1)[3])을 생성한다.

 

- 암호화 함수

LEA의 암호화 함수 Encrypt는 k비트 키 K에 대해 키 스케줄 함수 KeySchedulekenc을 수행하여 생성된 Nr개의 192비트 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5]) (0 ≤ i ≤ (Nr - 1))와 128비트 평문 P = (P[0], P[1], … , P[15])를 입력받아 알고리즘 1을 수행하여 128비트 암호문 C = (C[0], C[1], … , C[15])를 출력한다.

 

다음은 암호화 과정의 i번째 라운드 함수를 도식화한 것이다.

 

 

 

 

3. LEA 복호화

LEA의 복호화 과정은 k비트 키 K로부터 Nr개의 192비트 복호화용 라운드키 RK_i (0 ≤ i ≤ (Nr - 1))를 생성하는 키 스케줄 함수 KeySchedule_k와, 라운드키 RK_i및 라운드 함수 Round를 이용하여 128비트 암호문 C를 128비트 평문 P로 변환하는 복호화 함수 Decrypt로 구성된다.

 

3.1. 복호화 키 스케줄링

키 K로부터 복호화 과정에 필요한 Nr개의 복호화 라운드키 RK_i (0 ≤ i ≤ (Nr - 1))들을 생성하는 키 스케줄 과정을 설명한다. 암호화 라운드키와 복호화 라운드키는

인 관계를 제외하면 동일한 방법으로 생성되며, 동일한 상수가 사용된다.

 

 

3.2. 복호화 함수

- 복호화 라운드 함수

알고리즘 6에서 i (0 ≤ i ≤ (Nr - 1))번째 라운드의 라운드 함수 Round는 128비트 내부상태 변수 Xi = (Xi[0], Xi[1], Xi[2], Xi[3]) 와 192비트 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5]) 로 부터 알고리즘 7을 수행하여 새로운 128비트 내부상태 변수 X_(i+1) = (X_(i+1)[0], X_(i+1)[1], X_(i+1)[2], X_(i+1)[3]) 을 생성한다.

 

- 복호화 함수

LEA의 복호화 함수 Decrypt는 k비트 키 K에 대해 키 스케줄 함수 KeySchedule_k을 수행하여 생성된 Nr개의 192비트 라운드키 RK_i = (RK_i[0], RK_i[1], … , RK_i[5]) (0 ≤ i ≤ (Nr - 1)) 와 128비트 암호문 C = (C[0], C[1], … , C[15])를 입력받아 알고리즘 6을 수행하여 128 비트 평문 P = (P[0], P[1], … , P[15])를 출력한다.

 

다음은 복호화 과정의 i번째 라운드 함수를 도식화 한 것이다.

 

 

 

 

출처 : 128비트 블록암호 LEA 규격서, NSR 국가보안기술연구소

'Cipher analysis > LEA' 카테고리의 다른 글

LEA Cipher 암호화, 복호화 C언어로 구현하기  (0) 2020.10.14

+ Recent posts