מערכת הוכחת עבודה (באנגלית: Proof-of-work system) היא שיטה באמצעותה ניתן למנוע התקפת מניעת שירות (התקפת DoS) ושימושים לא תקינים אחרים בשירותים כגון גנבת מטבעות קריפטוגרפיים. השיטה הומצאה על ידי סינתיה דוורק ומוני נאור, ופורסם במאמר בשנת 1993.[1].
דוגמה מוקדמת לשימוש במערכת הוכחת עבודה שנועדה להעניק ערך למטבע הוא מטבע הקונכייה שמקורו באיי שלמה.
תכונת מפתח של שיטות להוכחת עבודה היא האסימטריה שלהם: העבודה חייבת להיות קשה (אבל אפשרית) בצד של המבקש אבל קלה לבדיקה מבחינת ספק השירות.
מערכת שממומשת ב-Hashcash (מערכת למניעת דואר זבל), משתמשת בפונקציות גיבוב הופכי חלקיות כדי להוכיח שנעשתה עבודה, ורק אז ניתן לשלוח הודעת דואר אלקטרוני. למשל, הדוגמה הבאה מייצגת כ-252 חישובי גיבוב (האש) שנועדו כדי לשלוח מייל ל: calvin@comics.net
ב-19 בינואר 2038:
זה מאומת על ידי חישוב יחיד, באמצעות הבדיקה שגיבוב באמצעות SHA-1 של החותמת (משמיטים את הכותרת X-Hashcash:
כולל הנקודתיים, וכל כמות של רווחים עד לספרה '1') מתחיל עם 52 אפסים בבסיס בינארי, או 13 אפסים בבסיס הקסדצימלי:[2]
0000000000000756af69e2ffbdb930261873cd71
כדי להגיע למספר האפסים הגדול הזה, התוכנה מנסה כל פעם רצף אותיות שונה שמתווסף לאימייל (אחרי שלושת הנקודתיים), עד שתוצאת הגיבוב תיתן את מספר האפסים המבוקש (שמופיעים בראשית תוצאת הגיבוב). לכן, תוקף אפשרי יצטרך להשקיע הרבה זמן ומשאבים חומריים וכספיים כדי לשלוח כמות גדולה של דואר זבל, ושיטה זו אמורה למנוע זאת ממנו.
בשנת 2009, מערכת הביטקוין עלתה לאוויר. ביטקוין הוא מטבע קריפטוגרפי מבוזר, מגנון הקונצזוס של ביטקוין מבוסס על הוכחת עבודה. מבוצע גיבוב על כותרת של בלוק חדש שכורה רוצה להוסיף לבלוקצ'יין וקושי הוכחת העבודה (הכרייה) נקבע במספר האפסים שתוצאת הגיבוב צריכה להתחיל איתם.
התקפת ניצול כפול נפתרת, תחת הנחות מסוימות, על ידי שימוש בשרשת "בלוקים" מבוזרת המכונה "בלוקצ'יין" שבה נמצא התיעוד של העברות הכספים. המטבע "נכרה" על ידי שימוש בפונקציית ה-Hash שלרוב מבוצע על ידי מחשבים ייעודיים לכריה, וה"בלוקים" שנוצרים מתעדים את העברות המטבעות מכתובת לכתובת ומאושרים על ידי רשת מבוזרת של "צמתים".[3]
בביטקוין הקושי (מספר האפסים שמופיע בתחילת תוצאת הגיבוב) משתנה בהתאמה לכוח הכרייה (יכולת העיבוד של הכורים) כך שבממוצע ייווצר בלוק חדש כל 10 דקות.
ככל שגדל מספר הבלוקים המשורשרים בבלוקצ'יין, כך מערכת הוכחת העבודה מתחזקת, כי כדי לשנות בלוק שנמצא למשל במקום העשירי מסוף שרשרת הבלוקים העכשווית, נצטרך לשנות ולחשב מחדש את גיבוב כל הבלוקים שמתחתיו, כלומר התשיעי מהסוף עד האחרון, כדי שגיבובם יתחיל במספר האפסים הנדרש. (גיבובם משתנה כי כל בלוק מכיל את גיבוב ראש הבלוק שקדם לו, ולכן אם השתנה הבלוק הקודם נצטרך לשנות גם את הבלוק שאחריו כדי שהוא יכיל את ראש הבלוק החדש של קודמו וכדי שגיבוב הבלוק יחזיר את מספר האפסים הרצוי, וכך הלאה).
echo -n 1:52:380119:calvin@comics.net:::9B760005E92F0DAE | openssl sha1