
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단계 변환으로 구성됨:
- SubBytes → S-box로 바이트 치환 (비선형성 부여)
- ShiftRows → 행 단위 바이트 위치 이동 (행마다 다르게 시프트)
- MixColumns → 열 단위 선형 변환 (GF(2⁸) 기반 행렬 곱)
- 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가지 연산 포함:
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
🔹 Step 4: 마지막 라운드 (Round N)
- 마지막 라운드는 MixColumns 없이 3단계만 수행:
- SubBytes
- ShiftRows
- 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가지 라운드 연산 단계
- Substitute Bytes (S-box 치환)
- 고정된 S-box를 사용하여 각 바이트를 비선형 치환함.
- 치환은 보안성을 높이기 위한 비선형 변환 역할 수행.
- ShiftRows (행 이동)
- 각 행의 바이트를 서로 다른 위치로 이동시킴.
- 단순한 전치(permutation) 연산으로, 행 수준의 확산(diffusion)을 수행.
- MixColumns (열 단위 곱셈 변환)
- 각 열을 GF(2⁸) 유한체 상의 다항식 곱셈으로 변환.
- 선형 치환(substitution) 과정으로 열 간 상호작용을 유도하여 확산 강화.
- 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 생성 과정 (암호화 시 사용)
과정 설명:
- 입력 바이트: 0x83
- 이진수: 10000011 → 다항식으로 해석하면 x⁷ + x + 1
- GF(2⁸)에서 역원 계산
- 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
- 비트 벡터로 변환 후, 고정 행렬 A와 XOR 수행 (Affine 변환)
- 행렬 A와 상수 벡터 B를 이용해 다음 연산 수행: S(x) = A · x⁻¹ ⊕ B
- 계산 결과: 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 생성 과정 (복호화 시 사용)
과정 설명:
- 입력 바이트: 0xEC (S-box의 출력값)
- Affine 변환 역연산 수행
- x = A⁻¹ · (W ⊕ B)
- GF(2⁸)에서 다시 역원 취함 (역변환)
- ((x⁷)⁻¹ = x⁷ + x + 1
- 결과 바이트: 0x83
- 복호화 완료
📌 요약:
| 단계 | S-box | Inverse S-box |
| 1 | 역원 계산 (GF(2⁸)) | Affine 역변환 |
| 2 | Affine 변환 (A·x ⊕ B) | 역원 계산 |
| 결과 | 비선형 치환 (혼돈성) 제공 | 복호화를 위한 정확한 복원 |
이 구조 덕분에 AES는 비선형성과 보안성을 유지하면서도 복호화가 정확히 가능하게 된다.
S-Box Rationale (설계 이유)

- 암호해독 공격에 대한 저항력
- S-box는 암호 해독(cryptanalytic) 공격, 특히 선형 대수 기반 공격이나 차분 분석 등 고전적 공격에 강하도록 설계되었음.
- 입력과 출력 간의 낮은 상관성
- Rijndael 알고리즘 개발자들은 입력 비트와 출력 비트 간의 상관성이 낮고,
- 출력이 입력의 선형 함수가 아니도록 설계하려고 했음.
- → 이렇게 해야 암호화 결과를 예측하거나 추론하기 어려워짐.
- 비선형성(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)
- 이 연산은 두 가지 관점으로 이해 가능:
- 열(column) 단위 연산: 상태 배열의 4바이트 열과 라운드 키의 1워드(4바이트) 간의 XOR
- 바이트 단위 연산: 각각의 바이트를 개별적으로 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라운드에서 매 라운드마다 사용될 키를 모두 제공함
🔹방식:
- **초기 4개의 워드 (16바이트)**는 원래의 키 값으로 복사
- 이후 워드들은 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:
- RotWord: 워드의 바이트를 왼쪽으로 회전
- SubWord: 각 바이트를 S-box로 치환
- 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 |