본문 바로가기

해킹/암호학

dreamhack [블록암호 : AES] 정리

 

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이 페이스텔 구조에 비해 두 배이상 암호학적 안전성을 갖는다. 

 

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 복호화가 이뤄진다

여기서 언급된 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