הכירו את ההאש קאש – סוס העבודה שמאחורי ביטקוין

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

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

תמונה: יח"צ, ביטקוין

המטבע הדיגיטלי ביטקוין מככב בימים אלה בכותרות, אך שומעים מעט מאוד על "האש-קאש" (HashCash) – אחת ההמצאות שעומדות מאחורי ביטקוין. מהי האש-קאש? מה הקשר שלה לביטקוין ולמלחמה בדואר זבל? איך לעזאזל מתרגמים "האש-קאש" לעברית? כל התשובות מיד.

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

1. הוא קצר הרבה יותר מהמקור.

2. הסיכוי שנפיק משני ספרים שונים את אותו הגיבוב קטן מאוד.

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

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

גיבוב SHA-1 לדוגמה: dd645195568ee8b718cf53c97e23baff719ab99d.

הוכחת עבודה

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

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

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

גיבובים גיבובים

מתברר שגיבובים הם דרך נהדרת להוכיח עבודה (ומעתה, אגב, כשנאמר גיבוב נתייחס ספציפית ל-SHA-1). נחשוב שנייה על גיבוב כעל מספר בינארי – רצף של אחד ואפס. למי שלא בקי באלגברה בוליאנית, זה ממש לא הקטע החשוב – מספרים בינארים הם פשוט דרך אחרת לרשום את אותם המספרים, אך במקום להשתמש בבסיס – 10, שאליו אנו רגילים (עשר ספרות), משתמשים בבסיס – 2. כך נראה הגיבוב ממקודם כמספר בינארי:

1101110101100100010100011001010101010110100011101110100010110111000110001100111101010011110010010111111000100

011101110101111111101110001100110101011100110011101

(160 ביט = 160 ספרות בינאריות)

מה הסיכוי, אם כן, שגיבוב של קלט מסוים יתחיל בספרה 0 (כלומר ש-0 תהיה הספרה השמאלית ביותר שלו)?

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

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

my_mail@example.com: 927382

חשב את הגיבוב של אותו הקוד, ואם הגיבוב מתחיל ב-20 אפסים רצופים – מעולה – שלח לי את הקוד עם המייל. אחרת, הוסף 1 לאותו מספר אקראי וחשב שוב את הגיבוב. המשך כך עד שתמצא גיבוב שמתחיל ב-20 אפסים.

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

שימו לב שנוכל לשלוט בכמות העבודה שאנחנו מבקשים להוכיח באמצעות כמות האפסים שאנחנו דורשים לקבל ברצף בתחילת הגיבוב. 20 אפסים דורשים בערך שנייה של חישוב, אבל 40 דורשים כמיליון שניות (כ-12 יום), 50 אפסים דורשים כ-35 שנה, וכך הלאה. נפלאות החזקה. אולי סלבריטיז יסננו דואר מעריצים לפי כמה חודשי חישוב הם השקיעו בשליחת דואר? זו מסירות…

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

2013-04-09:my_mail@example.com:927382

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

כריית מטבעות דיגיטליים

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

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

המערכת כולה מתוכננת כך שה"פרס" עבור כריית כל בלוק של ביטקוין יקטן לאורך זמן. כיום כל 10 דקות מיוצרים 25 מטבעות בכל העולם. בעוד כמה שנים יקטן קצב הכרייה ל-12.5 מטבעות ב-10 דקות, וכך עד שלבסוף יהיה מספר סופי של מטבעות בעולם (21 מיליון). מאותו הרגע התמריץ עבור יצירת בלוק של ביטקוין יהיה לא כריית מטבעות, אלא עמלה אשר תשולם למי שממשיך לייצר בלוקים. בלוקים חדשים יווצרו על ידי אנשים אשר מעוניינים לרשום עסקת העברת ביטקוינס בשרשרת הבלוקים שממנה המערכת מורכבת. בבסיסו של ביטקוין, כאמור, עומדת הוכחת עבודה בשיטה זהה כמעט לשיטת האש-קאש – עובדה שממציא ביטקוין, הידוע בכינוי סאטושי נאקאמוטו, ציין עוד בפרסום המקורי, שבו תיאר לעולם את השיטה. הסיבה שיצירת בלוקים מבוססת על הוכחת עבודה היא שכך כל ניסיון לזייף עסקאות בביטקוין הופך לבלתי-משתלם. שרשרת הבלוקים טומנת בחובה מאמצי חישובי עבר כה אדירים שפשוט לא משתלם לזייף שרשרת מתחרה. הרשת תמיד מעדיפה את השרשרת הארוכה ביותר, בה הושקעו מאמצי החישוב הגדולים ביותר. כל דקה שעוברת הופכת את משימת הזיוף לכדאית פחות ופחות.

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

חומר נוסף לקריאה:

ביטקוין – ויקיפדיה
האש-קאש – ויקיפדיה (אנגלית)
מחשבון – כמה עולה לכרות ביטקוין

הישארו מעודכנים עם גיקטיים!
Sign in with

*לחיצה על 'הרשמה' מאשרת לנו את תנאי השימוש.

כתב אורח

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

תגיות לכתבה:

  • איציק

    כתבה מרתקת, תודה

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

    כל נושא הכריה עובר בימים האלו ממש מרמת המחשב האישי לשרתים יעודים asic

  • איציק

    כתבה מרתקת, תודה

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

    כל נושא הכריה עובר בימים האלו ממש מרמת המחשב האישי לשרתים יעודים asic

  • http://www.gigantt.com אסף לביא

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

  • אלון

    באמת מרתק וכתוב היטב. כל הכבוד!

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

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

    האם השירשור מתעד בתוכו פעולה של העברת ביטקויין?

    האם בלוק שאני קורה הוא הביטקויין עצמו?

    יש לי עוד דברים בהקשר הזה, אבל אני מניח שתשובה על מה שכבר שאלתי תענה גם עליהם…

    תודה!

  • יהודה

    כתבה מעניינת, תודה.

  • http://www.wp-tricks.co.il/ רמי

    כתבה מעניינת מאוד. האנלוגיות והדוגמאות ממחישות את הנקודה שאתה מנסה להעביר לקוראים. מקווה שזו הכתבה הראשונה בסדרה.

  • עמוס

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

  • אני

    כתבה מעולה. הסברת נושא מורכב בצורה פשוטה וברורה.
    תודה רבה.

  • http://www.gigantt.com אסף לביא

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

    • אלון

      א. אחלה. נתת את הקונטקסט שהיה חסר לי.
      ב. מאוד אשמח לקרוא אם תכתוב את המאמר :-).

  • http://urielfra.appspot.com אוריאל פרנקל

    הכתבה מעולה.
    אבל הפסקה האחרונה לא מובנת מספיק.

  • מור עומר

    מצפה לכתבות נוספות

  • ג'ניפר

    כתבה מצויינת.
    כתבה על הביטקוין תהיה מבורכת…
    תודה רבה

  • אלון

    לגבי הצעת שם – אני מציע:
    "שלמונים מגובבים"

  • ניר

    הצעת שם: האשלום על משקל תשלום :-)

  • http://blogy.co.il יניב

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

  • Pinhas

    תחפשו בgoogle translate מה התרגום של Hash Cash
    תקבלו "חשיש מזומן"
    אמיתי!!!

  • יהושוע

    הסבר פשוט, קריא וברור. כל הכבוד!!

    ואגב, מאיפה מורידים את התוכנה לכריית הביטקוין?

  • http://Gmail עמי

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

  • מירי

    תכירו אתרים שמחלקים לכם מטבעות כל שעה, מרוויחים יותר מכריה
    ביטקוין: http://freebitco.in/?r=114607
    לייטקוין: http://ltc4you.com/?r=52292

  • גלעד

    כתבה מעולה, סוף סוף הסבר ראוי וקל להבנה.

הרשם לאתר

רק גיקים יכולים ליצור דיון חדש! כדי להפוך לגיק מדופלם, הרשם לאתר.