CoderTools

ChaCha20 암호화

선택적 인증이 가능한 현대적 스트림 암호

클라이언트 측 보안

모든 암호화/복호화 작업은 브라우저에서 로컬로 수행됩니다. 어떤 서버로도 데이터가 전송되지 않습니다.

ChaCha20: 96비트 논스를 사용하는 256비트 스트림 암호. 빠르고 안전하며 인증 없음.

초기 카운터 값 (기본값: 0)

형식 옵션
🔒 100% 로컬 처리파일은 브라우저에서 완전히 처리됩니다. 어떤 데이터도 서버로 전송되지 않습니다.

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)

참고 자료

자주 묻는 질문

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와 같이 잘 감사된 암호화 라이브러리를 사용해야 합니다.