מספרים ראשוניים והצפנה: המתמטיקה שמאחורי אבטחת מידע

באתר כמו cityscooter.co.il מדברים הרבה על תנועה בעיר, על יעילות, ועל החלטות קטנות שמצטברות לחוויה גדולה. באופן מפתיע, אבטחת מידע באינטרנט עובדת בצורה דומה: גם היא נשענת על בחירות חכמות ועל מנגנונים שמאפשרים לנו לנוע בחופשיות בלי לחשוש שכל אחד יוכל להציץ לתוך מה שאנחנו עושים. מאחורי חלק גדול מהאמון הזה עומדת מתמטיקה נקייה, וליתר דיוק, מספרים ראשוניים.

מספר ראשוני הוא מספר טבעי גדול מ 1 שמתחלק רק ב 1 ובעצמו. ההגדרה נשמעת כמעט ילדותית, אבל התכונה הזו יוצרת משהו עמוק: קל מאוד לבדוק אם מספר קטן יחסית הוא ראשוני, אבל עבור מספרים עצומים, וקצת יותר חשוב, קשה מאוד לפרק מספר גדול לגורמים הראשוניים שלו. אם בא לכם להרגיש את זה בידיים, אפשר להתחיל עם מידע על מחשבון מספרים ראשוניים כדי להבין איך בודקים ראשוניות ומה זה אומר בפועל.

למה דווקא הקושי בפירוק לגורמים הוא כזה עניין? כי באבטחת מידע מחפשים מצבים שבהם ליצור משהו זה קל, אבל להפוך אותו בחזרה זה קשה מאוד. כמו לערבב צבעים: לערבב כחול וצהוב קל, אבל להפריד בחזרה לצבעים המקוריים כמעט בלתי אפשרי. בעולם ההצפנה, המספרים הראשוניים מספקים את אותו אפקט, רק באופן מתמטי ומדויק.

מה מיוחד במספרים ראשוניים, ולמה הם מתאימים לאבטחה

מספרים ראשוניים הם אבני הבניין של המספרים השלמים. משפט בסיסי בתורת המספרים אומר שכל מספר שלם גדול מ 1 ניתן לכתוב כמכפלה של מספרים ראשוניים בדרך יחידה (עד כדי סדר הגורמים). זה נשמע כמו עובדה טכנית, אבל זה הופך את הראשוניים ליחידים במינם: הם כמו האטומים שמרכיבים את כל החומר.

עכשיו מגיע הטוויסט שמעניין אותנו באבטחה: אם לוקחים שני מספרים ראשוניים גדולים מאוד ומכפילים אותם, מקבלים מספר ענק. פעולת הכפל עצמה מהירה יחסית עבור מחשב. אבל אם נותנים למישהו רק את התוצאה, כלומר את המספר הענק, ומבקשים ממנו למצוא את שני הראשוניים שהרכיבו אותו, זו כבר בעיה קשה בהרבה. אין כאן קסם, יש כאן פער פרקטי בין שתי פעולות: כפל מול פירוק לגורמים.

דוגמה קטנה כדי להמחיש, בלי להיכנס למספרים בגודל אסטרונומי: נניח שנבחר 11 ו 13. המכפלה היא 143. אם אני יודע את 11 ו 13, ברור שהגעתי ל 143 בקלות. אבל אם אני מקבל רק את 143, אני צריך לנסות מחלקים: 2 לא עובד, 3 לא, 5 לא, 7 לא, 11 כן, ואז אני מגלה ש 143 = 11×13. במספרים קטנים זה משחק. במספרים גדולים מאוד, זה הופך לבעיה חישובית שיכולה לקחת זמן עצום.

כאן נכנסת אבטחת מידע. המטרה היא לא ליצור משהו שאי אפשר לפרוץ לעולם, אלא משהו שבפועל לא משתלם לפרוץ: גם אם עקרונית אפשר, זה ידרוש משאבים לא סבירים. בדיוק כמו שלא תנסה לעבור דרך כל הדלתות בבניין כדי למצוא אחת פתוחה, אם יש מנעול טוב וכל דלת תעלה לך שעות.

חשוב לדייק: לא כל הצפנה מתבססת על פירוק לגורמים ראשוניים. יש מערכות קריפטוגרפיות רבות עם בעיות מתמטיות אחרות. אבל הראשוניים הם הלב של משפחה מפורסמת במיוחד: הצפנה במפתח ציבורי בסגנון RSA, שהפכה לאחת מאבני היסוד ההיסטוריות של תקשורת מאובטחת.

RSA בפשטות: איך שני ראשוניים הופכים למנעול דיגיטלי

RSA היא שיטה שמאפשרת לשני אנשים לתקשר בצורה מאובטחת בלי שהם החליפו סוד מראש. זה נשמע טריוויאלי היום, אבל זה רעיון מהפכני: אפשר לפרסם "מנעול" לציבור, וכל אחד יכול לנעול הודעה בעזרתו, אבל רק אתה מחזיק את "המפתח" שפותח.

כדי להבין את העיקרון, נבנה דוגמה מיניאטורית. חשוב להדגיש: בדוגמה נשתמש במספרים קטנים בשביל הבנה, אבל במציאות משתמשים במספרים ראשוניים ענקיים מאוד כדי שהפירוק לגורמים יהיה לא מעשי.

שלב 1: בחירת ראשוניים
בוחרים שני ראשוניים: p ו q. בדוגמה: p=11, q=13.

שלב 2: מכפילים לקבלת n
מחשבים n = p×q = 143. המספר n הופך לחלק מהמפתח הציבורי. מי שרוצה לשבור את השיטה צריך בעצם לגלות את p ו q מתוך n, כלומר לפרק את 143 לגורמים, ובמספרים גדולים זה קשה.

שלב 3: מחשבים פונקציה שקשורה למכפלה
ב RSA משתמשים בביטוי שמבוסס על (p−1)(q−1). בדוגמה: (11−1)(13−1)=10×12=120. הערך הזה חשוב כדי ליצור את הקשר בין הצפנה לפענוח.

שלב 4: בוחרים מעריך ציבורי e
בוחרים מספר e שמקיים תנאים מתמטיים מסוימים מול 120, כך שיוכל להיות "חלק מהנעילה". בדוגמה אפשר לבחור e=7, כי הוא מתאים לתנאים הנדרשים מול 120.

שלב 5: מחשבים מעריך פרטי d
מחשבים d כך שהפעולה ההפוכה תעבוד. מבחינת אינטואיציה: אם e הוא מה שמצפין, d הוא מה שמפענח, ושניהם קשורים בדרך חכמה שמבוססת על אותם ראשוניים.

ברגע שיש לנו את (n,e) כמפתח ציבורי, כל אחד יכול להצפין הודעה מספרית m בצורה: c = m^e mod n. ואת הפענוח עושים עם d: m = c^d mod n. המילה "mod" אומרת שאנחנו עובדים עם שארית בחלוקה ל n, וזה כלי מרכזי שמייצר מחזוריות ומאפשר לעבוד עם מספרים גדולים בלי להתפוצץ בגודל.

מה החסם לתוקף? אם הוא רואה את n ואת e, הוא יכול להצפין, אבל כדי לפענח בלי d הוא יצטרך לשחזר את d. כדי לעשות את זה ביעילות הוא צריך לדעת את p ו q, כי החישובים תלויים בהם. לכן לב המערכת נשען על העובדה שפירוק n לגורמים הוא קשה כש p ו q גדולים מספיק.

כאן חשוב לשים פרופורציות: האבטחה לא נובעת מכך ש"אף אחד לא יודע" לפרק לגורמים, אלא מכך שבפועל זה דורש משאבים גדולים. אם בעתיד ימצאו פריצות דרך, או אם מחשבים יתחזקו מאוד, צריך יהיה לשנות אורכי מפתחות או לעבור לשיטות אחרות. זו גם אחת הסיבות למה קריפטוגרפיה היא תחום חי שמתעדכן כל הזמן.

אם רוצים מקור סמכותי שמסביר את הרקע ואת ההגדרות של RSA, אפשר לקרוא באתר של NIST, הגוף האמריקאי לתקנים, שמרכז מסמכים והמלצות בתחום הקריפטוגרפיה: https://csrc.nist.gov/.

בנקודה הזו הרבה אנשים שואלים: אז האם RSA שומר עליי כשאני מתחבר לאתר, מבצע תשלום או נכנס לחשבון? התשובה היא שבמערכות מודרניות, RSA הוא לעיתים חלק מפאזל רחב יותר. הוא יכול לשמש, למשל, כדי להחליף מפתחות בתחילת חיבור מאובטח, ולאחר מכן משתמשים בהצפנה סימטרית מהירה יותר להעברת המידע בפועל. כלומר, הראשוניים עוזרים להקים אמון ראשוני, ואז עוברים לכלים יעילים יותר לתעבורה השוטפת.

מה זה אומר בחיים האמיתיים: חיבור מאובטח, חתימות דיגיטליות ואיומים עתידיים

כדי לקשור את המתמטיקה למציאות, נסתכל על שלושה שימושים נפוצים שבהם העקרונות של מספרים ראשוניים והצפנה במפתח ציבורי משפיעים על היומיום שלנו, גם אם לא רואים אותם במסך.

1) גלישה מאובטחת והחלפת מפתחות
כשאתם נכנסים לאתר ורואים שהחיבור מאובטח, יש מאחורי הקלעים תהליך של אימות והקמת ערוץ מוצפן. הרעיון הוא שהדפדפן והשרת צריכים להסכים על סודות משותפים בלי שמישהו באמצע יוכל להעתיק אותם. מערכות מפתח ציבורי מאפשרות להתחיל את התהליך הזה. גם אם הפרטים המדויקים תלויים בפרוטוקול וביישום, העיקרון דומה: להשתמש במנגנון שמצד אחד פתוח לשימוש ציבורי, ומצד שני מאפשר רק למי שמחזיק את הסוד לבצע פעולה קריטית.

2) חתימות דיגיטליות: לא רק להצפין אלא גם להוכיח
הרבה אנשים חושבים שהצפנה היא רק "להסתיר מידע". אבל בעסקים ובאינטרנט חשוב לא פחות לוודא מי שלח את המידע ושלא שינו אותו בדרך. כאן נכנסות חתימות דיגיטליות. במקום לנעול הודעה כדי שאף אחד לא יקרא, חותמים עליה כדי שכל אחד יוכל לבדוק שהיא אכן יצאה ממי שטוען ששלח אותה, ושלא נערכה מאז.

דוגמה פשוטה: נניח שמערכת שולחת לכם קובץ עדכון לאפליקציה. אתם רוצים לדעת שזה באמת עדכון רשמי ולא קובץ שהוחלף בדרך. חתימה דיגיטלית מאפשרת לכם לאמת את המקור. ברמה המתמטית, שוב יש משחק בין פעולה שקל לבצע עם מפתח פרטי לבין פעולה שכל אחד יכול לבדוק עם מפתח ציבורי.

3) איפה זה יכול להישבר: טעויות יישום, מספרים חלשים ומחשוב קוונטי
קל לחשוב שהכול תלוי בעוצמת המתמטיקה, אבל בפועל הרבה כשלי אבטחה מגיעים מטעויות מסביב: בחירת מספרים לא מספיק אקראיים, שימוש חוזר באותם ערכים, שמירה לא נכונה של מפתחות, או תצורה לא עדכנית של רכיבי אבטחה. גם אם הרעיון המתמטי מוצק, יישום לא נכון יכול להפוך אותו לשביר.

יש גם שאלת העתיד: מחשוב קוונטי. בלי להיכנס לספקולציות או הבטחות, נכון לומר שבקהילה המדעית עוסקים בשאלה אילו שיטות הצפנה יהיו עמידות יותר מול מודלים חישוביים חדשים. זה לא אומר שהכול נשבר מחר בבוקר, אבל זה כן מסביר למה עולם אבטחת המידע לא נשאר במקום: יש מאמץ מתמשך לפתח ולתקנן אלגוריתמים שיחזיקו גם מול תרחישים עתידיים.

אז מה לקחת מכל זה
מספרים ראשוניים הם לא רק קוריוז מתמטי. הם מאפשרים לבנות מנגנונים שבהם קל ליצור מפתח ציבורי, קל להשתמש בו כדי להצפין או לאמת, אבל קשה מאוד לשחזר את הסוד בלי מידע פנימי. זה הבסיס לאמון הדיגיטלי שמאפשר לנו לעבוד, לקנות, להזדהות ולשתף מידע ברשת.

ואולי זה החיבור הכי טבעי לקהל עירוני שחי על יעילות: אנחנו רוצים עולם שבו אפשר לנוע מהר, להיכנס ולצאת משירותים שונים בקלות, בלי לעצור בכל צומת כדי לחשוש שמישהו שינה לנו את הדרך. המתמטיקה של המספרים הראשוניים עוזרת להפוך את הזרימה הזו לבטוחה יותר, גם אם היא מתרחשת מאחורי הקלעים.

כלי נגישות
- Powered by