"ARIA"의 두 판 사이의 차이
(새 문서: '''아리아(ARIA)'''란 차세대 국가 암호화 알고리즘이다. 아리아(ARIA)는 전자 정부 시스템을 비롯해 앞으로 다가올 다양한 정보 보호 환경...) |
(→확산 계층(Diffusion Layer)) |
||
(사용자 6명의 중간 판 46개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | ''' | + | '''ARIA'''(아리아)란 경량 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 알고리즘이며 차세대 국가 암호화 [[알고리즘]]이다. 아리아(ARIA)는 전자 정부 시스템을 비롯해 앞으로 다가올 다양한 정보 보호 환경을 대비하기 위해 국가 보안 기술 연구소([[NSRI]]) 필두로 학계, 국가 정보원 등의 암호 기술 전문가들이 개발한 국가 암호화 알고리즘이다. |
+ | == 개요 == | ||
+ | 아리아(ARIA) 알고리즘은 경량 환경 및 [[하드웨어]]에서의 효율성 향상을 위해 개발된 128비트 블록 암호 알고리즘이고 사용하는 거의 대부분의 연산은 [[XOR]]과 같은 간단한 바이트 단위 연산으로 구성되어 있다. 지난 2004년에 국가표준기본법에 의거하고 지식경제부에 의해 국가표준(KS)으로 지정되었다. ARIA 알고리즘은 AES 알고리즘과 똑같이 128/192/256비트 암호화키를 지원한다.<ref>〈[https://seed.kisa.or.kr/kisa/skill/EgovAriaInfo.do ARIA]〉, 《한국인터넷진흥원》</ref> | ||
− | == | + | == 역사 == |
− | + | 2003년 [[SEED]]를 개발한 KISA에서 SEED의 암호가 불안하게 흔들리자 [[국가정보원]]과 함께 개발한 Academy(학계), Research Institute(연구소), Agency(정부기관)의 첫 글자들을 따서 이름을 지었다. 2004년 국가 표준 암호가 되었었으며 2010년 국제 표준이 되었다 국내에서는 주로 쓰이지만, 해외에서는 잘 안쓰는 암호이다. | |
+ | == 특징 == | ||
+ | *ARIA는 개발팀이 Academy(학계), Research Institute(연구소), Agency(정부 기관)로 구성되었음을 의미하며, 학·연·관이 공동으로 개발한 정보보호의 핵심 기술임을 함축하고 있다. | ||
+ | *ARIA는 2004년에 산업자원부의 KS 인증을 획득하였다. (KS 규격번호: KS X 1213) | ||
+ | *ARIA는 Involution SPN 구조의 [[대칭키]] [[암호]] [[알고리즘]]으로서 초경량 환경 및 하드웨어 구현에 최적으로 개발되었으며, 세부 사양은 다음과 같다. | ||
+ | :고정 길이의 입/출력(128-비트) | ||
+ | :가변 길이의 키 길이 지원(128/192/256-비트 키) | ||
+ | :라운드 키 길이(128-비트) | ||
+ | :라운드 수 키:라운드 128 : 12, 192 : 14, 256 : 16 라운드 | ||
+ | :간단한 연산 사용으로 초경량 환경에 효율적 | ||
+ | :바이트 단위의 연산으로 하드웨어에 효율적 | ||
− | + | *ARIA는 미국·유럽 등의 새로운 표준 제정의 기준이 되는 안전성 및 효율성 기준에 부합하도록 설계되었다. 객관적인 안전성 및 효율성 평가를 위하여 NESSIE(New European Schemes for Signatures, Integrity, and Encryption)의 주관 기관인 벨기에 루벤 대학에 분석을 의뢰하였다. | |
− | + | *ARIA는 8 비트 환경과 하드웨어 구현에서 뛰어난 효율성을 갖고 있어 IC-card, VPN 장비 등 다양한 환경에 적용이 가능하며, 소프트웨어 구현에서도 벨기에 루벤 대학의 효율성 평가에서 Camellia보다 빠르고 AES에 근접하는 성능을 보였다.<ref> DEV쭈야, 〈[https://blog.naver.com/PostView.nhn?blogId=devotaku&logNo=220291064091&proxyReferer=https%3A%2F%2Fwww.google.com%2F ARIA 암호화]〉, 《네이버 블로그》, 2015-03-05</ref> | |
− | == | + | == 구조 == |
− | + | ||
− | + | ARIA는 대치, 확산, 키 적용 단계를 반복하는 SPN 구조로써 대치 단계에서는 S-box를 이용하여 바이트 단위로 치환을 하고, 확산 단계에서는 16X16 Involution 이진 행렬을 사용한 바이트 간의 확산을 한다. | |
− | *[[ | + | |
− | == | + | n라운드 [[암호화]]와 [[복호화]] 과정은 최초의 키(eK1)를 적용한 후에 S-box 대치, 확산 , 키 적용 단계를 n-1 라운드 반복한 이후 최종 단계 n라운드에서는 S-box 치환과 키 적용단계로만 구성 하고 있다.<ref name="티스토리"> 그외, 〈[https://teamcrak.tistory.com/69 ARIA 암호 알고리즘에 대하여]〉, 《티스토리》, 2009-02-10</ref> |
− | [[ | + | |
+ | === 치환 계층(SubstLayer) === | ||
+ | |||
+ | 두 유형의 치환 계층이 있으며, 각각은 2종의 8비트 입출력 S-box와 그들의 역변환(reverse)로 구성된다. | ||
+ | |||
+ | :S-box에 요구되는 성질 | ||
+ | #최대 차분 / 선형 확률 : 2 | ||
+ | #대수적 차수 : 7 | ||
+ | #고정점, 반고정점이 없을 것. | ||
+ | |||
+ | 일반적으로 이 같은 성질을 만족시키기 위하여 유한체 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비트 단위를 사용한다.<ref name="티스토리"></ref> | ||
+ | |||
+ | === 확산 계층(Diffusion Layer) === | ||
+ | 간단한 16 x 16 involution 이진 행렬을 사용한 바이트 간의 확산 함수로 구성되어 있다. | ||
+ | |||
+ | :ARIA의 확산함수 | ||
+ | #<math>A : GF(2^{8})^{16} GF(2^{8})^{16}</math> | ||
+ | #입력 : ( 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(Ax) | x∈ GF(28)16, x≠0} (단, wt(x) = x의 Hamming weight(‘x’에 포함된 ‘0’이 아닌 바이트 수))<ref name="티스토리"></ref> | ||
+ | |||
+ | === 키 확장(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 = 0x6db14acc9e21c820ff28b1d5ef5d | ||
+ | C3 = 0xdb92371d2126e9700324977504e8c90e | ||
+ | *라운드 키 생성과정 | ||
+ | :위에서 나온 값들을 이용하여 암호화와 복호화 라운드 키(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 = ek<ref name="티스토리"></ref> | ||
+ | {{각주}} | ||
+ | |||
+ | == 참고자료 == | ||
+ | *〈[https://seed.kisa.or.kr/kisa/skill/EgovAriaInfo.do ARIA]〉, 《한국인터넷진흥원》 | ||
+ | * DEV쭈야, 〈[https://blog.naver.com/PostView.nhn?blogId=devotaku&logNo=220291064091&proxyReferer=https%3A%2F%2Fwww.google.com%2F ARIA 암호화]〉, 《네이버 블로그》, 2015-03-05 | ||
+ | * 그외, 〈[https://teamcrak.tistory.com/69 ARIA 암호 알고리즘에 대하여]〉, 《티스토리》, 2019-02-10 | ||
+ | |||
+ | == 같이 보기 == | ||
+ | * [[AES]] | ||
+ | * [[SEED]] | ||
+ | * [[DES]] | ||
+ | |||
+ | {{암호 알고리즘|검토 필요}} |
2023년 4월 8일 (토) 22:31 기준 최신판
ARIA(아리아)란 경량 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 알고리즘이며 차세대 국가 암호화 알고리즘이다. 아리아(ARIA)는 전자 정부 시스템을 비롯해 앞으로 다가올 다양한 정보 보호 환경을 대비하기 위해 국가 보안 기술 연구소(NSRI) 필두로 학계, 국가 정보원 등의 암호 기술 전문가들이 개발한 국가 암호화 알고리즘이다.
목차
개요[편집]
아리아(ARIA) 알고리즘은 경량 환경 및 하드웨어에서의 효율성 향상을 위해 개발된 128비트 블록 암호 알고리즘이고 사용하는 거의 대부분의 연산은 XOR과 같은 간단한 바이트 단위 연산으로 구성되어 있다. 지난 2004년에 국가표준기본법에 의거하고 지식경제부에 의해 국가표준(KS)으로 지정되었다. ARIA 알고리즘은 AES 알고리즘과 똑같이 128/192/256비트 암호화키를 지원한다.[1]
역사[편집]
2003년 SEED를 개발한 KISA에서 SEED의 암호가 불안하게 흔들리자 국가정보원과 함께 개발한 Academy(학계), Research Institute(연구소), Agency(정부기관)의 첫 글자들을 따서 이름을 지었다. 2004년 국가 표준 암호가 되었었으며 2010년 국제 표준이 되었다 국내에서는 주로 쓰이지만, 해외에서는 잘 안쓰는 암호이다.
특징[편집]
- ARIA는 개발팀이 Academy(학계), Research Institute(연구소), Agency(정부 기관)로 구성되었음을 의미하며, 학·연·관이 공동으로 개발한 정보보호의 핵심 기술임을 함축하고 있다.
- ARIA는 2004년에 산업자원부의 KS 인증을 획득하였다. (KS 규격번호: KS X 1213)
- ARIA는 Involution SPN 구조의 대칭키 암호 알고리즘으로서 초경량 환경 및 하드웨어 구현에 최적으로 개발되었으며, 세부 사양은 다음과 같다.
- 고정 길이의 입/출력(128-비트)
- 가변 길이의 키 길이 지원(128/192/256-비트 키)
- 라운드 키 길이(128-비트)
- 라운드 수 키:라운드 128 : 12, 192 : 14, 256 : 16 라운드
- 간단한 연산 사용으로 초경량 환경에 효율적
- 바이트 단위의 연산으로 하드웨어에 효율적
- ARIA는 미국·유럽 등의 새로운 표준 제정의 기준이 되는 안전성 및 효율성 기준에 부합하도록 설계되었다. 객관적인 안전성 및 효율성 평가를 위하여 NESSIE(New European Schemes for Signatures, Integrity, and Encryption)의 주관 기관인 벨기에 루벤 대학에 분석을 의뢰하였다.
- ARIA는 8 비트 환경과 하드웨어 구현에서 뛰어난 효율성을 갖고 있어 IC-card, VPN 장비 등 다양한 환경에 적용이 가능하며, 소프트웨어 구현에서도 벨기에 루벤 대학의 효율성 평가에서 Camellia보다 빠르고 AES에 근접하는 성능을 보였다.[2]
구조[편집]
ARIA는 대치, 확산, 키 적용 단계를 반복하는 SPN 구조로써 대치 단계에서는 S-box를 이용하여 바이트 단위로 치환을 하고, 확산 단계에서는 16X16 Involution 이진 행렬을 사용한 바이트 간의 확산을 한다.
n라운드 암호화와 복호화 과정은 최초의 키(eK1)를 적용한 후에 S-box 대치, 확산 , 키 적용 단계를 n-1 라운드 반복한 이후 최종 단계 n라운드에서는 S-box 치환과 키 적용단계로만 구성 하고 있다.[3]
치환 계층(SubstLayer)[편집]
두 유형의 치환 계층이 있으며, 각각은 2종의 8비트 입출력 S-box와 그들의 역변환(reverse)로 구성된다.
- S-box에 요구되는 성질
- 최대 차분 / 선형 확률 : 2
- 대수적 차수 : 7
- 고정점, 반고정점이 없을 것.
일반적으로 이 같은 성질을 만족시키기 위하여 유한체 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비트 단위를 사용한다.[3]
확산 계층(Diffusion Layer)[편집]
간단한 16 x 16 involution 이진 행렬을 사용한 바이트 간의 확산 함수로 구성되어 있다.
- ARIA의 확산함수
- 입력 : ( 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(Ax) | 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 = 0x6db14acc9e21c820ff28b1d5ef5d C3 = 0xdb92371d2126e9700324977504e8c90e
- 라운드 키 생성과정
- 위에서 나온 값들을 이용하여 암호화와 복호화 라운드 키(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 = ek[3]
각주[편집]
참고자료[편집]
- 〈ARIA〉, 《한국인터넷진흥원》
- DEV쭈야, 〈ARIA 암호화〉, 《네이버 블로그》, 2015-03-05
- 그외, 〈ARIA 암호 알고리즘에 대하여〉, 《티스토리》, 2019-02-10
같이 보기[편집]