IT/정보보안

[암호학] 대칭키 암호 - AES(Advanced Encrytion Standard)

액트 2019. 11. 15. 15:58

[암호학] 대칭키 암호 - AES(Advanced Encrytion Standard)


고급 암호화 표준

AES (Advanced Encryption Standard)

 

  • 대칭키를 쓰는 블록 암호이다. 높은 안전성과 속도로 인해 전 세계적으로 많이 사용되고 있다.
  • 현재 AES는 DES의 뒤를 이을 AES라는 이름을 걸고 NIST가 주최한 공모전에서 채택된 Rijndael(레인달) 알고리즘을 가리킨다. 엄밀하게는 Rijndael 알고리즘의 여러 가능성 중, 암호화 블록의 크기가 128비트이며 암호화 키의 길이가 128, 192, 256비트인 세 가지 종류가 AES 표준으로 지정되었다. 
  • 각각 AES-128, AES-192, AES-256으로 불린다.

1. 역사

  • 1997년 미국 국립기술표준원은 DES를 대체하기 위해 Advanced Encryption Standard 또는 AES로 불리는 암호 알고리즘을 공모하였고, 2001년 11월에 NIST는 최종 선택하여 공표 하였다.
  • NIST에서 AES 알고리즘으로 선택한 것은 레인달(Rijndael) 이었다. 

2. 선정기준(Criteria)

  • 안전성(security), 비용(cost), 구현 효율성(implementation)

3. 특징

  • 대칭형, 블록 암호화 알고리즘이다. 
  • 암호화 키는 128, 192, 256의 세 가지 중 하나가 될 수 있으며, 각각 AES-128, AES-192, AES-256으로 불린다. 암호화 키의 길이에 따라 실행되는 라운드의 수가 다른데, 각각 10, 12, 14 라운드를 실행한다.
  • S-Box를 간단히 설명하자면, 입력 데이터를 지정된 숫자로 바꿔서 암호를 깨기 어렵게 만드는 기법이다. AES는 이걸 창조롭게 재발명하여 암호화 속도를 높이고 싶으면 S-Box를 메모리에 넣어 두고, 프로그램 메모리 양을 줄이려면 실행히 S-Box를 연산으로 구해내는 기법을 사용했다.

4. 알고리즘

  • Rijndael(레인달)이 AES로 채택되었으므로 아래는 Rijndael(레인달) 알고리즘에 대한 설명이기도 하다.
  • 이해하기 쉬운 영상을 첨부한다. 

4.1 개요

Rijndael(레인달) 알고리즘은 크게 보아 네 단계로 이루어진다.

① KeyExpansion : Key schedule(키 스케쥴)이라고도 부른다. 128, 192 또는 256 비트 길이인 하나의 주 암호화 키를 받아서 아래 라운드들에서 사용할 여러 개의 128비트 라운드 키를 생성한다.

② 0 라운드 : 위의 단계에서 생성한 라운드 키 중 첫 번째 키를 사용, AddRoundKey를 한 번 실행한다.

③ 1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다. 이것을 AES-128, 192, 256에 따라 각각 9번, 11번 13번 반복한다.

④ 마지막 (10, 12, 14)번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 순서대로 실행한다.

AES

4.2 KeyExpansion 

 위에서 언급한 것처럼 Key schedule, 키 스케쥴이라고도 부른다. 하나의 주 암호화 키로부터 많은 라운드 키들을 만들어 낸다. 주 키의 길이에 따라 총 라운드 수가 달라지므로, 만들어야 할 라운드 키의 갯수도 다르다. AES-128, 192, 256에 따라 각각 11개, 13개, 15개의 라운드 키를 만든다.

Rijndael 알고리즘은 라운드 키를 만들 때 32비트=4바이트=워드씩, 연속적으로 만든다. AES는 세 버전 모두 128비트의 블록 사이즈를 사용하므로, 하나의 라운드 키는 이 4바이트 워드를 네 개 뭉쳐서 만든다. 그러므로 AES-128, 192, 256버전은 각각 44, 52, 60개의 4바이트 워드를 만들어야 한다.

 

5. 라운드(Rounds)

  • AES는 128비트 평문을 128비트 암호문으로 출력하는 알고리즘으로 non-Feistel 알고리즘에 속한다.
  • 10, 12, 14라운드를 사용하며, 각 라운드에 대응하는 키 크기는 128, 192, 256비트이다.
  • 키 크기에 따라 AES의 세 가지 버전이 존재하며 이들은 AES-128, AES-192, AES-256으로 불린다. 그러나 어떤 경우라도 키 확장 알고리즘으로부터 생성되는 라운드 키 크기는 평문과 암호문 크기와 동일한 128비트이다.
  • 각 라운드느 비선형을 갖는 S-box를 적용

① SubBytes() : 바이트 단위로 치환을 수행

② ShiftRows() : 행 단위로 순환시프트를 수행

③ mixColumns() : 높은 확산을 제공하기 위해 열단위로 혼합 (암호화의 마지막 라운드에서는 사용하지 않음)

④ AddRoundKey() : 라운드 키와 State를 EX-OR

암호화 1라운드
복호화 1라운드

6. 암호(Cipher)

  • DES에서는 Feistel 네트워크를 기본 구조로 사용하고 있지만, Rijndael에서는 SPN(Substitution-Permutation Network) 이라는 구조를 사용하고 있다.

※ SPN 구조

SPN 구조는 라운드 함수가 역변환이 되어야 한다는 제약이 있지만 더 많은 병렬성을 제공하고 있기
때문에 암호확 복호화 알고리즘의 고속화를 요구하며, 컴퓨터 프로세서(CPU)가 더 많은 병렬성을
지원하게 된 현 추세에 부응하는 방식이라 할 수 있다.

SPN은 입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box에 입력하여 치환시키고 S-box의 출력을
P-box로 전치하는 과정을 반복한다.