고급 암호화 가이드: AES, RSA, ECC & 양자내성 암호화

이 포괄적인 가이드는 현대 보안 통신 시스템에서 사용되는 고급 암호화 개념, 알고리즘 및 프로토콜을 탐구해요. 개발자와 보안 전문가에게 이상적이에요.

참고: 이 가이드는 기본 암호화 개념에 대한 지식을 전제로 해요. 초보자라면 초보자를 위한 보안 팁부터 시작하세요.

대칭 암호화 알고리즘

AES (Advanced Encryption Standard)

2001년 미국 정부가 채택한 대칭 암호화의 표준이에요.

주요 특징

  • 키 크기: 128, 192 또는 256비트
  • 블록 크기: 128비트
  • 라운드: 키 크기에 따라 10, 12 또는 14
  • 성능: 고도로 최적화되어 있고, 하드웨어 가속 지원

일반적인 모드

  • GCM (Galois/Counter Mode): 인증된 암호화, 대부분의 사용 사례에 권장
  • CBC (Cipher Block Chaining): 전통적인 모드, 별도의 MAC 필요
  • CTR (Counter): 병렬화 가능, 일부 프로토콜에서 사용

ChaCha20

Daniel J. Bernstein이 설계한 현대적인 스트림 암호로, AES의 대안으로 점점 인기를 얻고 있어요.

장점

  • 하드웨어 가속이 없는 기기에서 AES보다 빠름
  • 상수 시간 구현 (타이밍 공격에 저항)
  • 간단한 설계로 안전하게 구현하기 쉬움
  • Poly1305와 함께 인증된 암호화에 사용

비대칭 암호화

RSA (Rivest-Shamir-Adleman)

키 교환과 디지털 서명에 널리 사용돼요.

주요 고려사항

  • 최소 키 크기: 2048비트 (장기 보안을 위해 4096비트 권장)
  • 성능: 대칭 암호화에 비해 계산 비용이 높음
  • 패딩 방식: 암호화에는 OAEP, 서명에는 PSS 사용
  • 양자 위협: 양자 컴퓨터에 취약 (Shor 알고리즘)

타원 곡선 암호화 (ECC)

더 작은 키 크기로 동등한 보안을 제공하는 RSA의 효율적인 대안이에요.

인기 있는 곡선

  • Curve25519: ECDH 키 교환용으로 설계, 널리 채택됨
  • Ed25519: 디지털 서명용, SSH, GPG에서 사용
  • P-256 (secp256r1): NIST 표준, 널리 지원됨
  • P-384, P-521: 더 높은 보안 수준

RSA 대비 장점

  • 256비트 ECC ≈ 3072비트 RSA 보안
  • 더 빠른 계산
  • 더 작은 키와 서명
  • 낮은 대역폭 및 저장 공간 요구사항

키 교환 프로토콜

Diffie-Hellman (DH)

두 당사자가 안전하지 않은 채널을 통해 공유 비밀을 설정할 수 있게 해요.

변형

  • Classic DH: 원래 구현
  • ECDH: 타원 곡선 버전 (더 효율적)
  • X25519: Curve25519를 사용하는 현대적인 ECDH

완전 순방향 비밀성 (PFS)

장기 키가 손상되더라도 과거 통신이 안전하게 유지되도록 보장해요.

구현

  • 각 세션마다 임시 키 쌍 생성
  • 사용 후 세션 키 폐기
  • TLS 1.3, Signal Protocol 등에서 사용

해시 함수

SHA-2 패밀리

  • SHA-256: 256비트 출력, 널리 사용됨
  • SHA-384, SHA-512: 더 높은 보안 수준
  • 응용: 디지털 서명, 인증서 검증, 비밀번호 해싱 (적절한 기술과 함께)

SHA-3 (Keccak)

  • SHA-2와 다른 구조 (스펀지 함수)
  • 길이 확장 공격에 저항
  • 높은 보안 마진이 필요한 응용에 적합

BLAKE2/BLAKE3

  • SHA-2와 SHA-3보다 빠름
  • 암호학적으로 안전
  • BLAKE3: 고도로 병렬화 가능, 대용량 데이터에 우수

키 유도 함수 (KDFs)

PBKDF2 (Password-Based Key Derivation Function 2)

  • 목적: 비밀번호에서 암호화 키 유도
  • 반복: 최소 100,000회 (OWASP 권장)
  • 사용 사례: 비밀번호 저장, 키 유도

Argon2

Password Hashing Competition (2015) 우승자로, 새로운 응용에 권장돼요.

변형

  • Argon2id: 하이브리드 (대부분의 사용 사례에 권장)
  • Argon2i: 사이드 채널 공격에 최적화
  • Argon2d: GPU 공격에 최대 저항

scrypt

  • 메모리 집약적 함수 (하드웨어 공격에 저항)
  • Litecoin, Tarsnap에서 사용
  • 보안과 호환성의 좋은 균형

메시지 인증 코드 (MACs)

HMAC (Hash-based MAC)

  • 해시 함수와 비밀 키 결합
  • 인증 및 무결성 제공
  • 일반적: HMAC-SHA256, HMAC-SHA512

Poly1305

  • 일회용 인증자
  • ChaCha20과 함께 인증된 암호화에 사용
  • 빠르고 상수 시간

인증된 암호화

중요한 이유

암호화만으로는 무결성을 보장할 수 없어요. 공격자가 암호문을 감지되지 않고 수정할 수 있어요. 인증된 암호화가 이 문제를 해결해요.

AEAD (Authenticated Encryption with Associated Data)

  • AES-GCM: 가장 널리 지원됨
  • ChaCha20-Poly1305: 모바일 기기에서 더 나음
  • AES-CCM: 일부 무선 프로토콜에서 사용

디지털 서명

RSA 서명

  • 패딩: PSS (Probabilistic Signature Scheme) 사용
  • 해시 함수: SHA-256 이상
  • 키 크기: 최소 2048비트

ECDSA (Elliptic Curve Digital Signature Algorithm)

  • RSA보다 작은 서명
  • 신중한 논스 생성 필요 (약한 RNG = 손상된 키)
  • 결정론적 변형 (RFC 6979) 권장

Ed25519

  • 결정론적 (RNG 불필요)
  • 빠른 서명 생성 및 검증
  • 작은 서명 (64바이트)
  • 사이드 채널 공격에 저항

현대 프로토콜

Signal Protocol

Signal, WhatsApp, Facebook Messenger에서 사용하는 최첨단 종단간 암호화 프로토콜이에요.

주요 특징

  • Double Ratchet: 키를 지속적으로 업데이트
  • 완전 순방향 비밀성: 과거 메시지가 안전하게 유지됨
  • 손상 후 보안: 키 손상으로부터 복구
  • 비동기: 수신자가 오프라인일 때도 작동

TLS 1.3

Transport Layer Security 프로토콜의 최신 버전이에요.

개선사항

  • 약한 알고리즘 및 암호 제품군 제거
  • 항상 순방향 비밀성 제공
  • 더 빠른 핸드셰이크 (1-RTT, 0-RTT 옵션)
  • 암호화된 Server Hello

Noise Protocol Framework

안전한 통신 시스템 구축을 위한 현대적인 암호화 프로토콜 프레임워크예요.

응용

  • WireGuard VPN
  • Lightning Network
  • I2P 메시징

양자 내성 암호화

위협

양자 컴퓨터는 Shor 알고리즘을 사용하여 RSA와 ECC를 깰 수 있어요. 대칭 알고리즘은 덜 영향을 받지만 더 큰 키가 필요해요.

NIST 양자 내성 후보

  • Kyber: 격자 기반 키 캡슐화
  • Dilithium: 격자 기반 디지털 서명
  • SPHINCS+: 해시 기반 서명

전환 전략

  • 하이브리드 접근: 기존 알고리즘과 양자 내성 알고리즘 결합
  • 대칭 키 크기를 256비트로 증가
  • NIST 표준화 프로세스 모니터링
  • 알고리즘 민첩성 계획

구현 모범 사례

자체 암호화 구현 금지

검증된 피어 리뷰 라이브러리를 사용하세요:

  • libsodium: 고수준, 사용하기 쉬움
  • OpenSSL: 포괄적, 널리 지원됨
  • BoringSSL: Google의 OpenSSL 포크
  • Ring: Rust 암호화 라이브러리

키 관리

  • 중요한 키에는 하드웨어 보안 모듈 (HSMs) 사용
  • 키 교체 정책 구현
  • 소스 코드에 키를 하드코딩하지 말 것
  • 여러 목적으로 키 유도 사용
  • 사용 후 메모리에서 키를 안전하게 삭제

안전한 난수 생성

  • 암호학적으로 안전한 RNG (CSPRNG) 사용
  • 표준 rand() 함수를 절대 사용하지 말 것
  • 운영 체제 RNG: /dev/urandom (Linux), CryptGenRandom (Windows)
  • 언어별: crypto.randomBytes (Node.js), secrets 모듈 (Python)

타이밍 공격 방지

  • 비밀에 대해 상수 시간 비교 사용
  • 비밀 데이터를 기반으로 한 분기 피하기
  • 캐시 타이밍 공격 인식
  • 타이밍 공격 저항을 고려하여 설계된 라이브러리 사용

테스트 및 검증

보안 감사

  • 정기적인 침투 테스트
  • 보안 전문가의 코드 리뷰
  • 제3자 보안 감사
  • 버그 바운티 프로그램

규정 준수

  • FIPS 140-2/3: 미국 정부 표준
  • Common Criteria: 국제 보안 인증
  • PCI DSS: 결제 카드 산업 요구사항

추가 학습 자료

도서

  • "Cryptography Engineering" - Ferguson, Schneier, Kohno 저
  • "Serious Cryptography" - Jean-Philippe Aumasson 저
  • "Applied Cryptography" - Bruce Schneier 저

온라인 자료

  • Cryptopals Crypto Challenges
  • Stanford의 Cryptography 강좌 (Coursera)
  • IACR ePrint Archive
  • Crypto Stack Exchange
실제 암호화를 확인하세요: SecretNote는 안전한 키 유도와 함께 AES-256-GCM 암호화를 사용하여 메시지를 보호해요. 지금 사용해 보세요!