본문 바로가기
Computer/Computer Security

대칭키 암호

by curious week 2025. 5. 13.

대칭키 암호 (Symmetric Key Encryption)

개념

  • 암호화와 복호화에 동일한 키 사용
  • 빠른 속도, 상대적으로 간단한 알고리즘
  • 장점: 효율적, 빠름
  • 단점: 키 분배의 어려움
암호화: C = EK(P)  
복호화: P = DK(C)

블록 암호 (Block Cipher)

  • 라운드 함수: 반복되는 함수
  • 키 스케줄: 키를 입력하여 라운드 키를 발생시키는 과정
  • 라운드 키: 라운드 함수에 작용하는 키

개념

  • 평문 → 고정된 크기 블록으로 나누어 암호화
  • 대표 구조
    • Feistel 구조 (DES, SEED 등)
    • SPN 구조 (AES, ARIA 등)

Feistel 구조

  • 블록을 좌·우로 나눠 XOR 및 라운드 함수 반복 (짝수 번의 라운드를 진행)
  • 역변환 용이 (복호화 시 암호화 과정 역순)

SPN 구조

  • S-box(치환) → P-box(전치) 순으로 진행
  • 라운드 함수가 역변환 가능해야 함
  • 병렬성 높음
  • 현재 가장 많이 사용됨
■ Feistel 구조 (DES 등)
┌──────────────┐
│ 입력 블록 (L0, R0) │
└─────┬────┬─────┘
      │    │
      ▼    ▼
   Li = Ri-1
   Ri = Li-1 ⊕ f(Ri-1, Ki)
┌─────┴────┴─────┐
│ 출력 블록 (Ln, Rn) │
└─────────────────┘

- 라운드 함수와 XOR 반복
- 좌·우 반씩 나누고 반복
- 역변환 용이

■ SPN 구조 (AES 등)
┌──────────────┐
│ 입력 블록 (전체)   │
└─────┬────────┘
      ▼
   SubBytes (S-box)
      ▼
   ShiftRows
      ▼
   MixColumns
      ▼
   AddRoundKey (⊕ Ki)
┌──────────────────┐
│ 출력 블록 (전체) │
└──────────────────┘

- S-box → P-box → 키 ⊕ 반복
- 병렬 처리 효율적
- 역변환 필요

블록 암호 사용 모드

ECB 각 블록 독립 암호화, 패턴 노출 위험
CBC 이전 암호블록 XOR 후 암호화, 인증 가능
CFB 스트림 형태, 복호화 함수 불필요
OFB 출력 피드백 방식, 에러의 전체 확산이 없음
CTR 카운터 사용, 병렬 처리 가능
■ ECB (Electronic Code Book)
P1 → E → C1
P2 → E → C2
P3 → E → C3
(각 블록 독립 암호화 → 패턴 노출 가능)

■ CBC (Cipher Block Chaining)
IV → ⊕ P1 → E → C1
C1 → ⊕ P2 → E → C2
C2 → ⊕ P3 → E → C3
(이전 암호문과 XOR → 인증 가능)

■ CTR (Counter Mode)
IV → E → K1 → ⊕ P1 → C1
IV+1 → E → K2 → ⊕ P2 → C2
IV+2 → E → K3 → ⊕ P3 → C3
(카운터 사용, 병렬 처리 효율적)

스트림 암호 (Stream Cipher)

개념

  • 평문과 동일한 길이의 키 스트림 생성
  • 비트 단위 XOR 처리
  • 예측 불가능한 의사 난수 시퀀스 사용

키 스트림 생성 방법

  • LFSR (선형 귀환 시프트 레지스터)
    • 짧은 키로 긴 키 스트림 생성
    • 주기가 존재하므로 단독 사용 시 해독이 쉬워 보안에 취약

대칭키 암호 알고리즘

알고리즘 | 구조 | 블록 크기 | 키 길이 | 특징

DES Feistel 64 bits 56 bits 16 라운드를 거쳐 암호화, 구식
TDEA Feistel 64 bits 168 bits DES 3회, 3DES라고도 부름
AES SPN 128 bits 128/192/256 bits 중 택 1 현대 표준, 빠르고 안전

DES 암호화 과정 흐름도 (Feistel 구조 기반)

평문 (64비트)
     │
초기 Permutation (IP)
     │
┌────┴────┐
│   L0     │   R0
└────┬────┘
     ▼
반복 (16 라운드):
┌────────────┐
│ Li = Ri-1   │
│ Ri = Li-1 ⊕ f(Ri-1, Ki) │
└────────────┘
     │
교환 (Swap L, R)
     │
최종 Permutation (IP-1)
     │
암호문 (64비트)

특징

  • 64비트 블록, 16라운드
  • Feistel 구조 (입력 블록 절반을 교환하며 반복)
  • 라운드 함수 f()에 복잡한 S-box, P-box 포함

AES 암호화 과정 흐름도 (SPN 구조 기반)

평문 (128비트)
     │
AddRoundKey (초기 키 XOR)
     │
┌────────────────┐
│ Round 1 ~ Nr-1 │
└────────────────┘
     │  SubBytes (S-box)
     │  ShiftRows
     │  MixColumns
     │  AddRoundKey (라운드 키 XOR)
┌──────────────┐
│ 마지막 라운드 │
└──────────────┘
     │  SubBytes
     │  ShiftRows
     │  AddRoundKey (라운드 키 XOR)
     │
암호문 (128비트)

특징

  • SPN 구조, 라운드 수 (키 길이에 따라 10, 12, 14로 라운드 수 다름)
  • MixColumns은 마지막 라운드에서는 제외됨
  • 강력한 비선형성 (S-box) + 치환/전치

기타 대칭키 알고리즘

  • IDEA, SEED, CRYPTON, RC5, FEAL, MISTY, Skipjack, ARIA, LEA
  • RC4 → 대표적인 스트림 암호

 

'Computer > Computer Security' 카테고리의 다른 글

공개키 암호  (0) 2025.05.13
디지털 포렌식  (0) 2025.05.13
React Native 보안 체크리스트  (1) 2025.04.01
웹 보안 및 모바일 보안  (0) 2025.04.01
이메일 보안  (0) 2025.04.01