การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน
สาธิตการโจมตีด้วยเวลาของแคชบนการใช้งานที่ใช้เวลาไม่คงที่
การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
การโจมตีแบบจับเวลาคืออะไร
การโจมตีแบบจับเวลา คือการโจมตีช่องทางข้างเคียงที่ผู้โจมตีวัดว่าการดำเนินการเข้ารหัสลับใช้เวลานานเท่าใด เพื่ออนุมานข้อมูลลับ แม้ความแตกต่างระดับนาโนวินาทีก็อาจเปิดเผยบิตของกุญแจได้
เหตุใดเวลาการทำงานจึงรั่วไหลข้อมูลลับ
แขนงเงื่อนไขและการเข้าถึงหน่วยความจำภายในโค้ดเข้ารหัสลับมักขึ้นอยู่กับค่าลับ วนรอบที่หยุดก่อนเมื่อพบบิตศูนย์จะทำงานได้เร็วกว่า และผู้โจมตีก็วัดความแตกต่างนั้น
การโจมตีแคชด้วยเวลาใน AES
การค้นหาตาราง AES แบบดั้งเดิมจะเข้าถึงบรรทัดแคชของ CPU ซึ่งที่อยู่ขึ้นอยู่กับไบต์ของกุญแจ เครื่องมืออย่าง Flush+Reload ช่วยให้ผู้โจมตีสังเกตได้ว่ามีการเข้าถึงบรรทัดแคชใด
ตัวพยากรณ์เวลาของการโจมตี RSA โดย Bleichenbacher
การโจมตีของ Bleichenbacher ในปี 1998 ใช้ประโยชน์จากความแตกต่างของเวลาในการตรวจสอบข้อมูลเติมเต็ม PKCS#1 v1.5 ผู้โจมตีสามารถใช้ข้อความเข้ารหัสที่เลือกหลายล้านรายการเพื่อกู้คืนกุญแจส่วนตัว RSA ขนาด 1024 บิตได้
การโจมตีด้วยเวลาจากระยะไกล
แม้จะทำงานผ่านเครือข่าย ความแตกต่างของเวลาระดับต่ำกว่าหนึ่งมิลลิวินาทีก็สามารถวัดได้หากมีตัวอย่างมากพอ Lucky13 ใช้ประโยชน์จากเวลาของ MAC ในโหมด CBC ของ TLS ผ่านอินเทอร์เน็ต
การวัดเวลาใน Python
ใช้ time.perf_counter_ns() เพื่อให้ได้ความละเอียดระดับนาโนวินาที หากต้องการสาธิตการเปรียบเทียบที่มีช่องโหว่:
import time
def vulnerable_compare(a, b):
for x, y in zip(a, b):
if x != y:
return False
return len(a) == len(b)
start = time.perf_counter_ns()
vulnerable_compare(b"secret_key_here", b"wrong_key_xxxxx")
elapsed = time.perf_counter_ns() - start
print(f"Elapsed: {elapsed} ns")การจำลองตัวพยากรณ์เวลา
กลไกตอบสนองตามเวลาจะรายงานว่าค่าที่เดาถูกต้องหรือไม่ AND ยังรั่วไหลข้อมูลผ่านเวลา เราสามารถกู้คืนข้อมูลลับทีละไบต์ได้โดยวัดว่าค่าที่เดาใดใช้เวลานานที่สุดก่อนคืนค่าเท็จ
การวิเคราะห์ข้อมูลเวลาทางสถิติ
การวัดครั้งเดียวมีสัญญาณรบกวน ผู้โจมตีเก็บตัวอย่างหลายพันตัวอย่างต่อผู้สมัครแต่ละราย และใช้การทดสอบทางสถิติ (การทดสอบ t และการทดสอบของ Welch) เพื่อแยกสัญญาณออกจากสัญญาณรบกวน
การโจมตี OAEP ของ Manger
ในปี 2001 Manger แสดงให้เห็นว่า RSA ที่เติมข้อมูลแบบ OAEP ก็ยังรั่วไหลข้อมูลได้ หากการใช้งานแยกแยะว่า “ไบต์แรกเป็นศูนย์” หรือเป็นข้อผิดพลาดประเภทอื่นโดยใช้เวลาต่างกัน
ตัวอย่างจากการใช้งานจริง
OpenSSL, GnuTLS และ NSS ต่างเคยมีช่องโหว่ CVE ที่เกี่ยวข้องกับการโจมตีด้วยเวลา การโจมตี Lucky13 ต่อ TLS (CVE-2013-0169) ส่งผลกระทบต่อคลังโปรแกรม TLS แทบทุกตัวในช่วงเวลาที่มีการเปิดเผย
ตรวจสอบความรู้
เทคนิคทางสถิติใดช่วยให้ผู้โจมตีแยกสัญญาณเวลาจากสัญญาณรบกวนของการวัดได้
สรุปบทเรียน
การโจมตีด้วยเวลาสกัดข้อมูลลับทางการเข้ารหัสโดยวัดความแตกต่างของเวลาการทำงาน การโจมตีทำได้ทั้งในเครื่องเดียวกัน (ผ่านแคช) และจากระยะไกล (ผ่านเครือข่าย) การวิเคราะห์ทางสถิติช่วยแยกสัญญาณออกจากสัญญาณรบกวน วิธีแก้คือโค้ดที่ใช้เวลาคงที่ ซึ่งจะกล่าวถึงในบทเรียนมาตรการรับมือ
เรียนรู้ 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การโจมตีด้านเวลา: ดึงคีย์จากเวลาทำงาน
- การวิเคราะห์กำลังไฟฟ้า: SPA และ DPA
- ช่องทางข้างเคียงด้านแม่เหล็กไฟฟ้าและเสียง
- มาตรการป้องกัน: การทำมาสก์ การทำให้จุดมืดบอด และโค้ดเวลาเสมอ