הצפנה אסימטרית, הסבר שפוי

Published on 15 December 2019 12:00 AM
This post thumbnail

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

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

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

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

המיוחד בהצפנה האסימטרית הוא שהפונקציה ההפוכה, מהמפתח הציבורי למפתח הפרטי קשה מאוד, זאת אומרת, בלתי אפשרי לחשב את המפתח הפרטי מהמפתח הציבורי. כך ניתן לפרסם את המפתחות הציבוריים, שקוראים להם גם "כתובות" ביטקוין ללא חשש. ניתן להשתמש במפתח הפרטי כדי לבצע העברה לחשבון אחר ורק מי שיש לו את המפתח הפרטי שמתאים למפתח הציבורי (כתובת) יכול להוכיח שהבקשה להעברת ביטקוין מהחשבון היא לגיטימית ומבוצעת מבעל ההרשאה. ההוכחה הזו קוראת בלי חשיפת המפתח הפרטי, אלא בצורה עקיפה על ידי פונקציה מיוחדת שמבצעת חישוב על הבקשה, נניח "אני, הבעלים של כתובת_ציבורית_123, מבקש להעביר 0.123 ביטקוין לכתובת_ציבורית_245. הנה החתימה שלי: חתימה_2928734".

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

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

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

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