
התקפות תזמון הן קטגוריה מתוחכמת של התקפות ערוץ-צדדי אשר יכולות לחשוף מידע רגיש על בסיס הזמן שנדרש למערכת לעבד קלטים מסוימים. ככל שהגנות קריפטוגרפיות מתקדמות—במיוחד עם האיום המתקרב שמוצב על ידי מחשבים קוונטיים—התקפות תזמון זכו לתשומת לב כאחד הכלים החזקים ביותר להשגת גישה מוקדמת למידע דלוף או אפילו עקיפת ההצפנה לחלוטין. בפוסט בלוג מקיף זה, נתחיל מנקודת מבט של מתחיל להבנת התקפות תזמון, נעבור לשימוש מתקדם והשפעה—במיוחד בנוגע לקריפטוגרפיה פוסט-קוונטית—ונציע דוגמאות מעשיות, דוגמאות קוד ושיטות עבודה מומלצות בסייבר.
התקפת תזמון היא סוג של התקפת ערוץ-צדדי שבה תוקף מודד את המשך המדויק של חישובים במערכת כדי להסק מידע רגיש. התקפות אלו מנצלות פרטים על יישום ההצפנה שחושפים מידע דרך שינויים בתזמון ההרצה.
if) תלויים בנתונים סודיים.התקפות תזמון פועלות לפי שלבים אלו:
נניח מימוש (לא טוב) של בדיקת סיסמה:
int check_password(const char *input, const char *correct) {
while (*correct && *input && *input == *correct) {
input++;
correct++;
}
return *correct == 0 && *input == 0;
}
הפונקציה מפסיקה לבדוק ברגע שהיא מוצאת אי תואם. תוקף יוכל למדוד כמה זמן לוקחת הפונקציה עם ניחושים שונים ולנחש את הסיסמה תו אחר תו.
העבודה החלוצית על התקפות תזמון בוצעה על ידי פול קוכר בשנת 1996, כשהוא הציג התקפות מעשיות על מפתחות הפענוח של RSA על ידי תזמון משך הפעלת הפענוח. מאז, כמעט כל הספריות הקריפטוגרפיות הגדולות עברו בחינה על השגרות שלהן לחשיפת תזמון סודיות.
בשנת 2013, פלוריאן ויימר ואדם לנגלי תיעדו פגמים בתזמון ביישומים שונים של TLS, שאיפשרו לתוקפים לקחת קובצי עוגיות של מושבים.
חלק מהיישומים של ארנקי ביטקוין חשפו הבדלים בתזמון בעת בדיקת זרעי הארנק, חושפים את הכספים של המשתמשים לגנבה.
קריפטוסיסטמים מודרניים מנסים לצמצם ערוצי צד, אך קיימות כמעט תמיד חידודים ביישום:
מחשוב ענן וחומרה משותפת מסבכים את העניינים עוד יותר: תוקפים שמתגוררים במחיצה עלולים למדוד פעולות דרך מטמונים של CPU ולקרוא סודות מעבודות שכנות.
קריפטוסיסטמים של מפתחות ציבוריים של היום (RSA, עקומת אליפטית, DH) מאוימים על ידי אלגוריתמים קוונטיים (של שור, של גרובר). המכון הלאומי לתקנים וטכנולוגיה (NIST) מאשר "קריפטוסיסטמים פוסט-קוונטיים" כמו Kyber, Dilithium, ו-Saber על מנת להחליף אלגוריתמים שאינם בטוחים לקוונטיות.
אלגוריתמים פוסט-קוונטיים מביאים לעיתים קרובות מבנים מורכבים יותר (פולינומים, סריגים, דגימה אקראית) עם פרופילי חישוב לא אחידים. דבר זה עלול ליצור דליפות תזמון חדשות.
"התקפות תזמון מאפשרות לתוקפים להשיג יתרון התחלתי, וללקט מידע שדלף מוקדם על בסיס הבדלים בתזמון."
— Sectigo.com
Kyber הוא מנגנון קפסולציה מפתח המבוסס על סריגים ואושר על ידי NIST להצפנה עמידה בעתיד. בשונה מאלגוריתמים כלליים, הליבה שלו מחשבת עם פולינומים ודוגמת אקראיות, מה שמוסיף למורכבות האלגוריתמית.
ניתוח CyberArk מצביע כיצד יישומים לא נכונים עשויים לדלוף ביטים מהמפתח הסודי:
נניח לנו שירות קריפטוגרפי רץ באופן מקומי על פורט 12345. נרצה למדוד את זמן התגובה של פעולה מסוימת ולנתח אפשרות של דליפות תזמון.
#!/bin/bash
host=localhost
port=12345
input="test_data"
runs=1000
for i in $(seq 1 $runs); do
START=$(date +%s%N)
echo -n "$input" | nc $host $port > /dev/null
END=$(date +%s%N)
DURATION=$((($END - $START)/1000)) # מיקרושניות
echo $DURATION
done > timings.txt
import numpy as np
import matplotlib.pyplot as plt
timings = np.loadtxt('timings.txt')
print(f"Mean response time: {timings.mean()} μs")
print(f"Standard deviation: {timings.std()} μs")
plt.hist(timings, bins=50)
plt.title("Timing Distribution")
plt.xlabel("Microseconds")
plt.ylabel("Frequency")
plt.show()
נסה להשתנות את input (ה"ניחוש"), וצרף זאת עם ערך ניחוש הזמן. תאמצות חזקות עשויות להצביע על דליפות תזמון.
כאשר כותבים קוד אבטחה, יש להפחית או לבטל ווריאציות תלויות-נתונים בזמני התגובה. רוב ספריות האבטחה המודרניות מציעות פרימיטיבים בזמן קבוע עבור פעולות נפוצות.
דוגמת C: השוואה בזמן קבוע
int constant_time_compare(const unsigned char *a, const unsigned char *b, int len) {
unsigned char result = 0;
for (int i = 0; i < len; i++) {
result |= a[i] ^ b[i];
}
return result == 0;
}
דוגמת Python: השוואה בזמן קבוע
import hmac
def secure_compare(a, b):
return hmac.compare_digest(a, b)
במערכות מיושנות/מאופיינות בהתאם לזמן יש לעיתים להוסיף הפרעות אקראיות להסתרת תזמון הפעולה. הערה: בדרך כלל זה אינו מועדף—זה מוסיף רעש אך אינו מבטל את הפגיעות.
דוגמת Python: הוספת השהיה אקראית
import time
import random
def operation_with_jitter(op, *args, **kwargs):
start = time.perf_counter()
result = op(*args, **kwargs)
delay = random.uniform(0, 0.005) # עד 5 מילישניות
time.sleep(delay)
return result
מאמר ACM של 2024 חוקר התקפות ערוץ-צדדי המבוססות על תזמון באנרגיה על זיכרון גישה קוונטית אקראית (QRAM). ככל שמחשבים קוונטיים נעשים מעשיים, לא רק יישומים קלאסיים אלא גם מעגלים קוונטיים עשויים לדלוף נתונים דרך ערוצי-צד.
זה מרחיב את שטח ההתקפה: אפילו במצב הקוונטי העצמאי, תוקפים עשויים עדיין "להקשיב מהצד".
בעוד נוף הקריפטוגרפיה מתפתח, התקפות תזמון נשארות סיכון מקובל באבטחה בסייבר—לעיתים קרובות מנצלות פגמים ביישום יותר מאשר חולשות מתמטיות באלגוריתם. העתיד הקוונטי מעצים את זה: קריפטוסיסטמות חדשות מציגות סיכוני תזמון חדשים, והמחקר אינטנסיבי בהתקפות ערוץ-צד גם על אלגוריתמים קלאסיים וגם קוונטיים. על ידי הבנה, בדיקה והגנה מפני דליפות תזמון, יכולים אנשי מקצוע באבטחת סייבר לסייע בהבטחת עמידות מערכות אלו לשנים הבאות.
זכויות יוצרים 2024 – לשימוש חינוכי. תמיד להשתמש בשיטות אתיות ולקבל הרשאה לפני ביצוע כל בדיקות אבטחה.
אם מצאתם את התוכן הזה בעל ערך, תארו לעצמכם מה תוכלו להשיג עם תוכנית ההכשרה המקיפה והאליטיסטית שלנו בת 47 שבועות. הצטרפו ליותר מ-1,200 סטודנטים ששינו את הקריירה שלהם בעזרת טכניקות יחידה 8200.