Cryptology Academy · บทเรียน

ChaCha20-Poly1305 AEAD ใน TLS 1.3

ดูการใช้งาน ChaCha20 เป็นรหัสเข้ารหัส AEAD ใน TLS สมัยใหม่

บทเรียน 4 จาก 413 ขั้นตอน

ChaCha20-Poly1305 AEAD ใน TLS 1.3 เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ChaCha20-Poly1305 ผสานรหัสลับแบบสตรีม ChaCha20 เข้ากับ MAC Poly1305 เพื่อสร้างชุดรหัสลับ AEAD ที่ปลอดภัย ซึ่งใช้ใน TLS 1.3, WireGuard และแอปพลิเคชันบนมือถือ

ภาพรวม MAC ของ Poly1305

Poly1305 เป็น MAC แบบใช้ครั้งเดียวที่ Bernstein ออกแบบไว้ โดยตรวจสอบความถูกต้องของข้อความด้วยการประเมินพหุนามบนจำนวนเฉพาะ 2^130-5 แบบใช้ครั้งเดียวหมายความว่าแต่ละครั้งที่ใช้ต้องใช้คีย์ใหม่ขนาด 32 ไบต์

ความปลอดภัยของ Poly1305

Poly1305 ให้ความปลอดภัยระดับ 128 บิต หากไม่มีการนำคีย์กลับมาใช้ซ้ำ คีย์ MAC จะถูกสร้างขึ้นใหม่สำหรับแต่ละข้อความจากกระแสคีย์ของ ChaCha20 การผสานองค์ประกอบทั้งสองเข้าด้วยกันมีความปลอดภัยที่พิสูจน์ได้

การสร้าง ChaCha20-Poly1305

1. สร้างกระแสคีย์ขนาด 64 ไบต์จากบล็อก 0 ของ ChaCha20 2. 32 ไบต์แรก = คีย์ Poly1305 3. ทิ้ง 32 ไบต์ที่เหลือ 4. เข้ารหัสข้อความต้นฉบับด้วยบล็อก 1,2,3,... ของ ChaCha20 5. คำนวณ MAC ของ Poly1305 บน AAD + ข้อความเข้ารหัส

โครงสร้าง RFC 8439

รูปแบบผลลัพธ์: ข้อความเข้ารหัส || แท็ก (16 ไบต์) ข้อมูลป้อนเข้า MAC: AAD || pad1 || ข้อความเข้ารหัส || pad2 || len(AAD) || len(ข้อความเข้ารหัส) การเติม: เติมศูนย์ให้มีการจัดแนวขนาด 16 ไบต์ ความยาวเข้ารหัสเป็นจำนวนเต็ม 64 บิตแบบลิตเทิลเอนเดียน

ชุดรหัสลับของ TLS 1.3

ชุดรหัสลับที่ TLS 1.3 กำหนดให้ต้องรองรับ: - TLS_AES_256_GCM_SHA384 - TLS_AES_128_GCM_SHA256 - TLS_CHACHA20_POLY1305_SHA256 CHACHA20_POLY1305 เป็นตัวเลือกที่แนะนำสำหรับไคลเอนต์ที่ไม่มีการเร่ง AES ด้วยฮาร์ดแวร์

WireGuard ใช้ ChaCha20-Poly1305

WireGuard ใช้ ChaCha20Poly1305 เท่านั้นสำหรับการเข้ารหัสอุโมงค์ทั้งหมด ไม่มีการต่อรองชุดรหัสลับ แต่ใช้อัลกอริทึมเดียวที่ผ่านการวิเคราะห์มาอย่างดี ความเรียบง่ายนี้ลดพื้นที่โจมตีลงอย่างมาก

secretbox ของ libsodium

ฟังก์ชัน crypto_secretbox_easy() ของ libsodium ใช้ XSalsa20-Poly1305 ซึ่งเป็นรูปแบบที่มีนอนซ์แบบขยาย: ciphertext = crypto_secretbox_easy(message, nonce, key) ส่วนติดต่อระดับสูง: ใช้งานได้อย่างถูกต้องทันทีโดยไม่ต้องเลือกพารามิเตอร์เอง

ประสิทธิภาพบนอุปกรณ์มือถือ

อุปกรณ์ Android และ iOS มักไม่มี AES-NI การวิเคราะห์ของ Google ในปี 2014 แสดงให้เห็นว่า ChaCha20-Poly1305 เร็วกว่า AES-GCM ถึง 3 เท่าบน ARM นี่จึงเป็นเหตุผลที่ Google กำหนดให้ต้องรองรับใน Android และ Chrome

การนำไปใช้ใน Python

from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import os key = ChaCha20Poly1305.generate_key() nonce = os.urandom(12) aad = b'header_data' cipher = ChaCha20Poly1305(key) ct = cipher.encrypt(nonce, b'plaintext', aad) pt = cipher.decrypt(nonce, ct, aad)

เปรียบเทียบ: AES-GCM กับ ChaCha20-Poly1305

AES-GCM: เร็วกว่าเมื่อใช้ AES-NI, นอนซ์ขนาด 96 บิต, แท็ก GCM อาจถูกปลอมแปลงได้หากนอนซ์ถูกนำมาใช้ซ้ำ ChaCha20-Poly1305: เร็วกว่าเมื่อไม่มีฮาร์ดแวร์ช่วยเร่ง, นอนซ์ขนาด 96 บิต, คีย์ Poly1305 ถูกสร้างขึ้นใหม่สำหรับแต่ละข้อความ ทั้งสองแบบยอดเยี่ยม ใช้ AES-GCM บนเซิร์ฟเวอร์ และใช้ ChaCha20-Poly1305 บนอุปกรณ์มือถือ

ตรวจสอบอย่างรวดเร็ว

ใน ChaCha20-Poly1305 คีย์ Poly1305 ถูกสร้างขึ้นอย่างไร

สรุปทบทวน

ChaCha20-Poly1305 เป็นตัวเลือก AEAD ที่ปรับให้เหมาะกับอุปกรณ์มือถือ ต่อไปเราจะศึกษาเรื่องการแลกเปลี่ยนคีย์แบบ Diffie-Hellman ว่าฝ่ายสองฝ่ายสร้างความลับร่วมกันผ่านช่องทางที่ไม่ปลอดภัยได้อย่างไร
เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

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

บทเรียน “ChaCha20-Poly1305 AEAD ใน TLS 1.3” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ChaCha20-Poly1305 AEAD ใน TLS 1.3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ChaCha20-Poly1305 AEAD ใน TLS 1.3”

ดูการใช้งาน ChaCha20 เป็นรหัสเข้ารหัส AEAD ใน TLS สมัยใหม่ คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ChaCha20-Poly1305 AEAD ใน TLS 1.3” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนวคิดรหัสเข้ารหัสแบบสตรีมและ PRNG
  2. RC4: การออกแบบ จุดอ่อน และการโจมตี WEP
  3. การออกแบบ Salsa20 และ ChaCha20
  4. ChaCha20-Poly1305 AEAD ใน TLS 1.3
← กลับไปที่ Cryptology Academy