프로그래밍공부(Programming Study)

Security and Cryptography

Chann._.y 2025. 9. 9.
728x90

0. 주의사항

  • 보안 전문가가 아니라면 직접 암호 구현을 하지 말아야 합니다. “Don’t roll your own crypto.”
  • 시스템 보안도 마찬가지로, 정식 보안 훈련 없이 함부로 적용하면 큰 위험을 초래할 수 있습니다.

1. Entropy (엔트로피)

정의

  • 무작위성(randomness)의 정도를 수학적으로 측정하는 값
  • 특정 시스템이나 암호의 예측 불가능성을 수치로 나타냄
  • 단위는 bit

계산 방식

  • 경우의 수가 N일 때:entropy=log⁡2(N)entropy = \log_2(N)
  • 예:
    • 동전 던지기: 경우의 수 2 → 1 bit
    • 주사위: 경우의 수 6 → 약 2.58 bits

비밀번호 엔트로피

  • Tr0ub4dor&3 같은 비밀번호는 복잡해 보이지만, 실제로는 공격자가 “문자 치환 패턴”을 알고 있다면 경우의 수가 줄어들어 엔트로피가 낮음
  • 반대로 correcthorsebatterystaple 같은 사전 단어 나열 방식은 길고 단어 선택 폭이 넓어 엔트로피가 훨씬 높음

안전 기준

  • 온라인 공격(웹 로그인 같은 환경): 약 40 bits면 안전
  • 오프라인 공격(해시 덤프 후 무차별 대입): 80 bits 이상 필요

2. Cryptographic Hash Functions (암호학적 해시 함수)

정의

  • 임의 크기의 데이터를 고정 크기 출력값으로 변환하는 함수
  • 일반 해시와 달리, 보안 특성을 만족해야 함

주요 특성

  1. Deterministic: 동일 입력 → 항상 동일 출력
  2. Preimage resistant (단방향성): 출력만으로 입력을 역추적하기 매우 어려움
  3. Second preimage resistant (목표 충돌 저항성): 특정 입력 m₁에 대해, 같은 해시를 내는 다른 입력 m₂ 찾기 어려움
  4. Collision resistant (충돌 저항성): 서로 다른 입력 m₁, m₂가 같은 해시 출력 생성하는 것 자체가 어려움

주의: 충돌 저항성은 항상 목표 충돌 저항성보다 강한 조건

예시

  • SHA-1: Git에서 오래 쓰였으나, 현재는 충돌 공격이 가능해 안전하지 않음
  • SHA-256, SHA-3 등 현대적인 해시 함수 사용 권장

활용 사례

  • Git: 커밋과 파일을 내용 기반(content-addressed)으로 저장
  • 파일 무결성 검증: 공식 사이트에서 제공하는 해시값과 다운로드 받은 파일의 해시를 비교
  • Commitment scheme: 값 r을 숨기고 싶을 때 h = hash(r)만 먼저 공개 → 나중에 r을 공개해 검증 가능

3. Key Derivation Functions (KDF)

정의

  • 해시 함수와 유사하게 동작하지만, 주 목적은 비밀번호 같은 입력값을 안전한 암호 키로 변환하는 것
  • 의도적으로 느리거나 계산량이 많은 설계 → 공격자가 무차별 대입(brute-force) 공격을 하려면 많은 자원 소모

주요 활용

  1. 비밀번호 기반 키 생성
    • 사용자가 입력한 passphrase → KDF → 암호화 알고리즘 키로 변환
  2. 비밀번호 저장
    • 평문 저장 X
    • 사용자별 salt = random() 생성
    • KDF(password + salt) 저장
    • 로그인 시 입력값 + salt를 다시 KDF 적용해 비교

예시

  • PBKDF2, bcrypt, scrypt, Argon2 등이 널리 쓰임

4. Symmetric Cryptography (대칭 암호)

정의

  • 같은 키를 이용해 암호화(encrypt)와 복호화(decrypt) 수행
  • 암호화된 메시지는 키 없이는 해독 불가능

대표 알고리즘

  • AES (Advanced Encryption Standard)

활용 사례

  • 파일 암호화: 클라우드에 저장 시 데이터 보호
  • KDF + passphrase: 사람이 기억할 수 있는 비밀번호를 통해 대칭키 생성 → 파일 암호화

특징

  • 속도가 빠르고 효율적이지만, 키 공유 문제(key distribution problem) 존재

5. Asymmetric Cryptography (비대칭 암호)

정의

  • **공개키(public key)**와 **개인키(private key)**라는 두 개의 키 사용
  • 공개키는 누구나 공유 가능, 개인키는 철저히 비밀 유지

기능

  1. 암호화/복호화
    • 공개키로 암호화 → 개인키로만 복호화 가능
  2. 전자 서명(Sign/Verify)
    • 개인키로 서명 → 공개키로 검증 가능

비유

  • 대칭 암호: 문 열쇠. 가진 사람은 누구나 잠그고 열 수 있음
  • 비대칭 암호: 자물쇠(공개키)와 열쇠(개인키). 누구나 자물쇠를 잠글 수 있지만, 열쇠는 나만 가짐

활용 사례

  • PGP 이메일 암호화 (공개키 서버 활용)
  • Signal/Keybase 메신저 (세션 키 교환)
  • Git GPG 커밋/태그 서명

6. Key Distribution (키 배포 문제)

문제

  • “공개키가 실제 누구의 것인지” 확인하는 과정이 어려움
  • 신원 매핑 실패 시 중간자 공격(Man-in-the-Middle) 발생 가능

다양한 해결책

  1. Signal: Trust on First Use (TOFU), 안전 번호를 직접 대조
  2. PGP: Web of Trust (다른 사람들의 서명으로 신뢰 확장)
  3. Keybase: Social Proof (SNS 계정과 연동해 신원 보증)

7. Case Studies (사례)

  1. Password Managers
    • KeePassXC, pass, 1Password 등
    • 모든 계정에 대해 고엔트로피 비밀번호 자동 생성 & 암호화 저장
    • 장점: 비밀번호 재사용 방지, 한 번의 기억으로 전체 관리
  2. Two-Factor Authentication (2FA)
    • 비밀번호(알고 있는 것) + 인증 장치(가지고 있는 것)
    • 예: YubiKey, Google Authenticator
  3. Full Disk Encryption
    • 노트북 도난 시 데이터 보호
    • Linux: LUKS/cryptsetup
    • Windows: BitLocker
    • macOS: FileVault
  4. Private Messaging
    • Signal, Keybase 등은 종단간 암호화(E2EE) 사용
    • 공개키 인증을 반드시 검증해야 안전
  5. SSH
    • ssh-keygen → 비대칭 키 생성
    • 개인키는 passphrase + KDF로 암호화하여 디스크 저장
    • 인증 과정: 서버가 난수 → 클라이언트가 서명 후 반환 → 서버가 공개키로 검증

8. Exercises (실습 과제)

  1. Entropy 계산
    • 사전 단어 4개 조합 vs 랜덤 8자리 알파벳/숫자 조합 → 엔트로피 비교
    • 공격자가 초당 1만 번 시도 가능하다면, 평균 몇 년 걸릴지 계산
  2. Hash 검증
    • Debian ISO를 미러에서 다운로드
    • sha256sum으로 공식 해시와 비교
  3. 대칭 암호 실습
    • OpenSSL AES로 파일 암호화/복호화 수행
  4. 비대칭 암호 실습
    • SSH 키 생성 및 passphrase 보호
    • GPG 키 생성 후 이메일 암호화
    • Git 커밋/태그 서명 및 검증

정리

  • Entropy: 비밀번호의 강도는 “길이 + 무작위성”이 결정
  • Hash: Git/파일 무결성/commitment 등 핵심 도구
  • KDF: 비밀번호를 안전하게 키로 변환, 느린 알고리즘 설계로 공격 방어
  • Symmetric Crypto: 빠르지만 키 공유 문제 존재 (AES)
  • Asymmetric Crypto: 공개/개인키 쌍 기반, 암호화와 서명 모두 가능
  • Key Distribution: 실제 신원과 공개키를 연결하는 것이 가장 어려운 과제
  • 실습: 엔트로피 계산, 해시 검증, AES 암호화, SSH/GPG 활용
728x90

댓글