Advanced Encryption Standard 란?
고급 암호화 표준이라고 불리는 AES 암호 알고리즘
미국 NIST( National Institute of Standads and Technology )에서 1997년 이후 DES의 안정성에 대한 논란이 일어나자 DES를 대체할 차세대 표준 알고리즘 제정을 위한 프로젝트를 추진하였다. 1997 ~ 1998년 까지 12개에서 총 15개의 알고리즘이 제안되었다. 정부는 구현하기 쉽고 신뢰성 있는 빠른 암호화가 필요하기에 속도, 다양성 및 계산 요구 사항 등이 검토되었다. 그중에서 벨기에의 두 명의 암호 전문가 Joan Daemen 과 Vincent Rijim가 디자인한 레인달 암호가 표준 암호로 선정되었고 , 이후 Advanced Encryption Standard ( AES )라는 이름을 가지게 되었다.
AES 알고리즘은 기존 표준인 DES와 달리 Feistel 구조가 아니었으며, 제안에서 요구한 사항뿐만 아니라 블록 크기를 192비트, 256비트로 확장할 수 있도록 되어 있었다. 하지만 제안에서 요구한 128비트 블록 크기 버전만 표준으로 채택되었다.
디자인을 간단하게 설계했기 때문에 속도와 효율성 면에서 효율적임을 확인할 수 있다, AES는 SPN ( Substitution – Permutation Network ) 구조를 사용한다.
AES 암호 알고리즘의 라운드 수는 블록 크기와 키 길이에 의해 다음과 같이 결정된다.
- B = 암호 블록의 크기에 대한 32bit 워드의 수
- K = 암호키 길이에 대한 32bit 워드의 수
- R ( 라운드 수 ) = 6 + max( B, K )
AES의 구조 및 알고리즘
AES의 구조
DES에서는 Feisel 네트워크라는 기본 구조를 사용하고 있지만 AES에서는 SPN ( Substitution - Permutation Network ) 이라는 구조를 사용하고 있다.
SPN 구조는 라운드 함수가 역변환이 되어야 한다는 제약이 있지만 더 많은 병렬성을 제공하기 때문에 암, 복호화 알고리즘의 고속화를 요구하며, 컴퓨터 프로세서 ( CPU )가 더 많은 병렬성을 지원하게 된 현 추세에 부응하는 방식이라 할 수 있다.
AES 알고리즘에서는 SPN은 128비트 단위를 표준으로 사용하여 Add Round Key, Sub Byte, Shift Row, Mix Column이 반복 되어 이루어진다.
AES의 알고리즘
◆ AES Calculation
AES 암호화 과정의 각 라운드는 비 선형성을 갖는 4가지 연산으로 구성되어 있다.
S-Box를 적용하여 Byte 단위로 치환을 수행하는 SubBytes 연산
행 단위로 순환 시프트를 수행하는 ShiftRows 연산
높은 Diffusion을 제공하기 위해 열 단위로 혼합하는 MixColumns 연산
라운드 키와 state를 XOR 하는 AddRoundKey 연산
* 마지막 라운드에서는 MixColumns 연산을 생략한다.
◆ AES state?
AES state란 AES 알고리즘의 모든 연산은 이 AES state라는 2차원 배열에 수행되는데 항상 4행으로 구성되며, 각 행은 Nb 바이트로 구성된다. 표준 Nb 의 값은 4이므로 항상 4 * 4 바이트가 된다.
S-Box
암호화 과정에서 가장 먼저 수행되는 것이 S-Box 과정, 정해진 표를 통해 치환하는 것이다. S-BOX에는 전방향, 역방향 두 가지가 있다. 전방향 S-Box를 거치고 다시 역방향 S-Box를 거치면 원문이 나온다.
ShiftRows
이 과정은 AES에서 유일하게 Permutation을 하는 과정으로 자리 바꿈을 함으로써 암호화 과정으로 평문에 모든 비트에 고루 영향을 주기 위해 수행한다. 첫 번째 줄은 그대로, 두 번째는 한 칸, 세 번쨰는 두 칸, 마지막은 세 칸 이런 식으로 움직인다.
Mix Columns
각각의 바이트에 특정행렬과 곱연산을 가하여 변환한다. 위 그림에서 왼쪽의 2311 행렬부분이 암호화에 쓰이는 행렬이며, 곱해지는 것은 예시로 입력한 32비트 입력이다. 연산은 행렬의 곱연산과 동일하게 이루어진다. 따라서 2 * d4 + 3 * bf + 5d + 30이 될 것이다. 이때 곱연산은 xtime으로 구현하고, 덧셈은 XOR로 바꾸면 된다.
Add Round Key
Add Round Key 연산은 간단하게 데이터와 키를 XOR 연산을 수행한다.
DES와 AES의 비교