이 포괄적인 가이드는 현대 보안 통신 시스템에서 사용되는 고급 암호화 개념, 알고리즘 및 프로토콜을 탐구해요. 개발자와 보안 전문가에게 이상적이에요.
참고: 이 가이드는 기본 암호화 개념에 대한 지식을 전제로 해요. 초보자라면 초보자를 위한 보안 팁부터 시작하세요.
대칭 암호화 알고리즘
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 암호화를 사용하여 메시지를 보호해요. 지금 사용해 보세요!