R's Hacking Daily Log

Symmetric key Encryption - AES 본문

Daily-Note/cryptography

Symmetric key Encryption - AES

hanhxx 2023. 7. 7. 16:09

AES :: Advanced Encryption Standard

AES는 DES처럼 Block cipher 방식 중 하나로 128 bits의 data block을 암호화 & 복호화한다. 

 

AES에는 3가지 버전이 존재하는 데, 

이는 사용하는 cipher key의 길이가 어떻게 되느냐에 따라 (128 bits, 192 bits, 256 bits)

round 반복 횟수가 결정된다. (10, 12, 14 rounds)

 

 

AES 과정을 살펴보기 전에 먼저 단어 정의를 하고자 한다. 

흔히 말하는 Byte는 총 8개의 bits로 구성되고  Word는 그런 Byte가 4개 모인 걸 의미한다. 

다른 말로 Word는 32 bits로 구성된다고 할 수 있다. 

 

 

Block은 16개의 Byte로 구성되어 총 128 bits이며 다른 말로 4개의 Word로 만들어진다고 할 수 있다.

그림에서 b0~b3가 하나의 Word인 셈이다.

 

 

마지막으로 State는 4개의 Word로 구성된 matrix로 word 한 개에 속하는 4개의 byte를

수직으로 나열한 모습이라 할 수 있다. (1개의 column이 하나의 word 값을 나타냄)

 

즉 위의 그림에서 bo → s0,0에 들어가고 b1 → s1,0, b2 → s2,0, b3 → s3,0이 되는 것이다. 


필요한 용어는 정의를 했으니 이제 본격적으로 AES에 대해 알아보자!!

AES의 과정은 다음과 같다. 

위에서 말했듯이 128 btis의 input을 받아 Key size에 의해 결정된 round 만큼 반복한다. 

여기서는 Key size가 128 bits인 경우에 대해 살펴볼 것이다. 즉 총 10 rounds가 실행된다는 의미.

 

 

 

 

 

 

각 round에서 실행되는 내용은 다음과 같다. 

 

전 round에 걸쳐 알아둘 점은

1) round1이 시작되기 전에 Pre-round transformation

이 선행된다.

 

2) 마지막 round에서는 3번 째 연산인 MixColumns

실행하지 않는다. 

 

 

 

각 round에서는 128 bit의 Round key를 사용하여 

AddRoundKey 과정이 실행된다. 

 

 

 

 

 

 

 

1) SubBytes

round의 첫 번째 연산 SubBytes는 permutation table을 이용해서 각 State의 Byte 값을 바꾸는 것이다.

위와 같은 State가 있다고 할 때 Byte의 첫 번째 값은 row, 두 번째 값은 column이 되어 매칭되는 값으로

state값이 바뀌게 된다. 

 

ex) 첫 번째 column : 00 04 12 14

00 → row 0, column 0 :: 63

04 → row 0, column 4 :: F2

12 → row 1, column 2 :: C9

14 → row 1, column 4 :: FA

 

 

2) ShiftRows

두 번째 연산은 SubBytes의 결과로 만들어진 State를 가지고 실행된다. 

말 그대로 row를 기준으로 Byte의 위치를 왼쪽으로 이동시켜 주는 연산이다.

 

첫 번째 row는 0번, 두 번째 row는 1번, 세 번째 row는 2번, 네 번째 row는 3번 이동시키면 된다. 

위의 State가 SubBytes의 결과라고 가정했을 때 shiftrows 과정을 거치게 되면

첫 번째 row ) 이동하지 않으니 그대로 유지

두 번째 row ) 04 04 00 23 → 04 00 23 04

세 번째 row ) 12 12 13 19 13 19 11 12

네 번째 row ) 14 00 11 19 19 14 00 11

 

 

3) MixColumns

3번째 연산은 column을 기준으로 실행되는 연산으로 constant matrix와 State의 각 column을 사용한다.

constant matrix로 이미 정해져 있는 matrix로 값은 왼쪽 그림과 같다. 

MixColumns 연산은 왼쪽 matrix에 State의 각 column을 곱해서 새로운 column 값을 만들어내는 과정이다.

 

ex) 

첫 번째 row ) constant matrix(4x4) * [00 04 12 14]

두 번째 row ) constant matrix(4x4) * [12 04 12 00]

세 번째 row ) constant matrix(4x4) * [0C 00 13 11]

sp 번째 row ) constant matrix(4x4) * [08 23 19 19]

 

 

4) AddRoundKey

round의 마지막 연산은 각 round의 key word와 state의 column을 더하는 연산이다. 

여기서 사용하는 Round key는 각 round마다 다르게 생성되며 그 과정은 밑에서 알아볼 것이다. 

 

 

5) key Expansion

cipher key로 각 round에서 사용할 round key를 생성하는 과정으로 위에서 말했듯

cipher key는 128, 192, 256 bits를 사용할 수 있는데 cipher key가 몇 bit이든 round key는 128 bit로 생성된다. 

 

초기 128 bit로 들어온 cipher key는 pre-round에서 사용되고

key expansion 과정으로 만들어진 key는 round1에서부터 사용된다. 

 

W0~W3까지는 pre-round에서 사용되는 key이고 연산과정을 거쳐 만들어진 W4부터 W7까지가 round1의 key,

W8~W11까지가 round의 key가 되는 것이다. 

 

위에서 나오는 ti는 다음과 같은 과정으로 만들어진다. 

 

헷갈릴 수 있지만 ti는 round key를 생성하는 과정에 사용되는 값으로 

RotWord, SubWord는 AES의 round와 관련된 연산은 아니고 key 생성과 관련된 연산이라 봐야 한다. 

 

(ti를 계산하는 과정에서 사용되는 RCon은 constant matrix처럼 이미 정해져있는 matrix이다.)

 

 

1) RotWord

하나의 column을 기준으로 각 Byte를 한 칸씩 위로(맨 위의 Byte는 아래로) 이동시키는 연산이다. 

 

2) SubWord

AES round에 있는 SubBytes 단계와 똑같은 내용을 수행한다. 

 


[ AES - summary ]

: 128 bits의 input을 다룬다.

: cipher key는 128, 192, 256bits인 세 가지 버전

: cipher key 길이와 무관하게 round key는 128 bits로 만들어진다.

: 각 roun에서는 SubBytes, ShiftRows, MixColumns, AddRoundKey 연산이 수행된다.

: key expansion에서는 Rotword, Subword, xor 연산이 수행된다.

 

지금까지 AES의 전반적인 과정을 살펴보았다.

앞에서 다룬 DES와 비교했을 때 AES가 security 측면에서 더 안전하다고 할 수 있다.

 

또한 xor, shift 등 쉬운 연산으로 이뤄지다보니 메모리나 비용이 적게 들고

soft & hardware에서도 구현이 가능하다는 장점이 있다. 

'Daily-Note > cryptography' 카테고리의 다른 글

Symmetric Key Encryption - MACs  (0) 2023.07.09
Symmetric key Encryption - DES  (0) 2023.04.23
Symmetric key Encryption - Block Cipher  (0) 2023.04.22
Symmetric key Encryption - One Time Pad(OTP)  (0) 2023.04.21
Cryptography 맛보기  (0) 2023.04.20
Comments