Cryptology Academy · บทเรียน

การออกแบบ Salsa20 และ ChaCha20

ศึกษาการทำงานของควอเตอร์ราวด์ใน ChaCha20 และความเร็วบนฮาร์ดแวร์มือถือ

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

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

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

ChaCha20 เป็นเลขรหัสลับแบบกระแสที่ใช้กันอย่างแพร่หลายในระบบสมัยใหม่ โดยใช้ใน TLS 1.3, WireGuard, Signal และระบบอื่น ๆ อีกมากมาย มาวิเคราะห์การออกแบบที่สง่างามของมันกัน

ต้นกำเนิดของ ChaCha20

Daniel J. Bernstein ออกแบบ Salsa20 ในปี 2005 แล้วปรับปรุงเป็น ChaCha20 ในปี 2008 คำนำหน้า 'Cha' บ่งบอกถึงการปรับปรุงการแพร่กระจายเพิ่มเติม 8 ประการ ChaCha20 ถูกกำหนดมาตรฐานใน RFC 7539 (2015) และ RFC 8439 (2018)

สถานะของ ChaCha20

ChaCha20 ทำงานบนเมทริกซ์ขนาด 4×4 ของคำขนาด 32 บิต (รวมทั้งหมด 512 บิต): - คำที่ 0-3: ค่าคงที่ ('expa', 'nd 3', '2-by', 'te k') - คำที่ 4-11: คีย์ขนาด 256 บิต (8 คำ) - คำที่ 12: ตัวนับบล็อกขนาด 32 บิต - คำที่ 13-15: นอนซ์ขนาด 96 บิต

การหมุนย่อย

การทำงานหลักของ ChaCha20 — การหมุนย่อยบน (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 การบวก-การหมุน-XOR (ARX) ไม่จำเป็นต้องใช้ตารางแทนค่า จึงทำงานได้รวดเร็วบนฮาร์ดแวร์ทุกชนิด

20 รอบ

ChaCha20 ใช้ทั้งหมด 20 รอบ โดยสลับระหว่างรอบคอลัมน์และรอบเส้นทแยงมุม แต่ละรอบมีการหมุนย่อย 4 ครั้ง 8 รอบคือ ChaCha8 (เร็ว) และ 12 รอบคือ ChaCha12 (สมดุล) ChaCha20 เป็นค่าเริ่มต้นที่ปลอดภัย

การสร้างกระแสกุญแจ

1. เริ่มต้นสถานะจากคีย์ + นอนซ์ + ตัวนับ 2. ใช้การหมุนย่อย 20 รอบ 3. บวกสถานะเริ่มต้นเข้ากับสถานะที่ผ่านการหมุน (ป้องกันการย้อนกลับ) 4. ส่งออกบล็อกกระแสกุญแจขนาด 64 ไบต์ 5. เพิ่มค่าตัวนับเพื่อใช้กับบล็อกถัดไป

ข้อดีด้านความปลอดภัยของ ARX

เลขรหัสลับแบบ ARX (บวก, หมุน, XOR) ทำงานด้วยเวลาคงที่ได้โดยธรรมชาติบน CPU ส่วนใหญ่ การไม่ใช้การค้นค่าจากตารางหมายความว่าจะไม่มีช่องทางข้างเคียงจากเวลาเข้าถึงแคช ซึ่งเป็นสิ่งสำคัญอย่างยิ่งสำหรับการนำไปใช้งานอย่างปลอดภัย

ประสิทธิภาพของ ChaCha20

เมื่อไม่มี AES-NI: ChaCha20 เร็วกว่า AES-CBC ประมาณ 3 เท่า บนโทรศัพท์ (ARM Cortex-A): ChaCha20 เป็นตัวเลือกที่เร็วกว่า เมื่อมี AES-NI (x86 สมัยใหม่): AES-GCM จะเร็วกว่า TLS 1.3 รองรับทั้งสองแบบ

Salsa20 เทียบกับ ChaCha20

ChaCha20 ปรับปรุงจาก Salsa20 ด้วยการแพร่กระจายที่ดีขึ้นในรอบแรก ๆ ทำให้ต้านทานการวิเคราะห์การเข้ารหัสเชิงผลต่างได้มากขึ้น การเริ่มต้นสถานะแตกต่างกัน ทั้งสองแบบปลอดภัย แต่ ChaCha20 คือมาตรฐานปัจจุบัน

ChaCha20 ใน Python

from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import os key = ChaCha20Poly1305.generate_key() nonce = os.urandom(12) ct = ChaCha20Poly1305(key).encrypt(nonce, b'hello', None)

XChaCha20: นอนซ์แบบขยาย

ChaCha20 ใช้นอนซ์ขนาด 96 บิต ส่วน XChaCha20 ขยายเป็น 192 บิตโดยใช้ฟังก์ชัน HChaCha20 นอนซ์ที่มีขนาดใหญ่ขึ้นช่วยให้สร้างค่าสุ่มได้โดยไม่ต้องกังวลเรื่องการชนกัน libsodium ใช้ XChaCha20-Poly1305

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

เหตุใดการออกแบบแบบ ARX ของ ChaCha20 จึงกำจัดช่องทางด้านข้างจากเวลาแคชได้

สรุปทบทวน

ChaCha20 มีการออกแบบที่เรียบง่ายสง่างามและปลอดภัย ต่อไปเราจะดูการนำไปใช้ใน TLS 1.3 ในรูปแบบ ChaCha20-Poly1305 AEAD
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “การออกแบบ Salsa20 และ ChaCha20” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การออกแบบ Salsa20 และ ChaCha20”

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

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

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

บทเรียน “การออกแบบ Salsa20 และ ChaCha20” ใช้เวลานานแค่ไหน

บทเรียน 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