AES 복호 알고리즘
InvMixColumn()
MixColumns()의 역변환
InvShiftRows()
ShiftRows()의 역변환 → 오른쪽으로 shift
ShiftRows()에서 수행한 순환 시프트 수 만큼 오른쪽으로 시프트 수행
InvSubBytes()
SubBytes()의 역변환
Inverse S-Box를 사용
AddRoundKey()
라운드 키와 현재 State를 비트 단위로 Exclusive-OR 연산
암호화 과정의 State와 라운드 키(128비트)는 동일 크기 가짐
암호화 과정과 같음
키의 확장 - 키 스케줄
- 키는 128, 192, 256비트 중 하나를 선택
- 각 라운드에서 AddRoundkey()에 사용되는 키를 라운드 키라고함 (DES의 서브키에 해당됨)
- 사용자의 마스터 키로부터 라운드 키 생성하는 방법
- 전체 라운드에 필요한 라운드 키 생성을 위해 키 확장 (DES의 키 스케줄 방법과는 달리 사용자가 입력한 키를 확장하여 라운드 키를 생성함)
- 전체 라운드 키에 필요한 워드 수 : Nb(Nr+1) 워드
- Nb는 블록의 크기, Nr+1은 라운드 키의 수
키 확장에 의한 전체 라운드 키의 크기
키는 128, 192, 256 비트 중 하나를 선택
전체 라운드에 필요한 라운드 키 생성을 위해 키 확장
전체 라운드 키에 필요한 워드 수 : Nb(Nr+1) 워드
Nb는 블록의 크기로 128, 192, 256비트 모두 블록의 크기 Nb는 4 word로 동일
Nr+1은 라운드의 키의 수
ex) AES-128는 총 10라운드 수행
→ Nb = 128bit = 4 word 이므로
→ Nb x ( Nr + 1 )
→ 4 x ( 10 + 1 ) = 44 word 필요
→ 초기 AES-128의 키는 4 word
→ 사용자가 입력한 키 4 word를 사용하여 40 word를 만들어, 총 44word의 키를 만듦
키 확장 함수
위의 예시 AES-128의 키확장에서 40word를 만드는 것이 키 확장이다
키 확장에 필요한 함수를 키 확장 함수라고 부름
SubWord()
4바이트 워드 입력 → 4바이트 워드 출력
SubBytes()의 S-Box이용
RotWord()
키의 확장 과정
Nk는 초기 암호화 키의 word 수, 사용자가 처음 입력한 값
1 word = 32 bit
처음 Nk개의 w[i]는 초기 암호화 키로 생성
i ) i가 Nk의 배수가 아닌 경우
ii) i가 Nk의 배수인 경우
ex) AES-128
→ key = 128 bit, 128÷32 = 4 word
→ Nk = 4 4개의 w[i] 생성 w[0], w[1], w[2], w[3]
→ Nb x ( Nr + 1 ) = 44word
→ 초기 생성된 4word 빼고 남은 40word ( w[4] ~ w[43] )는 위의 식에 의해 생성
각 라운드에서 4word의 라운드 키가 사용됨
0 라운드부터 10라운드까지 4word의 라운드 키를 총 11회 사용함
ex) AES-192
→ key = 192 bit, 192÷32 = 6 word
→ Nk = 6 6개의 w[i] 생성 w[0] ~ w[6]
→ 총 12라운드 이므로 4 x ( 12 + 1 ) = 52 word가 필요함
→ 각 라운드에서는 4word의 라운드 키를 사용함
→ w[6] ~ w[51] 부터 w[i] 생성
0라운드부터 12라운드까지 4word 라운드 키를 총 13회 사용함
*** 192비트면 6개 워드를 사용자가 입력하지만, 라운드마다 4word만 사용하기 때문에
0라운드에서 w[3]까지만 쓰고 다음 라운드에서 사용자가 입력한 w[4], w[5]와 만든 w[6], w[7]을 사용
AES의 특징 및 안전성
1. 암호화와 복호 과정이 다름
- S-Box 표를 역으로 검색
- 역변환(InvMixColumns(), InvShiftRound())
2. 암호와의 각 부분을 분리
- XOR : 키에 데이터 더함 (AddRoundKey())
- S-Box : 비선형성
- MixColumns() : 확산성
3. 보안성을 완벽하게 신회할 수 없음
4. 공격
- 부채널공격, 관계키공격 등
'보안 > 암호학' 카테고리의 다른 글
[암호학] 공개키 암호 (Public Key Cryptography) (0) | 2023.04.08 |
---|---|
[암호학] 암호 공격 유형과 강도 (0) | 2023.04.08 |
[암호학] AES 암호 알고리즘 (Advanced Encryption Standard) (0) | 2023.04.05 |
[암호학] 블록 암호 설계 및 구조 (0) | 2023.04.05 |
[암호학] DES (Data Encryption Standard) (1) | 2023.04.05 |