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
SubBytes. ShiftRows, MixColumns, AddRoundKey
AES-128기준
SubBytes
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 |