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

Tất cả các thao tác mã hóa/giải mã được thực hiện cục bộ trong trình duyệt của bạn. Không có dữ liệu nào được gửi đến máy chủ.

ChaCha20: Mã hóa dòng 256 bit với nonce 96 bit. Nhanh và an toàn, không có 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ộTệp của bạn được xử lý hoàn toàn trong trình duyệt. Không có dữ liệu nào được gửi đến máy chủ.

Về ChaCha20

ChaCha20 là một mã hóa dòng hiện đại được thiết kế bởi Daniel J. Bernstein vào năm 2008, bắt nguồn từ mã hóa Salsa20. Nó sử dụng khóa 256 bit và hoạt động trên các khối 512 bit, tạo ra dòng khóa được XOR với văn bản thuần để mã hóa. Mã hóa này nổi tiếng với tốc độ, bảo mật và khả năng chống tấn công thời gian.

Mã hóa này được biết đến với tốc độ, bảo mật và khả năng chống tấn công thời gian, là lựa chọn tuyệt vời cho các triển khai phần mềm.

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) Mã hóa thô, giao thức tùy chỉnh
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3, QUIC, nhắn tin an toàn
XChaCha20 Mã hóa dòng 256 bits 192 bits (24 bytes) Kịch bản nonce ngẫu nhiên
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) Hầu hết ứng dụng (khuyến nghị)

Cách ChaCha20 hoạt động

ChaCha20 hoạt động trong 20 vòng, áp dụng các hàm quarter-round lên ma trận 4×4 của các từ 32 bit. Trạng thái ban đầu bao gồm:

Mỗi vòng hoán vị trạng thái sử dụng phép cộng, XOR và xoay, cung cấp khả năng khuếch tán tuyệt vời trong khi vẫn nhanh trong phần mềm.

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

ChaCha20-Poly1305 là một cấu trúc AEAD được chuẩn hóa trong RFC 8439. Nó kết hợp ChaCha20 để mã hóa với MAC Poly1305 để xác thực. Điều này đảm bảo cả tính bảo mật và toàn vẹn - bất kỳ sự thay đổi nào đối với văn bản mã hóa hoặc AAD sẽ được phát hiện khi giải mã. Thẻ xác thực 128 bit được nối vào văn bản mã hóa.

Điều này đảm bảo cả tính bảo mật và toàn vẹn - bất kỳ sự thay đổi nào với văn bản mã hóa hoặc AAD sẽ được phát hiện khi giải mã. Thẻ xác thực 128 bit được tính trên văn bản mã hóa và AAD.

Tính năng chính

  • Hiệu suất cao: Tối ưu hóa cho triển khai phần mềm, nhanh hơn AES 3 lần trên các nền tảng không có tăng tốc phần cứng
  • Thời gian hằng số: Chống tấn công thời gian cache, không giống như các triển khai AES dựa trên bảng
  • Thiết kế đơn giản: Chỉ sử dụng các phép toán ARX (cộng, xoay, XOR), dễ triển khai chính xác
  • Được áp dụng rộng rãi: Sử dụng trong TLS 1.3, OpenSSH, WireGuard, Signal Protocol và nhiều hơn nữa
  • Nonce mở rộng: Biến thể XChaCha20 cho phép tạo nonce ngẫu nhiên an toàn không có rủi ro va chạm

Lưu ý bảo mật

  • Không bao giờ sử dụng lại nonce với cùng một khóa - điều này hoàn toàn phá vỡ bảo mật
  • Sử dụng các biến thể AEAD (Poly1305) cho hầu hết các ứng dụng để phát hiện giả mạo
  • Đối với nonce ngẫu nhiên, sử dụng XChaCha20 (192 bit) để giảm thiểu xác suất va chạm
  • Sử dụng KDF phù hợp (HKDF, Argon2) để dẫn xuất khóa từ mật khẩu

Sử dụng thực tế

  • TLS 1.3: Bộ mã hóa mặc định (TLS_CHACHA20_POLY1305_SHA256)
  • WireGuard VPN: Giao thức mã hóa chính
  • Signal Protocol: Nhắn tin mã hóa đầu cuối
  • Cloudflare: Được ưu tiên hơn AES-GCM cho khách hàng di động
  • Kernel Linux: CSPRNG (/dev/urandom)

Tài liệu tham khảo

FAQ

Sự khác biệt giữa ChaCha20 và AES là gì?

Cả hai đều là mã hóa đối xứng an toàn. ChaCha20 nhanh hơn 3 lần trong phần mềm không có tăng tốc phần cứng và chống tấn công thời gian. AES nhanh hơn với hỗ trợ phần cứng (AES-NI). ChaCha20 được ưa chuộng cho thiết bị di động và nhúng.

Tại sao sử dụng XChaCha20 thay vì ChaCha20?

Nonce 192 bit của XChaCha20 cho phép tạo nonce ngẫu nhiên an toàn. Với nonce 96 bit, bạn cần quản lý cẩn thận để tránh va chạm. XChaCha20 được khuyến nghị khi bạn không thể đảm bảo nonce tuần tự duy nhất.

Tham số bộ đếm dùng để làm gì?

Bộ đếm cho phép mã hóa tin nhắn dài hơn 64 byte bằng cách tăng cho mỗi khối. Đối với các chế độ AEAD, nó bắt đầu từ 1 (khối 0 tạo khóa Poly1305). Thông thường, bạn có thể để giá trị mặc định (0).

Tôi có thể mã hóa tệp với công cụ này không?

Công cụ này chạy hoàn toàn trong trình duyệt của bạn và phù hợp để mã hóa văn bản và dữ liệu nhỏ. Đối với tệp lớn, hãy cân nhắc sử dụng các công cụ gốc như openssl hoặc các ứng dụng dựa trên libsodium.

Công cụ này có an toàn để sử dụng trong sản xuất không?

Công cụ này dành cho mục đích giáo dục và phát triển. Mặc dù việc triển khai tuân theo các thông số kỹ thuật tiêu chuẩn, các hệ thống sản xuất nên sử dụng các thư viện mã hóa đã được kiểm toán kỹ lưỡng như libsodium, OpenSSL hoặc các API của nền tảng.