מודול 8 מתוך 10

איך ביטקוין עובד

8.0 הקדמה

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

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

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

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

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

8.1 אבטחה באמצעות קריפטוגרפיה

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

קריפטוגרפיה עם מפתח ציבורי/פרטי

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

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

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

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

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

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

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

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

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

עסקאות Bitcoin כוללות העברת בעלות על ביטקוין מכתובת אחת לאחרת.

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

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

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

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

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

הסבר על גיבוב (Hashing)

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

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

מהי פונקציה?

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

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

מהי פונקציה חד-כיוונית?

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

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

מהי פונקציית גיבוב (Hash)?

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

איך גיבוב עובד בעסקאות ביטקוין

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

תפקיד הגיבוב באבטחת ביטקוין

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

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

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

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

כמה דוגמאות מופיעות למטה:

  • הגיבוב SHA256 של המחרוזת שלום עולם
    • b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
  • גיבוב SHA256 של המחרוזת שלום עולם.
    • 7ddb227315f423250fc67f3be69c544628dffe41752af91c50ae0a9c49faeb87
    • שימו לב ששינוי קטן בקלט משנה לחלוטין את הפלט בהשוואה לראשון
  • גיבוב SHA256 של קובץ ה-iso להורדה Ubuntu 18.10
    • 7b9f670c749f797a0f7481d619ce8807edac052c97e1a0df3b130c95efae4765
    • הקלט הזה הוא קובץ ענק ובכל זאת הפלט הוא עדיין באורך קבוע

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

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

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

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

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

פעילות: צור גיבוב SHA 256

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

8.2 מודל ה-UTXO

מהם UTXOs?

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

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

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

יתרת הארנק שלכם היא פשוט הסכום הכולל של כל ה-UTXOs שבשליטתכם.

לא כדאי לחשוף לאחרים את ה-UTXOs שלכם, כי כאשר מישהו יודע עליהם, הוא יכול לעקוב אחרי העסקאות שלכם ולבסוף לדעת כמה כסף יש לכם.

דוגמה
  1. נועה רוצה לשלוח לדני 5 BTC.
  2. הארנק שלה משתמש בשני UTXOs שביחד שווים 6 BTC.
  3. העסקה שולחת 5 BTC לדני, ויוצרת UTXO חדש בארנק של דני.
  4. היתרה 0.99 BTC חוזרת לנועה כעודף, לאחר תשלום עמלת עסקה של 0.01 BTC.
  5. לאחר שהעסקה מאושרת, היא מתווספת לפנקס של ביטקוין וה-UTXOs שבהם השתמשה נועה מסומנים כמנוצלים, כך שלא ניתן להשתמש בהם שוב.
משאבים
How Bitcoin Works Under the Hood
צפו ב-'How Bitcoin Works under the Hood'

↑ חזרה לתוכן העניינים