Skip to main content

0x04 암호학과 TLS (Cryptography and TLS)

강의 목표

강의 목표:
├── 암호학 기초
├── 대칭키 암호화
├── 비대칭키 암호화 (공개키)
├── 해시 함수, MAC, HMAC
├── 공유 비밀 생성 (Diffie-Hellman)
└── 최종 목표: SSL/TLS에서 위 기술들의 통합

강의 전 주의사항

중요: 이 강의에서는 암호학의 수학적 세부사항이 아닌 큰 그림에 초점

보안 엔지니어와 프로그래머 관점:
What they do (무엇을 하는가) ✓
How they work (어떻게 작동하는가) △

이유: 검증된 암호 알고리즘을 Building Block으로 사용

1. 암호학 개요

1.1 암호학의 목표

주요 목표: 안전하지 않은 채널에서의 안전한 통신

보안 목표:
├── Confidentiality (기밀성)
├── Integrity (무결성)
└── Authenticity (인증성)

1.2 수천 년의 문제

고전적 시나리오

왕 → 메신저 → 장군
"읽자마자 후퇴하라" - 당신의 왕

세 가지 보안 문제

1. 기밀성 (Confidentiality)

  • 적이 메신저를 잡아도 메시지 내용을 이해할 수 없어야 함

2. 무결성 (Integrity)

  • 메시지가 도중에 변조되지 않았음을 보장
  • 원래 메시지: "전선을 유지하라..."
  • 변조된 메시지: "읽자마자 후퇴하라"

3. 인증성 (Authenticity)

  • 메시지가 정말 왕으로부터 온 것인지 확인

고전적 해결책

기밀성: 암호화 (오직 키를 가진 자만 읽을 수 있음)
무결성: 봉인 (암호화된 메시지에 봉인)
인증성: 봉인 (발신자 확인용 봉인)

1.3 암호학의 역사

시대별 발전

기원전 405년: 그리스 스파르타 - 나무 막대기 암호
2000년 전: Caesar Cipher - 고정 숫자만큼 이동
1차/2차 대전: 기계적 암호화/복호화 장치 (ENIGMA)
현재: 수학과 전자 시스템 기반 현대 암호학

1.4 암호학 용어

Cryptology: 암호 생성과 해독의 예술과 과학
├── Cryptography: 암호 "생성"
└── Cryptanalysis: 암호 "해독"

암호 시스템 구성 요소:
Plaintext → [Cipher + Key] → Ciphertext → [Decrypt + Key] → Plaintext

암호 시스템 분류

  • 대칭키: 암호화와 복호화에 같은 키 사용
  • 공개키: 암호화용 공개키, 복호화용 개인키 사용

1.5 Kerckhoffs의 원칙

기본 가정:
• 시스템은 공격자에게 완전히 알려짐
• 오직 키만 비밀
• 암호 알고리즘은 비밀이 아님

이유:
• 비밀 알고리즘은 노출 시 취약함이 드러남
• 비밀 알고리즘은 영원히 비밀로 남지 못함
• 미리 약점을 찾는 것이 좋음

💡 추가 정보: 이는 Saltzer & Schroeder의 "Open Design Principle"의 암호학 버전입니다.

2. 고전 암호 분석

2.1 Caesar Cipher

암호화: 각 문자를 n만큼 이동
예시: A → D (n=3일 때)

분석 방법:
• 가능한 키: 26개
• 공격: 모든 키 시도 (Exhaustive Key Search)

2.2 치환 암호 (Permutation Cipher)

복잡도 분석

가능한 키 수: 26! > 2^88
무차별 대입 공격: 현실적으로 불가능

통계적 분석

영어 문자 빈도 분석:
E (12%), T (9%), A (8%), O (7%), I (7%), N (7%), S (6%), H (6%), R (6%)

공격 방법:
1. 암호문의 문자 빈도 계산
2. 가장 빈번한 문자를 'E'로 추정
3. 다른 문자들도 빈도 순으로 매핑
4. 언어적 패턴 활용하여 복호화

2.3 암호학적 보안 정의

안전한 암호 시스템: 알려진 최선의 공격이 모든 키 시도
불안전한 암호 시스템: 지름길 공격이 알려짐

역설: 불안전한 암호가 안전한 암호보다 깨기 어려울 수도 있음

3. 현대 대칭키 암호학

3.1 일회용 패드 (One-Time Pad)

암호화/복호화 과정

문자 인코딩: e=000, h=001, i=010, k=011, l=100, r=101, s=110, t=111

암호화: Plaintext ⊕ Key = Ciphertext
복호화: Ciphertext ⊕ Key = Plaintext

예시:
Plaintext: h e i l h i t l e r
001 000 010 100 001 010 111 100 000 101
Key: 111 101 110 101 111 100 000 101 110 000
Ciphertext: 110 101 100 001 110 110 111 001 110 101
s r l h s s t h s r

OTP의 완벽한 보안성

같은 암호문에 대해 여러 평문 가능:
Ciphertext: s r l h s s t h s r

Key1 → Plaintext1: "heil hitler"
Key2 → Plaintext2: "kill hitler"
Key3 → Plaintext3: "helike sake"

결론: 암호문이 평문에 대한 유용한 정보 제공하지 않음

OTP 요구사항

완벽한 보안 조건:
• 패드는 무작위여야 함
• 패드는 한 번만 사용
• 패드는 송신자와 수신자만 알고 있어야 함
• 패드 크기 = 메시지 크기

현실적 한계: 키 배송과 관리의 어려움

3.2 코드북 암호

개념: 코드워드가 가득한 책

Zimmerman Telegram 예시:
Februar → 13605
fest → 13732
finanzielle → 13850
...

현대 블록 암호 = 코드북!

가산 코드북

프로세스:
1. 코드북으로 메시지 암호화
2. 가산책에서 무작위 숫자 선택
3. 가산값을 더해서 최종 암호문 생성
4. 암호문 + 가산 위치(MI) 전송
5. 수신자는 가산값 빼고 복호화

목적: 패턴 은닉과 추가 보안

3.3 현대 대칭키 암호 분류

Stream Cipher (스트림 암호):
• 일회용 패드의 일반화
• 짧은 키를 긴 키스트림으로 확장
• 비트 단위 암호화
• 하드웨어 구현 용이, 빠른 속도

Block Cipher (블록 암호):
• 코드북의 일반화
• 고정 크기 블록 단위 암호화
• 높은 데이터 처리량
• Confusion과 Diffusion 사용

3.4 현대 암호화 방식 개요

현대 암호학 분류:
├── 대칭키 암호화 (Symmetric-Key)
│ ├── 스트림 암호
│ └── 블록 암호
├── 비대칭키 암호화 (Asymmetric-Key/Public-Key)
└── 해시 알고리즘
└── 일방향 암호화

3.5 난수 생성

난수의 중요성

암호 시스템에서 신뢰할 수 있는 난수 소스는 필수
용도: 키 생성, 초기화 벡터, 솔트 등

난수 생성기 종류

1. 진난수 생성기 (TRNG)

• 물리적 랜덤성 기반
• 반도체 노이즈, 디지털 회로 지터 등
• 통계적으로 무작위
• 하드웨어 구현

2. 의사난수 생성기 (PRNG)

• 초기 시드값으로부터 수열 생성
• 통계적으로 무작위한 바이트 스트림
• 시드를 알면 예측 가능

위험: 공격자가 시드를 알거나 영향을 미치면 예측 가능

3. 암호학적 안전 의사난수 생성기 (CSPRNG)

• 안전한 특성을 가진 특별한 PRNG
• 출력이 예측 불가능해야 함
• n개의 연속 비트가 주어져도 n+1번째 비트 예측 불가

4. 현대 대칭키 암호 시스템

4.1 대칭키 암호화 개념

특징:
• 암호화/복호화에 같은 키 사용
• 송신자와 수신자가 미리 공유 비밀키 보유

key key
plaintext → encrypt → ciphertext → decrypt → plaintext

4.2 DES (Data Encryption Standard)

DES 특징

개발: IBM + NSA 영향
표준화: 1977년 NIST
유형: 블록 암호 (스트림 암호로도 설정 가능)
블록 크기: 64비트
키 크기: 56비트
사용 기간: 30+ 년 (1970s~2000s)
현재 상태: 키 길이 부족으로 불안전

3DES

구성: DES를 3번 적용
키 크기: 168비트 (3 × 56비트)
상태: 2023년 NIST에서 폐지 권고
이유: AES가 더 효율적, 안전, 다양한 키 크기 지원

4.3 AES (Advanced Encryption Standard)

AES 기본 정보

개발자: Vincent Rijmen, Joan Daemen (벨기에)
NIST 채택: 공식 표준
유형: 블록 암호
블록 크기: 128비트
키 크기: 128, 192, 256, 512비트

AES 특징

동작: 128비트 블록에 다중 라운드 변환
변환 종류: 치환(substitution), 혼합(mixing), 키 추가
현재 상태: 골드 스탠더드
하드웨어 지원: Intel AES-NI, ARM 등 내장

4.4 AES 블록 암호 모드

주요 모드들

• ECB (Electronic Code Book)
• CBC (Cipher Block Chaining)
• OFB (Output Feedback)
• CFB (Cipher Feedback)
• CTR (Counter)
• GCM (Galois Counter Mode)

모드별 특성 비교표

모드유형설명패딩 필요특징
ECBBlock각 블록 독립 암호화Yes패턴 누출, 비추천
CBCBlock이전 암호문과 XOR 후 암호화YesIV 필요, 패딩 오라클 취약
CTRStream-like카운터 암호화 후 평문과 XORNo병렬화 가능, 현대 프로토콜 선호
CFBStream-like이전 암호문으로 다음 평문 암호화No자체 동기화 스트림
OFBStream-like암호화 출력 피드백으로 키스트림 생성No비자체 동기화
GCMStream-likeCTR + 인증 (AEAD)No빠름, 안전, 널리 사용

ECB 모드의 문제점

문제: 동일한 평문 블록 → 동일한 암호문 블록
결과: 암호문에서 패턴 인식 가능
예시: 같은 색상의 픽셀들이 같은 암호문 생성

CTR 모드

동작 방식:
1. 각 블록마다 카운터 값 추가
2. 새로운 키스트림 블록 계산
3. 평문과 XOR하여 암호문 생성

장점: 병렬 처리 가능, 무작위 접근 가능

GCM 모드

구성: CTR 모드 + MAC 계산

특징:
• C in GCM = Counter (CTR과 같은 방식)
• 암호화 중 MAC 동시 계산
• AEAD (Authenticated Encryption with Associated Data)

보장:
• Message Authentication: 원본 송신자 확인
• Message Integrity: 전송 중 변조 감지

4.5 ChaCha20

개발: Google
유형: 스트림 암호
보안성: AES와 동등한 안전성
표준: TLS 1.2, 1.3에 포함

성능 비교:
• AES: 고성능 머신에서 빠름
• ChaCha20: 모바일/임베디드 기기에서 빠름
• AES: 소프트웨어 안전 구현 어려움

5. 해시 함수

5.1 해시 함수 기본 개념

특징:
• 일방향 암호화 (언해싱/디해싱 불가능)
• 키 사용하지 않음: H(m) = h
• 빠른 계산 시간

대비: 암호화는 Enc(key, m) = c

5.2 해시 함수의 목적

용도:
1. 임의 길이 데이터의 고정 크기 "지문" 생성
2. 패스워드 해싱 (평문 저장 불필요)
3. 무결성 보장

6. MAC과 HMAC

6.1 MAC (Message Authentication Code)

정의: 키를 사용하는 일방향 함수
형태: MAC(k, m) = d
용도: 메시지 끝에 다이제스트 첨부하여 수신자 검증

6.2 MAC vs Hash 비교

MAC:                          Hash:
• 키 사용 • 키 미사용
• 무결성 + 인증성 보장 • 무결성만 보장
• 공유키 필요한 검증 • 누구나 검증 가능

6.3 HMAC

정의: Hash-based Message Authentication Code
특징: 현재 가장 널리 사용되는 MAC
구현: 해시 함수(예: SHA-256)로 MAC 구축

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))

여기서:
• H: 암호학적 해시 함수
• K: 비밀키
• K': 블록 크기로 확장된 키
• opad, ipad: 패딩 상수

6.4 MAC 요약

MAC의 역할:
• 키와 메시지를 받아 다이제스트 생성
• 무결성 보장
• 인증성 보장

사용법: 메시지 끝에 다이제스트 첨부
현재 표준: HMAC이 해시 함수를 MAC으로 변환

7. 공개키 암호 시스템

7.1 공개키 암호의 역사

배경

1970년대 중반 이전: 모든 암호는 대칭키
현재: 대칭키가 여전히 2-3배수 더 빠름
질문: 왜 공개키 암호가 혁신적이었는가?

키 교환 문제

대칭키 시스템의 문제:
• Alice와 Bob이 공유 대칭키 Ks 필요
• 키 배송을 위한 안전한 채널 필요
• n명 참가자 시 n개 키 필요

인터넷 환경에서 더 큰 문제:
• 신뢰할 수 없는 매체
• Google 방문해서 물리적 키 교환 불가능

역사적 발전

1976: Whitfield Diffie, Martin Hellman (Stanford)
→ Diffie-Hellman Key Exchange 발표

1978: Ron Rivest, Adi Shamir, Leonard Adleman (MIT)
→ RSA 알고리즘 발표

1973: Clifford Cocks (영국 GCHQ)
→ RSA와 유사한 PKC 구현 (기밀)

7.2 공개키 암호 개념

키 생성

RSA 등 공개키 시스템 키 생성 결과:

Public Key (공개키):
• 데이터 암호화용
• 비밀이 아님

Private Key (개인키):
• 데이터 복호화용
• 비밀

실제 사용 예시

Github SSH 키 생성:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

결과:
• id_rsa (개인키) - 비밀 보관
• id_rsa.pub (공개키) - Github에 등록

7.3 공개키 암호의 응용

세 가지 주요 응용

1. 암호화/복호화 (기밀성)
2. 디지털 서명 (인증성)
3. 키 교환

암호화/복호화

프로세스:
1. Bob이 공개키 쌍 생성
2. Bob이 공개키를 Alice에게 전송
3. Alice가 Bob의 공개키로 메시지 암호화
4. Alice가 암호문을 Bob에게 전송
5. Bob이 자신의 개인키로 복호화

디지털 서명

서명 과정:
1. 메시지 해시 계산: Hash(Msg)
2. 개인키로 해시 암호화: Enc(Hash, KPriv) = Signature
3. 메시지 + 서명 전송

검증 과정:
1. 받은 메시지의 해시 계산: Hash(Msg)
2. 공개키로 서명 복호화: Dec(Sig, KPub)
3. 두 해시값 비교
4. 일치하면 서명 유효

7.4 Diffie-Hellman 키 교환

동기

문제: 공개키 시스템이 대칭키보다 훨씬 느림

해결책: 하이브리드 암호 시스템
• 키 캡슐화: 공개키 시스템 사용
• 데이터 캡슐화: 대칭키 시스템 사용

DH의 핵심 아이디어

목표: 두 당사자가 "공유키를 함께 생성"
방법: 공개키 계산 구성 요소만 노출
결과: 제3자는 공유키 계산 불가능

개발자: Whitfield Diffie, Martin Hellman

💡 추가 정보: Diffie-Hellman은 현대 인터넷 보안의 기초가 되는 키 교환 메커니즘으로, TLS/SSL, VPN, SSH 등에서 널리 사용됩니다.

예상 시험문제

1. 대칭키 vs 비대칭키 암호 비교

문제: 대칭키 암호와 비대칭키 암호의 특징을 비교하고, 각각의 장단점과 적용 분야를 설명하시오.

모범답안:

대칭키 암호:

  • 특징: 암호화/복호화에 같은 키 사용
  • 장점:
    • 빠른 속도 (비대칭키보다 2-3배수 빠름)
    • 대용량 데이터 처리 적합
    • 구현 단순
  • 단점:
    • 키 배송 문제 (안전한 채널 필요)
    • 키 관리 복잡 (n명이면 n개 키 필요)
    • 확장성 한계
  • 적용: 대용량 데이터 암호화, 세션 암호화

비대칭키 암호:

  • 특징: 공개키(암호화)와 개인키(복호화) 분리
  • 장점:
    • 키 배송 문제 해결
    • 디지털 서명 가능
    • 확장성 우수
  • 단점:
    • 느린 속도
    • 복잡한 수학적 계산
    • 키 크기 큼
  • 적용: 키 교환, 디지털 서명, 인증

결론: 현대 시스템은 하이브리드 방식 사용 (공개키로 대칭키 교환, 대칭키로 데이터 암호화)

2. AES 블록 암호 모드 분석

문제: ECB, CBC, CTR, GCM 모드의 특징을 비교하고, 각각의 보안상 장단점을 설명하시오.

모범답안:

ECB (Electronic Code Book):

  • 동작: 각 블록 독립 암호화
  • 장점: 구현 단순, 병렬 처리 가능
  • 단점: 패턴 누출 (같은 평문 → 같은 암호문)
  • 결론: 보안상 권장하지 않음

CBC (Cipher Block Chaining):

  • 동작: 이전 암호문과 XOR 후 암호화
  • 장점: 패턴 은닉, 널리 사용됨
  • 단점: 순차 처리만 가능, 패딩 오라클 공격 취약
  • 요구사항: IV(Initialization Vector) 필요

CTR (Counter Mode):

  • 동작: 카운터 암호화 후 평문과 XOR
  • 장점: 병렬 처리 가능, 무작위 접근, 패딩 불필요
  • 단점: 카운터 재사용 시 치명적
  • 적용: 현대 프로토콜에서 선호

GCM (Galois Counter Mode):

  • 동작: CTR + 인증 (AEAD)
  • 장점: 암호화 + 인증 동시, 빠른 속도, 높은 보안
  • 단점: 구현 복잡
  • 적용: TLS, 디스크 암호화에서 널리 사용

3. One-Time Pad 분석

문제: One-Time Pad의 완벽한 보안성을 증명하고, 실제 사용이 어려운 이유를 설명하시오.

모범답안:

완벽한 보안성 증명:

같은 암호문에 대해 모든 평문이 동일한 확률로 가능:

Ciphertext: 110 101 100 001 110 110 111 001 110 101

Key1 → "heil hitler"
Key2 → "kill hitler"
Key3 → "helike sake"

결론: 암호문이 평문에 대한 어떤 정보도 제공하지 않음

수학적 증명:

  • 키가 진정한 무작위이면 모든 평문이 동일한 확률
  • 암호문 분석으로는 올바른 평문 식별 불가능
  • 정보 이론적으로 완벽한 보안

실용적 한계:

  1. 키 크기: 패드 크기 = 메시지 크기
  2. 키 배송: 안전한 채널로 대용량 키 전달 필요
  3. 키 관리: 각 메시지마다 새로운 패드 필요
  4. 재사용 금지: 패드 재사용 시 보안 완전 붕괴
  5. 동기화: 송수신자 간 정확한 패드 동기화 필요

결론: 이론적으로 완벽하지만 실용성 부족으로 제한적 사용

4. 디지털 서명 시스템

문제: 디지털 서명의 동작 원리를 설명하고, 기존 손글씨 서명과 비교하여 장단점을 분석하시오.

모범답안:

디지털 서명 동작 원리:

서명 생성:
1. 메시지 해시 계산: H = Hash(Message)
2. 개인키로 해시 암호화: Signature = Encrypt(H, Private_Key)
3. 메시지 + 서명 전송

서명 검증:
1. 받은 메시지 해시 계산: H1 = Hash(Message)
2. 공개키로 서명 복호화: H2 = Decrypt(Signature, Public_Key)
3. H1 == H2 확인
4. 일치하면 서명 유효

손글씨 서명과의 비교:

특성손글씨 서명디지털 서명
위조숙련자가 모방 가능수학적으로 위조 극도로 어려움
검증주관적, 전문가 필요자동화된 객관적 검증
문서 결합문서와 분리 가능문서 내용과 암호학적 결합
변조 감지어려움즉시 감지
부인 방지법적 증거 필요수학적 증명
복사원본과 사본 구별 어려움각 문서마다 고유한 서명

장점:

  • 강력한 부인 방지
  • 자동화된 검증
  • 무결성 보장
  • 원격 서명 가능

단점:

  • 개인키 보안 의존
  • 기술적 복잡성
  • 인프라 구축 필요

5. Kerckhoffs의 원칙

문제: Kerckhoffs의 원칙을 설명하고, 이 원칙이 현대 암호학에서 중요한 이유를 실제 사례와 함께 서술하시오.

모범답안:

Kerckhoffs의 원칙:

기본 가정:
• 암호 시스템은 공격자에게 완전히 알려짐
• 오직 키만 비밀
• 알고리즘은 공개됨

요구사항: 알고리즘이 공개되어도 키만 비밀이면 안전해야 함

중요한 이유:

  1. 비밀 알고리즘의 취약성:

    • 역공학으로 알고리즘 노출 가능
    • 내부자에 의한 누출
    • 제품 분석으로 알고리즘 추출
  2. 검증 불가능성:

    • 비밀 알고리즘은 공개적 검토 불가능
    • 숨겨진 취약점 존재 가능
    • 의도적 백도어 삽입 위험
  3. 표준화 어려움:

    • 호환성 문제
    • 구현 차이로 인한 취약점
    • 업데이트 및 패치 어려움

실제 사례:

성공 사례:

  • AES: 공개 경쟁을 통해 선정, 전 세계 암호학자들이 20년 이상 분석
  • RSA: 1978년 공개 후 지속적 연구로 안전성 검증

실패 사례:

  • DVD CSS: 비밀 알고리즘이었으나 역공학으로 쉽게 깨짐
  • GSM A5/1: 비밀로 유지되었으나 누출 후 심각한 취약점 발견
  • WEP: "보안을 위해" 비공개였으나 쉽게 해독됨

현대적 적용:

  • 오픈소스 암호 라이브러리 선호
  • 암호학적 프로토콜의 공개 표준화
  • 지속적인 학계 검토와 개선

6. 하이브리드 암호 시스템

문제: 왜 현대 암호 시스템에서 대칭키와 비대칭키를 함께 사용하는지 설명하고, TLS에서 이것이 어떻게 구현되는지 서술하시오.

모범답안:

하이브리드 시스템 사용 이유:

  1. 성능 문제:

    • 비대칭키: 대칭키보다 2-3배수 느림
    • 대용량 데이터 암호화 시 성능 저하 심각
  2. 각각의 장점 활용:

    • 비대칭키: 키 교환 문제 해결
    • 대칭키: 빠른 데이터 암호화

하이브리드 시스템 구조:

Key Encapsulation (키 캡슐화):
• 공개키 암호로 대칭키 안전하게 교환

Data Encapsulation (데이터 캡슐화):
• 교환된 대칭키로 실제 데이터 암호화

TLS에서의 구현:

TLS Handshake (키 교환):
1. 서버 공개키 인증서 전송
2. 클라이언트가 임시 대칭키 생성
3. 서버 공개키로 대칭키 암호화하여 전송
4. 서버가 개인키로 대칭키 복호화

Data Transfer (데이터 전송):
1. 교환된 대칭키로 모든 데이터 암호화
2. AES-GCM 등 대칭키 알고리즘 사용
3. 빠른 속도로 대용량 데이터 처리

추가 보안 요소:

  • Perfect Forward Secrecy: Diffie-Hellman으로 임시 키 생성
  • 디지털 서명: 서버 인증 및 무결성 보장
  • HMAC: 메시지 인증 및 무결성 검증

장점:

  1. 키 교환 보안성 (비대칭키)
  2. 데이터 전송 효율성 (대칭키)
  3. 확장성과 성능의 균형
  4. 각 알고리즘의 최적화된 활용

핵심 요약

  • 암호학은 안전하지 않은 채널에서의 안전한 통신이 목표이며, 기밀성/무결성/인증성 보장
  • Kerckhoffs의 원칙에 따라 알고리즘은 공개하고 키만 비밀로 유지
  • 대칭키 암호는 빠르지만 키 교환 문제, 비대칭키 암호는 키 교환 해결하지만 느림
  • AES는 현재 대칭키 표준이며, 모드별로 다른 보안 특성과 성능
  • 해시 함수는 무결성, MAC/HMAC은 무결성과 인증성 보장
  • 디지털 서명은 부인 방지와 인증성 제공
  • 현대 시스템은 하이브리드 방식으로 각 암호 기술의 장점 활용
  • 난수 생성의 품질이 전체 암호 시스템의 보안에 결정적 영향

💡 중요: 암호학은 개별 알고리즘이 아닌 시스템적 접근이 필요하며, 각 구성 요소들이 어떻게 상호 작용하여 전체적인 보안을 달성하는지 이해하는 것이 핵심입니다.