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

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

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

חסר מאפיין alt לתמונה הזו; שם הקובץ הוא luksmbotg.jpg

לוקסמבורג על המפה


חסר מאפיין alt לתמונה הזו; שם הקובץ הוא 2020-06-23_211420.jpg

לוקסמבורג על המפה, אבל מכוסה... רואים את לוקסמבורג אבל לא יודעים אפה היא בדיוק...


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

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

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

וזה בעצם מה שצריכים בשביל לעשות להתחבר, משהו מקיש סיסמה, ואני לא רוצה לדעת מהי באמת, אבל אני רוצה לדעת האם זה באמת הסיסמה שלו. לכן מה שעושים זה להצפין את הסיסמה בצורה כזו שלא יהיה ניתן לדעת (אלא אם כן במאמץ גדול) מהי באמת, אבל בכל פעם שתוקש הסיסמה הזו ותוצפן אני אוכל להשוות בין מה שיש הדטה בייס שלי לראות האם זו אותה סיסמה. יש לזה אלוגרתימים ידועים וספריות ידועות של ממש כמה שורות, אחת מהם היא bcrypt, שעושה את הדבר הזה, שמצפינה טקסט עם עוד כמה פרמטרים בצורה שאפשר להשוות אחר כך. המפתח פה הוא שתמיד אותה הצפנה באותם תנאים (אלגוריתם, מספר סיבובים וsalt) יביא לאותו סטרינג מוצפן כדי שנוכל להשוות אותו.
ובסופו של דבר מה שהיה הוא, אותו מוכר הקים שרת מיוחד לסטרינגים שלו, כל אחד העלה את הסטרינגים שלו והם עברו הצפנה, וירדו מוצפנים אחר כבוד לקובץ csv וכל אחד יכל להעביר לחברו את מה שיש לו. שניהם שמו בקובץ אקסל, כל אחד את מה שיש לו, הקונה הביא את 30,000 שיש לו, והמוכר את מה שיש. לו שזה היה 10,000 לצורך הדוגמא (ביחד 40,000), ניקו כפיליות, ויצא 37,000. א״כ נמצא שכמות הסטרינגים שלא היתה לקונה היא 7000 והוא שילם רק על זה, והכל בא על מקומו בשלום, המוכר יכל להביא את כל ה10,000 שלו כי הוא היה בטוח שהוא לא מוסיף לו ערך מעבר למה שהוא משלם, לקונה היה תמריץ להביא את כל הסטרינגים שיש לו כדי שלא ישלם יותר במקרה שהוא לא חושף את הכל ויש לו כבר חלק מזה, ושלום על ישראל.
זה היה רק בריף קצר להראות שטכנולוגיה קימת שמביעה קונספט אחד, בתחום אחר לגמרי, יכולה לשמש גם בתחומים אחרים לחלוטין, כמו למצע אסטרגיה שולטת בין קונה למוכר, כך שלכל אחד יש את התמריץ לחשוף כמה שיותר מבלי להיפגע או לחשוש.