ChaCha20 암호화
선택적 인증이 가능한 현대적 스트림 암호
클라이언트 측 보안
모든 암호화/복호화 작업은 브라우저에서 로컬로 수행됩니다. 어떤 서버로도 데이터가 전송되지 않습니다.
초기 카운터 값 (기본값: 0)
ChaCha20 소개
ChaCha20은 2008년 Daniel J. Bernstein이 설계한 현대적 스트림 암호로, Salsa20 암호에서 파생되었습니다. 256비트 키를 사용하고 512비트 블록에서 작동하며, 평문과 XOR 연산되는 키 스트림을 생성합니다. 이 암호는 속도, 보안성, 타이밍 공격에 대한 저항성으로 유명합니다.
이 암호는 속도, 보안성 및 타이밍 공격 저항성으로 알려져 있어 소프트웨어 구현에 탁월한 선택입니다.
알고리즘 비교
| 알고리즘 | 인증 | 키 길이 | 논스 크기 | 사용 사례 |
|---|---|---|---|---|
| ChaCha20 | 스트림 암호 | 256 bits | 96 bits (12 bytes) | 원시 암호화, 사용자 정의 프로토콜 |
| ChaCha20-Poly1305 | AEAD | 256 bits | 96 bits (12 bytes) | TLS 1.3, QUIC, 보안 메시징 |
| XChaCha20 | 스트림 암호 | 256 bits | 192 bits (24 bytes) | 무작위 논스 시나리오 |
| XChaCha20-Poly1305 | AEAD | 256 bits | 192 bits (24 bytes) | 대부분의 애플리케이션 (권장) |
ChaCha20 작동 방식
ChaCha20은 20라운드로 작동하며, 32비트 워드의 4×4 행렬에 쿼터 라운드 함수를 적용합니다. 초기 상태는 다음으로 구성됩니다:
각 라운드는 덧셈, XOR, 회전을 사용하여 상태를 치환하며, 소프트웨어에서 빠른 속도를 유지하면서 우수한 확산을 제공합니다.
AEAD: 인증된 암호화
ChaCha20-Poly1305는 RFC 8439에서 표준화된 AEAD 구조입니다. ChaCha20을 암호화에, Poly1305 MAC을 인증에 결합합니다. 이는 기밀성과 무결성을 모두 보장하며, 암호문이나 AAD의 변조는 복호화 시 감지됩니다. 128비트 인증 태그가 암호문에 추가됩니다.
이는 기밀성과 무결성을 모두 보장합니다 - 암호문이나 AAD의 변조는 복호화 시 감지됩니다. 128비트 인증 태그는 암호문과 AAD에서 계산됩니다.
주요 특징
- 고성능: 소프트웨어 구현에 최적화, 하드웨어 가속 없이 AES보다 3배 빠름
- 상수 시간: 테이블 기반 AES 구현과 달리 캐시 타이밍 공격에 저항
- 간단한 설계: ARX 연산(덧셈, 회전, XOR)만 사용, 올바르게 구현하기 쉬움
- 광범위한 채택: TLS 1.3, OpenSSH, WireGuard, Signal 프로토콜 등에서 사용
- 확장 논스: XChaCha20 변형은 충돌 위험 없이 안전한 무작위 논스 생성 가능
보안 고려사항
- 같은 키로 논스를 재사용하지 마세요 - 보안이 완전히 손상됩니다
- 변조를 감지하기 위해 대부분의 애플리케이션에서 AEAD 변형(Poly1305) 사용
- 무작위 논스의 경우 XChaCha20(192비트)을 사용하여 충돌 확률 최소화
- 적절한 KDF(HKDF, Argon2)를 사용하여 비밀번호에서 키 파생
실제 사용
- TLS 1.3: 기본 암호 스위트 (TLS_CHACHA20_POLY1305_SHA256)
- WireGuard VPN: 기본 암호화 프로토콜
- Signal 프로토콜: 종단 간 암호화 메시징
- Cloudflare: 모바일 클라이언트용으로 AES-GCM보다 선호
- Linux 커널: CSPRNG (/dev/urandom)
참고 자료
- RFC 7539 - IETF 프로토콜용 ChaCha20 및 Poly1305
- RFC 8439 - IETF 프로토콜용 ChaCha20 및 Poly1305 (업데이트)
- 위키피디아 - ChaCha20-Poly1305
- D.J. Bernstein의 원본 ChaCha 논문
자주 묻는 질문
ChaCha20과 AES의 차이점은 무엇인가요?
둘 다 안전한 대칭 암호입니다. ChaCha20은 하드웨어 가속 없이 소프트웨어에서 3배 빠르고 타이밍 공격에 저항합니다. AES는 하드웨어 지원(AES-NI)이 있으면 더 빠릅니다. ChaCha20은 모바일 및 임베디드 기기에 선호됩니다.
ChaCha20 대신 XChaCha20을 사용하는 이유는?
XChaCha20의 192비트 논스는 안전한 무작위 논스 생성을 가능하게 합니다. 96비트 논스는 충돌을 피하기 위해 신중한 논스 관리가 필요합니다. 고유한 순차 논스를 보장할 수 없을 때 XChaCha20을 권장합니다.
카운터 매개변수의 용도는 무엇인가요?
카운터는 각 블록에 대해 증가하여 64바이트보다 긴 메시지를 암호화할 수 있게 합니다. AEAD 모드의 경우 1에서 시작합니다(블록 0은 Poly1305 키 생성에 사용). 일반적으로 기본값(0)을 유지하면 됩니다.
이 도구로 파일을 암호화할 수 있나요?
이 도구는 완전히 브라우저에서 실행되며 텍스트와 작은 데이터 암호화에 적합합니다. 대용량 파일의 경우 openssl이나 libsodium 기반 애플리케이션과 같은 네이티브 도구를 사용하세요.
이 도구는 프로덕션 사용에 안전한가요?
이 도구는 교육 및 개발 목적입니다. 구현은 표준 사양을 따르지만, 프로덕션 시스템은 libsodium, OpenSSL 또는 플랫폼 제공 API와 같이 잘 감사된 암호화 라이브러리를 사용해야 합니다.