의견.png

AES

위키원
ksj4572 (토론 | 기여)님의 2019년 8월 1일 (목) 17:20 판 (역사)
이동: 둘러보기, 검색

AES(Advanced Encryption Standard)DES암호화 강도가 약해지면서 개발되었으며 향후 30년 정도 사용할 수 있는 안정성, 128비트 암호화 블록, 다양한 키의 길이(128/192/256 비트)를 갖추었으며 대칭형 암호화이다.

개요

AES는 암호화 키로 128, 192, 256 bit를 가질 수 있는데 이를 AES-128, AES-192, AES-256 라고 한다. 사용하는 키에 따라 실행하는 라운드 수가 다르며 128bit 키 사용시에는 10라운드, 192bit에서는 12라운드, 256bit에서는 14라운드를 실행한다. 또한 AES는 DES와 다르게 Feistel Network를 사용하지 않는다. Feistel은 총 bit에서 반을 암호화 하는 방식인 반면에 AES는 대입치환 - Substitution-Permutation Network을 사용하는데, 용어 그대로 대입(Substitution)과 치환(Permutation)을 이용하여 암호화 하는 방법이고 전체 bit를 암호화 하는 방식을 사용한다.[1]

역사

AES는 NIST에서 1997년 이후 DES의 안전성에 대한 논란이 일어나자 NIST는 DES를 대체할 차세대 표준 알고리즘 제정을 위한 프로젝트를 추진하였다. 이때 1997년 ~ 1998년 까지 12개국에서 총 15개의 알고리즘이 제안되었다. 정부는 구현하기 쉽고 신뢰성 있는 빠른 암호화가 필요하기에 속도, 다양성 및 계산 요구 사항 등이 검토되었었다. 그중에서 벨기에의 두 명의 암호 전문가 Joan Daemen 과 Vincent Rijm가 디자인한 Rjindael암호가 표준 암호로 선정이 되었다. 이후 Advanced Encryption Standard 또는 AES라는 이름을 가지게 되었다.

AES 암호화 알고리즘

  • AES 알고리즘의 연산은 GF(Galois Field) 중 GF(2^8) 에서 이루어지며, AES 에서 사용하는 기약다항식은 m(x)=x^8+x^4+x^3+x+1로 정해져 있다.
  • AES 알고리즘에서 덧셈 연산은 XOR로 대체된다. 따라서 AES 내에서 뺄셈도 동일하게 XOR로 연산된다.
  • AES 알고리즘에서 8비트 곱셈 연산이 등장하는데, AES에서는 곱셈 연산을 (x2) 연산과 (+1) 연산을 통해 구한다. 이때 (x2) 연산을 AES에서는 보통 xtime 이라 부른다. 이때 xtime 연산은 8비트 입력값을 왼쪽으로 1비트 쉬프트하여 구현되는데, 이때 최상위 비트가 1인 경우 0x1b(00011011)를 XOR 한다. 이는 우선 2진수에서 왼쪽으로 1비트 쉬프트하면 곱하기2 연산이 된다는점과 AES에서 사용하는 기약다항식이 x^8+x^4+x^3+x+1이기 때문이다. 기약다항식을 최상위 비트인 x^8을 제외하고 8비트 바이너리로 표현하면 0x1b가 된다.
AES 알고리즘에서 (x2) 연산과 (+1)을 통해 곱셈을 구현하는 법은
a 에 9를 곱한다고 가정하면 이는 a*(2^3) + a 로 쓸수있다.(x2)연산이 xtime이므로 a를 xtime에 3번 통과시킨 결과와 a를 XOR 하면 a에 9를 곱한 결과가 나오는 식이다. [2]

AES 알고리즘은 안정성을 제공하기위해 대치(Substitution), 치환(Permutation), 섞음(Mixing), 키 덧셈(Key-adding) 4가지 형태의 변환을 제공하고 Add Round Key , Sub Byte, Shift Row, Mix Column 이 반복 되어 이루어진다.

> 마지막 라운드에서는 MixColumns연산을 하지 않는다.[1]

그리고 AES 알고리즘 라운드 내부에서는 4가지 연산이 존재한다. 1개의 자리바꿈 연산과 3개의 치환 연산인데 다음과 같다.

S-Box : GF(2^8)을 이용한 치환연산
Shift Row : 단순 자리바꿈
Mix Column : GF(2^8)을 이용한 치환연산
Add RoundKey : XOR 연산을 이용[3]

Sub Bytes (Substitute Byte)

S-box table을 이용하여 byte 단위 형태로 블록을 교환한다. Sub byte 연산은 8비트 단위로 데이터를 치환하는 연산으로서, 실제 연산은 1바이트를 GF(2^8) 상에서의 역원을 구한후 아핀 변환을 하는 연산이다. 8비트씩의 연산을 반복하여 128비트 모두를 치환한다.메모리의 여유가 있다면 모든 입력에 대한 연산을 계산한 표인 S-Box를 만들고 이를 사용해 치환하는 방법도 많이 사용한다.[2]

ShiftRows (Permutation)

4개의 행은 각각 왼쪽으로 Shift되는데 행의 첫번째 값은 그 행의 맨 오른쪽 값으로 이동한다.

  • 첫 번째 행은 Shift되지 않는다.
  • 두 번째 행은 한 자리 왼쪽으로 Shift된다.
  • 세 번째 행은 두 자리 왼쪽으로 Shift된다.
  • 마지막 행은 세 자리 왼쪽으로 Shift된다.

이때 byte안의 bit는 그대로 두고 byte를 교환한다. (byte-exchange transformation)[1]

Mix Column

열 단위 연산을 수행한다. 각각의 열을 상수 행렬과 곱해서 새로운 값을 가지는 열을 반환한다.

Add Round Key

한 번에 한 열씩 수행을 하게 된다. (MixColumns와 유사) 각 State 열 행렬에 Round Key word를 XOR 연산을 한다.

1 State 행렬(128bit)과 128bit Round Key가 XOR연산이 되는 것이라고 생각하면된다.[1]

DES와 AES의 차이

차이.PNG

각주

  1. 1.0 1.1 1.2 1.3 나를위한노트, 〈기초 암호학(2) - AES〉, 《티스토리》, 2019-03-01
  2. 2.0 2.1 감파고, 〈AES ( Advanced Encryption Standard ) 암/복호화 알고리즘〉, 《티스토리》, 2016-12-14
  3. Sean Sin, 〈안전한 암호화를 위한 AES 알고리즘에 대한 이해와 구현코드(Java, C#)〉, 《깃허브》

참고자료

같이 보기


  의견.png 이 AES 문서는 암호 알고리즘에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.