מימוש selfish miner ברשת ביטקוין · web viewההתקפה "משחקת"...

70
ההההההההההה הההההה הההההה הההההההה הההההה ההההה הההההה ההההה ההההה ההההה שששששselfish miner שששש ששששששש הההההה ההההה הה הההה הההה הההההההה ההההה הההה "ההההה הההההה"M.Sc . ההההה ההההה ההההההההההה הההההה הההההה ההההה ההההה1 | הההה הההה ההההההההההה הההההה ההההה ההההה ההההה

Upload: others

Post on 15-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

האוניברסיטה הפתוחההמחלקה למתמטיקה ולמדעי המחשב

פרויקט מתקדם במדעי המחשב

ברשת ביטקויןselfish minerמימוש

פרויקט מתקדם זה הוגש כחלק מהדרישות לקבלת תואר. במדעי המחשבM.Sc"מוסמך למדעים"

באוניברסיטה הפתוחההחטיבה למדעי המחשב

302792361מגיש: רועי דימינטשטיין, ת.ז. מנחה: פרופ' אהוד גודס

ד | 1 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 2: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

תוכן6....................................................................................................מבוא

6............................................................התקפות ביטקוין ומיקוד הפרויקט

8...................................................................................מטרת הפרויקט

8..................................................................סוגיות מימוש והיקף העבודה

9.......................................................................................עיצוב המערכת

9...................................................................(SRSמפרט דרישות תוכנה )

9...............................................................................מבוא.1

9........................................................................תיאור כללי.2

11.................................................................. דרישות פונקציונאליות3

Use Cases........................................................................................13

16.......................................................................דיאגרמת ארכיטקטורה

Class Diagram18.............................................................. ותיאור הרכיבים

Blockchain...........................................................................19הרכיב

Wallet.................................................................................24הרכיב

Messages.............................................................................24הרכיב

Miners................................................................................25הרכיב

Singletons............................................................................30הרכיב

31....................................................פרטים טכניים בנוגע להרצת הסימולציה

31...............................................................................ממשק המשתמש

34....................................................מיקום קבצי העבודה והוראות הפעלה

35.......................................................................................ביצוע מדידות

ד | 2 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 3: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

35.................................................................................ערכים הנמדדים

selfishLeadRevenueRatio..................................................................35

selfishConnectivityRatio...................................................................35

36........................................................................פורמט קבצי התוצאות

37......................................................מוטיבציה לבחירת הערכים והמדידות

38...............................................................................................תוצאות

38.................................................................................מספרים כלליים

39.......................................................................................מקרי קיצון

42................................................................................תוצאות סיכומיות

44..............................................................................................נספחים

MinerNode....................................................................44קוד ראשי של

GreedyMinerNode...........................................................45קוד ראשי של

45......................................................דוגמא לקבצי פלט עבור הרצה אחת

46.................................................................................................סיכום

47.....................................................................................רשימת מקורות

ד | 3 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 4: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

רשימת איוריםselfish miner.....................................................7 - פסאודו קוד של 1איור 10................................................... של המערכתcontext diagram - 2איור Use Cases Diagram.................................................................13 - 3איור 15............................................. של מיינרstate transition diagram - 4איור 16........................................ - דיאגרמת ארכיטקטורה של המערכת5איור 18................................................................ כלליClass Diagram - 6איור Blockchain Class Diagram........................................................19 - 7איור TransactionInput class.............................................................20 - 8איור TransactionOutput Class.........................................................20 - 9איור Transaction Class.................................................................21 - 10איור Block Class..........................................................................22 - 11איור Blockchain Class..................................................................23 - 12איור Wallet Class........................................................................24 - 13איור Node Class..........................................................................25 - 14איור MinerNode Class..................................................................25 - 15איור Miner Flowchart..................................................................27 - 16איור 28................ עבור מיינר רגילhandleBlockMessage של FlowChart - 17איור GreedyMinerNode Class........................................................28 - 18איור selfish mining...............29 לפי handleBlockMessage של Flowchart - 19איור

ד | 4 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 5: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

31............................................................ - מסך כניסה למערכת20איור 32........................................... - מסך הכנסת מספר צמתים ברשת21איור 32....................................................................... - רשת לדוגמא22איור 33............................................... - דוגמא להצגת מצבו של צומת23איור 39............................. כתלות במספר סיבוביםselfish miners - רווחי 24איור 40................. כתלות במספר הסיבוביםselfishLeadRevenueRation - 25איור 40................................................. בריצהselfish miners - רווחי ה 26איור 41............................................ - רווחי המיינרים התמימים בריצה27איור selfish.........41 - רווחים בפועל אל מול רווחים תאורטיים של מיינר 28איור 42..................................... אל מול תמימיםselfish - רווחי מיינרים 29איור 42............................. כתלות בחלקם היחסיselfish miners - רווחי ה30איור selfishRatio.........................43 כתלות ב selfishLeadRevenueRatio - 31איור selfishConnectivityRatio........43 כתלות ב selfishLeadRevenueRatio - 32איור 45............................................................1 - דוגמא לקובץ פלט 33איור 45............................................................2 - דוגמא לקובץ פלט 34איור 46............................................................3 - דוגמא לקובץ פלט 35איור

ד | 5 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 6: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

מבוא

התקפות ביטקוין ומיקוד הפרויקט

רשת ביטקוין היא מערכת מבוזרת שמטרתה לממש מטבע אלקטרוני שהסחר בו כמוtrusted third party, זאת אומרת, ללא decentralizedיעשה באופן שהוא לגמרי

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

הרשת: - התקפות במסגרתן התוקף מצליח לגלותהתקפות דה-אנונימיזציה.1

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

בצורת מפתח פומבי שבו הם השתמשו עלpseudonym"מוסתרת" מאחורי מנת לבצע פעולה במערכת

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

אותו מהרשת ו"מספר" לו דברים באופן סלקטיביד | 6 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 7: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

- התקפות במסגרתן, באמצעות סטייה selfish miningהתקפות .3 מהפרוטוקול, מיינר ברשת עשוי להרוויח יותר מכוח החישוב היחסי אותו הוא

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

incentive-compatibleבתאוריה )מכניזם שבמסגרתו הכי רווחי למשתתפים לעקוב אחרי הפרוטוקול כדי למקסם רווחים( אבל התקפות אלה מציגות

תוצאות )תאורטיות( שמצביעות אחרת

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

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

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

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

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

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

בלוקים אבל באותוnמוצאים לשאר המיינרים. בהנחה ושאר המיינרים ברשת מצאו בלוקים אז המיינרים התוקפים יוכלוk > nזמן המיינרים התוקפים יצליחו למצוא

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

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

בלוקיםkבהרבה משל התוקפים אז למה שהתוקפים יצליחו להשיג אותם ולכרות ? nבזמן שכל השאר הצליחו לכרות

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

שמצאו. מתאר את ההתקפה )קוד זה רץ על כל צומת תוקף(1הפסאודו קוד המוצג באיור

-ד | 7 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 8: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

selfish miner - פסאודו קוד של 1איור

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

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

ד | 8 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 9: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

מטרת הפרויקט

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

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

של הצלחה. ולבחון את נכונותוselfish miningמטרת פרויקט זה היא לממש את אלגוריתם

סוגיות מימוש והיקף העבודה

)ממציאsatoshi שהוקם ע"י open sourceברמת המימוש, ביטקוין הוא פרויקט והוא מממשbitcoin coreביטקוין( ומתוחזק ע"י הקהילה מאז. לפרויקט קוראים

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

:bitcoin coreמספר עובדות לגבי , אין שום מקור המציגsketchy באופן מאוד bottom-upמאחר והפרויקט צמח .1

designשל המערכת, תיאור הרכיבים באופן מסודר וכו. באופן כללי בקהילה source codeכאשר מפתח מתחיל מבקש כיוון, נהוג להפנות אותו אל ה

שורות6000 מכיל כ mainהקוד עצמו קשה מאוד לקריאה. לדוגמא, קובץ .2קוד השייכות לאלמנטים שונים ומגוונים במערכת

ישbitcoindהתהליך דורש המון משאבים. על מנת להריץ תהליך אחד של .3 זכרון דיסק פנוי שגם הוא חייב להיות150GB וכ RAM זכרון 2GBצורך ב

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

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

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

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

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

פעולותיו מלבד תהליך הכרייה.ד | 9 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 10: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

framework שהיא sinalgoלצורך הרצת סימולציות נוחה, את המימוש כתבתי מעל

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

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

האלה יובהרו.

עיצוב המערכת

(SRSמפרט דרישות תוכנה )

מבוא.1

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

פונקציונאליותדרישות ממשק משתמש-

המערכת תתמוך בפעולות הבאות: יצירת גרף אקראי המורכב ממיינרים המממשים את פרוטוקול-

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

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

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

תיאור כללי - תיאור של הסביבה הנדרש לצורך הפעלת האפליקציה א.ד | 10 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 11: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

דרישות מפורטות - תיאור מפורט של דרישות פונקציונאליותב.תיאור כללי.2

מבט על המערכת הינה מערכת עצמאית שאינה תלויה ואינה מחוברת למערכת

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

סימולציה של מספר מיינרים על אותו המחשב.

החומרה הנדרשת: בהנחה כי רוצים להריץ מספר רב של סיבובים )הבלוקצ'יין גדל-

נוסף1GB צמתים ו 7 עבור גרפים עד גודל של 4GBעם הכרייה(, עבור כל צומת נוסף

לשמירת תוצאות מהרצות שונות10MBכ -

תוכנה נדרשת:-JRE או( מעודכן JDK)

Context Diagram

ד | 11 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 12: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

של המערכתcontext diagram - 2איור

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

פונקציות מערכתיצירת גרף רשת.1

a.מספר הצמתים מתקבל כקלט ומספר הצמתים מתוכם שהם selfishגם מתקבל כקלט

b.ניתן לבקש ליצור גרף חדש וזה ימחוק את הקודםסימלוץ הרשת למספר סיבובים.2

a.מספר הסיבובים מתקבל כקלטb.ניתן לעצור הרצה באמצע גם במידה ולא הסתיימו מספר

סיבובים שהתבקש של הרשתstateקבלת .3

ד | 12 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 13: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

a.ניתן באמצעות כפתור לקבל את מאזן הביטקוין הכולל בין "הטובים" ל"רעים"

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

i. אם זה צומתselfishניתן לראות גם את מצב השרשרת , הפרטית שלו ואת הרווח הפוטנציאלי שלו אם היה

מפרסם אותהc.ניתן באמצעות כפתור לפלוט את הנתונים האלה ונתונים נוספים

שיתוארו בהמשך ומטרתם לאפשר מדידת התוצאותאילוצים

memoryלמרות שזאת סימולציה של צמתים מלאים, התוכנה עדיין .1

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

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

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

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

)מאות עד אלפים(תלויות

לצורך ביצוע פעולות קריפטוגרפיות כמו חתימה דיגיטלית עם אלגוריתם.1Elliptic Curves או אפילו תיאור כתובת משתמש באמצעות Private-Public

keypair נעשה שימוש ב ,jar חיצוני פומבי בשם BouncyCastleהמממש פונקציונאליות זאת

. דרישות פונקציונאליות3

יצירת גרף חדש.1 עלselfishמטרה: יצירת רשת חדשה המכילה צמתים תמימים וצמתים

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

והבלוקצ'יין אותו הוא מתחזקד | 13 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 14: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

קלטים:מספר הצמתים בגרף-selfishמספר הצמתים מתוכם שיהיו -

תוצאת ההרצה: מסומנים באופן ברור למשתמש.selfishנוצר גרף חדש, הצמתים ה

אם היה גרף קודם, הוא נמחק

סימולציה.2a.סימלוץ סיבובים

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

קלטים:מספר הסיבובים-

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

כל מספר מסויים )מוגדר בקונפיגורציה של מיינר( של סיבוביםהם מסמלצים טרנזקציה אקראי

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

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

ורוצים לעצור אותה באמצע. יש תועלת באפשרות של עצירהבאמצע

קלטים: אין " תעצר ההרצהpauseתוצאות הרצה: בעת לחיצה על כפתור "

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

של הרשתStateקבלת .3a. בקשת מאזן בין המיינרים התמימים לselfish

ד | 14 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 15: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

בכל רגע לראות את המאזן

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

selfishהמאזן בין המיינרים התמימים ל

b. בקשת פרמטרconnectivity

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

מעניין עבור המשתמש

קלטים: איןתוצאות הרצה: יוצג למשתמש בעת לחיצה

c. פליטתStateלקובץ מטרה: לצורך ניתוח של תוצאות רבות נרצה פונקציה אשר פולטת

את התוצאות של ההרצה בפורמט מסויים לקובץ

לכתיבת הקובץpathקלטים: אל הקובץstateתוצאות הרצה: כתיבת

Use Cases הקיימים עבור המשתמשuse cases מתאר את ה 3איור

ד | 15 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 16: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Use Cases Diagram - 3איור

.use casesנתאר את ה Create Graph

תיאור כלליselfishיצירת גרף חדש של צמתים תמימים ו

תנאים מקדימיםאין

שלבים בביצועהמשתמש לוחץ על כפתור יצירת גרף.1המשתמש מתבקש להכניס את מספר הצמתים בגרף.2selfishהמשתמש מתבקש להכניס את מספר הצמתים ה .3

מערכת יוצרת ומציגה את הגרף.4

ד | 16 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 17: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Output State

תיאור כללי הנוכחי של רשת הביטקוין המסומלצת לקובץstateכותב את ה

תנאים מקדימיםהמשתמש כבר יצר גרף

שלבים בביצועstateהמשתמש לוחץ על כפתור שמירת .1

אליו ישמרpathהמשתמש מתבקש להכניס .2path ל stateהמערכת שומר את ה .3

Calculate Parameter

תיאור כללימתאר בקשה של המשתמש לחישוב והצגת ערך בעל עניין כלשהו

תנאים מקדימיםהמשתמש כבר יצר גרף

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

מיינרהמערכת מציגה למשתמש את התוצאה.3

Run Num of Rounds

תיאור כללי המשתמש יכול לבקש להריץ את כל המיינרים ברשת למשך מספר מסויים

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

המוצג באיורstate-transition diagramמיינר )מנקודת מבט של כרייה( עם ה 4

ד | 17 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 18: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

של מיינרstate transition diagram - 4איור בכל סיבוב או שנוצר בלוק חדש או שהבלוק הנוכחי נמצא בכרייה. כל מיינר

הזה מאפשר לכל המיינרים מספרuse caseעבוד על בלוק משלו. הרצת ה מתאיםhashמוגדר של סיבובים לעבוד על הבלוק שלהם ולנסות למצוא

תנאים מקדימיםהמשתמש כבר יצר גרף

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

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

כדי ההרצה

ד | 18 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 19: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

דיאגרמת ארכיטקטורה

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

framework מציג אך ורק את הנחוץ על מנת לקבל הבנה כללית: 5. איור

- דיאגרמת ארכיטקטורה של המערכת5איור

הן המחלקות שנכתבו במסגרת הפרויקטSelfish mining projectמה שמוכל בתוך לכלל מחלקות הפרויקט.zoom in. בהמשך נעשה frameworkובעלות ממשק עם ה

הן המחלקות העיקריות שהסביבה מספקת.Sinalgo Frameworkמה שנמצא בתוך ד | 19 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 20: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

אבסטרקטית המאפשרת להרחיב אותה על מנת להסביר לסביבהNodeמחלקת שבאמצעותןGraph ומחלקת Edge הספציפי פועל בכל סיבוב, מחלקת Nodeאיך ה

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

,main היא המחלקה שמאחדת את הכל, בעצם המחלקה המכילה את Runמחלקת בכלNode-ים אם צריך, דואגת לקרוא לפונקציות המתאימות של threadפותחת

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

סוגי ההודעות שמומשו במסגרת הפרויקט יורשות ממחלקת אב )שגם היא הוגדרה.TTLMessageבמסגרת הפרויקט( שנקראת

ד | 20 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 21: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Class Diagramותיאור הרכיבים

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

של המערכתclass diagram מציג 6איור

ד | 21 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 22: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

כלליClass Diagram - 6איור

וBlockchain, Miner, Messages, Singletonsהמחלקות בדיאגרמה מקובצות לרכיבים Wallet.

ד | 22 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 23: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

המערכת(

Blockchainהרכיב

Blockchain Class Diagram - 7איור המכיל את הקוד המממש את מבנה הנתונים המבוזרblockchain מוצג רכיב 7באיור

שכל מיינר מחזיק. רשימה מקושרת של בלוקים המכילים טרנזקציות. כל טרנזקציה --ים, מאיפהoutput-ים ו inputמכילה את הטרנזקציות היוצאות והנכנסות שלה )

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

הבלוק. קיים בלוק מיוחד שהוא הבלוק הראשון בבלוקצ'יין, היחיד שאין לו בלוקGenesiמקדים בבלוקצ'יין, והוא בלוק ה

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

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

שהם כרו וכו.

ד | 23 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 24: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

TransactionInput

TransactionInput class - 8איור תיאור

משתמשים2 כלשהו בטרנזקציה השולחת ביטקוין בין inputמתאר משתנים

transactionOutputId מזהה שמצביע על - outputשל טרנזקציה קודמת הזהinput"נלקחים" הביטקוין ל ממנה

פעולותאין

TransactionOutput

TransactionOutput Class - 9איור תיאור

משתמשים2 כלשהו בטרנזקציה השולחת ביטקוין בין outputמתאר משתניםid מזהה שהוא תוצר - hashעל שאר המשתנים

recipientמפתח פומבי המתאר כתובת ביטקוין אליה שולחים - value כמה שולחים אל - recipient

parentTransactionId מזהה הטרנזקציה המכילה את ה - outputהזה פעולות

isMine מקבלת מפתח פומבי ומחזירה - trueאם ה outputהזה שייך לכתובת ע"י המפתח הפומבי הזההמיוצגת

ד | 24 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 25: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Transaction

Transaction Class - 10איור תיאור

. חתומה על ידיrecipient אל sender הנשלחת מ valueמתאר טרנזקציה בסך הנקראתTransactionInputs. מסתמכת על רשימת signatureעם החתימה

inputsכקלטים לטרנזקציה ומחלקת את ה inputים האלה בין רשימת ה- TransactionOutputs שנקראת outputs

משתניםid מזהה שהוא תוצר - hashעל השולח, המקבל והערך

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

recipientמפתח פומבי המתאר את מקבל הטרנזקציה - valueכמות ביטקוין שנשלח -

signature חתימה דיגיטלית עם אלגוריתם - ECהחותמת על פרטי senderהמפתח הפרטי של הטרנזקציה עם

inputs - רשימתTransactionInputים המהוות קלטים לטרנזקציה-outputs - רשימתTransactionOutputים המתארים לאן ישלחו הביטקוין-

פעולותisTransactionValid - מחזירtrueאם הטרנזקציה חתומה בהתאם וגם סכום

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

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

זאתד | 25 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 26: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Block

Block Class - 11איור תיאור

הקשור לחוקיות ברשימהmetadataבלוק בבלוקצ'יין. מכיל טרנזקציות והמקושרתמשתנים

index - מספר סידורי של הבלוק בבלוקצ'ייןpreviousHash - הSHA256המזהה את הבלוק הקודם ברשימה

merkleRoot - הhashהמתאר את שורש עץ המרקל של הטרנזקציות coinbaseTransaction - טרנזקציית הפרס עבור כריית הבלוק

transactions - רשימה שלTransasctionהמוכלות בבלוק nonce - הערך המשתנה עליו מונים על מנת להצליח לכרות את הבלוק

פעולותmineBlockNSteps - ביצועn צעדים של שינוי nonce בניסיון להגיע לכך שה

hash של הבלוק יכיל מספיק leading zeros שהבלוק יכרה(. מחזיר( trueאם nonceובכל מקרה משנה את ערך הצליח

addTransaction - הוספת טרנזקציה לבלוק. טרנזקציה חייבת להיות ( בהצלחה על מנת להתווסף לבלוקprocessTransactionל מבוצעת )קריאה

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

ד | 26 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 27: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

Blockchain

Blockchain Class - 12איור תיאור

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

משתניםblockchain - רשימה של בלוקים

UTXOs - הunspent transaction dbמבנה נתונים המחזיק את תמונת המצב . שעדיין לא בוזבזו מבחינת הצומת הנוכחי. מבנהTransactionOutputשל כל ה

לבין הTransactionOutput של כל id בין ה HashMapבאמצעות זה ממומשTransactionOutputעצמו

פעולותisChainValid - .פעולה הכבדה המוודאת את תקינותו של כל הבלוקצ'יין

leading עם מספיק hashהבלוקים, מוודאת שאכן כל בלוק הוא בעל עוברת על כל

zerosוכי ה previous hash שלו הוא באמת ה hashשל הבלוק הקודם, עבור כל תקינות הטרנזקציות ואז "היכולת" לבצע את אותןבלוק מוודאת את

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

בהתאםUTXOsכולה אכן תקינה וכמו כן לייצר לעצמו את ה tryMineAndAddBlock - מקבל בלוק ומנסה לכרות אותו למספר סיבובים

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

במדעי המחשב פרויקט מתקדם

Page 28: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

tryAddMinedBlock - .מנסה להוסיף אל הבלוקצ'יין בלוק שכבר נכרה נחוצה כאשר מיינר שומע על בלוק חדש שנוצר ע"י מיינר אחרפעולה זאת

Walletהרכיב רכיב זה מממש ארנק ביטקוין ומטרתו בפרויקט לאפשר למיינר מסויים להחזיק

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

הפרסים על בלוקים אותו הוא יצליח לכרות.

Wallet

Wallet Class - 13איור תיאור

ארנק ביטקויןמשתנים

blockchain - רפרנס לבלוקצ'יין כדי שיוכל ממנו להסיק את הטרנזקציות למשתמשהשייכות

privateKey - המפתח הפרטי של המשתמש לצורך חתימה על טרנזקציותpublicKey - המפתח הפומבי של המשתמש לצורך שיוך טרנזקציות

UTXOs - הטרנזקציות השייכות רק למשתמש מתוך הUTXOהגלובלי פעולות

ד | 28 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 29: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

generateKeypair - יצירת מפתחות הElliptic Curves

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

אותה. מעדכן את המאזן בארנק בהתאםומחזירMessagesהרכיב

את רכיב זה לא נתאר לעומק משום ששמות ההודעות אינדיקטיביים מספיק. נסביר כלשהו. ז"א,TTL שהיא הודעה בעלת TTLMessageרק שכל ההודעות יורשות מ

hopבכל פעם שמיינר יקבל הודעה כזאת, לפני שיעביר אותה לשכניו הוא יוריד לה

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

-ים בודד אמורhop של מספר TTLבהינתן גדלי הגרפים שניתן לעבוד עליהם, להספיק

Minersהרכיב והשניMinerNode סוגים של מיינרים, האחד רגיל ושמו 2במסגרת הפרויקט מומשו

selfish ושמו GreedyMinerNodeבאופן כללי ניתן ליצור מיינרים נוספים ומורכבים אף . משולבת עםeclipseיותר כפי שראינו בעבודה המסכמת במאמר המציג התקפת

selfish mining מורכב. כל מיינר הוא מימוש של צומת ברשת. צומת בתשתית sinalgo

Nodeמיוצג על ידי המחלקה האבסטרקטית

Node

Node Class - 14איור תיאור

צומת ברשת שיכול לקבל ולשלוח הודעות לצמתים השכניםמשתנים

IDמזהה ייחודי לכל צומת - outgoingConnections - רשימת חיבורים לצמתים השכנים של צומת זה

פעולות

ד | 29 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 30: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

preStep - פונקציה הנקראת בתחילת כל סיבובhandleMessages - פונקציה שנקראת בסוף הסיבוב ומאפשרת טיפול בכל

שנשלחו לצומת זהההודעות

MinerNode

MinerNode Class - 15איור תיאור

מיינר תמים ברשת ביטקויןמשתנים

blockchain - בלוקצ'יין המתאר את תמונת המצב ברשת מבחינת המיינר הזה

wallet - הארנק של המיינר הזהtransactionDB - מבנה נתונים המכיל את הטרנזקציות שהמיינר שמע עליהן

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

hashesPerRound - מספר ניסיונות הhash.אותו כל מיינר מנסה בכל סיבוב הוא הסתברותי אבל המספרים ורמת הקושי כרגע מכוונים כךהתהליך

מיינר מוצא בלוק סיבובים4שבממוצע כל פעולות

tryToMine - המיינר מנסה לכרות את הבלוק הנוכחי במשך hashesPerRoundאם קיים בלוק נוכחי או יוצר חדש ומוסיף לו האשים הוא מוסיף אותו לבלוקצ'יין ועושה, אם הוא מצליח לכרותDBטרנזקציות מה

broadcastעם הבלוק לשכנים שלו באמצעות BlockMessage

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

ד | 30 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 31: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

על מנת לסמלץ עבודה באישור הטרנזקציות מול הבלוקצ'ייןשל ביטקוין. זאתTransactionMessage לשכניו עם broadcastלצמתי הרשת. המיינר עושה

handleBlockMessage - נקרא כאשר הגיעהBlockMessageהמיינר ינסה . את הבלוק לבלוקצ'יין. במקרים מסויימים המיינר ישים לבלהוסיף

ולכן יבקש משכניו את הבלוקצ'יין שלהם ויחליףשהבלוקצ'יין שלו בפיגורBlockchainRequestMessageאליו. בקשה זאת תעשה עם

handleTransactionMessage - הגיעהTransactionMessageהמיינר יוסיף את .DBהטרנזקציה ל

handleBlockchainRequest - הגיעהBlockchainRequestMessageהמיינר . BlockchainResponseMessageחזרה אל השכן השולח את הבלוקצ'יין שלו עם ישלח

handleBlockchainResponse - הגיעהBlockchainResponseMessageהמיינר . יבדוק תקינות הבלוקצ'יין שנשלח ויחליף את הבלוקצ'יין שלו לבלוקצ'יין

שנשלח

המתאר את פעולת המיינר בכל סיבוב flowchart מציג 16איור

ד | 31 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 32: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

, נעשה זאת עבורFlowchart ניתן לתאר באמצעות subroutinesגם את ה handleBlockMessage מאחר והיא שונה באופן מהותי עבור MinerNodeו

GreedyMinerNode.והבדלים אלה מציגים הבדלים עיקריים בין שני המיינרים

ד | 32 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Miner Flowchart - 16איור

Page 33: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

עבור מיינרhandleBlockMessage של FlowChart - 17איור רגיל

GreedyMinerNode

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

מתחזק בלוקצ'יין פרטי ומפרסם בלוקים באופן סלקטיבי. יש לציין כי קיימת הנחה הם חלק מקליקה. הנחה זאת היא סבירה מאחר ולפיGreedyNodesלפיה

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

דורס התנהגויות נוספותGreedyMiner-ים העוברים דרך המפעיל. hop 2לקרות ב כדי לתת מוטיבציה מספקת תוך כדיhandleBlockMessageאבל נתרכז כאן ה

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

ד | 33 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 34: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

GreedyMinerNode Class - 18איור

תיאורselfish miningמימוש של מיינר ברשת ביטקוין הפועל לפי פרוטוקול

משתניםprivateBlockchain - בלוקצ'יין נוסף פרטי לבריכה שלselfish miners.

הם מסכימים ביניהםקונצנזוס עליוgreedyClique - סט המכיל את צמתי הבריכה

פעולותhandleBlockMessage - טיפול בבלוק חדש שהרשת דיווחה עליו לפי

selfish miningפרוטוקול

ד | 34 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

selfish mining לפי handleBlockMessage של Flowchart - 19איור

Page 35: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

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

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

בין צמתי הרשת, רקMinerNodeבמקרים רבים לתחזוקת הבלוקצ'יין אותה עושה .selfishשבמקרה זה התחזוקה נעשית רק בין הצמתים ה

Singletonsהרכיב רכיב זה מכיל מספר מחלקות הנותנות שירות לכלל המחלקות ולסימולציה

Config

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

חיבור של צמתים עם קשת, מימדי הסימולציה ועודStringUtil

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

על רשימה של טרנזקציות ועודmerkle root של string, חישוב ייצוג debugלצורך CustomGlobal

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

ולספק פרמטרים שמתבקשים.gui ב build graphדרף חדש יש ללחוץ על כפתור אותה אניCustomGlobal.buildUnitDiskGraphביצוע פעולה זאת יקרא לפונקציה הגדרתי עם והיא תיצור את הגרף.

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

GUI המתקבל מה event handlerמחלקה זאת בעת היצירה והם נגישים בכל

ד | 35 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 36: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

פרטים טכניים בנוגע להרצת הסימולציה

ממשק המשתמש

- מסך כניסה למערכת20איור אוSimulation Controlכלל הממשקים של המשתמש עם המערכת נמצאים תחת

Project Control באמצעות .Simulation Control ניתן להזין מספר ב text boxהמסומן Rounds to do וללחוץ על כפתור ה Play.כדי להריץ את הרשת למספר סיבובים

ד | 36 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 37: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

- מסך הכנסת מספר צמתים ברשת21איור נקבלselfish עבור מספר צמתים 3 עבור מספר צמתים כולל ו10לדוגמא אם נכניס גרף הצורה הבאה:

ד | 37 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 38: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

- רשת לדוגמא22איור

על מנת לקבל את כמות הביטקויןGetGlobalBalanceבכל שלב ניתן ללחוץ על והצמתים התמימים.selfishהכוללת שמחזיקים הצמתים ה

selfish שיחזיר את ערך ה GetSelfishConnectivityבכל שלב ניתן ללחוץ על

connectivityהממוצע בגרף - מדד זה הוא ממד שבחרתי לבחון ואסביר אותו בפרק ביצוע המדידות.

כדי לכתוב את התוצאות הנוכחיות שלResultsToFileבכל שלב ניתן ללחוץ שנמצאpathהסימולציה לקבצים. המשתמש יתבקש לספק תיקייה )רצוי לספק

על מנת להימנע מבעיות של הרשאות כתיבה לדיסק(. כלc:\users\[username]תחת קבצים שונים שהמבנה שלהם יוסבר גם3לחיצה כזאת תוביל לכתיבה של המידע ל

הוא בפרק ביצוע מדידות.

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

הבלוקצ'יין שהוא מתחזק.

ד | 38 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 39: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

- דוגמא להצגת מצבו של צומת23איור ,3 ניתן לראות כי הצומת שעמדנו מעליו עם העכבר הוא צומת עם מזהה 23באיור סיבובים כפי שגם ניתן לראות(, אורך הבלוקצ'יין שלו30 ביטקוין )הרצנו 200יש לו בלוקים וניתן לראות את ההאשים שלהם10הוא

מיקום קבצי העבודה והוראות הפעלה

הפרויקט מוגש בצורת פרויקט ג'אווה שנכתב בסביבת אקליפס. לצורך הרצת . את קבצי הפרויקטbinaries-ים שנמצאים תחת התיקייה jarהסימולציה קיימים גם

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

. לצורך הרצתBitcoinSelfishSimulationכל הקבצים מוגשים בתוך תיקייה שנקראת ושםBitcoinSelfishSimulation אל התיקייה dir ולעשות cmdהסימולציה יש לפתוח

להריץ את הפקודהjava -cp binaries\bin;binaries\jdom.jar;binaries\bcprov-jdk15on-159.jar;binaries\gson-

2.6.2.jar sinalgo.Run -project BitcoinMiner

ד | 39 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 40: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

" בתיקייהtxtלצורך נוחיות שורה זאת נמצאת בקובץ טקסט שנקרא "שורת הרצה.BitcoinSelfishSimulation

ביצוע מדידות

ערכים הנמדדים

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

מהערכים2בקצרה על

ד | 40 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 41: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

נגדיר את

expectedGreedyRevenueRatio הוא היחס המצופה בין רווחי הצמתים ה greedyלבין

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

נגדיר את

actualGreedyRevenueRatio.הוא היחס בפועל בין רווחי שני הצדדים

לבסוף נגדיר את היחס

מנצחים. בנוסף, יחסselfish miners, ה 1 גדול מ-selfishLeadRevenueRatioכאשר

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

honest miners שווה לכוח החישוב של שני selfish minerהנוכחית, כוח החישוב של

selfishConnectivityRatio עשו שימוש כותבי המאמר בפרמטר שהם המציאוselfish miningבניתוח התקפת

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

יהיה החלק מתוך הצמתים התמימים שיבחרו דווקא בבלוק שלבמקביל( (selfishהשרשרת הפרטית )השייכים למיינרים ה

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

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

יוגדר עבור צומת בודד באופן הבא:selfishConnectivityRatioהפרמטר

ד | 41 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 42: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

לביןהחלק היחסי של צמתים תוקפים מבין השכנים של צומת מסויים. התלות בין selfishConnectivityRatioשל כל אחד מהצמתים היא די ברורה - ככל שלצומת יש

הוא ישמע קודם אתrace, כך עולה הסיכוי שבמצב של selfishיותר שכנים שהם .selfishהבלוק אותו פרסמה הבריכה ה

בנוסף ננסה למצוא קשר לפרמטר חזק יותר שהוא הממוצע של פרמטר זה על גביהצמתים התמימים ברשת:

בתקווה למצוא קשר בין ערך ממוצע זה לבין סבירות הצלחת ההתקפה

פורמט קבצי התוצאות

תכתוב דגימה שלResultsToFile. כל לחיצה על GraphIdלכל גרף שנוצר קיים מזהה קבצים:3 הנוכחי של הרשת לתוך Stateה 1.SelfishSingleRun_[GraphId].csvקובץ המכיל שורה אחת עבור כל צומת -

selfish :בגרף. לכל צומת יכתבו הפרטים הבאים a.roundNumמספר הסיבוב הנוכחי )מספר הסיבובים שהסימולציה -

עברה, משמש כציר ה"זמן"(b.nodeIdמזהה הצומת - c.BTCכמות הביטקוין שברשות הצומת - d.privateBTCכמות הביטקוין שברשותו עפ"י השרשרת הפרטית -

)תאורטית, אם היה מפרסם את השרשרת והיא הייתה מתקבלת(e.expectedBTCכמות ש"אמור" להיות לו בהתחשב בחלקו היחסי -

ברשת וברווחים שנכרו עד כהf.isOverExpectation בוליאני שמתאר האם - expectedBTC > BTC

2.HonestSingleRun_[GraphId].csvקובץ המכיל שורה אחת עבור כל צומת - ,roundNumתמים בגרף. באופן דומה לכל צומת יכתבו הפרטים הבאים:

nodeId, BTC, selfishConnectivityRatio, expectedBTC, isOverExpectation. הוא הפרמטר שהוסבר בחלק הקודם.selfishConnectivityכאשר

3.GlobalInfo_[GraphId].csv.קובץ המכיל מידע סיכומי לגבי מצב הרשת - תכתב שורה אחת עם הפרטים הבאים:

a.roundNum

b.nodesNumמספר הצמתים בגרף -

ד | 42 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 43: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

c.selfishRatio החלק היחסי של צמתים - selfish מתוך nodesNum

d.averageSelfishConnectivityRatioממוצע על פני - selfishConnectivityRatioשל כל הצמתים התמימים

e.selfishGain כמות הביטקוין שהרוויחו הצמתים ה - selfish

f.expectedSelfishGainכמות הביטקוין אותו היו "אמורים" הצמתים ה - selfishלהרוויח

g.honestGain בדומה ל - selfishGain

h.expectedGreedyRevenueRatio היחס המצופה בין רווחי ה - selfish

minersלבין רווחי התמימים i.actualGreedyRevenueRatioהיחס שהתקבל בין הרווחים - j.selfishLeadRevenueRatio היחס בין - actualGreedyRevenueRatioל

expectedGreedyRevenueRatio

k.hasSelfishWonהאם ההתקפה הצליחה? במילים אחרות - האם ה - selfish minersהצליחו להרוויח יותר ממה שהם אמורים היו להרוויח

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

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

מוטיבציה לבחירת הערכים והמדידות

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

של ההתקפה.באופן ספציפי, ננסה לענות על השאלות

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

בינארי אלא השוואה של גובה הרווחים(

תוצאות צמתים2-4 עם 7-10 גרפים אקראיים שונים בגדלים 20סומלצו הרצות עבור

selfishמכוח החישוב. החלוקה נעשתה באופן הבא:50% המהווים תמיד פחות מ ד | 43 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 44: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

selfish 3 וselfish, 3 selfish צמתים 2 עם 7 גרפים בגודל 3-

selfish 3 וselfish, 3 selfish צמתים 2 עם 8 גרפים בגודל 3-

selfish, 4 selfish צמתים 2-4 עם 9 גרפים בגודל 4-

3 מהם עם selfish, 4 צמתים 2 מהם עם 2, 10 גרפים בגודל 10-selfish צמתים 4 מהם עם 4 וselfishצמתים

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

להגיע לכל חלקי הרשת לצורך תפקוד תקין.

עבור כל גרף בוצע: סיבובי סימולציה200הרצת .1 סיבובים10לקיחת דגימה כל .2

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

מספרים כלליים

הרשתות השונות שסומלצו, הדגימה האחרונה מראה כי המיינרים ה20מתוך selfishמהרשתות. תוצאה זאת נראית חלשה יחסית13 הרוויחו יותר מערכם היחסי ב

למספרים המצופים. אולם, אם בוחנים את המקרים בהםaverageSelfishConnectivityRatio > 0.5בממוצע לפחות חצי מהחיבורים של צומת(

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

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

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

גם הצליחו להחזיק בו ולהגדיל אותו, כצפוי מהתקפה זאת.

ד | 44 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 45: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

מקרי קיצון

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

היא היחידה בהselfish 4 צמתים ומתוכם 10אחת ההרצות של רשת בעלת .1 לאורך כל ההרצה, החל מהסיבוב הראשון ועד האחרון, בכל דגימה

היו בעלי הון הגדול מחלקם היחסי. מזהה ההרצה הואselfishהמיינרים ה e7ed312b-b9d3-4825-b4fa-d7373305a50aלצורך חיפוש כל הדגימות בקבצי

averageSelfishConnectivityRatioהתוצאות. באופן לא מפתיע, ערכו של

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

כאלה.

0 05 001 051 002 0520

005

0001

0051

0002

0052

0003

0053

0004

0054

0005

niaGhsi lfes

כתלות במספר סיבוביםselfish miners - רווחי 24איור

, ירידה זאת צפויה100 ניתן לראות את הירידה שהחלה בסיבוב 24באיור לקרות באופן כללי בהתקפה זאת מאחר וכוח החישוב של המיינרים

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

ד | 45 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 46: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

כתלות במספר הסיבובים. ניתןselfishLeadRevenueRatio מציג את 25איור תמיד הרוויחו מעלselfish מאחר והמיינרים ה 1לראות כי הוא תמיד מעל

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

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

שלהם( עד שהרשת עומתה עם הפרסומים של המיינרים התמימים. לבסוף אל מול מיינרselfish למיינר 3ניתן לראות התייצבות על רווחים של בערך פי

תמים.

0 05 001 051 002 0520

1

2

3

4

5

6

7

8

9

oi taReuneveRdaeLhsi lfes

כתלות במספרselfishLeadRevenueRation - 25איור הסיבובים

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

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

ד | 46 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 47: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

muNdnuorDIedon CTB CTBetavirp 0027005100910028009009002900710022002010060001

בריצהselfish miners - רווחי ה 26איור ואלו עבור המיינרים התמימים:

muNdnuorDIedon CTB oitaRytivitcennoChsifles 002108100220085.0002300015.00024001100250055.0002601

- רווחי המיינרים התמימים בריצה27איור

מיינרים כמעט ולא3מתוצאות אלו ניתן לראות דבר אחד מאוד בולט - ביטקוין(, מיינרים אלה הם בעלי100הרוויח )בלוק יחיד מזכה בselfishConnectivityRatio=1 במקרה זה, כל שכניהם הם מיינרים .selfish

שמנעו מהם רווחים. היו עוד רווחים תאורטייםselfishדבר נוסף שניתן לראות הוא שלמיינרים ה

שהם הביטקוין שלהם על פי השרשרת הפרטיתprivateBTCלא מבוטלים - 7 מציג את רווחיו התאורטיים והמעשיים של מיינר מספר 28כולה. איור

בריצה זו.

ד | 47 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 48: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

0 05 001 051 002 0520

002004006008

000100210041006100810002

elitT trahC

CTB CTBetavirp

- רווחים בפועל אל מול רווחים תאורטיים של28איור selfishמיינר

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

שני הגרפים היו מתלכדים, הוא משתדל לפרסם רק כשהוא חייב-71316674-2fe2-45da-b8cdדוגמא הפוכה היא ההרצה בעלת המזהה .2

2961320f6faa.שבה המיינרים התמימים ניצחו לאורך כל ההרצה . ערכיםaverageSelfishConnectivityRatio=0.2958בהרצה זאת התקבל הערך

selfishבסדר גודל זה כבר התקבלו בהרצות אחרות שבהן אפילו ניצחו ה

miners מיינרים 2 נצחון מוחץ. אולם הרצה זאת גם כללה רק selfishמתוך ה אז נראה שפה זה הפרמטר שגרם לתוצאה הקיצונית. 10

01 02 03 04 05 06 07 08 09001 011 021 031 041 051 061 071 081 091 002 0120

000100020003000400050006000700080009

elitT trahC

niaGhsi lfes niaGtsenoh

אל מול תמימיםselfish - רווחי מיינרים 29איור ד | 48 ו מ רועי דימינטשטייןע

במדעי המחשב פרויקט מתקדם

Page 49: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

selfish miners ניתן לראות שהמיינרים התמימים משגשגים ומנגד ה 29 באיור

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

selfish הקשירות שלך לשאר צמתי הרשת אינה גדולה, כריית ביטקוין ב וגם

mining.תוביל אותך להפסדים תוצאות סיכומיות

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

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

"תוצאת ההרצה".

51.0 2.0 52.0 3.0 53.0 4.0 54.0 5.00

0001

0002

0003

0004

0005

0006

0007

niaGhsi lfes

כתלות בחלקם היחסיselfish miners - רווחי ה30איור מאחר ולא ביצענו ניסויים על המון גדלים שונים אז יש לנו יחסית הרבה דגימות

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

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

ד | 49 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 50: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

51.0 2.0 52.0 3.0 53.0 4.0 54.0 5.00

1

2

3

4

5

6

7

8

9

01

oi taReuneveRdaeLhsi lfes

selfishRatio כתלות ב selfishLeadRevenueRatio - 31איור רואים פיזור מעט גדול יותר אבל תוצאה דומה. ניתן לראות גם שכאשר31באיור

אז ההתקפה נעשית יעילה0.3 מגיע לאיזור ה selfish minersחלקם היחסי של ה )כבר בטווח היחסית קצר שסימולציה זו בוחנת( מאחר וערכו של

selfishLeadRevenueRatio1 גדול מ. באמצעותselfish minerננסה לבחון את הערכים האלה ביחס לקשירות של ה

. selfishConnectivityRatioפרמטר

1.02.03.04.05.06.07.08.00

2

4

6

8

01

21

41

61

81

oi taReuneveRdaeLhsi lfes

כתלות בselfishLeadRevenueRatio - 32איור selfishConnectivityRatio

נראה שלא ניתן להסיק קשר כל כך ישיר כפי שקיוויתי בין השניים. בכל זאת כן ניתן selfish והמיינרים ה game over זה 0.5 של selfishConnectivityלהסיק שמעל

ד | 50 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 51: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

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

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

נספחים

MinerNodeקוד ראשי של

ולאחר מכן נשלחות הודעות ביןpreStepבכל סיבוב נקראת ראשית הפונקציה handleMessagesהצמתים ונקראת

@Overridepublic void preStep() {

tryToMine(blockchain);if (isMiningFastEnoughComparedToSpending() &&

(blockchain.getSize() % 3 == 0)) { // make sure we dont flood the network dbs with txs

tryToSpend();}

}

@Overridepublic void handleMessages(Inbox inbox) {

while (inbox.hasNext()) {TTLMessage m = (TTLMessage) inbox.next(); if (m.originalSenderID == this.ID) { // msg bounced back

continue;}handleMessage(m);

}}

protected void handleMessage(TTLMessage m) {if (m instanceof TransactionMessage) {

handleTransactionMessage((TransactionMessage) m);} else if (m instanceof BlockMessage) {

handleBlockMessage((BlockMessage) m, inbox.getSender());} else if (m instanceof BlockchainRequest) {

handleBlockchainRequest((BlockchainRequest) m, inbox.getSender());

} else if (m instanceof BlockchainResponse) {handleBlockchainResponse((BlockchainResponse) m);

}}

ד | 51 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 52: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

GreedyMinerNodeקוד ראשי של @Overridepublic void preStep() {

deltaPrev = privateBlockchain.getSize() - blockchain.getSize();tryToMine(privateBlockchain);if(deltaPrev != privateBlockchain.getSize() -

blockchain.getSize()){//new block was minedisMyPoolFound = true;applyGreedySteps(blockchain.getSize());

}

if(isMiningFastEnoughComparedToSpending() && (blockchain.getSize() % 3 == 0)) { //make sure we dont flood the network dbs with txs

tryToSpend();}

}

וממומשת רק שם.MinerNode זהה ל handleMessagesהפונקציה

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

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

נוספת לפלט.כתוצאה מכך נוצרו הקבצים הבאים:

1.SelfishSingleRun_1b32461c-d3ba-4924-ac09-8e7511810a17.csv

muNdnuorDIedon CTB CTBetavirp CTBdetcepxe noitatcepxErevOsi 001600210041010017006009010018000100201002600810002010027008000101002800500701

1 - דוגמא לקובץ פלט 33איור 2.HonestSingleRun_1b32461c-d3ba-4924-ac09-8e7511810a17.csv

ד | 52 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 53: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

muNdnuorDIedon CTB oitaRytivitcennoChsifles CTBdetcepxe noitatcepxErevOsi 0011000000120015.00100130015.00100140071010015001766666.001002108001002200215.00100230075.00100240091010025006766666.001

2 - דוגמא לקובץ פלט 34איור

3.GlobalInfo_1b32461c-d3ba-4924-ac09-8e7511810a17.csvmuNsdnuormuNsedon oitaRhsifles oitaRytivitcennoChsifleSegareva niaGhsifles niaGhsifleSdetcepxe niaGtsenoh oitaReuneveRydeerGdetcepxe oitaReuneveRydeerGlautca noWhsifleSsah oitaReuneveRdaeLhsifles

0018573.0333335.00082524100016.08.21766666.40028573.0333335.000135.764208436.0508098.01476484.1

3 - דוגמא לקובץ פלט 35איור

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

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

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

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

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

ד | 53 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 54: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

רשימת מקורות1. JA Garay, A Kiayias, N Leonardos )June 23, 2017(. The Bitcoin Backbone

Protocol: Analysis and Applications. National and Kapodistrian University of

Athens.

2. F Tschorsch, B Scheuermann. Bitcoin and Beyond: A Technical Survey on

Decentralized Digital Currencies. Humboldt University of Berlin. )Published

in: IEEE Communications Surveys & Tutorials ) Volume: 18, Issue: 3,

thirdquarter 2016 (

3. S Nakamoto )2008(. Bitcoin: A Peer-to-Peer Electronic Cash System. Bitcoin

contributers

4. Nicolas T. Courtois, Lear Bahack. On Subversive Miner Strategies and Block

Withholding Attack in Bitcoin Digital Currency. University College London,

UK, Open University of Israel. )2 December 2014(

ד | 54 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם

Page 55: מימוש selfish miner ברשת ביטקוין · Web viewההתקפה "משחקת" עם הרעיון של לא לספר לכולם מיד. במקום זה, מספר מיינרים

5. Ayelet Sapirshtein, Yonatan Sompolinsky, Aviv Zohar. Optimal Selfish

Mining Strategies in Bitcoin. School of Engineering and Computer Science,

The Hebrew University of Jerusalem, Israel. FC 2016: Financial Cryptography

and Data Security pp 515-532 )23 July 2015(

6. Ittay Eyal, Emin G¨un Sirer. Majority is not Enough: Bitcoin Mining is

Vulnerable. FC 2014: Financial Cryptography and Data Security pp 436-454

)09 November 2014(

7. Ethan Heilman and Alison Kendler, Boston University; Aviv Zohar, The

Hebrew University of Jerusalem and MSR Israel; Sharon Goldberg, Boston

University. Eclipse Attacks on Bitcoin’s Peer-to-Peer Network. included in the

Proceedings of the 24th USENIX Security Symposium August 12–14, 2015 •

Washington, D.C.

8. Kartik Nayak, Srijan Kumar, Andrew Miller, Elaine Shi. University of

Maryland, College Park, Cornell University, Ithaca. Stubborn Mining:

Generalizing Selfish Mining and Combining with an Eclipse Attack. Security

and Privacy )EuroS&P(, 2016 IEEE European Symposium )24 March 2016(

9. Pedro Franco, Understanding Bitcoin: Cryptography, Engineering, and

Economics )24 October 2014(

ד | 55 ו מ רועי דימינטשטייןעבמדעי המחשב פרויקט מתקדם