사자자리

[암호학] 블록 암호: AES 본문

Dreamhack/암호학 Cryptography

[암호학] 블록 암호: AES

renne 2022. 8. 6. 23:09

AES(Advanced Encryption Standard)

 - 연산 능력의 향상으로 DES가 더 이상 안전하지 않게 되자, 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘

 - 내부적인 논의만으로 표준으로 선정된 DES와 달리, 전문가들의 심사를 거쳐 가장 뛰어난 알고리즘이 선정됐다. 보안성, 효율성, 하드웨어 이식의 적합성, 유연성 등을 고려하여 심사한 결과, Vincent Rijmen, Joan Daemen이 제안한 Rijndael 구조가 채택됐다.

 - 표준으로 선정된 이후부터 지금까지, AES에는 기밀성을 위협하는 치명적인 취약점이 발견되지 않았다. 또한 CPU 제조사들이 AES 연산을 위한 명령어를 따로 정의해 주어서 암호화, 복호화의 성능도 뛰어나다.

 - 이런 이유로 현대에는 대칭키 암호 알고리즘을 사용할 때, 일반적으로 AES가 사용된다.

 

SPN(Substitution Permutation Network)

 

 - AES가 사용하는 암호 구조

 - 곱 암호의 일종으로, S-Box를 사용하는 치환(Substitution)과 P-Box를 사용하는 순열(Permutation)을 여러 라운드에 걸쳐 반복한다.

 - 페이스텔 구조와 달리, 라운드마다 입력 전체에 라운드 함수를 적용한다.

 - 따라서 같은 수의 라운드를 사용할 때, SPN이 페이스텔 구조에 비해 2배의 암호학적 안전성을 갖는다.

 

AES의 구조

AES 암호화와 복호화 과정

 

 - AES는 라운드마다 128비트 크기의 블록을 암호화한다.

 - 키의 길이는 128, 192, 256비트 중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정된다.

 - 키의 길이가 128비트이면 AES-128, 192비트이면 AES-192, 256비트이면 AES-256이라고 부른다.

 

AES 암호화 과정

1. 각 블록을 4행 4열의 상태 배열(State)로 재구성한다. State의 각 칸에는 8비트(1바이트)가 저장된다.

2. 재구성된 입력에 대해 AddRoundKey 함수를 적용한다.

3. 마지막 라운드 전까지 매 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey 함수를 반복하여 적용한다.

4. 마지막 라운드에서는 MixColumns를 제외한 나머지 함수들만 적용한다.

 

AES 복호화 과정

 - AES의 라운드 함수들은 역함수가 존재하므로, 역함수를 이용하여 AES 복호화가 이뤄진다.

 

AES 라운드 함수

  1. SubBytes
  2. ShiftRows
  3. MixColumns
  4. AddRoundKey

 

1. SubBytes

 

 - State의 각 바이트를 S-Box를 참조하여 치환하는 함수

 - 바이트의 상위 4비트가 행, 하위 4비트가 열을 결정한다.

 - 예를 들어 어떤 바이트가 2A라면, 해당 바이트는 S-box의 2행 A열을 참조하여 E5로 치환된다.

 

 

2. ShiftRows

 - State의 각 행을 구성하는 바이트들을 쉬프트하는 함수

 - 4가지 함수 중에서 유일하게 순열의 역할을 수행

 - 암호화할 때는 2행, 3행, 4행을 각각 왼쪽으로 1칸, 2칸, 3칸씩 민다.

 - 복호화할 때는 2행, 3행, 4행을 각각 오른쪽으로 1칸, 2칸, 3칸씩 민다.

 

 

3. MixColumns

 

 - 열 단위로 치환을 수행하는 함수

 - 이 치환은 갈루아 필드 내에서의 행렬 연산으로 구해진다.

 

 

 

4. AddRoundKey

 

 - 키 생성 함수(Key Schedule)로 생성된 라운드 키의 state를 각 바이트별로 XOR한다.

 - 복호화할 때는 XOR의 성질을 이용하여 동일한 키를 state에 XOR한다.

 

 

키 생성 함수(Key Schedule)

 - 입력된 키로부터 각 라운드에 쓰일 라운드 키를 생성

 

 - AES는 암복호화를 시작할 때와 매 라운드마다 AddRoundKey 함수를 적용한다. 따라서 AES-128에서는 라운드 키가 11개 필요하다. 각 라운드 키는 4행 4열의 행렬이므로, 4행 44열의 키 행렬을 하나 만들고, 이를 4열씩 나눠서 매 AddRoundKey마다 사용하면 된다.

 

 

RotWord

 - 열을 위로 한 번 회전시킨다.

 

 

SubWord

 - SubBytes에서 사용한 것과 동일한 S-Box를 사용하여 각 바이트를 치환한다.

 

 

Rcon

 

키 생성 과정 정리

 

 - Rcon, 그리고 열과 기존의 열을 XOR하는 과정은 키의 길이에 따라 조금 차이가 있다.

 - 그러나 중요한 부분은 아니라고 생각되어 생략한다.

 

마치며

Q1. 다음 중 옳지 않은 것을 고르시오.

(1) 한 라운드를 거친 뒤 DES는 평문의 전체가 바뀌지만 AES는 평문의 절반만 바뀐다.
(2) DES는 페이스텔 구조이지만 AES는 SPN 구조이다.
(3) DES는 순열이 비트 단위로 이루어지지만 AES는 바이트 단위로 이루어진다.
(4) DES는 S-box의 역함수가 존재하지 않지만 AES는 S-box의 역함수가 존재한다.

A1. 1

 

Q2. AES에서 순열을 수행하는 함수는 무엇일까요?

(1) SubBytes

(2) ShiftRows

(3) MixColumns

(4) AddRoundKey

A2. 2

Comments