본문 바로가기

Crypto

AES

AES(Advanced Encryption Standard)

 

DES와 마찬가지로 대칭키를 쓰는 블럭 암호

높은 안전성과 속도

블럭의 크기가 128비트이며 암호화 키의 길이가 128, 192, 256비트인 세 가지 종류가 AES 표준으로 지정

암호화 키의 길이에 따라 실행하는 라운드의 수가 다른데, 각각 10, 12, 14 라운드를 실행

 

AES 알고리즘 단계

KeyExpansion : key schedule(키 스케줄)이라고도 부른다. 128, 192 또는 256비트 길이인 하나의 주 암호화 키를 받아서 아래 라운드들에서 사용할 여러 개의 128비트 라운드 키를 생성

0 라운드 : 위의 단계에서 생성한 라운드 키 중 첫번째 키를 사용, AddRoundKey를 한 번 실행한다.

1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다.

이것을 AES-128, 192, 256에 따라 각각 9번, 11번, 13번 반복한다.

마지막 (10, 12, 14)번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 순서대로 실행한다.

 

 

 

Key Scheduel

Metrix 형태 키의 맨 우측 열을 위쪽으로 한칸 쉬프트

S-Box에서 SubBytes수행

CF -> 8A

Wi-4 xor Wi-1 xor Rcon -> Wi

1라운드의 서브키 생성

다음 라운드의 서브키를 생성할 시

이전과 동일한 방법으로 다시 수행

(각 라운드 서브키의 맨 좌측 열은 

이전 라운드의 맨 우측 열을 SubBytes 후

Rcon을 포함하여 xor로 생성)

반복

출처: https://www.youtube.com/watch?v=gP4PqVGudtg

출처: https://www.youtube.com/watch?v=gP4PqVGudtg

 

SubBytes. ShiftRows, MixColumns, AddRoundKey

AES-128기준

 

SubBytes

S-box

0x4C -> 0x40 +0x0C -> 0x29

 

ShiftRows

ShiftRows처럼 열을 서로 섞어주는 단계가 없다면

각각의 열이 서로 따로 따로 암호화되어,

4개의 블럭 암호화를 실행한 것과 마찬가지가 되어 좋지 않음

 

128비트=16바이트 블럭을 4x4 바이트 행렬

 

첫번째 열은 그대로 두고

두번째 열은 왼쪽으로 한칸 Shift

세번째 열은 왼쪽으로 두칸 Shift

네번째 열은 왼쪽으로 세칸 Shift

 

ShiftRows를 진행한 후 아래와 같이 된다

 

Mix Columns

마찬가지로 4x4 행렬을 만든 뒤, 이번에는 열 단위에서 섞어주는 단계

a0 * [2 3 1 1] = r0
a1 * [1 2 3 1] = r1
a2 * [1 1 2 3] = r2
a3 * [3 1 1 2] = r3

 

r0 = (a0 * 2) + (a1 * 3) + (a2 * 1) + (a3 * 1)
r1 = (a0 * 1) + (a1 * 2) + (a2 * 3) + (a3 * 1)
r2 = (a0 * 1) + (a1 * 1) + (a2 * 2) + (a3 * 3)
r3 = (a0 * 3) + (a1 * 1) + (a2 * 1) + (a3 * 2)

 

덧셈은 평범한 덧셈이 아니며, XOR을 사용

 

AddRoundKey

KeyExpansion 단계에서 만든 라운드 키를 사용해서

128비트 블럭에 128비트 라운드 키(네 워드를 이어붙여 만든)를 XOR
XOR의 특성 때문에, AddRoundKey 단계는 복호화하는 데 굳이 별도의 역 공식이 필요하지 않고,

같은 라운드 키로 XOR을 한 번 더 하기만 하면 복호화가 됨

 

키 길이(워드/바이트/비트) 4/16/128 6/24/192 8/32/256

평문 블록사이즈

(워드/바이트/비트)

4/16/128 4/16/128 4/16/128
라운드수 10 12 14

라우드 키 길이

워드/바이트/비트

4/16/128 4/16/128 4/16/128

확장 키 길이

워드/바이트

44/176 52/208 60/240

'Crypto' 카테고리의 다른 글

블록 암호의 원리  (0) 2020.05.03
블록암호 VS 스트림 암호  (0) 2020.05.02
의사 난수 생성의 원리  (0) 2020.05.02
스트림 암호  (0) 2020.05.02
DES  (0) 2020.04.30