ChaCha20-Poly1305 암호화 & 복호화
무료 온라인 ChaCha20-Poly1305 암호화 & 복호화 도구. 100% 로컬 처리 — 데이터가 기기를 벗어나지 않습니다.
결과가 여기에 표시됩니다...
입력 → 암호화
Usage Guide
ChaCha20-Poly1305 소개
ChaCha20-Poly1305는 ChaCha20 스트림 암호와 Poly1305 메시지 인증 코드를 결합한 관련 데이터를 포함한 인증 암호화(AEAD) 알고리즘입니다. Daniel J. Bernstein이 설계했으며, RFC 8439 에 표준화되었고 TLS 1.3, SSH, WireGuard 에서 기본 암호 스위트로 채택되었습니다. 단일 작업에서 기밀성(암호화)과 무결성(인증)을 모두 제공하여 도청과 암호문 변조를 방지합니다. ChaCha20-Poly1305는 하드웨어 AES 가속이 없는 플랫폼을 위한 소프트웨어 친화적인 AES-GCM 대안으로 개발되었습니다.
사용 단계
이 도구는 암호화와 복호화를 모두 지원합니다. 키는 필수입니다. 논스(nonce)는 비워두면 자동 생성됩니다:
키 및 논스 형식
ChaCha20-Poly1305는 고정 크기 매개변수를 사용합니다:
ChaCha20-Poly1305 vs AES-GCM
둘 다 TLS 1.3의 AEAD 암호입니다. 각각을 선택하는 시기:
FAQ
Q: 왜 출력이 입력보다 더 길까요?
A: 암호화된 출력은 base64로 인코딩되어 있으며 12바이트 논스 + 평문 길이 + 16바이트 Poly1305 인증 태그를 포함합니다. 따라서 바이너리 오버헤드는 28바이트(12 논스 + 16 태그)이며, base64 인코딩이 약 33%의 추가 길이를 더합니다.
Q: 암호문을 변조하면 어떻게 될까요?
A: ChaCha20-Poly1305는 변조된 암호문의 복호화를 거부합니다. Poly1305 태그는 전체 암호문에 대해 계산된 메시지 인증 코드입니다. 단 1비트의 수정도 태그 검증 실패를 유발하며, 복호화 함수는 손상된 평문을 생성하는 대신 오류를 반환합니다.
Q: ChaCha20-Poly1305와 단순 ChaCha20의 차이점은 무엇인가요?
A: 단순 ChaCha20은 기밀성만 제공합니다 — 데이터를 암호화하지만 변조를 감지하지 못합니다. ChaCha20-Poly1305는 ChaCha20 암호화와 Poly1305 인증 태그를 결합하여 기밀성 및 무결성을 모두 제공합니다. 실용적인 용도로는 항상 단순 ChaCha20보다 ChaCha20-Poly1305를 사용하세요.
Q: 여러 메시지에 동일한 키를 사용할 수 있나요?
A: 예, 하지만 각 메시지는 고유한 논스를 사용해야 합니다. (키, 논스) 쌍은 절대로 재사용해서는 안 됩니다. 12바이트 논스에서 무작위 논스 생성은 약 1/296의 생일 충돌 확률을 제공합니다 — 수십억 개의 메시지에 안전합니다.
Q: ChaCha20-Poly1305는 양자 컴퓨터에 내성이 있나요?
A: 모든 대칭 암호와 마찬가지로 ChaCha20-Poly1305는 Grover 알고리즘의 영향을 받아 256비트 보안이 128비트 동등 수준으로 감소합니다. 128비트 포스트 양자 보안은 대부분의 응용 프로그램에 충분하다고 간주됩니다. 따라서 256비트 키를 가진 ChaCha20-Poly1305는 128비트 보안 수준에서 양자 내성이 있다고 간주되며, 이는 AES-256-GCM과 동일합니다.
Q: '유효하지 않은 키, 논스 또는 암호문'으로 복호화가 실패하는 이유는 무엇인가요?
A: 이 오류는 인증 태그 검증이 실패했음을 의미합니다. 일반적인 원인:
잘못된 키: 키가 암호화에 사용된 것과 일치하지 않습니다.
손상된 암호문: base64 문자열이 수정, 잘리거나 잘못 붙여넣어졌습니다.
비ChaCha20-Poly1305 데이터 복호화: 입력이 다른 알고리즘이나 도구로 암호화되었습니다.
Use Cases
권장: 대칭 파일 및 메시지 암호화
ChaCha20-Poly1305는 탁월한 범용 대칭 암호화 선택입니다. WireGuard VPN의 모든 터널 트래픽에 사용되며 TLS 1.3의 두 가지 기본 암호 스위트 중 하나입니다. 항상 메시지당 새로운 무작위 논스를 생성하세요(이 도구는 자동으로 앞에 추가합니다).
- ✅ ChaCha20-Poly1305(모바일, 크로스플랫폼, 소프트웨어 전용에 권장)
- ✅ AES-256-GCM(AES-NI 하드웨어를 사용할 수 있을 때 권장)
- ✅ XChaCha20-Poly1305(확장 24바이트 논스, 대량 메시징용)
- ❌ 새 프로젝트에는 비인증 암호(AES-CBC, 단순 ChaCha20)를 사용하지 마세요
권장: 모바일 및 IoT 암호화
하드웨어 AES 가속이 없는 플랫폼에서 ChaCha20-Poly1305는 AES-GCM을 능가합니다. ChaCha20는 소프트웨어 친화적이기 때문에 타이밍 사이드 채널 위험 없이 모든 플랫폼에서 상수 시간으로 실행됩니다. Google이 Android TLS 트래픽에 선호되는 암호로 ChaCha20-Poly1305를 선택한 이유입니다.
- ✅ ChaCha20-Poly1305(하드웨어 AES 없이 최고 성능)
- ✅ AES-256-GCM(AES 하드웨어가 있는 기기에서 허용)
- 💡 TLS 1.3은 자동으로 협상합니다 — 두 암호 스위트 모두 필수
- ❌ 제한된 기기에서 AES-CBC를 사용하지 마세요(인증 없음, 더 느림)
허용: 암호화된 로컬 스토리지
ChaCha20-Poly1305는 로컬에 저장된 민감한 데이터를 보호할 수 있습니다. 비밀번호를 직접 사용하는 대신 Argon2id를 사용하여 사용자 비밀번호에서 키를 파생하세요.
- ✅ ChaCha20-Poly1305 + Argon2id 키 파생(비밀번호 기반 암호화)
- ✅ AES-256-GCM + PBKDF2(FIPS 준수 환경)
- 💡 저장: Argon2id 매개변수 + 솔트 + ChaCha20 논스 + 암호문
- ❌ 로컬 스토리지에 ECB 모드나 비인증 암호를 사용하지 마세요
비권장: 대용량 파일 암호화
표준 ChaCha20-Poly1305는 인증 전에 전체 암호문을 버퍼링하므로 대용량 파일에는 메모리 집약적입니다. 몇 메가바이트 이상의 파일에는 청크 암호화를 처리하는 전용 도구나 라이브러리를 사용하세요(예: libsodium secretstream, age).
- 💡 수 MB 이상의 파일에는 청크 AEAD를 사용하세요
- ✅ libsodium secretstream(스트리밍 ChaCha20-Poly1305)
- ✅ age 암호화 도구(파일 지향, 내부적으로 ChaCha20-Poly1305 사용)
- ✅ 스트리밍 모드 AES-256-GCM(하드웨어 가속 환경용)
비권장: 키 교환 또는 인증
ChaCha20-Poly1305는 대칭 암호입니다 — 양쪽 모두 이미 동일한 비밀 키를 공유하고 있어야 합니다. 키 배포 문제를 해결하지 않습니다. 안전한 키 교환을 위해서는 비대칭 프로토콜이나 TLS 1.3과 같은 완전한 프로토콜을 사용하세요. 공유 비밀 없이 인증하려면 RSA 또는 ECDSA 디지털 서명을 사용하세요.
- ❌ ChaCha20-Poly1305는 키 배포를 해결하지 않습니다
- ✅ TLS 1.3(키 교환 + ChaCha20-Poly1305 데이터 암호화 처리)
- ✅ X25519 + ChaCha20-Poly1305(Noise 프로토콜 패턴)
- ✅ RSA / ECDSA 디지털 서명 및 신원 확인
비권장: 비밀번호 해싱
모범 사례 요약
- AES 하드웨어 가속이 없는 경우 — 모바일, IoT, 크로스플랫폼 소프트웨어 — 대칭 암호화에 ChaCha20-Poly1305를 사용하세요.
- 암호화마다 항상 고유한 무작위 논스를 사용하세요. 논스 필드를 비워두면 도구가 자동으로 생성합니다.
- 암호문 출력에는 12바이트 논스와 16바이트 인증 태그가 내장되어 있습니다 — 복호화에는 단일 base64 문자열만 저장하면 됩니다.
- (키, 논스) 쌍을 절대 재사용하지 마세요. 논스 재사용은 ChaCha20-Poly1305 보안을 완전히 무너뜨립니다.
- 비밀번호 기반 암호화의 경우 먼저 Argon2id로 키를 파생하세요 — 비밀번호를 ChaCha20-Poly1305 키로 직접 사용하지 마세요.