포스트

Advanced Encryption Standard

Advanced Encryption Standard

〈컴퓨터정보보안〉 수업 노트


Advanced Encryption Standard(AES)는 DES의 를 대체하기 위해 만든 블록 암호화 표준이다. DES와 같이 반복 블록 암호화 방법을 사용하지만, DES와 달리 Feistel 구조를 사용하지 않는다.

  • 블록 크기: 128비트
  • 키 크기: 128, 192, 256비트
  • 라운드 수: 10, 12, 14 (키 크기에 따라 다름)
  • 각 라운드에서는 네 개 함수 사용
    • ByteSub: S-box substitution
    • ShiftRow: 행 단위 순환 시프트
    • MixColumn: 열 단위 재배열
    • AddRoundKey: 라운드 키 추가

ByteSub

ByteSub는 AES의 S-box 역할을 수행한다. 비선형 함수처럼 동작하지만 역과정을 수행할 수 있고, 두 개의 수학 연산으로 이루어진다.

입력의 마지막 4비트
입력의 첫 4비트
| 상위 \ 하위 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | 30 | 01 | 67 | 2b | fe | d7 | ab | 76 |
| 1 | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | ad | d4 | a2 | af | 9c | a4 | 72 | c0 |
| 2 | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 | d8 | 31 | 15 |
| 3 | 04 | c7 | 23 | c3 | 18 | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb | 27 | b2 | 75 |
| 4 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 | 29 | e3 | 2f | 84 |
| 5 | 53 | d1 | 00 | ed | 20 | fc | b1 | 5b | 6a | cb | be | 39 | 4a | 4c | 58 | cf |
| 6 | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 | 7f | 50 | 3c | 9f | a8 |
| 7 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | bc | b6 | da | 21 | 10 | ff | f3 | d2 |
| 8 | cd | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e | 3d | 64 | 5d | 19 | 73 |
| 9 | 60 | 81 | 4f | dc | 22 | 2a | 90 | 88 | 46 | ee | b8 | 14 | de | 5e | 0b | db |
| a | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 | d3 | ac | 62 | 91 | 95 | e4 | 79 |
| b | e7 | c8 | 37 | 6d | 8d | d5 | 4e | a9 | 6c | 56 | f4 | ea | 65 | 7a | ae | 08 |
| c | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 | e8 | dd | 74 | 1f | 4b | bd | 8b | 8a |
| d | 70 | 3e | b5 | 66 | 48 | 03 | f6 | 0e | 61 | 35 | 57 | b9 | 86 | c1 | 1d | 9e |
| e | e1 | f8 | 98 | 11 | 69 | d9 | 8e | 94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df |
| f | 8c | a1 | 89 | 0d | bf | e6 | 42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |

ShiftRow

ShiftRow에서는 각 행을 순환 시프트한다. 첫 번째 행은 그대로 두고, 두 번째 행은 한 칸, 세 번째 행은 두 칸, 네 번째 행은 세 칸 순환 시프트한다.

이전이후
$$ \begin{bmatrix} a_{0, 0} & a_{0, 1} & a_{0, 2} & a_{0, 3} \\ a_{1, 0} & a_{1, 1} & a_{1, 2} & a_{1, 3} \\ a_{2, 0} & a_{2, 1} & a_{2, 2} & a_{2, 3} \\ a_{3, 0} & a_{3, 1} & a_{3, 2} & a_{3, 3} \\ \end{bmatrix} $$ $$\begin{bmatrix} a_{0, 0} & a_{0, 1} & a_{0, 2} & a_{0, 3} \\ a_{1, 1} & a_{1, 2} & a_{1, 3} & a_{1, 0} \\ a_{2, 2} & a_{2, 3} & a_{2, 0} & a_{2, 1} \\ a_{3, 3} & a_{3, 0} & a_{3, 1} & a_{3, 2} \\ \end{bmatrix}$$

MixColumn

MixColumn은 가역한 선형 변환이다. 각 열을 재배열한다. 각 열은 4개의 바이트로 구성되며, 이 바이트를 4x4 행렬로 표현할 수 있다. 각 열은 고정된 다항식과 곱셈 연산을 통해 새로운 열로 변환된다.

이전이후
$$ \begin{bmatrix} a_{0, i} \\ a_{1, i} \\ a_{2, i} \\ a_{3, i} \\ \end{bmatrix} $$ $$ \begin{bmatrix} b_{0, i} \\ b_{1, i} \\ b_{2, i} \\ b_{3, i} \\ \end{bmatrix} $$

AddRoundKey

AddRoundKey는 각 라운드에서 사용하는 서브키를 평문과 XOR 연산하는 과정이다. 각 라운드에서 사용하는 서브키는 4x4 행렬로 표현할 수 있다. 이 키는 키 스케줄링 과정을 통해 생성된다.

\[\begin{bmatrix} a_{0, 0} & a_{0, 1} & a_{0, 2} & a_{0, 3} \\ a_{1, 0} & a_{1, 1} & a_{1, 2} & a_{1, 3} \\ a_{2, 0} & a_{2, 1} & a_{2, 2} & a_{2, 3} \\ a_{3, 0} & a_{3, 1} & a_{3, 2} & a_{3, 3} \\ \end{bmatrix} \oplus \begin{bmatrix} k_{0, 0} & k_{0, 1} & k_{0, 2} & k_{0, 3} \\ k_{1, 0} & k_{1, 1} & k_{1, 2} & k_{1, 3} \\ k_{2, 0} & k_{2, 1} & k_{2, 2} & k_{2, 3} \\ k_{3, 0} & k_{3, 1} & k_{3, 2} & k_{3, 3} \\ \end{bmatrix}\] \[= \begin{bmatrix} b_{0, 0} & b_{0, 1} & b_{0, 2} & b_{0, 3} \\ b_{1, 0} & b_{1, 1} & b_{1, 2} & b_{1, 3} \\ b_{2, 0} & b_{2, 1} & b_{2, 2} & b_{2, 3} \\ b_{3, 0} & b_{3, 1} & b_{3, 2} & b_{3, 3} \\ \end{bmatrix}\]

복호화

MixAddRoundKey, ShiftRow는 역연산이 쉽고, MixColumn과 ByteSub는 가역하다. 따라서, 각 라운드에서 수행한 연산을 역순으로 수행하여 평문을 복원할 수 있다.