보안/암호학

[암호학] AES 복호 알고리즘 (Advanced Encryption Standard)

나야, 웅이 2023. 4. 6. 17:03
728x90
반응형
SMALL


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. 공격

  • 부채널공격, 관계키공격 등
728x90
반응형
LIST