본문 바로가기

개념정리/Cryptography

5. 블록 암호 : AES

 

저번 시간은 DES에 대하여 공부하였다.

이번시간은 2001년에새롭게 표준으로 선정된 블록암호 AES에 대하여 공부할 것이다.

 


1. AES

AES는 SPN이라는 암호 구조를 사용하는 블록 암호이다. SPN은 곱암호의 일종으로, S-box를 사용하는 치환과 P-box를 사용하는 순열을 여러 라운드에 걸쳐 반복한다. 페이스텔 구조와 달리 라운드마다 입력 전체에 라운드 함수를 적용하기 때문에 같은 수의 라운드를 사용할  때 SPN이 페이스텔 구조에 비해 두배의 암호학적 안전성을 갖는다. (페이스텔 구조는 블록을 반으로 나눠 라운드마다 사용하기 때문이다.)

 

2. AES 구조

AES는 라운드마다 128비트 크기의 블록을 암호화한다. 키의 길이는 128, 192, 256비트 중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정된다. 키의 길이가 128비트이면  AES-128, 192비트이면 AES-192이라고 부른다. AES는 암호화를 할 때, 가장 먼저 블록을 4행 4열의 상태 배열 state로 재구성한다. state의 각 칸에는 8비트가 저장된다. 

state

이후에는 재구성된 입력에 대해 AddRoundKey 함수를 적용하고, 마지막 라운드 전까지 매 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey 함수를 반복하여 적용한다. 마지막 라운드에서는 MixColumns를 제외한 나머지 함수들만 적용한다. AES의 라운드 함수들은 역함수가 존재하므로 역함수를 이용하여 AES 복호화가 이뤄진다. 

AES 구조

3. AES 라운드 함수

1) SubBytes

SubBytes는 state의 각 바이트를 S-Box를 참조하여 치환하는 함수이다. 바이트의 상위 4비트가 행, 하위 4비트가 열을 결정한다. 

ex) 어떤 바이트가 D6이라면 해당 바이트는 S-Box의 D행 6열을 참조하여 F6으로 치환한다.

AES S-Box(출처 : 해시넷)

2) ShiftRows

ShiftRows는 state의 각 행을 구성한느 바이트들을 움직이는 함수이다. 이 함수는 4가지 함수 중 유일하게 순열의 역할을 한다. 2행은 왼쪽으로 1칸, 3행은 왼쪽으로 2칸, 4행은 왼쪽으로 3칸 이동한다.복호화할 때는 반대로 2행은 오른쪽으로 1칸, 3행은 오른쪽으로 2칸, 4행은 오른쪽으로 3칸씩 이동한다. 

 

3) MixColumns

MixColumns는 열 단위로 치환을 수행하는 함수이다. 이 치환은 갈루아 필드 내에서의 행렬 연산으로 구해진다. 

밑의 왼쪽 행렬에 임의의 상태열을 곱한다. 

4) AddRoundKey

AddRoundKey 함수는 키 생성 함수(Key Schedule)로 생성된 라운드 키의 state를 각 바이트 별로 XOR한다. 복호화할 때는 XOR의 성질을 이용하여 동일한 키를 state에 XOR한다. 

 

4. 키 생성 함수

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

키 행렬의 각 열을 W0, W1, ```, Wi, ```, W43으로 표현할 것이다. 첫번째 AddRoundKey에서는 입력된 키를 그대로 사용하므로 W0, W1, W2, W3는 입력된 키의 각 열들과 같다. i가 4이상 부터는 Wi-1에 1) RotWord, 2) SubWord, 3) Rcon을 적용하고 이를 Wi-4와 XOR하여 생성한다. 

1) RotWord

  • 열을 위로 한번 회전시킨다. 즉 밑으로 1칸씩 이동하며 마지막은 맨위로 올린다.

 

2) SubWord

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

 

3) Rcon

  • R = [01,02,04,08,10,20,40,80,1B,36]인 R에 대하여 Wi의 최상위 바이트(맨 위에 있는 바이트)를 R[i/4-1]과 XOR 연산을 한다.

 

즉, RotWord, SubWord, Rcon을 반복하여 W43까지 생성하고, 이를 4열씩 각 라운드에 사용한다. 

 


 

이번 시간에는 AES에 대하여 공부하였다.

다음 시간은 운영모드에 대하여 공부할 것이다.

 

'개념정리 > Cryptography' 카테고리의 다른 글

[Cryptography] CBC Bit-Flipping Attack  (0) 2022.08.02
6. 패딩과 운영모드  (0) 2022.08.01
4. 블록 암호 : DES  (0) 2022.07.25
3. 현대 암호  (0) 2022.07.25
2. 고전 암호  (0) 2022.07.22