본문 바로가기
C 알고리즘

ARIA 블럭 암호 알고리즘

by 상레알 2011. 1. 25.
출처 : IT 보안 인증 사무국   ( http://service2.nis.go.kr/pw_certified/aria_open.jsp )      
                               ( http://teamcrak.tistory.com/69 )                                   


ARIA 블록암호알고리즘
   

 ARIA 소개

ARIA는 경량 환경 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 암호 알고리즘입니다. ARIA의 주요 특성은 다음과 같습니다.

블록 크기 : 128비트
키 크기 : 128/192/256비트 (AES와 동일 규격)
전체 구조: Involutional Substitution-Permutation Network
라운드 수 : 12/14/16 (키 크기에 따라 결정됨)

ARIA는 경량 환경 및 하드웨어에서의 효율성 향상을 위해 개발되었으며, ARIA가 사용하는 대부분의 연산은 XOR과 같은 단순한 바이트 단위 연산으로 구성되어 있습니다. ARIA라는 이름은 Academy(학계), Research Institute(연구소), Agency(정부 기관)의 첫 글자들을 딴 것으로, ARIA 개발에 참여한 학·연·관의 공동 노력을 표현하고 있습니다.

표준화 동향

ARIA는 지난 2004년에 국가표준기본법에 의거, 지식경제부에 의하여 국가표준(KS)으로 지정되었습니다.

표준번호 : KS X 1213:2004
부문 : X-정보산업 < 정보기술(IT)응용
표준명 : 128비트 블록암호 알고리즘 ARIA(128 bit block encryption algorithm ARIA)
이 력 : 2004년 12월 30일 제정
적용범위 : 이 규격은 가변 크기의 암호키를 사용하여 128bit 블록 단위로 데이터의 암호화, 복호화를 수행하는 블록 암호 알고리즘을 규정합니다.

안정성과 효율성

ARIA는 블록 암호에 대한 알려진 모든 공격에 대한 내성을 갖도록 설계되었습니다. 일차적으로 설계자들에
의한 내부적인 안전성 분석을 거친 뒤에, 객관적인 안정성 및 효율성 평가를 위해 위하여 NESSIE(New European Schemes for Signatures, Integrity, and Encryption)의 주관 기관인 벨기에 루벤 대학으로부터 평가를 받았
습니다.
ARIA는 하드웨어 구현 및 8비트 환경에서 뛰어난 효율성을 가지고 있어 IC 카드, VPN 장비 등 다양한 환경에 적용이 가능합니다. 또한 소프트웨어 구현에서도 벨기에 루벤 대학의 효율성 평가에서 Camellia보다 빠르고 AES에 근접하는 성능을 보였습니다.

ARIA 효율성 비교 (단위: cycle/byte)
CPU ARIA AES Camellia SEED
Pentium III 37.3 23.3 33.4 42.4
Pentium IV 49.0 30.5 83.9 81.3


이 효율성 비교표는 NESSIE의 효율성 분석 보고서와 루벤 대학의 ARIA 분석 보고서에 근거하여 작성되었습니다. ARIA는 128비트 키 길이의 경우 루벤 대학의 평가의 대상이었던 ver. 0.8에 비해 라운드 수가 10에서 12로 증가하였기 때문에 사이클 수를 평가 자료의 120%로 산출하였으며, 두 보고서가 같은 기관에서 (루벤 대학의 COSIC 그룹) 수행되었으나 양쪽 자료가 정확히 같은 환경에서 수행된 것은 아니기 때문에 두 보고서의 AES, Camellia에 대한 데이터로부터 양쪽 플랫폼의 성능비를 산출하여 SEED의 속도를 추정하였습니다.


ARIA 소스코드는 국가사이버안전센터 IT인증사무국 홈페이지를 통해 배포하고 있습니다.


 ARIA는 대치, 확산, 키 적용 단계를 반복하는 SPN 구조로써 대치 단계에서는  S-box를 이용하여 바이트 단위로 치환을 하고, 확산 단계에서는 16X16 Involution 이진 행렬을 사용한 바이트 간의 확산을 한다.
n라운드 암호화와 복호화 과정은 최초의 키(eK1)를 적용한 후에 S-box 대치, 확산 , 키 적용 단계를 n-1 라운드 반복한 이후 최종 단계 n라운드에서는 S-box 치환과 키 적용 단계로만 구성을 하고 있습니다. (이유: 암호화와 복호화를 동일하게 하기 위해)

[그림 1] ARIA 암호화와 복호화 과정

 S-box에 요구되는 성질
i. 최대 차분 / 선형 확률 : 2-6
ii. 대수적 차수 : 7
iii. 고정점, 반고정점이 없을 것.

일반적으로 이 같은 성질을 만족시키기 위하여 유한체 GF(28)상의 함수 x-1에 아핀변환(affine Transformation)을 사용하고 있습니다.
S-box S1,S2는 아래의 식이 성립:
S1 = Bx-1 XOR b  // S2 = Cx247 XOR c
B,C는 8x8 정칙행렬이고, b,c는 8x1 행렬입니다.

S-box에서는 S1,S2와 함께 S1-1,S2-1을 사용하여 총 4개의 S-box를 사용합니다.
S1과 S1-1, S2와 S2-1은 서로 역의 관계입니다.
S-box는 32비트 단위를 사용.

2) 확산 계층(Diffusion Layer)
간단한 16 x 16 involution 이진 행렬을 사용한 바이트 간의 확산 함수로 구성되어 있습니다.

 ARIA의 확산함수
A : GF(28)16  GF(28)16
입력 : (x0,x1,….,x15)
출력 : (y0,y1,….,y15)

16 x 16 이진행렬의 곱으로 표현
A는 A-1 = A로써 Involution 구조. 입력(y0,y1,y2,…..,y15) 출력(x0,x1,….,x15)가 가능.
가지수 β(A) = 8 = min{wt(x) + wt(Ax) | x∈ GF(28)16, x≠0} (단, wt(x) = x의 Hamming weight(‘x’에 포함된 ‘0’이 아닌 바이트 수))


3) 키 확장(Key Expansion, AddRoundKey)
초기화 과정에서는 암/복호화 한 라운드를 F함수로 하는 256비트 입출력 3라운드 Feistel 암호를 이용하여, 암호키 MK로부터 4 개의 128비트 값 W0,W1,W2,W3를 생성합니다. MK의 길이는 128, 192, 256가 가능하므로 Feistel 암호의 입력에 필요한 256비트(KL,KR)을 다음과 같이 구성합니다.

128비트 KL은 MK의 상위 128비트를 취합니다.
MK의 남은 비트를 이용하여 KR의 상위 비트를 채우고 나머지는 0으로 채웁니다.
KL || KR = MK || 0….0   >> MK가 128비트인 경우
KL || KR = MK(128) || (129~192),0….0   >> MK가 192비트인 경우

FO와 Fe를 각각 홀수(LT)와 짝수(LT-1)라운드 함수라고 할 때, W0,W1,W2,W3 은 다음의 공식으로 생성합니다.
W0 = KL
W1 = FO(W0,CK1) XOR KR
W2 = Fe(W1,CK2) XOR W0
W3 = FO(W2,CK3) XOR W1

Feistel 암호의 128비트 라운드 키 CKi는 π-1의 유리수 부분의 128비트 상수
C1 = 0x517cc1b727220a94fe13abe8fa9a6ee0
C2 = 0x6db14acc9e21c820ff28b1d5ef5de2b0
C3 = 0xdb92371d2126e9700324977504e8c90e

암호키 길이

CK1

CK2

CK3

128-비트

C1

C2

C3

192-비트

C3

C1

C2

256-비트

C2

C3

C1

 
 라운드 키 생성과정
위에서 나온 값들을 이용하여 암호화와 복호화 라운드 키(eki, dki)를 생성합니다.
라운드 수는 x비트일 경우 (x+256)/32 라운드 수. (각각 12,14,16 라운드)
마지막 라운드에 키 덧셈 계층이 두 번 있으므로 13,15,17 개의 라운드 키 생성.

 라운드 암호화 키 생성 공식
ek1 = (W0) XOR (W1>>>19),  ek2 = (W1) XOR (W2>>>19)
ek3 = (W2) XOR (W3>>>19),  ek4 = (W3) XOR (W0>>>19)
ek5 = (W0) XOR (W1>>>31),  ek6 = (W1) XOR (W2>>>31)
ek7 = (W2) XOR (W3>>>31),  ek8 = (W3) XOR (W0>>>31)
ek9 = (W0) XOR (W1>>>61),  ek10 = (W1) XOR (W2>>>61)
ek11 = (W2) XOR (W3>>>61), ek12 = (W3) XOR (W0>>>61)
ek13 = (W0) XOR (W1>>>31), ek14 = (W1) XOR (W2>>>31)
ek15 = (W2) XOR (W3>>>31), ek16 = (W3) XOR (W0>>>31)
ek17 = (W2) XOR (W3>>>19)

 복호화 라운드 키 생성 공식
dk1 = ekn+1, dk2 = A(ekn), dk3 = A(ekn-1), …. , dkn = A(ek2), dkn+1 = ek1


 

 

'C 알고리즘' 카테고리의 다른 글

유클리드의 알고리즘 ( 최대 공약수 찾기 )  (0) 2009.02.24
시간 소요량과 공간 소요량  (0) 2009.02.24
알고리즘....  (0) 2009.02.23