본문으로 건너뛰기
대칭키와 비대칭키 - Kubernetes 인증 이해를 위한 기초

대칭키와 비대칭키 - Kubernetes 인증 이해를 위한 기초

Kubernetes 의 인증 방식을 이해하기 위해 암호화의 기본 개념인 대칭키와 비대칭키에 대해 알아봅니다.

암호화 기본 개념

평문 (Plaintext) → [암호화] → 암호문 (Ciphertext)
암호문 (Ciphertext) → [복호화] → 평문 (Plaintext)
  • 평문: 암호화되지 않은 원본 데이터
  • 암호문: 암호화된 데이터
  • 키 (Key): 암호화/복호화에 사용되는 비밀 값

대칭키 암호화 (Symmetric Key Encryption)

개념

    flowchart LR
    subgraph "송신자"
    P1["평문"]
    end
    
    subgraph "수신자"
    P2["평문"]
    end

    subgraph "암호화/복호화 과정"
    E["암호화 Encrypt"]
    D["복호화 Decrypt"]
    K(("대칭키 Secret"))
    end

    P1 --> E
    E -- "암호문" --> D
    D --> P2
    K -.-> E
    K -.-> D
  

핵심: 암호화와 복호화에 동일한 키 사용

특징

특성설명
키 개수1 개 (송신자와 수신자가 공유)
속도빠름 (하드웨어 가속 용이)
키 배포어려움 (보안 채널 필요)
용도대량 데이터 암호화

대표 알고리즘

알고리즘키 길이설명
AES128, 192, 256 비트현재 가장 널리 사용 (권장)
DES56 비트구식 (취약, 사용 금지)
3DES168 비트DES 개선 (점차 퇴출)
ChaCha20256 비트AES 대안 (소프트웨어 최적화)

예시: AES-256

# 의사코드 예시
key = "0123456789abcdef0123456789abcdef"  # 256 비트 (32 바이트)
plaintext = "Hello, Kubernetes!"

# 암호화
ciphertext = AES_Encrypt(key, plaintext)
# 결과: "a1b2c3d4e5f6..." (암호문)

# 복호화
decrypted = AES_Decrypt(key, ciphertext)
# 결과: "Hello, Kubernetes!" (원본 복원)

대칭키의 문제점: 키 배포

    sequenceDiagram
    participant A as Alice
    participant B as Bob
    Note over A,B: 키를 어떻게 전달할까?
    A->>B: 대칭키 (Secret Key) 전송?
    Note right of B: 문제: 탈취 위험!
    Note over A,B: n 명이 통신하려면 n(n-1)/2 개의 키 필요
  

키 배포 문제의 본질

“키 배송의 역설”

상황: Alice 가 Bob 에게 비밀 메시지를 보내고 싶음

문제:

  1. 메시지를 암호화하려면 공통의 키가 필요함
  2. 하지만 키를 안전하게 전달할 방법이 없음
  3. 키를 보내다가 해커에게 탈취당하면 모든 통신 노출!

역설: “보안 통신을 하려면 안전한 키 배송이 필요하지만, 안전한 키 배송을 하려면 이미 보안 통신이 필요하다.”

키 배포 시나리오

시나리오설명장점단점
직접 전달USB 등에 담아 오프라인 전달안전함비실용적, 확장성 없음
암호화 채널키를 암호화해서 전송편리함“키를 위한 키” 무한 루프 문제
제 3 자 의존신뢰할 수 있는 전달자 이용실용적제 3 자 해킹 시 모든 키 유출

키 관리 복잡성

n 명이 상호 통신할 때 필요한 키 수: n(n-1)/2

사용자 수필요한 키 개수비고
2 명1 개관리 가능
10 명45 개조금 복잡
100 명4,950 개관리 어려움
1,000 명499,500 개현실적으로 불가능

비대칭키가 해결한 문제: 키 배포

비대칭키의 핵심 아이디어

    sequenceDiagram
    participant A as Alice
    participant B as Bob
    Note over B: 1. 키 쌍 생성 (공개키/개인키)
    B->>A: 2. 공개키 배포 (누구나 접근 가능)
    Note over A: 3. Bob의 공개키로 메시지 암호화
    A->>B: 암호문 전송
    Note over B: 4. 자신의 개인키로 복호화 (나만 가능)
  

공개키 배포 방법

  1. 웹사이트 게시: https://bob.com/public-key.pem 등 누구나 다운로드 가능하게 게시
  2. 공개 키 디렉토리: 키 서버(keys.openpgp.org 등)에 등록하여 검색 가능하게 함
  3. 디지털 인증서 (CA): 신뢰할 수 있는 기관(CA)이 소유자 정보와 공개키를 묶어 서명한 인증서 형태

비대칭키의 장점/단점

구분내용
장점키 배포 용이, 사전 공유 불필요, 키 관리 간단 (n개), 디지털 서명 가능
단점대칭키보다 100~1000배 느림, 긴 키 길이, 개인키 분실/유출 시 치명적

비대칭키 암호화 (Asymmetric Key Encryption)

개념

    flowchart TD
    subgraph "송신자"
    P1["평문"] --> E["암호화 Encrypt"]
    end
    
    subgraph "수신자"
    D["복호화 Decrypt"] --> P2["평문"]
    end

    E -- "암호문" --> D
    
    K1["수신자의 공개키 Public"] -.-> E
    K2["수신자의 개인키 Private"] -.-> D
  

두 가지 사용 방식

1. 기밀성 (Confidentiality) - 암호화

  • 방법: 수신자의 공개키로 암호화 → 수신자의 개인키로 복호화
  • 결과: 수신자 본인만 읽을 수 있는 보안 통신 보장

2. 인증 (Authentication) - 디지털 서명

  • 방법: 송신자의 개인키로 서명 → 송신자의 공개키로 검증
  • 결과: 송신자의 신원 확인 및 데이터 위변조 방지 (부인 방지)

하이브리드 방식: TLS/SSL

현대 암호화 통신은 대칭키와 비대칭키의 장점을 결합하여 사용합니다.

TLS 핸드셰이크 흐름 (간략화)

    sequenceDiagram
    participant C as 클라이언트
    participant S as 서버
    
    C->>S: 1. ClientHello (지원 목록 전달)
    S->>C: 2. ServerHello + 인증서 (서버 공개키 포함)
    Note over C: 3. 인증서 검증 및 프리마스터 시크릿 생성
    C->>S: 4. 서버 공개키로 암호화된 프리마스터 시크릿 전송
    Note over S: 5. 개인키로 복호화하여 시크릿 획득
    Note over C,S: 6. 양쪽에서 동일한 세션 키 (대칭키) 생성
    C<->>S: 7. 생성된 대칭키로 고속 암호화 통신 시작
  

💡 참고: 위 흐름은 단순화한 것으로 고전적인 RSA 키 교환(TLS 1.2 이하)을 따릅니다. TLS 1.3 에서는 임시 ECDHE 교환으로 세션 키를 유도하고, 서버 인증서의 키는 핸드셰이크 서명에만 사용됩니다.


Kubernetes 와의 연관성

Kubernetes 내부의 다양한 보안 영역에서 이 메커니즘들이 활용됩니다.

  1. API Server TLS: 서버/클라이언트 인증서(비대칭키)와 실제 데이터 통신(대칭키) 결합
  2. ServiceAccount: 개인키로 토큰에 서명하고, 공개키로 위변조 여부 검증
  3. Secret 암호화: etcd 저장 시 AES(대칭키) 사용, 키 관리는 KMS(비대칭키/KMS) 연동 가능

요약

구분대칭키비대칭키
키 개수1개 (공유)2개 (공개키 + 개인키)
속도매우 빠름느림
키 배포어려움쉬움
주 용도대량 데이터 암호화키 교환, 디지털 서명, 인증
대표 알고리즘AES, ChaCha20RSA, ECDSA, Ed25519

대칭키와 비대칭키의 하이브리드 운영 원리를 이해하는 것이 Kubernetes 보안의 시작입니다.