Computer Science/Cryptography

< 암호학 > AES 정의와 구조

dxwny 2024. 10. 3. 14:16
AES란?

 

Advanced Encryption Standard (AES)

DES의 대체 암호화 방식의 필요성이 대두되고, US NIST 공모로 1997년에 정해진 새로운 블록 암호화 방식

 

data는 128 bit,

key는 128 / 192 bit / 256 bit를 사용

입출력 데이터를 모두 128비트 (16바이트)의 블록으로 처리

 

Iterative AES

 

DES는 Feistel cipher

* Feistel 암호는 데이터를 왼쪽과 오른쪽으로 나눈 후, 반복적으로 교환하면서 변환을 수행하는 구조 *

 

하지만 AES는 Feistel 구조를 사용하지 않고, 모든 라운드에서 전체 데이터 블록을 사용하는 반복적 구조(iterative cipher)

* 라운드(round) - 데이터를 점점 복잡하게 변환하는 반복적인 처리 단계 * 

 

* 상태 배열

AES는 16바이트(128비트) 블록 단위로 데이터를 처리.
이 16바이트는 4x4 배열로 표현되며, 각 요소는 1바이트(8비트)로 구성되고, 이 배열을 상태 배열이라 함.

AES Structure

 

  • Substitute Bytes ( substitution, 치환 / Byte 단위 )
    - 상태 배열의 각 바이트를 고정된 테이블(S-box)을 통해 치환.

  • Shift Rows ( permutation, 행 이동 / Byte 단위 )
    - 상태 배열의 각 행을 왼쪽으로 순환 이동.

  • Mix Columns ( 열 혼합 / Block 단위 )
    - 각 열(column)을 수학적인 방법으로 변환해 데이터를 섞음.
    - 마지막 라운드에서는 생략

  • Add RoundKey ( 라운드 키 추가 )
    - 키를 상태 배열에 XOR 연산으로 결합.

    * 라운드 키는 각 라운드마다 사용될 키가 고유하게 존재.
       AES에서 처음 주어진 비밀 키로부터 파생 키를 계산하는 법을 AES Key Expansion라고 함.

  • AES Key Expansion ( 라운드 키 계산 )
    - 각 라운드에 word가 4개씩 사용되며, 이를 반복적으로 계산.

    - g(x) = S-Box(Left_Rotation_Word(x))  ⊕  Row_Constant-i
       -> Left_Rotation_Word(x) : 왼쪽으로 1 Byte씩 이동, 가장 앞 바이트는 맨 뒤로 이동
       -> Right_Constant-i : 라운드마다 정해져있는 상수값 

    ( 초기 계산 )
    w0 ⊕ g(w3) = w4
    w1 ⊕ w4 = w5
    w2 ⊕ w5 = w6
    w3 ⊕ w6 = w7
    * w0 w1 w2 w3 초기값이 존재

 

이 4가지 단계를 여러 라운드에 걸쳐 반복수행하며 암호화 진행.

* 라운드 수는 키의 길이에 따라 상이한데, 다음과 같다.

  • AES-128: 10라운드
  • AES-192: 12라운드
  • AES-256: 14라운드

 

즉,

Byte Substitution (바이트 치환), Shift Rows (행 이동), Mix Columns (열 혼합) 과정으로 초기 plain text에서 시작되는 데이터를 변형한 후, 라운드 키와 AddRoundKey (XOR 연산)을 수행하는 라운드를 반복하며 암호화를 진행하는 방식.

-> XOR 연산과 table lookup을 통해 구현 가능.