-
-AES 개요
평문을 128비트 단위로 나누어 암호화, 복호화를 수행
각각의 128비트를 4x4 행렬로 표현하여 연산을 수행함
State
- 4x4행렬로 표현
- 암호화, 복호화 과정의 중간 단계 결과물
- (4, Nb)의 이차원 행렬로 표현 [ Nb : 블록 길이 / 32 = 4 ]
- 기본 연산은 바이트 단위로 수행
-AES에서의 덧셈과 곱셈 연산
덧셈 연산은 mod2
곱셈 연산은 mod8
- m(x) = x^8 + x^4 + x^3 + x + 1
-AES 암호화 과정
1. 초기 평문과 라운드 키 XOR 연산
2. [SubBytes(), ShiftRows(), MixColumns()] Nr-1 번 수행
3. 마지막 라운드에서는 MixColumns() 연산을 수행하지 않음
-AES-128/192/256 비교 (키 길이, 평문 블록 길이, 라운드수)
키 길이(Nk)
평문 블록 길이(Nb)
라운드 수(Nr)
키 사이즈
블록 사이즈
AES-128
4
4
10
128
128
AES-192
6
4
12
192
128
AES-256
8
4
14
256
128
-AES 키 확장
Cipher Key K로부터 round key 생성
Round key의 길이 = Nb * (Nr + 1) words
SubWord(0 : 4byte를 입력으로 S-box를 적용한 결과
RotWord() : [a0, a1, a2, a3] -> [a1, a2, a3, a0]
Rcon[] : 라운드 상수
1. w[i] = SubWord (RotWord (w[ i-1 ])) ⊕ [Rcon[i/Nk]]) ⊕ w[i-Nk]
(단, i = 0 mod Nk)
2. w[i] = w[ i-1 ] ⊕ w[ i-Nk ]
(단, i =/= 0 mod Nk)
3. w[i] SubWord (w[ i-1 ]) ⊕ w[ i-Nk ]
(단, i = 4 mod 8)