Cryptology Academy · บทเรียน

มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ

สร้างการทำมาสก์ การทำให้จุดบนเส้นโค้งมืดบอด และการเปรียบเทียบที่ใช้เวลาคงที่

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

มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน
  2. การวิเคราะห์กำลังไฟฟ้า: SPA และ DPA
  3. ช่องทางข้างเคียงด้านแม่เหล็กไฟฟ้าและเสียง
  4. มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ
← กลับไปที่ Cryptology Academy