בעולם הטכנולוגיה יש לעתים רעידות אדמה משמעותיות שההשפעה שלהן היא רוחבית על כל התחום. דוגמה טובה למשל היא פרוטוקול ה-https וההתפשטות שלו, שגם חייבה שינויים ברשת עצמה, תקנים, בדרך שטכנולוגים עובדים ובסוף הגיעה גם לעולם החיצון. היום קשה הרבה יותר לצנזר בגלל הפרוטוקול. שינוי נוסף הוא הדוקריזציה והוירטואליזציה שמאפשרת לבצע דיפלוימנט במהירות לכל אפליקציה שהיא. בתחילה רק טכנולוגים התענינו בזה, אך ככל שהשינוי הזה התממש והתרחש התוצאות שלו זלגו גם לעולם האמיתי.
שינוי טכנולוגי עמוק ומשמעותי כזה הוא העידן הפוסט קוונטי. המחשב הקוונטי יחולל כמה מהפיכות בחיינו אבל המהפיכה הראשונה, שהוא מחולל כבר עכשיו עוד לפני שהוא נוצר היא מהפיכת ההצפנה. וארגונים, חברות ומתכנתים צריכים להתכונן כבר עכשיו למהפיכה הזו שיש לה משמעויות טכנולוגיות אבל גם חברתיות, בטחוניות וגם משמעות חוקית. אם אתם עובדים עם מידע פרטי רגיש או עם הממשל הפדרלי, אתם חייבים להבין ולהערך לעידן הזה.
בגלל שאני קשור לפרויקט כזה בסייבארק שאותו מוביל ד״ר ארז ויסברד – ממש שמחנו לדבר עליו בפודקאסט עושים תוכנה עם בועז לביא. ארז מדבר על האלגוריתמים והמתמטיקה ואני מדבר על העניין היותר פרקטי מבחינת הקוד וגם מציק כהרגלי. הפרק נמצא בקישור הזה:
https://www.osimhistoria.com/software/ep138-quantum
הפוסט הזה מלווה את הפרק ואפשר לקרוא אותו לצד ההאזנה 🙂
אז כדי להבין למה זה חשוב, נתחיל מההתחלה – הצפנה. הצפנה קריפטוגרפית היא חלק מחיי האינטרנט המודרנית. עם הצפנה כזו אנחנו יכולים להיות בטוחים שעם https אי אפשר ליירט או לשנות את התקשורת ביני לבין אתר מסוים. כך למשל, אם אני נכנס ל Chat GPT עם השאלה: ״כיצד להפיל באופן חוקי את ממשלת ישראל״ – הממשלה, ספק האינטרנט, השכן שדרכו אני גולש – כולם יכולים לדעת אולי שיצרתי קשר עם אתר openai. אבל הם לא יכולים לדעת מה התקשורת שעברה מ/אל האתר. אם גם אני וגם openai נשמור סוד ולא נדליף את המידע, איש לא ידע מה עבר בדרך.
הנס הזה קורה הודות להצפנה. הצפנה סימטרית או הצפנה א-סימטרית. וההצפנה הזו מאפשרת לכולנו את האינטרנט המודרני. בגדול הצפנה עובדת הודות לכך שמחשבים הם מוגבלים מבחינת הכוח שלהם ויש חישובים שצריכים על מנת לפצח את ההצפנה שלוקחים יותר מדי זמן. נמחיש למשל עם הצפנה סימטרית פשוטה שמזיזה את האותיות ב-3 מקומות. כך למשל HELLO יוצפן כ KHOOR. למה? H זז בשלוש מקומות והופך ל K. האות E זזה בשלוש מקומות והופכת ל H וכך הלאה.
כמה ניסיונות מקסימליים צריך כדי לפצח את הסיסמה הזו? 25. למה? 26 אותיות באלפאבית הלטיני ואי אפשר לבצע הזזה של 0. עשרים וחמישה ניסיונות זה משהו שבהחלט קל לבצע, גם ללא מחשב, לכן זו נחשבת הצפנה חלשה.
הצפנות מודרניות מבוססות על חישובים מתמטיים כאשר מפתח ההצפנה נוצר באמצעות חידה מתמטית שמי שלא יודע אותה יקח לו המון חישובים לפענח. חידה מתמטית כזו יכולה להיות לתת מספר גדול מאד שמורכב ממכפלה של שני מספרים ראשוניים גדולים מאד. אם אנחנו לא יודעים מה המספרים הראשוניים, נוכל לנסות ולפצח את החידה באמצעות חישוב של כל המספרים הראשוניים והכפלתם זה בזה. זה יכול לקחת זמן רב.
בהצפנה מודרנית מדובר בסדרי גודל אחרים. כך למשל, אם חישוב מסוים מצריך עשר מיליארד פעולות שכל אחת מהן אורכת שניה, אז יקח לנו יותר משלוש מאות שנה לפצח את הסוד. גם אם נניח יהיו לנו 50 מחשבים כאלו – יקח יותר משישים שנה לפצח את ההצפנה. זה זמן לא ריאלי.
אם נמחיש את זה באמצעות AES עם מפתח של 128 ביטים. על מנת לעשות לו ברוט פורס – כלומר לנחש את כל הצירופים ולפצח את הצופן, אנחנו צריכים 2 בחזקת 128 ניסיונות.. זו כמות כל כך בלתי נתפסת של ניסיונות שקשה להמחיש אותה במילים. אבל תחשבו למשל שאם נחלק את המשקל של כדור הארץ לגרמים, יהיו לנו 5.97 × 10 בחזקת 27 גרמים. זה מספר עצום.אבל קטן בסדרי גודל מ 2 בחזקת 128.
כמובן שככל שמחשבים נהיים חזקים יותר, ההצפנות משתדרגות – כי ניתן לפצח הצפנה לא רק דרך ברוט פורס אלא גם בדרכים אחרות. אבל בגדול, זו הדרך שבה הכל עובד.
עד המחשוב הקוונטי.
מחשבים קוונטיים מסוגלים לבצע חישובים מסויימים מאד מאד מהר. אפשר לרתום את היכולות האלו לתחומים רבים אבל גם לפיצוח צפנים. מחשב שמסוגל לעבוד במהירות עצומה כל כך, שמגמדת את הכוח המחשובי הקיים כיום, יכול לפצח את הצפנים. המחשב הקוונטי יכול לפצח את במהירות החידות המתמטיות שעכשיו משתמשים בהם להצפנה.
אך עדיין לא הגענו לשם – אין מחשבים קוונטיים עם יכולות כאלו והמחשבים הקוונטיים הקיימים היום עדיין בשלבים מאד ראשוניים. למרות הצהרות אלו ואחרות, הדעה המקובלת שכיום אין לאף אחד, גם לא למעצמות, מחשב קוונטי או יכולת קוונטית. מה שנקרא quantum supremacy. ההערכות מדברות שזה יקח כמה שנים בודדות. אבל זה עדיין בעתיד.
או קיי, אז הכל עדיין די תיאורטי, לא? כשיצא מחשוב קוונטי בעתיד נשבור את הראש על זה בעתיד.
זו הדעה שאני החזקתי בה. שיהיה מחשב קוונטי? אז בטח גם יהיו פתרונות אחרים.
אבל זו היתה טעות. למה? אני אצטט את ד״ר ארז ויסברד, קולגה שלי לצוות בסייברארק. מעבר לזה שהוא אדם נחמד וחבר צוות מעולה. הוא עוסק במציאות הפוסט קוונטית ובהכנה אליה. והוא אמר לי משהו שהימם אותי: ״אתה יודע שאפשר להקליט את התנועה היום ולחכות כמה שנים ואז לפתוח אותה?״.
אני מניח שרובכם יודעים שחלק עצום מתעבורת האינטרנט שלנו, כפי שנחשף על ידי אדוארד סנודן, מוקלט ונאגר. בין אם מדובר בכלים מודיעיניים אלו ואחרים (למשל כתבה המספרת על אחד מהם) ובין אם מדובר בכלים מסחריים. בעוד שלא ייגרם שום נזק אם למשל יקליטו את התקשורת ביני לבין גיטהאב ויפתחו אותה עוד שנתיים או שלוש, יכול להגרם לי נזק משמעותי ממש אם יפתחו את התקשורת ביני לבין אתרים או אפליקציות אחרות. למשל סיגנל, שבה אני כעיתונאי מקיים תקשורת עם מקורות שמעדיפים מאד להיות חסויים. או התנועה ביני לבין פרוטון, ספק המייל הפרטי שלי. בעוד שלי תהיה אי נוחות אבל אני אשרוד – תחשבו מה קורה עם מוקדי ידע אחרים. למשל מתגדי משטר. או אם ניקח את זה לכיוון הצבאי – מה קורה עם תקשורת צבאית חסויה שמיורטת ויש בה מידע שיהיה מאד רלוונטי גם עוד שנתיים או שלוש – כמו תוכניות צבאיות, שרטוטים וכו׳. כל המידע הזה מוגן על ידי הצפנה ויכול להחשף.
טוב, אז מה אפשר לעשות? איך אפשר לעצור מחשב קוונטי חזק שהיכולות שלו עדיין לא ידועות?
ויש, יש מה לעשות בנדון. ומסתבר שלא רק שיש אלגוריתמי הצפנה שחסינים כבר היום למחשב קוונטי. איך? כי מתמטיקאים בנו סט של בעיות שיהיה קשה גם למחשב קוונטי לפתור אותן. מעבר לזה – יש גם תהליכים מסודרים שצריך לנקוט עכשיו שהוגדרו על ידי NIST – מוסד התקינה האמריקאית וכבר הממשל הפדרלי מבקש לנקוט בתהליכים האלו כלפי ספקים. אפילו יש כבר חוק פדרלי בנושא https://www.darkreading.com/risk/biden-signs-post-quantum-cybersecurity-guidelines-into-law
כך שגם אם זה לא מטריד אתכם בנוגע למידע – אם אתם רוצים לספק שירותים לממשלה האמריקאית וצריכים להיות FedRAMP – כלומר לעמוד בתקינה הרלוונטית עבורם – זה משהו שצריך לעשות.
אז בעצם מה עושים? יש לנו כמה שלבים שאנחנו צריכים לעבור כדי להכין את הארגון שלנו לסיפור הזה.
השלב הראשוון, הוא להבין באיזה קריפטוגרפיה הארגון שלנו משתמש. שלב הבחינה הזה הוא קריטי ולא כל כך טריוויאלי כאשר יש לנו לפעמים מיליוני שורות קוד ותשתיות מורכבות. לא מעט פעמים אפשר לגלות בשלב הזה שחלק מהקוד שמבצע הצפנה לפני שמירה במסד הנתונים או שיגור המידע לשרת אחר משתמש בהצפנה מאד מיושנת או חלשה שכבר פגיעה היום, שלא לדבר על מחשוב קוונטי.
השלב השני הוא לשדרג את האלגוריתמים. למרבה הצער זו לא החלפה של אלגוריתם אחד באלגוריתם אחר אלא בשני אלגוריתמים. ל-NIST יש רשימה של אלגוריתמים שאמורים להיות בטוחים מפני פיצוח קוונטי. הבעיה היא שהם חדשים וחלקם גם פגיעים למחשוב רגיל או עלולים להתברר כפגיעים. זו הסיבה שצריך לשלב אותם גם עם הצפנה סטנדרטית. אין כאן תהליך פשוט בסיפור הזה. החלפה של הצפנה היא הליך כואב למדי (יש גם מיגרציה ותמיכה לאחור) אבל אין ברירה.
הנה למשל קוד שכזה המשלב הצפנה חסינה למחשב קוונטי בשם dilithium אבל גם הצפנה מודרנית של ecdsa:
import dilithium
import ecdsa
# Generate Dilithium key pair
dilithium_key_pair = dilithium.generate_key_pair()
#Generate ECDSA key pair
ecdsa_key_pair = ecdsa.SigningKey.generate()
# Load the message
with open("message.txt", "rb") as message_file:
message = message_file.read()
# Sign the message with Dilithium
dilithium_signature = dilithium_key_pair.sign(message)
# Sign the message with ECDSA
ecdsa_signature = ecdsa_key_pair.sign(message)
# Verify the Dilithium signature
is_dilithium_valid = dilithium_public_key.verify(dilithium_signature, message)
# Verify the ECDSA signature
is_ecdsa_valid = ecdsa_public key.verify(ecdsa signature, message)
# Check that both signatures are valid
if is_dilithium_valid and is_ecdsa_valid:
print("Digital signatures are valid.")
else: print("One or both digital signatures are invalid.")
בעוד הקוד הפייתוני אמור להיות מובן, יש מצב שהמונחים ECDSA ו Dilithium נשמעים לא מובנים – כמובן שמדובר באלגוריתמים שיש להם מימוש מוכר גם בפייתון וגם ב-Node.js אבל אני מודה שגם לי, שמכיר קריפטוגרפיה, העולם הזה קצת מפחיד. אם גם לכם – אל תנסו לשנות את מדיניות הקריפטוגרפיה ולהחליט על אלגוריתמים לבד אלא העזרו במישהו שמבין – כלומר קריפטוגרף.
התמיכה של מומחה הקריפטוגרפיה בתהליך היא קריטית. במיוחד בחברות גדולות עם מוצרים מורכבים והפיתוח צריך לעבוד באופן צמוד עם קריפטוגרף על מנת גם להגדיר את הצופן הנדרש וגם כיצד להחליף אותו. אבל מדובר בתהליך שאי אפשר להתחמק ממנו. אפשר להדחיק אותו, אבל אז לעמוד בפני שוקת שבורה או כשמנסים היום לעבוד עם גופי ממשל אמריקאים שידרשו מכם לעמוד בתהליך כזה או לעמוד בפני בעיה רצינית בעתיד אם יש לכם מידע רגיש שעלול לדלוף למעצמה הראשונה שתשיג מחשוב קוונטי שיכול לעבוד.
השלב הראשון הוא להבין אם באמת אתם צריכים להגן על המידע שלכם – אם אתם/הארגון שלכם מחזיקים במידע כזה – זה הזמן לחשוב על האלגוריתמים של ההצפנה שלכם – להבין מה יש, להבין מה להוסיף ולהיות מודעים.
מי שרוצה רפרנס נוסף – מוזמן למאמר של ד״ר ארז ויסברד על ההצפנה בעולם הפוסט קוונטי באנגלית.
3 תגובות
תודה רבה! כמה ניטפוקים לא מהותיים:
1) "מחשב שמסוגל לעבוד במהירות עצומה כל כך, שמגמדת את הכוח המחשובי הקיים כיום, יכול לפצח את הצפנים." – מחשב קוונטי הוא לא מהיר במיוחד. הכוח שלו הוא לא במהירות, אלא ביכולת לבצע מניפולציות מורכבות על מידע מורכב (נאמר, התמרת פורייה קוונטית על סופרפוזיציה) באמצעות רתימה ישירה של הפיזיקה, להבדיל ממחשב רגיל שיכול רק לבצע סימולציה של המניפולציות הללו שהיא איטית מאוד.
2) "המחשב הקוונטי יכול לפצח את במהירות החידות המתמטיות שעכשיו משתמשים בהם להצפנה." זה נכון, אבל שים לב שלא אמרת בעצם מה החידות הללו. הבאת כדוגמא את AES שהוא צופן מרכזי ומהותי, אבל חישוב קוונטי *לא* יכול לעשות לו כלום. מערכות ההצפנה שפגיעות למחשב קוונטי הן אלו שדורשות צפנים א-סימטריים כמו RSA, שבפועל משמשים כדי *לשתף את המפתח* שבו משתמשים אחר כך ב-AES. זה בעצם מה שכל התחום של צפנים פוסט-קוונטיים בא לפתור – את בעיית שיתוף המפתחות.
3) "הדעה המקובלת שכיום אין לאף אחד, גם לא למעצמות, מחשב קוונטי או יכולת קוונטית. מה שנקרא quantum supremacy. ההערכות מדברות שזה יקח כמה שנים בודדות. אבל זה עדיין בעתיד." – יש מרחק עצום בין מה שנקרא quantum supremacy (מושג מאוד בעייתי לטעמי אבל שהפך להיות סטנדרט דה-פקטו) ובין שבירת צפנים כמו RSA. ב-quantum supremacy המטרה היחידה היא לעשות *משהו* באופן יותר טוב ממחשב רגיל, אבל פיצוח RSA יהיה משימה קשה גם הרבה אחרי שנצליח לעשות משהו-ים כאלו. ספציפית, כולנו מאמינים שנראה מחשבים שמציגים quantum supremacy עוד לפני שיהיו לנו מחשבים שהם fault-tolerant, כלומר בעלי יכולת תיקון שגיאות מלאה; ובלי חישוב fault-tolerant אנחנו לא מצפים להצליח לפצח את RSA (כמובן, לך תדע מה ילד יום).
4) "יש אלגוריתמי הצפנה שחסינים כבר היום למחשב קוונטי." – כאן צריך להיזהר, אנחנו לא *יודעים* שהם חסינים, הם פשוט מתבססים על שיטות שכיום אנחנו לא מכירים דרך עבור מחשב קוונטי להתמודד איתן, ובגלל שבאופן כללי היתרונות של מחשבים קוונטיים באים לידי ביטוי במספר מצומצם של דרכים (ולא של שיפור גורף) נראה כרגע לא סביר שיהיה להם יתרון עבור האלגוריתמים הללו. כמו שאמרת בעצמך, בשלב הזה אנחנו אפילו לא בטוחים שהאלגוריתמים הללו בטוחים מפני מחשב רגיל.
גדי, תיקון קל – לגבי סעיף 4 – יש אלגוריתמים שאנחנו *יודעים* בוודאות מוחלטת, שלא מחשב קוונטי ולא כל מחשב אחר יוכל לפצח אותם. ב3 מילים? one time pad
כמו שגדי ציין, היתרון של מחשבים קוונטיים הוא רק לגבי הצפנה אסימטרית שלא דורשת שיתוף מפתח מראש, לעומת one time pad שכן דורש ואז שוב צריך לאבטח את המפתח עצמו