Home LEA 알고리즘 구현
Post
Cancel

LEA 알고리즘 구현

(Lightweight Encryption Algorithm)

블록 암호 기술로, 소형 통신 장비 및 센서 모바일 기기와 같은 다양한 환경에서 암호화 속도를 높이고 전력 소모 또한 줄일 수 있도록 한 알고리즘 입니다.

ARX(ADD, Rotation, Xor)의 연산만을 이용하여 라운드 함수를 구성할 수 있습니다.
이런 연산만 사용하면 고속으로 동작하고 알고리즘의 이해와 코드 구현이 쉬워지겠지만,
차분, 선형 공격에 대한 안전성 증명이 어렵습니다.
또한, 부채널 공격이라는, 암호화 알고리즘을 돌릴때 전력 소모량을 측정해서 키를 찾아내는 공격에 대응하기 어려워 집니다.
이걸 막기 위해서는 속도 저하를 피할 수 없습니다.
원래 ARX 기반 알고리즘은 속도 때문에 쓰는건데 느려지면… 쓸 이유가 없습니다.
해당 알고리즘은 ARX 연산만 사용하며, 동시에 비선형 치환 테이블을 사용을 배제하여 경량 구현이 가능하도록 했습니다.
현재 KISA 에서 오픈 소스로 배포중 입니다.
[1]. LEA opensource from KISA
[2]. 한국정보통신기술협회(TTA) 표준문서

Feistel cipher

블록 암호의 일종으로 암호화 방식이 특정 함수의 반복으로 이뤄 집니다. 이때 사용되는 함수를 라운드 함수라고 부릅니다.

보통 Feistel 구조가 아니면 SPN 구조로 되어 있습니다. SPN 구조의 대표적인 예로는 AES 알고리즘이 있습니다.

페이스탈 암호화 과정은 다음과 같습니다.

  1. 암호화 평문을 두개로 쪼개서
  2. 한쪽만 계속 암호화 합니다.

장점 중 하나는 암호화 과정과 복호화 과정이 키 순서를 제외한 전체가 같은 계산을 반복해서 라운드 함수에 대한 역 연산이 존재할 필요가 없습니다.
복호화 할때는 단순히 키를 역순으로 집어 넣습니다.

장점을 정리하면 다음과 같습니다.

  1. F 함수가 가역일 필요가 없습니다. 즉, 역원(역함수)가 존재하지 않아도 됩니다. 왜냐하면 XOR로 상쇄 되기 때문입니다.
  2. 이론적 안전성 증명이 상대적으로 용이 합니다. 왜냐하면 라운드 과정이 단 두줄이면 끝나기 때문입니다.
  3. 암/복호화 과정이 동일하게 되어 있습니다.
    이건 IoT 와 같은 경량 환경에서 좋은 전략으로 인정 받고 있어 최근에는 Feistel 구조를 가진 IoT 를 위한 암호화 알고리즘 연구가 활발히 진행 되고 있습니다.

LEA 알고리즘 전체 동작 과정

image
LEA는 평문을 128비트의 블록 단위로 자릅니다.
라운드의 수는 키의 길이에 종속되어 있는데 키 128, 192, 256비트의 길이를 가진 키로 라운드를 각각 24, 28, 32 라운드를 돌립니다.

암호화 과정

LEA 암호화
그림상에 나와있는 네모난 창문 같은 더하기 그림은 단순히 +를 말합니다.
동그란 창문은 XOR을 뜻합니다.
그림에서 확인 할 수 있듯이, 치환 과정 없이 단순 ARX(Addition, Rotation, XOR) 연산 만으로 이루어져 있습니다.
또한 모든 연산은 법 32 위에서 이루어 졌습니다.
ARX 기반이니 빠른게 당연하다고 생각할지 모르지만 AES 보다 2배 이상 빠르게 알고리즘을 설계하는 일은 어려운 일입니다.

복호화 과정


image


아래는 코드 구현 링크 입니다.

제 깃 허브로 연결됩니다.

규격서에는 암/복호화 과정이 따로 정의 되어 있어 암/복호화 따로 128/ 192/ 256 키 길이의 알고리즘을 구현했습니다

MY SORCE CODE LEA

아래는 test 이미지 입니다

image


참고 사이트

[1] https://namu.wiki/w/LEA

[2] https://github.com/joseoyeon/Cryptography/tree/master/Cryptography_Algorithm/2019_05_LEA/%EC%B0%B8%EA%B3%A0

This post is licensed under CC BY 4.0 by the author.