최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
− | '''ARIA'''(아리아)란 경량 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 알고리즘이며 차세대 국가 암호화 [[알고리즘]]이다. 아리아(ARIA)는 전자 정부 시스템을 비롯해 앞으로 다가올 다양한 정보 보호 환경을 대비하기 위해 국가 보안 기술 연구소([[NSRI]]) 필두로 학계, 국가 정보원 등의 암호 기술 전문가들이 개발한 국가 암호화 알고리즘이다. | + | '''아리아(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> | + | 아리아(ARIA) 알고리즘은 경량 환경 및 [[하드웨어]]에서의 효율성 향상을 위해 개발된 128비트 블록 암호 알고리즘이고 사용하는 거의 대부분의 연산은 [[XOR]]과 같은 간단한 바이트 단위 연산으로 구성되어 있다. 지난 2004년에 국가표준기본법에 의거하고 지식경제부에 의해 국가표준(KS)으로 지정되었다. ARIA 알고리즘은 AES 알고리즘과 똑같이 128/192/256비트 암호화키를 지원한다<ref>http://seed.kisa.or.kr/iwt/ko/sup/EgovAriaInfo.do</ref> |
| | | |
| == 역사 == | | == 역사 == |
− | 2003년 [[SEED]]를 개발한 KISA에서 SEED의 암호가 불안하게 흔들리자 [[국가정보원]]과 함께 개발한 Academy(학계), Research Institute(연구소), Agency(정부기관)의 첫 글자들을 따서 이름을 지었다. 2004년 국가 표준 암호가 되었었으며 2010년 국제 표준이 되었다 국내에서는 주로 쓰이지만, 해외에서는 잘 안쓰는 암호이다. | + | 2003년 [[SEED]]를 개발한 KISA에서 SEED의 암호가 불안하게 흔들리자 구정원과 함께 개발한 Academy(학계), Research Institute(연구소), Agency(정부기관)의 첫 글자들을 따서 이름을 지었다. 2004년 국가 표준 암호가 되었었으며 2010년 국제 표준이 되었다 국내에서는 주로 쓰이지만, 해외에서는 잘 안쓰는 암호이다. |
| | | |
| == 특징 == | | == 특징 == |
| *ARIA는 개발팀이 Academy(학계), Research Institute(연구소), Agency(정부 기관)로 구성되었음을 의미하며, 학·연·관이 공동으로 개발한 정보보호의 핵심 기술임을 함축하고 있다. | | *ARIA는 개발팀이 Academy(학계), Research Institute(연구소), Agency(정부 기관)로 구성되었음을 의미하며, 학·연·관이 공동으로 개발한 정보보호의 핵심 기술임을 함축하고 있다. |
| *ARIA는 2004년에 산업자원부의 KS 인증을 획득하였다. (KS 규격번호: KS X 1213) | | *ARIA는 2004년에 산업자원부의 KS 인증을 획득하였다. (KS 규격번호: KS X 1213) |
− | *ARIA는 Involution SPN 구조의 [[대칭키]] [[암호]] [[알고리즘]]으로서 초경량 환경 및 하드웨어 구현에 최적으로 개발되었으며, 세부 사양은 다음과 같다. | + | *ARIA는 Involution SPN 구조의 대칭키 암호 알고리즘으로서 초경량 환경 및 하드웨어 구현에 최적으로 개발되었으며, 세부 사양은 다음과 같다. |
| :고정 길이의 입/출력(128-비트) | | :고정 길이의 입/출력(128-비트) |
| :가변 길이의 키 길이 지원(128/192/256-비트 키) | | :가변 길이의 키 길이 지원(128/192/256-비트 키) |
| :라운드 키 길이(128-비트) | | :라운드 키 길이(128-비트) |
− | :라운드 수 키:라운드 128 : 12, 192 : 14, 256 : 16 라운드 | + | :라운드 수 키:라운드 128:12 192:14 256:16 라운드 |
| :간단한 연산 사용으로 초경량 환경에 효율적 | | :간단한 연산 사용으로 초경량 환경에 효율적 |
| :바이트 단위의 연산으로 하드웨어에 효율적 | | :바이트 단위의 연산으로 하드웨어에 효율적 |
| | | |
− | *ARIA는 미국·유럽 등의 새로운 표준 제정의 기준이 되는 안전성 및 효율성 기준에 부합하도록 설계되었다. 객관적인 안전성 및 효율성 평가를 위하여 NESSIE(New European Schemes for Signatures, Integrity, and Encryption)의 주관 기관인 벨기에 루벤 대학에 분석을 의뢰하였다. | + | *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는 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
| |
| | | |
| == 같이 보기 == | | == 같이 보기 == |
103번째 줄: |
28번째 줄: |
| * [[DES]] | | * [[DES]] |
| | | |
− | {{암호 알고리즘|검토 필요}} | + | {{암호 알고리즘|토막글}} |