암호화 알고리즘

쉽게보는 ARIA 알고리즘 - 라운드

긋대디 2018. 12. 26. 22:39

ARIA 알고리즘은 키 크기에 따라 12, 14, 16라운드를 도는 대칭키 블록 알고리즘이다.

한 라운드(Fi 로 표현)는 간단히 보면 아래와 같은 구조로 이루어져 있다.



각각의 단계를 조금 자세히 살펴보면

라운드 키 덧셈 과정(AddRoundKey)

입력인 plaintext와 암호키(MK로 표현)에 의해 생성된 각 라운드 키(eki혹은 dki로 표현)를 XOR하는 과정이다. ARIA의 키는 키 초기화 과정과 키 생성 과정, 두 과정을 거쳐야 비로소 생성된다.

키 초기화 과정 : 말그대로 3-라운드 256-비트 Feistel 알고리즘을 이용해서 MK로부터 네개의 128-bit 값(W0, W1, W2, W3)을 생성한다.

Feistel 알고리즘은 256의 입력(KL, KR 각각 128bit)을 필요로 한다. 하지만 ARIA는 키의 길이가 상이 하기 때문에 초기 128bit, KL은 MK값이 그대로 입력되고 MK의 나머지 부분을 KR에 채운 후 KR에서 모자라는 부분은 0으로 채워 넣는다.

네 값 W0, W1, W2, W3는 다음과 같이 생성한다.



이것을 그림으로 나타내면 다음과 같다.

여기서 CKi키 값은 파이의 유리수 부분을 128비트씩 차례로 취한 것으로 다음의 세 값 중 하나를 선택한다. 이때 선택 되는 Ci는 암호키 길이에 따라 다르다.



(예)암호키 길이가 192 비트이면 C2를 CK1로, C3를 Ck2로, C1을 CK3로 사용한다.

라운드 키 생성 과정(Keyexpansion)

실제 암/복호화에 쓰이는 라운드 키는 키 초기화 과정에성 생성된 네 값 W0, W1, W2, W3를 적절히 조합하여 생성된다. 각각의 라운드 키 값은 다음의 조합으로 생성된다.


이때 두번째 인자값의 기호는 다음과 같은 뜻을 갖는다.



A의 각 비트를 왼쪽으로 k 비트씩 순환이동

A의 각 비트를 오른쪽으로 k 비트씩 순환이동

 

치환 계층

라운드 키 덧셈 과정을 마친 128bit의 값은 치환 계층을 거쳐야 한다. 이때 128비트의 값은 각각 8bit의 16진수로 표현되며 총 16개의 8bit 16진수가 하나의 s-box에 대응된다. 그러므로 치환계층 한 단계에는 총 16개의 s-box로 이루어지며 이러한 s-box의 한 묶음을 유형이라고 칭한다. ARIA의 치환계층은 두가지 유형이 있으며 다음과 같다.


두 유형은 s-box는 네 개의 종류로 되어 있다. 다음은 S1, S2와 그 역치환으로 만들어진, 네개의 s-box 이다.

추가적으로(보지않아도됨) 유형1과 유형2는 역치환 관계이며, 4개의 s-box가 한 set으로 32bit씩 묶어 표현하기도 한다.


(예) 라운드 키 덧셈 과정을 거쳐 나온 128bit의 값이 11011010|11011001|00010010|10100110|…이고 홀수 라운드 이라면, 각각의 16진수로 변환하여 표현하면 0xda|0xd9|0x12|0xA6|…이 되고 유형1의 치환계층을 사용하므로 S1(0xda)| S2(0xd9)| S1^-1(0x12)| S2^-1(0xa6)|…이므로 치환계층을 거친 결과는 0x57|0x6f|0x39|0xc5|… 가 된다.

확산 계층

확산 계층은 16바이트 입력에 대해 16바이트 출력을 만든다. 이를 위해 16x16 involution 이진 행렬을 사용한다.


※KISA 알고리즘 참고


'암호화 알고리즘' 카테고리의 다른 글

대칭키  (0) 2018.12.27
암호화 역사  (0) 2018.12.27
(3-DES) 간단한 대칭 알고리즘 예제  (0) 2018.12.26
DES 알고리즘 C  (0) 2018.12.26
SHA1withRSA, SHA1withDSA 완성  (0) 2018.12.26