มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ
สร้างการทำมาสก์ การทำให้จุดบนเส้นโค้งมืดบอด และการเปรียบเทียบที่ใช้เวลาคงที่
มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
สามกลุ่มของมาตรการป้องกัน
มาตรการป้องกันช่องทางข้างเคียงแบ่งได้เป็นสามกลุ่ม ได้แก่ การปกปิดค่า (สุ่มค่าระหว่างการคำนวณ), การพรางค่า (สุ่มอินพุตและเอาต์พุต) และ โค้ดแบบใช้เวลาเท่ากัน (กำจัดการจับเวลาที่ขึ้นอยู่กับข้อมูล)
การปกปิดแบบบูลีน
ทำ XOR ระหว่างค่าระหว่างการคำนวณแต่ละค่ากับมาสก์สุ่มใหม่ r ประมวลผลค่าที่ถูกปกปิด x⊕r แล้วถอดมาสก์ออกเมื่อสิ้นสุด ร่องรอยการใช้พลังงานจึงขึ้นอยู่กับ x⊕r ไม่ใช่ x
การปกปิดเชิงเลขคณิตสำหรับการคูณ
สำหรับการดำเนินการแบบคูณ ให้ใช้มาสก์แบบคูณ โดยแทนที่ x ด้วย x·r mod p รูปแบบการปกปิดต้องเข้ากันได้กับการดำเนินการเชิงพีชคณิตแต่ละแบบในรหัสลับ
การพรางค่า RSA
ก่อนถอดรหัสข้อความเข้ารหัส c ให้สุ่มเลือก r แล้วคำนวณ c' = c·r^e mod n ถอดรหัส c' เพื่อให้ได้ m·r mod n จากนั้นหารเอา r ออก การยกกำลังจริงจะไม่เคยเห็นค่า c จริง
การพรางค่าจุด ECC
สุ่มพิกัดโพรเจกทีฟ โดยแทนที่จะใช้จุดแอฟฟีน (x,y) ให้ใช้ (λx : λy : λ) สำหรับค่า λ แบบสุ่ม การคูณสเกลาร์จะทำงานบนพิกัดที่ถูกสุ่ม ทำให้ร่องรอยการใช้พลังงานเปลี่ยนไปในแต่ละครั้ง
กฎการเขียนโปรแกรมแบบใช้เวลาเท่ากัน
1. ห้ามมีแขนงการทำงานที่ขึ้นอยู่กับความลับ 2. ห้ามใช้ดัชนีหน่วยความจำที่ขึ้นอยู่กับความลับ 3. ห้ามออกจากการทำงานก่อนเวลา 4. ใช้การดำเนินการแบบใช้เวลาเท่ากันที่มีให้โดยแพลตฟอร์ม เช่น crypto_verify_32
การเปรียบเทียบแบบใช้เวลาเท่ากันในไพธอน
อย่าใช้ == หรือ hmac.compare_digest กับไบต์ดิบในส่วนการทำงานที่ไวต่อเวลา ให้ใช้:
import hmac
def constant_time_compare(a: bytes, b: bytes) -> bool:
"""Uses HMAC double-HMAC trick for constant-time equality."""
# hmac.compare_digest is constant-time in CPython
return hmac.compare_digest(a, b)
# Example
secret = b"expected_mac_value"
received = b"attacker_provided__"
print(constant_time_compare(secret, received)) # False, but no timing leakข้อผิดพลาดจากคอมไพเลอร์และสถาปัตยกรรม
คอมไพเลอร์อาจปรับโค้ดแบบใช้เวลาเท่ากันจนหายไป ให้ใช้การเขียนค่าแบบไม่ให้คอมไพเลอร์ปรับเปลี่ยน แบริเออร์หน่วยความจำ หรืออินทรินสิกของภาษาแอสเซมบลี คอมไพเลอร์ C มี -fno-delete-null-pointer-checks แต่ไม่มีการรับประกันแบบใช้เวลาเท่ากันที่เป็นสากล
การสับเปลี่ยนลำดับและการดำเนินการหลอก
สับเปลี่ยนลำดับการค้นหาในกล่อง S แบบสุ่ม หรือแทรกการดำเนินการหลอกที่ใช้พลังงานแต่ไม่ส่งผลต่อผลลัพธ์ วิธีนี้เพิ่มความยากให้ DPA แต่ไม่สามารถกำจัดการรั่วไหลได้
มาตรการป้องกันทางฮาร์ดแวร์
ตัวเร่งการเข้ารหัสเฉพาะทาง เช่น ARM TrustZone และฮาร์ดแวร์เออีเอสของ STM32 ใช้การปกปิดค่าบนซิลิคอน การใช้งานบน ASIC จะเพิ่มแผงกำบังโลหะและตาข่ายตรวจจับแบบแอ็กทีฟเพื่อตรวจจับการตรวจวัดทางกายภาพ
แบบทดสอบความเข้าใจ
มาตรการป้องกันใดป้องกันการโจมตี RSA แบบจับเวลาโดยสุ่มข้อความเข้ารหัสก่อนการยกกำลัง
สรุปบทเรียน
การปกปิดค่าจะสุ่มค่าระหว่างการคำนวณ การพรางค่าจะสุ่มอินพุตของ RSA และ ECC ส่วนโค้ดแบบใช้เวลาเท่ากันจะกำจัดแขนงการทำงานที่เกี่ยวกับเวลา การป้องกันเชิงลึกผสมผสานทั้งสามวิธีเข้าด้วยกัน ตัวเร่งฮาร์ดแวร์ใช้วิธีเหล่านี้บนซิลิคอนเพื่อให้การรับประกันที่รัดกุมที่สุด
เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 67
- บทเรียน
- 261
คำถามที่พบบ่อย
บทเรียน “มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ”
สร้างการทำมาสก์ การทำให้จุดบนเส้นโค้งมืดบอด และการเปรียบเทียบที่ใช้เวลาคงที่ คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน
- การวิเคราะห์กำลังไฟฟ้า: SPA และ DPA
- ช่องทางข้างเคียงด้านแม่เหล็กไฟฟ้าและเสียง
- มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ