על כתובות, מפתחות ומה שביניהם

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

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

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

במאמר זה ננסה לעשות סדר בבלאגן.

יש לי ביטקוין!

אז קודם כל, מה אומר המשפט "יש לי 0.7 ביטקוין"? הוא אומר שני דברים:

  1. יש לי, ורק לי, מפתח פרטי המקושר לכתובת ביטקוין מסוימת.
  2. כל המחשבים ברשת הביטקוין מסכימים שבכתובת זו יש 0.7 ביטקוין.

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

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

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

מפתחות וכתובות

מפתח הוא למעשה מספר. 7, 267 או 6473289547982 כולם יכולים להיות מפתח. בד"כ מפתחות הם גדולים יותר – הגבול העליון הוא כ-115 קוואטואורויג'ינטיליון (מספר מאד גדול). בשביל שרישום המפתח יהיה תמציתי יותר ומוגן בפני טעויות, נהוג להשתמש בשיטת רישום הקרויה Base58. בשיטת רישום זו, מפתח ייראה כרצף של כ-51 ספרות ואותיות, המתחיל בתו 5, K או L. דוגמה למפתח בצורה זו: 5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsrePsqVrAf.

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

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

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

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

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

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

כל צומת ברשת הביטקוין יודע כמה ביטקוינים יש בכל כתובת. חלקם מנגישים את המידע הזה לציבור באמצעות אתר אינטרנט. אחת הדרכים הנפוצות לבדוק את המאזן של כתובת – ולהתבונן בכל הפעולות הקשורות בה – היא באמצעות האתר https://blockstream.info/.

ארנקים

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

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

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

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

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

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

ארנקי צד שלישי

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

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

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

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

כלל הברזל אומר – אם אין לך מפתח פרטי, אין לך ביטקוין.

עץ, סיליקון וסגסוגות

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

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

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

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

סוג נוסף של ארנק הוא ארנק היברידי, שמטרתו לשלב כמה מהיתרונות של ארנק רגיל וארנק צד שלישי. הדוגמה הבולטת לארנק כזה הוא blockchain.info.

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

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

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

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

ארנקים בהפרדה גבוהה

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

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

בשביל לפתור בעיה זו, הומצא בסביבות שנת 2013 מושג ה – HD wallet. בניגוד למקובל בעולם הטלוויזיות, משמעות הקיצור HD לענייננו הוא Hierarchical Deterministic, כלומר ארנקים היררכיים דטרמינסטיים.

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

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

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

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

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

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

כלים כגון https://iancoleman.github.io/bip39/ מאפשרים לקחת סיד ולחשב מתוכו את כל המפתחות והכתובות המתאימים. אם עשינו שימוש באפשרות ההיררכיה, ולמעשה יצרנו מהסיד מספר ארנקים, ניתן לבחור בארנק המתאים באמצעות שינוי המספר המופיע בתיבה Account.

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

איפה הקאש?

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

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

מכאן, שאחת הדרכים המומלצות לחלץ מטבעות מסוג זה מבוססת על השלבים הבאים:

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

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