6장-AES

2025. 4. 22. 19:39·컴퓨터 보안

AES와 유한체 산술 (Finite Field Arithmetic)

  • AES는 8비트 단위로 작동하며, 각 바이트는 GF(2⁸) 유한체의 원소로 간주된다.
  • 연산은 비가산 다항식 x⁸ + x⁴ + x³ + x + 1 을 기준으로 수행.
  • 나눗셈은 곱셈 역원을 이용하여 정의되며, 다음과 같다: a / b = a * b⁻¹
  • 연산 종류에는 덧셈, 곱셈, 나눗셈이 포함되며, 모든 결과는 필드 GF(2⁸) 내부에 존재하게 된다 (닫힘성).

AES 기본 개요

  • AES는 Rijndael 알고리즘을 기반으로 하며, NIST가 2001년에 DES를 대체하기 위해 채택함.
  • 블록 크기: 128비트 (4×4 바이트 배열)
  • 설계 철학: Open Design Principle에 기반
  • 제안자: Rijmen과 Daemen
  • 표준화: 2001년 NIST에 의해 FIPS PUB 197로 표준화됨

AES의 라운드 구조 (SPN: Substitution-Permutation Network)

🔹 블록 = 상태 (State)

  • 4×4 바이트 정사각 행렬 (16바이트 = 128비트)
  • 평문/암호문/중간 데이터를 표현하는 구조

🔹 키 크기별 라운드 수

  • 128-bit key → 10 라운드
  • 192-bit key → 12 라운드
  • 256-bit key → 14 라운드

🔹 키 확장 (Key Expansion)

  • 입력 키 → (라운드 수 + 1)개의 라운드 키 생성
  • 각 라운드 키는 128비트

🔹 SPN 설계 원칙

  • Substitution–Permutation Network 기반
  • 각 라운드는 4단계 변환으로 구성됨:
  1. SubBytes → S-box로 바이트 치환 (비선형성 부여)
  2. ShiftRows → 행 단위 바이트 위치 이동 (행마다 다르게 시프트)
  3. MixColumns → 열 단위 선형 변환 (GF(2⁸) 기반 행렬 곱)
  4. AddRoundKey → 라운드 키와 XOR 수행

AES 암호화 과정 요약 (Figure 6.1)

🔹 입력

  • 입력 키를 바탕으로 (라운드 수 + 1)개의 라운드 키 생성
  • Plaintext: 128비트 (16바이트) 평문 입력
  • Key: 암호화 키 (128, 192, 또는 256비트)

🔹 Step 1: Key Expansion

  • 키 길이에 따라 라운드 수와 필요한 키 수가 달라짐:
    Key Length (bytes) Rounds 라운드 키 수
    16 bytes (128-bit) 10 11
    24 bytes (192-bit) 12 13
    32 bytes (256-bit) 14 15

🔹 Step 2: Initial Transformation

  • 첫 번째 연산으로 Round 0 키를 입력 상태에 XOR (AddRoundKey)

🔹 Step 3: Round 1 ~ (N − 1)

  • 총 N-1 라운드를 순차적으로 수행
  • 각 라운드는 다음의 4가지 연산 포함:
    1. SubBytes
    2. ShiftRows
    3. MixColumns
    4. AddRoundKey

🔹 Step 4: 마지막 라운드 (Round N)

  • 마지막 라운드는 MixColumns 없이 3단계만 수행:
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

🔹 Step 5: 출력

  • 마지막 라운드 결과는 Ciphertext (암호문) 로 출력됨
  • (128비트 = 16바이트)
  • S-Box는 입력 바이트의 역원(곱셈역) + 고정 행렬 변환을 통해 만들어짐.
  • 공격에 강하게 설계됨: 비선형성 확보와 입력-출력 간 낮은 상관성 보장.

AES 파라미터 설명

키의 길이에 따라 AES 알고리즘의 내부 구조가 어떻게 달라지는지를 한눈에 보여주는 정리표

🔹 추가 설명:

  • words는 4바이트 단위. 예: 4 words = 16 bytes = 128 bits
  • Plaintext Block Size는 AES에서 항상 고정: 128비트 (16 bytes)
  • Expanded Key Size는 (라운드 수 + 1) × round key 크기 (128비트)
    • AES-128: (10 + 1) × 16 bytes = 176 bytes
    • AES-192: (12 + 1) × 16 bytes = 208 bytes
    • AES-256: (14 + 1) × 16 bytes = 240 bytes
  • 각 행의 바이트를 왼쪽으로 0, 1, 2, 3칸만큼 시프트해.
  • 목적: 열 사이의 상관관계를 분산시킴.

Figure 6.2 AES-128 Data Structures 설명

: AES에서 데이터와 키가 어떻게 구조화되고 확장되는지 이해하기 위한 도식

(a) Input, State Array, and Output

  • AES는 128비트(16바이트) 블록을 처리함.
  • 입력(in0 ~ in15)은 1차원 배열이지만, 처리 과정에서는 4×4 바이트 행렬(State Array) 로 변환됨.
  • 예: 입력 인덱스 순서
  • in0, in4, in8, in12 in1, in5, in9, in13 in2, in6, in10, in14 in3, in7, in11, in15
  • 변환된 이 배열이 AES 내부 연산에 사용되며, 각 라운드를 거친 후 다시 출력 1차원 배열(out0 ~ out15)로 재정렬됨.

sᵢⱼ는 state array의 (i, j) 위치를 의미 (0 ≤ i, j ≤ 3)

(b) Key and Expanded Key

  • AES-128은 128비트(16바이트, 4워드) 키를 사용함.
  • 이 키(k0 ~ k15) 또한 4×4 배열로 구성됨.
  • 키 스케줄(Key Expansion) 과정을 통해 **44개의 워드(176바이트)**로 확장됨:
    • M₀ ~ M₃: 초기 키 (원래 키)
    • M₄ ~ M₄₃: 키 확장을 통해 생성된 라운드 키들
    • 총 11개의 라운드 키 (10라운드 + 초기 라운드용)

각 라운드에 128비트(4워드)의 키가 사용되며, 이를 위해 총 44워드(11×4) 생성

📌 요약

구성 요소 설명
입력 16바이트 1차원 → 4×4 바이트 state array로 변환
상태 배열(State) AES 내부에서 모든 연산 수행되는 구조
출력 다시 1차원 배열로 변환됨
키 확장 128비트 입력 키 → 총 11개의 라운드 키 (44워드)

Figure 6.3 AES-128 Encryption / Decryption 설명

: AES가 라운드 기반 구조(SPN)로 이루어졌고, 복호화는 암호화의 역순으로 작동한다는 걸 한눈에 보여주는 그림

(a) 왼쪽 - AES 암호화 과정 (Encryption)

  • 입력 (Plaintext): 16바이트(128비트)의 평문이 들어옴.
  • 키 확장: 128비트 키가 11개의 라운드 키(w[0] ~ w[43])로 확장됨.
  • 결과: 16바이트 암호문(Ciphertext)

(b) 오른쪽 - AES 복호화 과정 (Decryption)

  • 암호문(Ciphertext)을 입력으로 받아 평문으로 복원
  • 역 연산 수행:
    • Inverse SubBytes
    • Inverse ShiftRows
    • Inverse MixColumns
  • Inverse AddRoundKey는 동일하게 XOR 수행
  • 라운드 흐름:
    • 초기 AddRoundKey(w[40~43])
    • Round 10 ~ Round 1 순으로 역연산 수행
    • 마지막에 w[0~3]을 XOR 하여 평문 복원

📌 요약

구분 암호화 (Encryption) 복호화 (Decryption)
연산 순서 Sub → Shift → Mix → AddKey Inverse Shift → Inverse Sub → Inverse Mix → AddKey
라운드 수 10회 10회
첫 연산 AddRoundKey AddRoundKey
마지막 라운드 MixColumns 생략 Inverse MixColumns 생략

AES-128: Detailed Structure 설명

🔹 전체 처리 방식

  • AES는 전체 데이터 블록(128비트)을 4x4 바이트 행렬로 보고, 각 라운드에서 **치환(substitution)**과 전치(permutation) 연산을 반복 수행함.
  • 초기 입력 키는 44개의 32비트 워드(w[i])로 확장되어 사용됨 (총 11개의 라운드 키 제공).

🔹 AES의 4가지 라운드 연산 단계

  1. Substitute Bytes (S-box 치환)
    • 고정된 S-box를 사용하여 각 바이트를 비선형 치환함.
    • 치환은 보안성을 높이기 위한 비선형 변환 역할 수행.
  2. ShiftRows (행 이동)
    • 각 행의 바이트를 서로 다른 위치로 이동시킴.
    • 단순한 전치(permutation) 연산으로, 행 수준의 확산(diffusion)을 수행.
  3. MixColumns (열 단위 곱셈 변환)
    • 각 열을 GF(2⁸) 유한체 상의 다항식 곱셈으로 변환.
    • 선형 치환(substitution) 과정으로 열 간 상호작용을 유도하여 확산 강화.
  4. AddRoundKey (라운드 키 XOR)
    • 현재 상태 행렬(state)과 확장된 키 w[i]를 비트 XOR 연산으로 결합.
    • 키와의 결합을 통해 보안성 확보.

AES S-Boxes

🔹첫 번째 이미지: S-box (Substitution Box)

  • 역할: 바이트 단위의 Substitute Bytes 단계에서 사용.
  • 목적: 각 바이트를 비선형적으로 치환하여 보안성(혼돈성, confusion)을 증가시킴.
  • 사용법:예: 0x7E → x=7, y=E → 해당 셀의 값은 EC
  • 바이트 값을 16진수로 나누어 앞 4비트는 행 x, 뒤 4비트는 열 y로 사용.

🔹두 번째 이미지: Inverse S-box

  • 역할: AES 복호화 시 사용하는 Inverse Substitute Bytes 단계에서 사용.
  • 목적: S-box로 대체된 바이트 값을 역변환하여 원래 값으로 복원.
  • 사용법:예: 0x83 → x=8, y=3 → Inverse S-box[8][3] = 83
  • 암호문에서 받은 바이트를 인덱스로 사용하여 해당 값을 조회.

📌 요약

구분 역할 사용 시점
S-box 바이트를 비선형 함수로 치환 암호화 (SubBytes)
Inverse S-box 치환된 바이트를 원래 값으로 역변환 복호화 (Inverse SubBytes)

이 테이블 덕분에 AES의 바이트 치환 과정은 미리 계산된 값으로 빠르게 처리된다.


Figure 6.6 Construction of S-Box and IS-Box

AES S-box와 Inverse S-box의 생성 과정을 수학적으로 설명한것. 두 개의 예제를 통해 입력 바이트가 S-box나 IS-box를 거쳐 어떻게 변환되는지를 보여준다.

🔹Example 1: S-box 생성 과정 (암호화 시 사용)

과정 설명:

  1. 입력 바이트: 0x83
    • 이진수: 10000011 → 다항식으로 해석하면 x⁷ + x + 1
  2. GF(2⁸)에서 역원 계산
    1. irreducible(기약다항식): x⁸ + x⁴ + x³ + x + 1
    • (x⁷ + x + 1)⁻¹ mod (x⁸ + x⁴ + x³ + x + 1) = x⁷ → Extended Euclidean Algorithm/비트 연산으로 구현된 알고리즘을 이용하거나, 이미 계산된 결과를 테이블로 씀
    • gcd(a(x), m(x)) = 1 -> a의 역원
      • a(x) = 0x95 = x⁷ + x⁴ + x² + 1
      • m(x) = x⁸ + x⁴ + x³ + x + 1 (0x11B)
    • 결과 이진수: 10000000
  3. 비트 벡터로 변환 후, 고정 행렬 A와 XOR 수행 (Affine 변환)
    • 행렬 A와 상수 벡터 B를 이용해 다음 연산 수행: S(x) = A · x⁻¹ ⊕ B
  4. 계산 결과: 11101100 → 0xEC
    • 즉, S-box에서 0x83 → 0xEC로 치환됨
  • W: 최종 바이트 결과 (S-box에 저장되는 값)
  • A: AES에서 정해둔 고정된 8×8 행렬
    • 선형변환 역할
    • 표준에 따라 정해져 있음 (암기할 필요 없음)
  • B: 고정된 8비트 상수 벡터 (01100011 = 0x63)
    • 역시 표준 정의에 따라 고정됨
  • V가 바로 역원 x⁷을 8비트 벡터로 표현한 것

→ 이 A, B는 AES 알고리즘 설계할 때 암호학적 보안 강화를 위해 고정된 값. 그냥 주어진 거고, 외워도 의미는 없음.

 

📌요약: S-box 변환 = 역원 구한 후, 선형변환(A), 상수 벡터 B와 XOR

 

🔹Example 1의 결과를 역으로 검증하는 과정: Inverse S-box 생성 과정 (복호화 시 사용)

과정 설명:

  1. 입력 바이트: 0xEC (S-box의 출력값)
  2. Affine 변환 역연산 수행
    • x = A⁻¹ · (W ⊕ B)
  3. GF(2⁸)에서 다시 역원 취함 (역변환)
    • ((x⁷)⁻¹ = x⁷ + x + 1
  4. 결과 바이트: 0x83
    • 복호화 완료

📌 요약:

단계 S-box Inverse S-box
1 역원 계산 (GF(2⁸)) Affine 역변환
2 Affine 변환 (A·x ⊕ B) 역원 계산
결과 비선형 치환 (혼돈성) 제공 복호화를 위한 정확한 복원

이 구조 덕분에 AES는 비선형성과 보안성을 유지하면서도 복호화가 정확히 가능하게 된다.


S-Box Rationale (설계 이유)

  1. 암호해독 공격에 대한 저항력
    • S-box는 암호 해독(cryptanalytic) 공격, 특히 선형 대수 기반 공격이나 차분 분석 등 고전적 공격에 강하도록 설계되었음.
  2. 입력과 출력 간의 낮은 상관성
    • Rijndael 알고리즘 개발자들은 입력 비트와 출력 비트 간의 상관성이 낮고,
    • 출력이 입력의 선형 함수가 아니도록 설계하려고 했음.
    • → 이렇게 해야 암호화 결과를 예측하거나 추론하기 어려워짐.
  3. 비선형성(Nonlinearity)의 핵심: 곱셈 역원 사용
    • AES S-box의 비선형성은 GF(2⁸)에서 역원(inverse) 연산을 사용함으로써 만들어짐.

⇒ S-box는 선형이 아닌 구조로 설계되어 예측을 어렵게 만들고, 역원 연산을 기반으로 강력한 보안성을 확보한 구성 요소다.


AddRoundKey Transformation(ARK)

🔹동작 방식

  • 128비트 상태(State) 와 128비트 라운드 키를 비트 단위로 XOR함
  • → 즉, State[i] = State[i] ⊕ RoundKey[i] (i = 0~127)
  • 이 연산은 두 가지 관점으로 이해 가능:
    1. 열(column) 단위 연산: 상태 배열의 4바이트 열과 라운드 키의 1워드(4바이트) 간의 XOR
    2. 바이트 단위 연산: 각각의 바이트를 개별적으로 XOR하는 간단한 연산

🔹설계 이유 (Rationale)

  • 가능한 한 단순한 연산이지만 상태의 모든 비트에 영향을 줌
  • → AES에서 가장 단순한 변환이지만 매우 중요함
  • 보안성 확보 포인트:
    • 복잡한 키 확장(Key Expansion) 과정과
    • 다른 AES 단계들(SubBytes, ShiftRows, MixColumns)의 복잡성과 함께 → 전체 AES의 강력한 보안성을 보장

SR & MC

이 슬라이드는 AES의 두 가지 주요 행렬 연산인 ShiftRows와 MixColumns를 시각적으로 설명한 것이다. 둘 다 혼돈(confusion)과 확산(diffusion)을 도입하는 데 핵심 역할을 한다.

(a) ShiftRows Transformation (행 이동 변환)

🔹설명:

  • AES의 상태 행렬은 4×4 바이트 배열로 구성됨.
  • 이 연산은 두 번째 행부터 각 행을 왼쪽으로 시프트하는 구조.
행 이동
0행 이동 없음
1행 왼쪽으로 1칸 이동
2행 왼쪽으로 2칸 이동
3행 왼쪽으로 3칸 이동

⇒ 열 단위에 있었던 값들이 행을 따라 분산되어 확산 효과 증가.

(b) MixColumns Transformation (열 선형 변환)

🔹설명:

  • 상태 행렬의 각 열(4바이트)을 GF(2⁸) 상의 행렬 A와 곱함. → 열마다 고정 행렬과 곱셈 (GF(2⁸))
  • 사용되는 고정 행렬 A:
[ 02 03 01 01 ]
[ 01 02 03 01 ]
[ 01 01 02 03 ]
[ 03 01 01 02 ]
  • 연산은 GF(2⁸) 유한체 위에서 이루어지며, 곱셈은 비트 단위의 연산 (XOR + 왼쪽 쉬프트)로 수행됨.

▶ 예시 계산 (오른쪽)

입력 열:

[ 0x87 ]
[ 0x6E ]
[ 0x46 ]
[ 0xA6 ]

MixColumns 수행:

  • 0x47 = 02·87 ⊕ 03·6E ⊕ 01·46 ⊕ 01·A6
    • {02}는 AES에서 “왼쪽 쉬프트 + 오버플로시 조건부 XOR 0x1B” 임
    • {03}·6E = 6E ⊕ ({02}·6E)
  • 각 항목은 GF(2⁸) 내에서의 곱셈과 XOR로 연산됨.

결과 열:

[ 0x47 ]
[ 0x37 ]
[ 0x94 ]
[ 0xED ]

이 다이어그램은 AES 암호화의 라운드 구조 (Figure 6.4 AES Encryption Round) 를 시각적으로 나타낸 것. AES 암호화는 여러 라운드로 구성되며, 각 라운드는 아래 4가지 연산을 포함한다.

그림에서 16개의 S 블록은 실제로 하나의 S-box 테이블을 16개의 입력에 대해 병렬 적용한 것을 보여주는 시각적 표현 → 각 1바이트에 대한 표현일뿐, 하나의 box이다.

단계 기능 특징
SubBytes 바이트 단위 S-box 치환 비선형성 (혼돈) 제공
ShiftRows 행 이동 패턴 제거, 확산
MixColumns 열 단위 행렬 곱 바이트 간 결합, 확산 강화
AddRoundKey 라운드 키와 XOR 키 종속성 확보

AES의 단일 라운드에서 사용되는 입력 요소들

이 다이어그램은 AES의 단일 라운드에서 사용되는 입력 요소들 (Figure 6.8: Inputs for Single AES Round) 을 보여준다. 각 라운드마다 어떤 연산이 어떤 입력값에 의해 수행되는지를 명확히 시각화한 구조.

🔴 왼쪽 붉은 박스: 고정된 입력 요소 (Constant Inputs)

  • S-box
    • 고정된 16x16 표로 구성된 비선형 치환 테이블
    • AES 표준에 명시됨 (공개되어 있음)
    • 공격자도 알고 있음 → 그러나 역원 기반 설계로 안전성 확보
  • MixColumns Matrix
    • 각 열을 이 행렬과 곱함 (GF(2⁸)에서)
    • 이 행렬도 AES 표준에 고정되어 있으며 공개됨
  • [02 03 01 01] [01 02 03 01] [01 01 02 03] [03 01 01 02]

⇒ 비록 S-box와 MixColumns 행렬은 공개 정보지만, 라운드 키는 비밀 값으로서 암호문의 보안을 보장합니다.

 

📌 요약:

구성 요소 설명 고정/가변
S-box 비선형 치환 테이블 고정
MixColumns 행렬 선형 변환용 고정 행렬 고정
Round Key 각 라운드마다 XOR할 비밀 키 가변 (비밀)
State Matrix 현재 상태 정보 (4x4 바이트) 라운드마다 변화

AES-128 Key Expansion

🔹목적:

  • 128비트(16바이트)의 키를 받아서 총 44개의 32비트 워드 (176바이트) 로 확장
  • 이렇게 확장된 키는:
    • 초기 AddRoundKey 1회
    • AES 10라운드에서 매 라운드마다 사용될 키를 모두 제공함

🔹방식:

  1. **초기 4개의 워드 (16바이트)**는 원래의 키 값으로 복사
  2. 이후 워드들은 w[i] = w[i−1] ⊕ w[i−4] 로 계산됨
    • 단, i가 4의 배수일 경우에는 복잡한 함수 g(w[i−1])을 적용

🔹보안적 설계 이유:

  • Rijndael 개발자들은 키 확장을 암호분석에 강하게 설계함
  • 라운드 상수 RC를 사용해 대칭성 제거 → 라운드마다 완전히 다른 키 생성
  • 비선형성 (Nonlinearity): 암호키의 일부를 알더라도 나머지 키를 계산하는 것이 어렵게 설계됨

 

슬라이드 185: Figure 6.9 AES-128 Key Expansion (시각화)

(a) 전체 알고리즘:

  • w[0] ~ w[3]: 원래 키 값 복사
  • 이후 w[i] = w[i−1] ⊕ w[i−4]
  • i mod 4 == 0일 때는 w[i] = g(w[i−1]) ⊕ w[i−4]

(b) Function g:

  1. RotWord: 워드의 바이트를 왼쪽으로 회전
  2. SubWord: 각 바이트를 S-box로 치환
  3. RC[j] XOR: 라운드 상수(Rcon)와 XOR
    • RC 값은 GF(2⁸) 상의 거듭제곱 (x¹, x², ..., x¹⁰)

🔸 정리: 차이점 요약

항목 AES-128 Key Expansion AES Encryption
역할 키 스케줄 평문을 암호문으로 변환
입력 128비트 키 128비트 평문
출력 11개 라운드 키 128비트 암호문
포함 연산 SubWord, RotWord, XOR, Rcon SubBytes, ShiftRows, MixColumns, AddRoundKey

Table 6.5 – AES Example (슬라이드 189)

🔹 목적: AES 암호화 과정에서 한 라운드마다 내부 상태(State)가 어떻게 바뀌는지를 구체적으로 보여줌.

🔹 내용 구성:

단계 설명
Start of Round 입력 블록 (플레인텍스트)
After SubBytes S-box를 통해 비선형 치환 적용
After ShiftRows 행 이동 변환 (ShiftRows)
After MixColumns 열 변환 연산 적용
Round Key 현재 라운드 키와 XOR (AddRoundKey)

🔹 핵심 포인트:

  • 각 라운드마다 암호화 결과가 점점 복잡해짐
  • AES의 혼돈성과 확산성을 시각적으로 확인 가능

Table 6.6 – Avalanche Effect in AES: Change in Plaintext

🔹 아발란치 효과 정의:

입력값(플레인텍스트) 또는 키의 한 비트만 변경했을 때, 출력값(암호문)에서 얼마나 많은 비트가 달라지는가를 보는 보안성 지표

🔹 실험 내용:

  • 첫 줄은 기준 평문 (Plaintext)
  • 다음 줄부터는 1비트만 변경된 평문 사용
  • 각 라운드마다 암호문에서 변경된 비트 수 측정

🔹 결과 해석:

  • 초기에는 1비트만 차이 → 2~3라운드부터는 50비트 이상 차이 발생
  • 즉, 소량의 입력 변경이 출력 전체에 큰 영향을 줌
  • 이는 좋은 암호가 가져야 할 속성

Table 6.7 – Avalanche Effect in AES: Change in Key

🔹 유사한 실험, 단 이번엔 "키"를 변경

  • 평문은 동일하게 유지
  • 키의 1비트만 변경 → 그에 따른 암호문 출력의 비트 변화 관찰

🔹 결과:

  • 마찬가지로 초반은 차이가 적지만, 몇 라운드만에 60비트 이상 차이 발생
  • 즉, 키의 아주 작은 변화가 완전히 다른 암호문을 만들어냄 → 암호 안전성 강화

결론: AES는 아주 작은 입력/키 변화에도 전체 출력이 크게 바뀌는 아발란치 효과를 잘 구현함 → 암호학적으로 매우 강한 구조임을 입증함.


AES의 구현적 측면

🔹 8비트 프로세서에서도 효율적으로 구현 가능

AES는 기본적으로 바이트 단위 연산 중심이기 때문에 저사양에서도 잘 작동함.

구성 요소 설명
AddRoundKey 바이트 단위 XOR 연산으로 매우 빠름
ShiftRows 단순 바이트 위치 이동 (byte-shift)
SubBytes S-box 테이블 (256바이트) 조회만으로 구현 가능
MixColumns GF(2⁸)에서의 행렬 곱 연산이지만, 여전히 바이트 단위로 처리 가능

→ AES는 전체적으로 바이트 기반 연산이기 때문에 저사양 환경에서도 쉽게 구현할 수 있음.

🔹 32비트 프로세서 최적화 구현

내용 설명
32비트 워드 단위로 연산 재정의 연산을 4바이트(32비트) 묶음으로 처리
사전 계산 테이블 4개 사용 SubBytes + ShiftRows + MixColumns 결과를 미리 계산해서 테이블화
한 컬럼 = 4 테이블 조회 + 4 XOR 각 라운드에서 한 컬럼의 암호화 결과를 빠르게 계산 가능
필요 메모리: 4KB 테이블 저장용
  • 예시 공식: Table lookup = BS + SR + MC
  • 선택된 이유 중 하나

AES가 NIST 표준으로 채택된 이유 중 하나는 이러한 고속 구현 가능성 때문임.

→ 하드웨어/소프트웨어 양쪽에서 구현이 빠르고 효율적임

항목 요약
8비트 환경 바이트 기반 연산으로 효율적
32비트 환경 테이블 기반 최적화로 고속 암호화
전반적 평가 간단하면서도 효율적인 구조 덕분에 AES가 채택됨

즉, AES는 구조적으로 구현이 단순하면서도 빠르게 동작하도록 설계되어 있다는 점이 핵심.


Intel AES New Instruction (AES-NI)

AES 전용 하드웨어 명령어로, AES 연산을 빠르게 수행하도록 Intel CPU에 탑재된 기능.

명령어 설명
AESENC AES 암호화 라운드 수행
AESENCLAST AES 마지막 암호화 라운드 수행
AESDEC AES 복호화 라운드 수행
AESDECLAST AES 마지막 복호화 라운드 수행

→ 이 명령어들을 사용하면 AES 연산을 소프트웨어가 아닌 하드웨어 수준에서 처리하므로 속도와 보안성 모두 향상됨.


Intel Galois Field Instruction

AES 연산 중 SubBytes나 MixColumns처럼 GF(2⁸)에서 연산이 필요한 경우, 이를 위한 전용 명령어도 존재.

예시 명령어: GFP2P8AFFINEINVQB

➡️ Galois Field Affine Transformation Inverse 연산 수행:

  • 수식: A × inv(x) + b
항목 설명
A 8×8 행렬 (고정)
x, b 8비트 벡터
inv(x) GF(2⁸)에서의 곱셈 역원

→ 이 명령어는 AES의 S-box 변환 구현에 최적화되어 있으며, 특히 암호화에서 비선형성을 제공하는 연산에 해당.

항목 목적
AES-NI 명령어 AES 암호화/복호화 라운드를 빠르게 수행
GF 연산 명령어 GF(2⁸)에서의 S-box 변환 및 역변환을 빠르게 수행
장점 하드웨어 가속 덕분에 속도 + 보안성 모두 향상됨

 

즉, Intel은 AES와 GF(2⁸) 연산을 명령어 수준에서 최적화하여, 고속 암호화와 보안 강화를 동시에 달성하려고 한 것.

'컴퓨터 보안' 카테고리의 다른 글

8장-난수와 스트림암호  (0) 2025.04.22
7장-Block Cipher Operation  (0) 2025.04.22
5장-Finite Fields and Polynomial Operation  (0) 2025.04.16
4장-Block Ciphers & DES  (1) 2025.04.13
3장-고전 암호 기법  (0) 2025.04.11
'컴퓨터 보안' 카테고리의 다른 글
  • 8장-난수와 스트림암호
  • 7장-Block Cipher Operation
  • 5장-Finite Fields and Polynomial Operation
  • 4장-Block Ciphers & DES
samsam031
samsam031
samsam031 님의 블로그 입니다.
  • samsam031
    samsam031 님의 블로그
    samsam031
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 디지털포렌식
      • 드림핵 문제풀이
      • 대외활동
      • 개발 실습
      • 컴퓨터 보안
      • 클라우드
      • 자격증
      • 자연어처리
      • 백엔드
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
samsam031
6장-AES
상단으로

티스토리툴바