Toolonit
  1. หน้าแรก
  2. เข้ารหัสลับ
  3. เข้ารหัส / ถอดรหัส
  4. ChaCha20

เข้ารหัสและถอดรหัส ChaCha20

เข้ารหัสและถอดรหัสข้อความด้วย ChaCha20-Poly1305 หรือ ChaCha20 แบบธรรมดา

เข้ารหัสด้วย

ต้องใช้รหัสผ่านนี้อีกครั้งเพื่อถอดรหัส สิ่งที่คุณพิมพ์จะไม่ออกจากหน้านี้

จำนวนรอบ PBKDF2

ค่าเริ่มต้นของ OpenSSL คือ 10,000 ใช้ตัวเลขใดก็ได้ ยิ่งมากยิ่งทำให้เดารหัสผ่านได้ช้าลง และการถอดรหัสต้องใช้จำนวนเดียวกัน

โหมด

มีการยืนยันความถูกต้อง: ตรวจพบได้หากรหัสผ่านหรือคีย์ผิด หรือข้อความถูกแก้ไข

ผลลัพธ์เป็น
ทำแบบเดียวกันด้วย OpenSSL

คำสั่ง enc ของ OpenSSL อ่าน ChaCha20-Poly1305 ไม่ได้ ให้ถอดรหัสที่นี่ หรือในโค้ดด้วยไลบรารีการเข้ารหัส โดยแท็ก 16 ไบต์จะอยู่ต่อท้ายข้อความเข้ารหัส

ChaCha20-Poly1305 (RFC 8439) คือการเข้ารหัสแบบยืนยันความถูกต้อง (authenticated cipher) ที่ใช้ใน TLS 1.3 และ WireGuard ซึ่งทั้งเข้ารหัสข้อความและตรวจจับได้หากข้อความถูกแก้ไขหรือรหัสผ่านผิด ที่นี่คุณเข้ารหัสข้อความได้ด้วยรหัสผ่าน หรือคีย์ 256 บิตกับ nonce 12 ไบต์ของคุณเอง หรือวางข้อความเข้ารหัสแบบ Base64 หรือ hex เพื่อถอดรหัส เมื่อใช้รหัสผ่าน คีย์และ nonce จะได้จาก PBKDF2-HMAC-SHA256 กับ salt สุ่ม แบบเดียวกับ openssl enc -pbkdf2 และผลลัพธ์ประกอบด้วย Salted__, salt, ข้อความเข้ารหัส และแท็ก Poly1305 ขนาด 16 ไบต์ นอกจากนี้ยังมี ChaCha20 แบบธรรมดาที่ไม่มีแท็ก ในรูปแบบเดียวกับ chacha20 ของ OpenSSL ข้อความ รหัสผ่าน และคีย์ของคุณไม่ออกจากอุปกรณ์ เพราะทำงานในเบราว์เซอร์ ใช้ฟรีและไม่ต้องสมัครสมาชิก

วิธีเข้ารหัสข้อความด้วย ChaCha20-Poly1305

  1. เลือก “เข้ารหัส” หรือ “ถอดรหัส” แล้วพิมพ์ข้อความที่จะเข้ารหัส หรือวางข้อความ Base64 หรือ hex ที่จะถอดรหัส ระบบจะตรวจรูปแบบให้อัตโนมัติ
  2. ใส่รหัสผ่าน (ปุ่ม “สร้าง” จะสร้างรหัสผ่านที่แข็งแรงให้) หรือสลับไปที่ “คีย์และ IV (hex)” แล้วใส่หรือสร้างคีย์ 64 หลักและ nonce 24 หลัก (สำหรับ ChaCha20 แบบธรรมดาคือ IV 32 หลัก)
  3. ใช้ ChaCha20-Poly1305 ตามเดิม หรือเลือก ChaCha20 ให้ตรงกับ openssl enc -chacha20 เวลาถอดรหัสต้องใช้โหมด รหัสผ่าน และจำนวนรอบเดียวกับตอนเข้ารหัส
  4. คัดลอกหรือดาวน์โหลดผลลัพธ์ หรือกด “สลับ” เพื่อย้ายผลลัพธ์ไปเป็นอินพุตแล้วถอดรหัสกลับเพื่อตรวจสอบ

ความสามารถ

  • ChaCha20-Poly1305 ตาม RFC 8439: คีย์ 256 บิต nonce 12 ไบต์ แท็ก 16 ไบต์
  • ChaCha20 แบบธรรมดาในรูปแบบของ OpenSSL: IV 16 ไบต์ ประกอบด้วยตัวนับ 4 ไบต์แบบ little-endian และ nonce 12 ไบต์
  • โหมดรหัสผ่าน: คีย์และ nonce จาก PBKDF2-HMAC-SHA256 กับ salt สุ่ม ต่อจากส่วนหัว Salted__ ของ openssl enc -pbkdf2
  • โหมดคีย์และ IV: ใช้คีย์และ nonce แบบ hex ของคุณเอง หรือสุ่มสร้างด้วยปุ่ม “สร้าง”
  • เมื่อใช้ Poly1305 รหัสผ่านหรือคีย์ที่ผิด หรือตัวอักษรที่ถูกแก้แม้เพียงตัวเดียว จะทำให้ถอดรหัสไม่สำเร็จ แทนที่จะได้ข้อมูลขยะ
  • ไม่มี padding: ข้อความเข้ารหัสยาวเท่าข้อความต้นฉบับ บวกแท็ก 16 ไบต์เมื่อใช้ Poly1305
  • คำสั่ง openssl enc -chacha20 สำหรับ ChaCha20 แบบธรรมดา

เป็นส่วนตัวหรือไม่

ใช่ ChaCha20 ทำงานด้วย WebAssembly ภายในเบราว์เซอร์ของคุณ และรหัสผ่านถูกยืดด้วย Web Crypto ของเบราว์เซอร์ สิ่งที่คุณพิมพ์ ไม่ว่าข้อความ รหัสผ่าน คีย์ หรือ nonce ไม่ถูกอัปโหลดหรือบันทึก

คำถามที่พบบ่อย

ควรใช้ ChaCha20-Poly1305 หรือ ChaCha20 แบบธรรมดา

ใช้ ChaCha20-Poly1305 ซึ่งเป็นค่าเริ่มต้น สำหรับงานใหม่ทุกอย่าง เพราะแท็ก Poly1305 จะทำให้ถอดรหัสไม่สำเร็จหากมีตัวอักษรถูกแก้แม้ตัวเดียวหรือรหัสผ่านผิด ChaCha20 แบบธรรมดาทำได้แค่เข้ารหัส คีย์ที่ผิดจะให้ไบต์ที่อ่านไม่ออกแทนข้อความแจ้งข้อผิดพลาด จึงควรใช้เฉพาะเพื่อให้ตรงกับระบบที่ใช้อยู่ เช่น openssl enc -chacha20

OpenSSL ถอดรหัสได้ไหม

ChaCha20 แบบธรรมดาได้: echo 'U2FsdGVkX1…' | openssl enc -d -chacha20 -pbkdf2 -iter 10000 -a -A สำหรับโหมดรหัสผ่าน หรือใช้ -K <คีย์ hex> -iv <IV hex> แทน -pbkdf2 -iter ในโหมดคีย์และ IV ส่วน ChaCha20-Poly1305 ไม่ได้ เพราะ openssl enc ไม่รับ AEAD cipher ให้อ่านที่นี่หรือในโค้ด โดยในโหมดคีย์และ IV ผลลัพธ์คือข้อความเข้ารหัสตามด้วยแท็ก 16 ไบต์ ไม่มีส่วนหัว

ถ้าใช้ nonce ซ้ำจะเกิดอะไรขึ้น

ข้อความสองข้อความที่ใช้คีย์และ nonce เดียวกันจะเผยค่า XOR ของข้อความทั้งสอง และทำให้ผู้โจมตีปลอมแท็ก Poly1305 ได้ ในโหมดรหัสผ่านความผิดพลาดนี้เกิดขึ้นไม่ได้ เพราะการเข้ารหัสแต่ละครั้งสุ่ม salt ใหม่ คีย์ nonce และผลลัพธ์จึงใหม่ทุกครั้ง ในโหมดคีย์และ IV ให้กด “สร้าง” เพื่อได้ nonce ใหม่ก่อนเข้ารหัสทุกข้อความ

ChaCha20 ปลอดภัยเท่า AES ไหม

ปลอดภัยเท่ากัน ChaCha20-Poly1305 และ AES-GCM ต่างเป็น cipher มาตรฐานของ TLS 1.3 ที่ไม่มีวิธีโจมตีที่ใช้ได้จริง และ ChaCha20 มักเร็วกว่าบนโทรศัพท์ที่ไม่มีฮาร์ดแวร์สำหรับ AES จุดอ่อนอยู่ที่รหัสผ่าน ให้ใช้รหัสผ่านสุ่มที่ยาว และตั้ง 600,000 รอบเมื่อคุณควบคุมได้ทั้งสองฝั่ง

รองรับ XChaCha20-Poly1305 ไหม

ไม่รองรับ XChaCha20 ซึ่งเป็นแบบที่ใช้ nonce 24 ไบต์ในไลบรารี libsodium มีโครงสร้างต่างออกไป ข้อความเข้ารหัสของมันจึงถอดรหัสที่นี่ไม่ได้ หน้านี้รับ nonce 12 ไบต์ตาม RFC 8439 และ IV 16 ไบต์ของ chacha20 ใน OpenSSL หากต้องการเข้ารหัสไฟล์แทนข้อความ เครื่องมือเข้ารหัสไฟล์ใช้ ChaCha20-Poly1305 ในรูปแบบ age

เครื่องมือที่เกี่ยวข้อง