Skip to main content

20 AES/DES

대칭 키 암호화 알고리즘

개요

이번 강의에서는 암호화 알고리즘에 대해 간략히 알아보았습니다. AES/DES의 대칭키 알고리즘 원리를 살피고, 다음 글에서 비대칭 키, RSA, 해시 함수에 대한 내용을 이어 작성하겠습니다.


대칭키

Symmetric key encryption 암호화와 복호화에 같은 키를 사용하는 암호 방식

반대 개념은 비대칭 열쇠 암호, 공개 열쇠 암호 (public-key cryptography)입니다. JWT(JSON Web Token)의 공개키, 비밀키 방식을 떠올리면 쉽습니다.

대칭키 주요 특성

  • 암복호화 속도가 빠르지만 상대방도 같은 열쇠를 가지고 있어야 함
    • 잠긴 문을 열쇠가 하나라고 이해했습니다.
  • 열쇠 전달 과정에서 열쇠 정보가 노출될 수 있는 가능성이 있음
    • 단 하나의 열쇠를 누군가 탈취할 수 있겠습니다.
  • 대표적인 대칭키로 AES/DES가 있습니다.

AES/DES

  • AES와 DES
DESAES
페이스텔페이스텔비페이스텔
블록크기64bits128bits
키길이56bits128/192/256bits
암호화 프리미티브치환, 전치치환, 쉬프트, 비트혼합(분산)

용어

강의에서 낯선 용어가 많아 정리해보았습니다:

  • 페이스텔 (Feistel)
    • 페이스텔은 다음 암호화 과정을 따릅니다:
      1. 입력 데이터를 두 부분으로 나누고,
      2. 한쪽을 함수 처리 후
      3. 다른쪽과 XOR 연산으로 결합하는 구조
    • 복호화 시 동일한 구조로 역연산이 가능해 효율적
    • 암호화할 데이터 전체/부분 변환 여부에 따른 구분으로 파악했습니다.
  • 비페이스텔 (Non-Feistel)
    • 입력 블록 전체를 한 번에 변환하는 구조
    • AES처럼 순차적인 치환(Substitution)과 변환(Transformation) 사용
  • 암호화 프리미티브 (Encryption Primitive)
    • 암호 알고리즘을 구성하는 기본 연산 요소.
    • 예: 치환, 전치, 쉬프트, 비트 혼합 등.
  • 블록 크기 (Block Size)
    • 암호화 시 한 번에 처리되는 데이터의 크기.
    • DES는 64비트, AES는 128비트 암기하겠습니다.
  • 키 길이 (Key Length)
    • 암호화에 사용되는 비밀키의 비트 수.
    • 길수록 보안성은 높지만 연산량도 증가함.

암호화 연산 요소

위 용어들은 기본적으로 숙지해야 할 내용으로 보입니다. 특히 암호화 프리미티브가 기본 연산이라니 중요해 보입니다. 주요 용어를 표로 정리했습니다:

용어설명
치환 (Substitution)데이터의 비트를 다른 비트로 바꾸는 연산으로,혼돈(confusion)을 높여 키와 평문의 관계를 숨김
전치 (Permutation)비트나 바이트의 위치를 재배열하여 *분산(diffusion)*을 높이고 데이터 패턴을 섞음
쉬프트 (Shift)데이터 비트를 특정 방향으로 이동시키는 연산으로, AES에서는 행 단위 이동(ShiftRows)에 사용
비트 혼합 (Mixing / Diffusion)여러 비트를 조합해 새로운 값을 생성하며, 입력 비트 하나의 변화가 전체 출력에 영향을 미치도록 설계

DES

Data Encryption Standard

기술적인 원리 이해가 되지 않아 추가로 살펴보았습니다. 나무위키 문서에 설명이 잘 되어있습니다. 차근차근 기본 원리 파악에 집중해 보겠습니다.

기본 원리

구조페이스텔 Feistel 네트워크
블록 크기64bits
키 길이56bits
암호화 프리미티브혼돈, 분산
  • 64비트 평문을 64비트 암호문으로 암호화하며 키의 길이는 56bits, 라운드 수는 16
  • 키의 크기는 64비트, 7비트마다 오류검출을 위한 1비트씩 들어갔기 때문에 실질적인 키의 길이는 56비트

이어지는 DES 주요 알고리즘 파악에 앞서 용어를 찾아보았습니다.

❓ Round

한 번의 암호화를 여러 단계로 반복하는데, 각 단계를 **“라운드”**라고 부릅니다.

  • DES16라운드를 수행합니다.
  • 매 라운드마다 **부분 키(subkey)**를 사용해 **혼돈(confusion)**과 분산(diffusion) 효과를 강화합니다.
  • 구조는 페이스텔(Feistel) 방식으로, 데이터를 L(왼쪽)R(오른쪽) 두 블록으로 나눕니다.

❓ 암호문 Ciphertext

  • 평문(plain text)을 암호화한 결과 데이터입니다.
    • 문자열 "plain text"의 각 알파벳 인덱스를 -1 씩 이동하면 암호문 okzhm sdws가 됩니다.
  • DES에서는 64비트 평문이 동일한 크기(64비트)의 암호문으로 변환됩니다.
  • 복호화(decryption)를 거치면 다시 원래 평문으로 되돌릴 수 있습니다.

DES 원리

DES 원리 파악을 위해 주요 개념을 간략히 알아보겠습니다.

DES 암호화 과정 및 구조

DES의 암호화 과정을 단순화하면 다음과 같습니다:

64비트 평문 
→ 초기 전치(IP)
16라운드 반복
L0, R0 = 32비트씩 분할

for i = 1 to 16:
Li = R(i-1)
Ri = L(i-1) XOR F(R(i-1), Ki)

L16, R16을 결합
→ 최종 전치(IP⁻¹)
→ 암호문 출력

조금 더 디테일하게 시각적 구조로 정리하면 아래와 같습니다:

             ┌──────────────────────────────┐
64bit 입력 → │ Initial Permutation (IP)
└────────────┬─────────────────┘

┌────────────┴────────────┐
│ │
L0(32bit) R0(32bit)
│ │
<───┐ │
│ │16라운드 반복 │
│ └─ R(i) = L(i-1) XOR F(R(i-1), Kᵢ)

R16(32bit) L16(32bit)
└────────────┬────────────┘

┌────────────┴────────────┐
│ Final Permutation (IP⁻¹)
└────────────┬────────────┘

64bit 암호문
  • 16개의 페이스탈 Feistal 라운드 함수가 사용됩니다.
  • K1 ~ k16 -> round1 ~ round16
  • DES56비트 키길이를 가지기 때문에 전수조사에 취약하다고 합니다.
    • 대안으로 이중 des, 삼중 des (triple des)를 사용합니다.

DES가 56비트 키 길이를 가지는 이유는

  • 7 비트 + 1 오류 검출 비트 => 64비트로 구성
  • 64 - 8 => 56비트가 실질적인 키 길이

P-BOX

2개의 전치 Permutation

  • 비트 위치를 섞는 전치 연산(permutation)을 담당합니다.
  • 데이터를 재배열함으로써 **분산(diffusion)**을 높입니다.
  • 즉, 한 비트의 변화가 출력 전체에 영향을 주도록 설계된 장치입니다.

AES

Advanced Encryption Standard

DES는 56비트의 키를 사용하는 등의 문제로 안전하지 않다고 판단하여 NIST는 des를 대체할 새로운 암호 알고리즘 공모하였다고 합니다. 따라서 고안된 것이 AES입니다.

AES 특징

마찬가지로 AES의 특징을 표로 정리하면 다음과 같습니다. 먼저 블록 크기, 키 길이, 비-파이스텔 구조가 DES와 차이점으로 파악됩니다.

구조비페이스텔 구조 (Substitution–Permutation Network, SPN)
블록 크기128bits (고정)
키 길이128/192/256bits
암호화 방식혼돈(Confusion) + 분산(Diffusion)
암호화 프리미티브 연산치환(Substitution), 행 이동(Shift), 열 혼합(Mix), 전치(Permutation) XOR

AES 원리

강의 시간에 배운 내용을 요약하면 다음과 같습니다.

  • AES라운드 반복 구조로 설계
  • 평문을 128비트(16바이트) 블록 단위로 쪼깨서 시작
    • 블록 크기 128비트 (16바이트) / 1바이트 = 8비트 고정
    • 키 길이: 128, 192, 256 ... aes-128, aes-192, aes-256
  • AES-128 / 128비트 / 10라운드
  • AES-192 / 192비트 / 12라운드
  • AES-256 / 256비트 / 14라운드

AES 암호화 과정 및 구조

조금 더 상세히 AES의 암호화 과정을 살펴보면 다음과 같습니다:

128비트 평문 
→ 초기 키 추가 (AddRoundKey)
10~14라운드 반복 (키 길이에 따라 다름)

for each round:
1. SubBytes (S-box 비선형 치환)
2. ShiftRows (행 단위 순환 이동)
3. MixColumns (열 단위 선형 변환)
4. AddRoundKey (라운드 키 XOR)

최종 라운드 (MixColumns 생략)
→ 암호문 출력 (128비트)

이를 시각적으로 표현하면 다음과 같습니다:

              ┌──────────────────────────────┐
128bit 입력 → │ AddRoundKey (초기 키 추가)
└────────────┬─────────────────┘

┌─────────────┴─────────────┐
│ │
| 라운드 반복 (10/12/14회)
│ │
├─► SubBytes (S-box 치환)
├─► ShiftRows (행 이동)
├─► MixColumns (열 혼합)
└─► AddRoundKey (라운드 키 XOR)

┌────────────┴────────────┐
│ 최종 라운드 │
(MixColumns 생략)
└────────────┬────────────┘

128bit 암호문
  • AES는 비페이스텔 구조(SPN) 기반으로, 블록 전체를 한 번에 변환합니다.
    • 파이스텔 구조인 DESL, R로 평문을 나누는 것과 차이가 납니다.
  • 각 라운드는 동일한 연산 구조를 반복하며, 키 길이에 따라 라운드 수가 다릅니다.
    • 키 길이: 128 / 192 / 256bits
    • 라운드 수: 10 / 12 / 14
  • 암호화 프리미티브는 치환(SubBytes)과 혼합(MixColumns)을 통한 혼돈(Confusion), 분산(Diffusion) 효과에 기반합니다.

AES 라운드 개요

앞서 살핀대로, AES의 라운드는 반복됩니다. 각 라운드 반복문에 4가지 단계가 있어, 이를 간략히 정리합니다:

단계연산암호학적 역할
1SubBytesS-box를 사용한 비선형 바이트 치환. 암호문의 비선형성을 갖기 위해혼돈(Confusion)
2ShiftRows각 행의 바이트를 좌측으로 순환 이동. 행 단위로 shift 연산분산(Diffusion)
3MixColumns각 열을 행렬 곱으로 혼합. 열에 속한 모든 바이트를순환 행렬을 사용해 함수로 열에 있는 각 바이트를 대체분산(Diffusion)
4AddRoundKey라운드 키와 현재 state 블록을 비트별로 xor 연산키 결합