חתימה עיוורת
מטבע דיגיטלי עם הוכחה באפס ידיעה

בשיטה המתוארת לעיל נשמרת האנונימיות של אליס בזמן הרכישה וכן הבנק מסוגל למנוע בזבוז כפול אך החיסרון שלה הוא שהיא לא מענישה את הרמאי במקרה של ניסיון לבצע בזבוז כפול. הדרך היחידה למנוע מאליס מלנסות לבזבז את המטבע שוב היא שהסוחר יוודא מול הבנק את תקפות המטבע בזמן הרכישה און ליין, מצב שלא תמיד אפשרי. לכן הציעו דויד צ'אום, עמוס פיאט ומוני נאור רעיון להשתמש בהוכחה באפס ידיעה כדי לבנות פרוטוקול מטבע דיגיטלי שייחודו הוא בכך שעונשה של אליס במקרה של ניסיון לבצע בזבוז כפול הוא חשיפת זהותה. הפרוטוקול שלהם תאורטי ומסתמך על הרעיון של Cut-and-Choose, שבו שני משתתפים מבטיחים הוגנות על ידי אינטראקציה.
כמו בשיטה המתוארת לעיל הבנק בוחר תחילה מודולוס  n ופרמטר ביטחון  k שמגדיר את ההסתברות לתפוס מבזבז כפול.  k גדול פירושו שקשה יותר לרמות וההסתברות שהרמאי יתגלה מתקרבת ל-1 די מהר ככל ש- k גדל. נניח שמספר החשבון של אליס הוא  u עם מונה כלשהו  v, כך שהבנק ואליס יודעים מהם. נניח שנתונות שתי פונקציות חד-כיווניות חסינות התנגשויות  f ו- g שמפיקות פלט באורך קבוע (אפשר להשתמש ב-SHA-2 למשל). המטבע של אליס יהיה אחד מ- k הרביעיות  (a_{i},c_{i},d_{i},r_{i}) של מספרים שלמים מודולו  n שהיא בוחרת באופן אקראי. רביעיות אלה נקראות "מועמדים". כדי להחתים את הבנק על המטבע היא מבצעת כדלהלן:
היא מסתירה את  k המועמדים באמצעות פונקציית ההצפנה שלה:  B_{i}=E_{r_{i}}(\ f(x_{i},y_{i})\ ) כאשר  x_{i}=g(a_{i},c_{i}) וכן  y_{i}=g(\ a_{i}\oplus (u\ \|\ (v+i)\ ),d_{i}) ושולחת אותם לבנק. הסימן  \oplus  מייצג XOR והסימן  \| מייצג שרשור מחרוזות.
הבנק בוחר קבוצת אתגר אקראית  R באורך  k/2 מועמדים מתוך הרשימה שקיבל ושולח אותה לאליס. אליס חושפת בפני הבנק את  (a_{i},c_{i},d_{i},r_{i}) עבור כל  i\in R. הבנק בודק עבור כל רביעייה שמתקבל  B_{i} כיוון שהוא יודע מהם  u ו- v. לכן אם אליס מנסה לרמותו הסיכויים שהוא יגלה את הרמאות מאוד גבוהים.
לאחר שנחה שדעתו של הבנק והוא משוכנע שאליס אינה רמאית הוא חותם על המטבע הממוסך  S_{b}(\Pi _{i\not \in R}B_{i}) ומנכה את הסכום המתאים מחשבונה. הרעיון כאן הוא שהבנק צריך להחסיר מהחתימה את כל הערכים שאליס חשפה בשלב ההוכחה, כי הם אינם יכולים יותר לשמש כמטבע לגיטימי. הסימן  \Pi  היא פעולה כלשהי שהתכונה שלה היא שהיא נשמרת גם לאחר תהליך הפענוח של אליס. במאמר המקורי הפעולה הייתה כפל בגלל שסכמת החתימה הייתה חישוב שורש ממעלה שלישית וההצפנה של אליס הייתה כפל ב- r_{i}^{3}. כעת מפעילה אליס את פונקציית הפענוח שלה כדי לחשוף את הערך  C=S_{b}(\Pi _{i\not \in R}f(x_{i},y_{i})), בודקת שהתוצאה נכונה על ידי הפעלת פונקציית האימות  V_{b} ומקדמת את המונה  v=v+k.
עבור  \epsilon  קבוע כלשהו, אם פחות מ- (1-\epsilon ) מתוך  k המועמדים המוסתרים  B_{i} אינו במבנה הנכון  (\ E_{r_{i}}(f(g(a_{i},c_{i}),g(a_{i}\oplus (u\|(v+i)),d_{i})))\ ) (יש לזכור שהבנק יודע מהו  u\|(v+i)), אז אליס תיתפס כמי שניסתה לרמות בהסתברות של  1-\exp(-c\epsilon k).
כעת בידי אליס מטבע דיגיטלי אותו היא יכולה לבזבז כדלהלן:
היא שולחת את  C לסוחר.
הסוחר שולח לאליס מחרוזת אתגר אקראית בינארית באורך  k/2 סיביות. אם הסיבית ה- i היא 1 אליס צריכה לשלוח לבוב את  a_{i},c_{i},y_{i} ואם הסיבית ה- i היא 0 היא אמורה לשלוח את  x_{i},a_{i}\oplus (u\ \|\ (v+i)) ואת  d_{i}. הסוחר בודק שהערכים שקיבל תואמים את הערך של  C. היות שההנחה היא שהפונקציות  f ו- g בלתי הפיכות והחתימה של הבנק נחשבת אמינה, אם אליס מרמה בשלב זה היא תיתפס בהסתברות גבוהה.
הסוחר שולח תעתיק של השיחה שלו עם אליס לבנק שמזכה אותו בסכום המתאים ושומר את תעתיק השיחה בקובץ לצורך תיעוד.
האנונימיות של אליס באינטראקציה שלה עם הסוחר נשמרת. המידע המזהה היחידי שהיא מסרה הוא מספר החשבון שלה כשהוא ממוסך עם ערך אקראי  a_{i} לכן הסוחר אינו יכול לעשות בו כל שימוש. הערכים  c_{i},d_{i} נחוצים כך שגם אם יתגלה שהחד-כיווניות של הפונקציה  g חלשה מהצפוי ומישהו הצליח לפצח אותה הוא יישאר עם מספר עצום של זוגות אפשריים  (a_{i},c_{i}) וכן  (a_{i}\oplus (u\ \|\ (v+i)),d_{i}) שהפונקציה  g ממפה לערכים  x_{i},y_{i}. כך שגם אם הסוחר מצליח להפוך את  g הוא לא יצליח לחלץ מידע מועיל לגבי זהות אליס. אם אליס תנסה לבזבז את המטבע  C שוב, יקרה דבר מעניין, הבנק ישווה את תעתיק השיחה מהרכישה החדשה עם התעתיק השמור מהרכישה הקודמת ובגלל שהאתגר אקראי יש סבירות גבוהה שיכול להיות אינדקס  i כלשהו כך שסיבית האתגר ה- i הייתה 1 בעותק הראשון ו-0 בעותק השני כי שניהם אקראיים. לכן לא רק שהבנק יודע כעת שנעשה ניסיון לבזבוז כפול, אם הוא יבצע XOR של שני תעתיקי השיחות שבידו הוא יקבל את  u\ \|\ (v+i), שבעצם חושף את מספר חשבונה של אליס ואת זהותה.
הבעיה בשיטה זו היא שבעוד שהבנק מסוגל לגלות אם אליס ניסתה להונות אותו, הוא עצמו יכול להמציא תעתיק שיחה בדוי כדי להפליל אותה, לכן מעצם טענה זו הבנק לא יוכל לשכנע אף אחד אחר שאליס אכן רמאית (זוהי תכונה מהותית בהוכחה באפס ידיעה). אפשר לתקן את הבעיה על ידי הוספת חתימה דיגיטלית של אליס כדי להגן עליה מפני רמאות מצד הבנק. כאשר אליס בוחרת את המועמדים היא מגרילה  k זוגות נוספים של ערכים  (p_{i},q_{i}) משרשרת אותם ביחד  g(p_{1},q_{1})\ \|\ \cdots \ \|\ g(p_{k},q_{k}), חותמת על התוצאה ושולחת הכול לבנק. בנוסף כאשר היא מחשבת את f(x_{i},y_{i}) היא מחליפה את  u בביטוי  u\ \|\ p_{i}\ \|\ q_{i}. ואז אם הבנק יכול לספק  k/2+1 זוגות נכונים  (p_{i},q_{i}) בידו ההוכחה שאליס ניסתה לרמות. אך התועלת כאן היא שהבנק אינו יכול לשנות את הערכים  g(p_{i},q_{i}) בגלל החתימה של אליס עליהם. גם אם נניח שהבנק מסוגל לפצח את  g כל מה שאליס צריכה לעשות זה לחשוף את הזוג המתאים  (p_{i},q_{i}) שברשותה כדי להוכיח שנעשה ניסיון לרמותה.
אפשר להרחיב את השיטה להמחאה בנקאית דיגיטלית שאינה ניתנת למעקב או התחקות אחר הרוכש. אליס יכולה לבקש מהבנק "פנקס" המחאות שבכל אחד מהם היא יכולה לבזבז עד הסכום הנקוב בו והבנק ינכה מחשבונה בהתאם את הסכום שבזבזה, אך הבנק לא יידע היכן היא השתמשה בהמחאה או באיזה סכום. השיטה המתוארת עובדת מבחינה תאורטית אך אינה פרקטית בגלל המחיר הכבד שהצדדים צריכים לשלם מבחינה חישובית כדי להגיע לתוצאה המיוחלת. בשיטות חדשות מנסים להגיע לרמת ביטחון דומה ללא הצורך בתקורה הגבוהה של פרוטוקול Cut-and-Choose.