https://dreamhack.io/lecture/courses/73 를 바탕으로 작성했습니다.
블록암호: AES
AES의 구조와 암호화 과정을 설명합니다.
dreamhack.io
1.들어가며
-서론
AES 란 ? 2001년에 새롭게 표준으로 선정된 블록 암호 알고리즘
AES는 연산 능력이 향상되면서 DES가 안전하지 않게 되면서 생긴 새로운 블록 암호 알고리즘이다.
DES : 내부적인 논의만을 이용해 표준으로 선정
AES : 암호 알고리즘을 전세계에서 공모 받고, 전문가들이 심사를 통해 알고리즘을 선정. 따라서 백도어가 설치됐을 거란 의심을 피할 수 있다. 또한 지금까지 취약점이 발견되지 않았고, AES 연산을 위한 명령어가 따로 정의돼어 있어 암호화, 복호화 성능도 뛰어나다.
보안성, 효율성, 하드웨어 이식의 적합성, 유연성 등을 고려 -> Rijndael 구조가 채택됐음
AES와 AES의 설계원리를 이해하기 위해 알아야 할 갈루아 필드,체,군 등도 간략히 살펴보자
2. AES
-SPN
AES는 SPN이라는 암호 구조를 사용한다! (substitution permutation network)
SPN이란? 곱 암호의 일종으로, S-Box를 사용하는 치환과 P-Box를 사용하는 순열을 여러 라운드에 걸쳐 반복한다
라운드마다 입력 전체에 라운드 함수를 적용하기 때문에, 같은 수의 라운드를 사용할 때 SPN이 페이스텔 구조에 비해 두 배이상 암호학적 안전성을 갖는다.

- AES 구조
AES 블록 암호는 라운드 당 128비트 크기의 블록을 암호화한다.
키 길이 : 128, 192, 256비트 중 택 일
라운드 수 : 10,12,14 (키 길이에 따라 결정됨)
ex) 키 길이:128비트 => AES-128, 키 길이:192비트 => AES-192
1. 각 블록을 4행 4열의 상태 배열(State)로 재구성한다. state 각 칸에는 8bit(1byte)가 저장된다.
입력이 1F3CF203B211C5AA6EB27A45E4D98130 라 했을 때,
[1F 3C F2 03]
[B2 11 C5 AA]
[6E B2 7A 45]
[E4 D9 81 30]
state로 재구성 된다.
2. 재구성된 입력에 대해 AddRoundKey 함수를 적용한다.
3. 마지막 라운드 전까지 SubBytes, ShiftRows, MixColumns, AddRoundKey 함수를 반복해 적용한다.
4. 마지막 라운드에서는 MixColumns를 제외한 나머지 함수들만 적용한다.

AES 라운드 함수들은 역함수가 존재해서, 역함수를 이용해 AES 복호화가 이뤄진다
여기서 언급된 AES 라운드 함수들인 SubBytes, ShiftRows, MixColumns, AddRoundKey에 대해 알아보자.
- AES 라운드 함수 - SubBytes
SubBytes란? State의 각 바이트를 'S-Box'를 참조하여 치환하는 함수
바이트의 상위 4비트가 행, 하위4비트가 열을 결정한다.

AES Sbox table을 참고해 확인해보자.

만약, 어떤 바이트가 2A라면, 해당 바이트는 S-box의 2행 A열을 참조해 E5로 치환된다.
4행 4열 상태 배열로 재구성한 블록을 SubBytes에 적용해보자.
[D7 12 04 5E] [0E C9 F2 58]
[32 AA 00 13] -> [23 AC 64 7D]
[97 F2 CA B1] [88 89 74 C8]
[71 EC F9 16] [A3 CE 99 47]
-AES 라운드 함수 - ShiftRows
ShiftRows란? State의 각 행을 구성하는 바이트들을 쉬프트 하는 함수
4가지 함수 중에서 유일하게 순열의 역할을 한다.
<암호화>
2행 : 왼쪽으로 1칸,
3행 : 왼쪽으로 2칸,
4행 : 왼쪽으로 3칸 민다.
<복호화>
2행 : 오른쪽으로 1칸,
3행 : 오른쪽으로 2칸,
4행 : 오른쪽으로 3칸 민다.
[AE 72 3C 7E] [AE 72 3C 7E]
[83 1A 32 D3] -> [1A 32 D3 83]
[97 18 6A C1] [6A C1 97 18]
[56 0C 29 86] [86 56 0C 29]

-AES 라운드 함수 -MixColumns
MixColumns 란? 열 단위로 치환을 수행하는 함수
이 치환은 갈루아 필드 내에서의 행렬 연산으로 구해진다. (자세한 설명은 생략)
예시는 dreamhack에서 가져왔다.



-AES 라운드 함수 -AddRoundKey
AddRoundKey 란? 키 생성 함수로 생성된 라운드 키의 state를 각 바이트별로 XOR 한다.
복호화할 때엔, XOR의 성질을 이용해 동일한 키를 state에 XOR한다 .
예)
state key
= [63 A9 24 0D] = [42 95 E1 7C]
[5C 2A 74 B6] [90 40 F6 77]
[A3 30 5D 11] [D6 10 0E 8D]
[C5 2C 34 7C] [D0 50 57 62]
에 AddRoundKey 를 적용하면,
= [42 95 E1 7C]
[90 40 F6 77]
[D6 10 0E 8D]
[D0 50 57 62]

- 키 스케줄 (Key Schedule)
키 생성 함수란? 입력된 키로부터 각 라운드에 쓰일 라운드 키를 생성
예)
알고리즘 : AES-128,
키 : [2B 28 AB 09]
[7E AE F7 CF]
[15 D2 15 4F]
[16 A6 88 3C]
AES는 암복호화를 시작할 대와 매 라운드마다 AddRoundKey를 적용한다. AES-128에선 라운드 키가 11개 필요함
각 라운드 키는 4행 4열의 행렬이므로, 4행 44열의 키 행렬을 하나 만들고, 이를 4열씩 나눠서 매 AddRoundKey마다 사용하면 된다. 키 행렬의 각 열을 W0,W1,...,W43으로 표현하겠다.
첫번째 AddRoundKey에선 입력된 키를 그대로 사용하므로, W0,W1,W2,W3은 입력된 키의 각 열들과 같다.
Wi>=4는 Wi-1에 RotWord, SubWord, Rcon을 적용하고, 이를 Wi-4와 XOR하여 생성한다. W4를 생성하는 과정을 보이며 각 함수를 설명하겠다.
RotWord
열을 위로 한 번 회전시킨다.
RotWord([09]) = [CF]
([CF]) = [4F]
([4F]) = [3C]
([3C]) = [09]
SubWord
SubBytes에서 사용한 것과 동일한 S-Box를 사용해 각 바이트를 치환
Subword([CF]) = [8A]
([4F]) = [84]
([3C]) = [EB]
([09]) = [01]
Rcon
R=[01,02,04,08,10,20,40,80,1B,36]인 R에 대해, Wi의 최상위 바이트를 R[i/4-1]과 XOR 한다.
예) i가 4라 했을 때,
Rcon([8A] ) [8A ⊕ R[0]] [8B]
([84] ,4) = [ 84 ] = [84]
([EB] ) [ EB ] [EB]
([01] ) [ 01 ] [01]
3. 마치며
-마치며
SPN(Substitution Permutation Network) : S-Box를 사용하는 치환과 P-Box를 사용하는 순열을 여러 라운드에 걸쳐 반복하는 곱 암호의 일종
AES(Advanced Encryption Standard) : DES가 취약해진 뒤, NIST가 새로 공모한 블록 암호의 표준 알고리즘. SubVytes, ShiftRows, MixColumns, AddRoundKey로 암호화 및 복호화가 이루어진다
퀴즈
1, 2
'해킹 > 암호학' 카테고리의 다른 글
| dreamhack [블록암호 :DES] 정리 (0) | 2021.10.09 |
|---|---|
| dreamhack [현대 암호] 정리 (0) | 2021.09.22 |
| dreamhack [머릿말] [고전암호] 정리 (0) | 2021.09.22 |