ChaCha20-Poly1305 암호화 & 복호화

무료 온라인 ChaCha20-Poly1305 암호화 & 복호화 도구. 100% 로컬 처리 — 데이터가 기기를 벗어나지 않습니다.

National Standards
Legacy
출력

결과가 여기에 표시됩니다...

입력 암호화

Usage Guide

ChaCha20-Poly1305 소개

ChaCha20-Poly1305는 ChaCha20 스트림 암호와 Poly1305 메시지 인증 코드를 결합한 관련 데이터를 포함한 인증 암호화(AEAD) 알고리즘입니다. Daniel J. Bernstein이 설계했으며, RFC 8439 에 표준화되었고 TLS 1.3, SSH, WireGuard 에서 기본 암호 스위트로 채택되었습니다. 단일 작업에서 기밀성(암호화)과 무결성(인증)을 모두 제공하여 도청과 암호문 변조를 방지합니다. ChaCha20-Poly1305는 하드웨어 AES 가속이 없는 플랫폼을 위한 소프트웨어 친화적인 AES-GCM 대안으로 개발되었습니다.

현대 TLS 표준: ChaCha20-Poly1305는 TLS 1.3의 두 가지 필수 암호 스위트 중 하나입니다(AES-256-GCM과 함께). 모바일 및 IoT 기기에서 선호되는 선택이며, 모든 플랫폼에서 AES-256-GCM 과 보안 수준이 동등합니다.

사용 단계

이 도구는 암호화와 복호화를 모두 지원합니다. 키는 필수입니다. 논스(nonce)는 비워두면 자동 생성됩니다:

1. 키 생성 또는 입력'Secret Key' 옆의 무작위 버튼을 클릭하여 32바이트(256비트) 무작위 키를 생성하거나, 32자 문자열을 직접 입력하세요
2. 논스(선택사항)비워두면 각 암호화마다 무작위 12바이트 논스가 자동 생성됩니다. 복호화 시 논스는 암호문에 내장되어 있으므로 이 필드를 비워두세요
3. 암호화입력 상자에 평문을 입력하고 '암호화'를 선택한 후 '암호화'를 클릭하세요. 출력은 12바이트 논스가 암호문+태그 앞에 추가된 base64 문자열입니다
4. 복호화base64 암호문을 입력 상자에 붙여넣고 '복호화'를 선택한 후, 암호화에 사용된 동일한 키를 입력하고 '복호화'를 클릭하세요
개인정보 보호: 모든 ChaCha20-Poly1305 작업은 WebAssembly를 사용하여 브라우저 내에서 완전히 실행됩니다. 서버에 데이터가 전송되지 않으며 완전한 오프라인 처리입니다.

키 및 논스 형식

ChaCha20-Poly1305는 고정 크기 매개변수를 사용합니다:

32바이트(256비트) — 32자 문자열로 입력하거나 무작위 생성기를 사용하세요
논스12바이트(96비트) — 12자 문자열로 입력하거나 자동 생성을 위해 비워두세요. 동일한 키로 같은 논스를 절대 재사용하지 마세요
암호문 형식base64(논스[12바이트] + 암호문 + 인증 태그[16바이트]). 논스가 앞에 추가되어 복호화가 독립적으로 가능합니다
태그16바이트(128비트) Poly1305 인증 태그. 암호화 중 자동으로 추가되고 복호화 중 자동으로 검증됩니다
논스 재사용 금지: 동일한 (키, 논스) 쌍을 재사용하면 ChaCha20-Poly1305 보안이 완전히 무너집니다 — 공격자가 키스트림을 복구하여 모든 메시지를 복호화할 수 있습니다. 항상 각 암호화에 고유한 논스를 사용하거나 이 도구가 자동으로 생성하도록 하세요.

ChaCha20-Poly1305 vs AES-GCM

둘 다 TLS 1.3의 AEAD 암호입니다. 각각을 선택하는 시기:

ChaCha20-Poly1305하드웨어 AES가 없는 모바일, ARM, IoT 기기에서 선호. 소프트웨어에서 상수 시간으로 실행되어 타이밍 공격에 내성. 하드웨어 가속기 불필요
AES-GCMAES-NI 하드웨어 명령이 가능할 때 선호(대부분의 최신 x86/x64 CPU). 하드웨어 가속으로 훨씬 빠름
보안 동등성둘 다 256비트 키 강도와 128비트 인증 태그를 제공합니다. 보안 관점에서 어느 쪽이 더 강하다고 볼 수 없습니다
TLS 1.3 전략TLS 1.3 구현은 협상합니다: AES-NI가 있는 서버/데스크탑에서는 AES-GCM; 하드웨어 AES가 없는 모바일 클라이언트에서는 ChaCha20-Poly1305

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의 두 가지 기본 암호 스위트 중 하나입니다. 항상 메시지당 새로운 무작위 논스를 생성하세요(이 도구는 자동으로 앞에 추가합니다).

Recommended Configuration:
  • ✅ 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를 선택한 이유입니다.

Recommended Configuration:
  • ✅ ChaCha20-Poly1305(하드웨어 AES 없이 최고 성능)
  • ✅ AES-256-GCM(AES 하드웨어가 있는 기기에서 허용)
  • 💡 TLS 1.3은 자동으로 협상합니다 — 두 암호 스위트 모두 필수
  • ❌ 제한된 기기에서 AES-CBC를 사용하지 마세요(인증 없음, 더 느림)
허용: 암호화된 로컬 스토리지

ChaCha20-Poly1305는 로컬에 저장된 민감한 데이터를 보호할 수 있습니다. 비밀번호를 직접 사용하는 대신 Argon2id를 사용하여 사용자 비밀번호에서 키를 파생하세요.

Recommended Configuration:
  • ✅ ChaCha20-Poly1305 + Argon2id 키 파생(비밀번호 기반 암호화)
  • ✅ AES-256-GCM + PBKDF2(FIPS 준수 환경)
  • 💡 저장: Argon2id 매개변수 + 솔트 + ChaCha20 논스 + 암호문
  • ❌ 로컬 스토리지에 ECB 모드나 비인증 암호를 사용하지 마세요
비권장: 대용량 파일 암호화

표준 ChaCha20-Poly1305는 인증 전에 전체 암호문을 버퍼링하므로 대용량 파일에는 메모리 집약적입니다. 몇 메가바이트 이상의 파일에는 청크 암호화를 처리하는 전용 도구나 라이브러리를 사용하세요(예: libsodium secretstream, age).

Recommended Configuration:
  • 💡 수 MB 이상의 파일에는 청크 AEAD를 사용하세요
  • ✅ libsodium secretstream(스트리밍 ChaCha20-Poly1305)
  • ✅ age 암호화 도구(파일 지향, 내부적으로 ChaCha20-Poly1305 사용)
  • ✅ 스트리밍 모드 AES-256-GCM(하드웨어 가속 환경용)
비권장: 키 교환 또는 인증

ChaCha20-Poly1305는 대칭 암호입니다 — 양쪽 모두 이미 동일한 비밀 키를 공유하고 있어야 합니다. 키 배포 문제를 해결하지 않습니다. 안전한 키 교환을 위해서는 비대칭 프로토콜이나 TLS 1.3과 같은 완전한 프로토콜을 사용하세요. 공유 비밀 없이 인증하려면 RSA 또는 ECDSA 디지털 서명을 사용하세요.

Recommended Configuration:
  • ❌ ChaCha20-Poly1305는 키 배포를 해결하지 않습니다
  • ✅ TLS 1.3(키 교환 + ChaCha20-Poly1305 데이터 암호화 처리)
  • ✅ X25519 + ChaCha20-Poly1305(Noise 프로토콜 패턴)
  • ✅ RSA / ECDSA 디지털 서명 및 신원 확인
비권장: 비밀번호 해싱

ChaCha20-Poly1305는 암호화 알고리즘이지 비밀번호 해시 함수가 아닙니다. 암호화는 가역적입니다 — 키를 가진 누구나 비밀번호를 복호화할 수 있습니다. 비밀번호 저장에는 Argon2id (권장) 또는 bcrypt를 사용하세요.

Recommended Configuration:
  • ❌ 비밀번호 저장에 ChaCha20-Poly1305를 사용하지 마세요(가역적입니다)
  • Argon2id(선호 비밀번호 해싱 알고리즘)
  • bcrypt(널리 지원, 기존 시스템)
  • ✅ scrypt / PBKDF2(대안 비밀번호 KDF)

모범 사례 요약

  • AES 하드웨어 가속이 없는 경우 — 모바일, IoT, 크로스플랫폼 소프트웨어 — 대칭 암호화에 ChaCha20-Poly1305를 사용하세요.
  • 암호화마다 항상 고유한 무작위 논스를 사용하세요. 논스 필드를 비워두면 도구가 자동으로 생성합니다.
  • 암호문 출력에는 12바이트 논스와 16바이트 인증 태그가 내장되어 있습니다 — 복호화에는 단일 base64 문자열만 저장하면 됩니다.
  • (키, 논스) 쌍을 절대 재사용하지 마세요. 논스 재사용은 ChaCha20-Poly1305 보안을 완전히 무너뜨립니다.
  • 비밀번호 기반 암호화의 경우 먼저 Argon2id로 키를 파생하세요 — 비밀번호를 ChaCha20-Poly1305 키로 직접 사용하지 마세요.

토론 및 피드백

0개의 댓글