CoderTools

Mã hóa ChaCha20

Mã hóa dòng hiện đại với xác thực tùy chọn

Bảo mật phía máy khách

ChaCha20-Poly1305 (RFC 8439) là chế độ AEAD được khuyến nghị. ChaCha20 thuần không cung cấp tính toàn vẹn — luôn sử dụng với Poly1305. Nonce 96 bit: bắt buộc đảm bảo tính duy nhất. XChaCha20-Poly1305 (192 bit) cho tạo nonce ngẫu nhiên an toàn.

ChaCha20 (luồng): 256 bit, nonce 96 bit, bộ đếm 32 bit, 20 vòng; không xác thực.

Giá trị bộ đếm ban đầu (mặc định: 0)

Tùy chọn định dạng
🔒 100% Xử lý cục bộDữ liệu bạn nhập được xử lý hoàn toàn trong trình duyệt. Không có dữ liệu nào được tải lên máy chủ.

Về ChaCha20

ChaCha20 là mật mã dòng ARX của Bernstein (2008), biến thể cải tiến của Salsa20. Cùng ma trận 4×4 nhưng quarter-round được thiết kế lại với xoay 16-12-8-7: khuếch tán hoàn toàn trong 2 vòng (Salsa20: 4 vòng). IETF (RFC 8439): nonce 96 bit + bộ đếm 32 bit (tối đa 256 GB/nonce).

ChaCha20-Poly1305 (RFC 7539→RFC 8439): AEAD chuẩn hóa IETF. Khóa Poly1305 một lần từ 32 byte đầu ChaCha20 (bộ đếm=0), mã hóa từ bộ đếm=1. Tag 128 bit. Google 2014 triển khai cho Android TLS. TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 bắt buộc.

So sánh thuật toán

Thuật toán Xác thực Độ dài khóa Kích thước Nonce Trường hợp sử dụng
ChaCha20 Mã hóa dòng 256 bits 96 bits (12 bytes) Nghiên cứu giao thức; luồng với xác thực ở lớp trên; benchmarking
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3, WireGuard, SSH, QUIC, Signal; thiết bị không có AES-NI; AEAD kháng tấn công timing
XChaCha20 Mã hóa dòng 256 bits 192 bits (24 bytes) Mã hóa tệp/DB không đảm bảo nonce duy nhất qua bộ đếm; libsodium secretstream; mã hóa sao lưu nonce độc lập
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) Dữ liệu lưu trữ cần nonce ngẫu nhiên + xác thực 128 bit; lưu trữ libsodium; AEAD mặc định khi không thể quản lý nonce tập trung

Cách ChaCha20 hoạt động

Khởi tạo 4×4: hàng 0=hằng số “expa nd 32-byte k”, hàng 1-2=khóa 256 bit (8×32), hàng 3=[bộ đếm|nonce₀|nonce₁|nonce₂] (IETF). Quarter-round(a,b,c,d): a+=b; d^=a; d⋘16; c+=d; b^=c; b⋘12; a+=b; d^=a; d⋘8; c+=d; b^=c; b⋘7.

Vòng đôi = quarter-round cột + đường chéo. Xoay 16-12-8-7: khuếch tán hoàn toàn trong 2 vòng (Salsa20: 4). 10 vòng đôi; đầu ra = XOR trạng thái đã biến đổi với trạng thái ban đầu.

AEAD: Mã hóa xác thực

ChaCha20-Poly1305 AEAD (RFC 8439): khóa Poly1305 một lần từ 32 byte đầu ChaCha20 (bộ đếm=0); mã hóa từ bộ đếm=1; MAC: [AAD đệm||bản mã đệm||len(AAD)||len(bản mã)]; tag 16 byte.

XChaCha20-Poly1305: HChaCha20 dẫn xuất khóa con 256 bit từ 128 bit đầu nonce 192 bit + khóa gốc. 2^32 tin nhắn → xác suất va chạm 2^(-128). libsodium: crypto_aead_xchacha20poly1305_ietf_encrypt.

Tính năng chính

  • Khuếch tán tốt hơn Salsa20: xoay 16-12-8-7 → khuếch tán hoàn toàn trong 2 vòng (Salsa20: 4). ChaCha20/8 ≈ Salsa20/16 về bảo mật.
  • Chuẩn hóa IETF (RFC 8439, 2018): TLS 1.3, WireGuard, SSH, QUIC, Signal, Noise Protocol, Android TLS.
  • Hiệu suất không phụ thuộc AES-NI: nhanh hơn AES-GCM 25-40% trên ARM, RISC-V, MIPS. Lý tưởng cho IoT/di động/nhúng.
  • Nonce 96 bit IETF: bộ đếm 32 bit (tối đa 256 GB/nonce). XChaCha20: 192 bit cho tạo nonce ngẫu nhiên an toàn.
  • Không có tấn công đã biết vào ChaCha20/20 (2025). Phân tích vòng giảm tốt nhất: Shi et al. (2012) trên ChaCha20/6.

Lưu ý bảo mật

  • Tái sử dụng nonce phá hủy ChaCha20-Poly1305: XOR bản rõ lộ + khóa Poly1305 bị tiết lộ. TLS 1.3: nonce = số thứ tự XOR.
  • Giới hạn bộ đếm 32 bit: tối đa 256 GB/(khóa, nonce). TLS 1.3 tự động rekey qua key_update.
  • Khóa Poly1305 một lần: tái sử dụng nonce → tái sử dụng khóa Poly1305 → tấn công giả mạo (Bernstein 2005). RFC 8439 §2.8.
  • Cắt ngắn tag bị cấm: RFC 8439 yêu cầu 16 byte. Cắt xuống 64 bit → 2^(-64), không tuân thủ TLS 1.3.

Sử dụng thực tế

  • TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 bắt buộc. OpenSSL, BoringSSL, NSS, WolfSSL, mbedTLS.
  • WireGuard VPN: mật mã đối xứng duy nhất (Donenfeld 2017, Linux 5.6). Kết hợp Curve25519, Poly1305, BLAKE2, SipHash.
  • Signal Protocol/Double Ratchet: ChaCha20-Poly1305 sau X3DH. WhatsApp, Facebook Messenger bí mật, Matrix, Keybase.
  • OpenSSH chacha20-poly1305@openssh.com (6.5, 2014): hai phiên bản ChaCha20 để loại bỏ rò rỉ timing.
  • Google Mobile TLS (2014): Langley+Duong. Nhanh gấp 3 lần AES-128-GCM trên Nexus 5 Cortex-A15. Ảnh hưởng IETF.

Tài liệu tham khảo

Menu Nhanh

Chưa có công cụ gần đây