חתימה עיוורת

בקריפטוגרפיה ואבטחת מידע, חֲתִימָה עִוֶּרֶת (באנגלית: Blind Signature) היא צורת חתימה דיגיטלית שבה תוכן המסר החתום מוסתר מפני החותם בזמן החתימה עליו. החתימה העיוורת ניתנת לאימות באופן פומבי מול המסר הגלוי באותו אופן שבו מבוצע אימות חתימה דיגיטלית רגילה למרות שהחותם לא היה מודע לתוכן המסר בעת החתימה. חתימה עיוורת שימושית במגוון תחומים בהם דרושה אנונימיות כמו הצבעה ממוחשבת או מסחר במטבע דיגיטלי. רעיון החתימה העיוורת הועלה לראשונה ב-1983 על ידי דויד צ'אום שנחשב לאחד מחלוצי המטבע הדיגיטלי. הוא הדגים לראשונה את החתימה העיוורת באמצעות אנלוגיה למעטפת הצבעה עם נייר פחם. המצביע מכניס פתק הצבעה שאליו מוצמד נייר פחם לתוך מעטפה עליה מודפסים פרטיו האישיים, הגורם המאשר בודק את פרטי המצביע המופיעים על גבי המעטפה וחותם עליה בחתימתו. חתימת הגורם המאשר עוברת לפתק ההצבעה באמצעות נייר הפחם. כעת המצביע יכול להוציא את פתק ההצבעה החתום ולשלוח אותו בדואר לקלפי במעטפה לא מזוהה. בכל שלב ניתן לבדוק את תקפות ההצבעה על ידי בדיקת החתימה שעל הפתק. למרות שהגורם שמודע לזהות בעל פתק ההצבעה אינו יודע למי הצביע כי הפתק הוסתר בתוך מעטפה אטומה. באותה מידה יכולה חתימה עיוורת לשמש כלי עזר לתשלום מזומנים דיגיטליים ללא אפשרות מעקב. כלומר החתימה באופן זה מונעת מהבנק ליצור זיקה בין הכסף החתום לבין עסקה שנעשתה איתו מאוחר יותר, או בין גרסה מוסתרת של המטבע לבין גרסה גלויה שלו. דבר שיכול לעזור בשמירה על אנונימיות המשלם בדומה לשימוש במזומנים בשיטה המסורתית, תוך מניעה של בזבוז כפול. אפשר להכין חתימה עיוורת באמצעות כל שיטת הצפנה אסימטרית הומומורפית חלקית כמו RSA, אל-גמאל, הצפנת פליאיי או אוקמוטו-אושיאמה. באופן פורמלי חתימה עיוורת היא פרוטוקול קריפטוגרפי בין שתי ישויות אליס ובוב. אליס מעוניינת להחתים את בוב על מסר כלשהו שהיא הכינה. בגמר הפרוטוקול אליס השיגה את חתימתו של בוב על המסר מבלי שיגלה דבר בנוגע למסר עליו חתם. וכן כל אחד מסוגל לוודא שאכן החתימה של בוב על המסר תקפה מבלי הצורך לדעת מיהו בעל המסר. במידה מסוימת יש קשר בין פרוטוקול זה לפרוטוקול הוכחה באפס ידיעה, שבו המוכיח מצליח לשכנע את המוודא בדבר אמיתות טענה מסוימת מבלי לחשוף בפניו את הטענה עצמה. למעשה דויד צ'אום, עמוס פיאט ומוני נאור פיתחו פרוטוקול למטבע דיגיטלי המסתמך על אפס ידיעה שמאפשר לאליס לשמור על האנונימיות שלה כל עוד היא אינה מרמה. העונש במקרה של הונאה הוא חשיפת זהותה. ערך מורחב – חתימה דיגיטלית חתימה דיגיטלית היא תוצר של הצפנת מפתח ציבורי או הצפנה א-סימטרית שבה המערכת מפוצלת לשני חלקים נפרדים, שלב ההצפנה המקביל לשלב החתימה ושלב הפענוח המקביל לשלב אימות החתימה. כל אחד יכול לאמת חתימה המצורפת למסמך כלשהו באמצעות המפתח הציבורי של החותם אך רק החותם שמחזיק במפתח הפרטי יכול לחתום חתימה תקפה בשמו ובהגדרה אין אפשרות (או קשה מאוד) לנחש מהו מפתח החתימה הפרטי בידיעת מפתח האימות הציבורי. חתימה דיגיטלית כוללת פונקציית חתימה S {\displaystyle S} ופונקציית אימות V {\displaystyle V} כך שהתוצאה של V ( S ( m ) ) {\displaystyle V(S(m))} על המסר m {\displaystyle m} היא הוכחה לתקפותה. השיטה המפורסמת ביותר לחתימה דיגיטלית היא שיטת RSA המבוססת על העובדה שמצד אחד קל לבצע העלאה בחזקה ומצד שני קשה לפרק לגורמים מספרים שלמים. אליס בוחרת שני מספרים ראשוניים גדולים p {\displaystyle p} ו- q {\displaystyle q} ומחשבת את n = p q {\displaystyle n=pq} . כמו כן היא מגרילה מספר שלם e {\displaystyle e} שהוא זר ל- ϕ ( n ) {\displaystyle \phi (n)} , מחשבת את המפתח הסודי d {\displaystyle d} כך שמתקיים e d ≡ 1  (mod  ϕ ( n ) ) {\displaystyle ed\equiv 1{\text{ (mod }}\phi (n))} . כאשר ϕ ( n ) {\displaystyle \phi (n)} הוא פונקציית אוילר של n {\displaystyle n} שהיא במקרה זה ( p − 1 ) ( q − 1 ) {\displaystyle (p-1)(q-1)} . את e {\displaystyle e} ואת n {\displaystyle n} היא מפרסמת לכל דורש ואילו את d {\displaystyle d} ואת p {\displaystyle p} ו- q {\displaystyle q} היא שומרת בסוד. כדי לחתום על המסר m {\displaystyle m} היא מחשבת את s = m d  (mod  n ) {\displaystyle s=m^{d}{\text{ (mod }}n)} אותו היא שולחת לבוב יחד עם המסר m {\displaystyle m} . כדי לאמת את החתימה בוב מחשב את m ′ = s e  (mod  n ) {\displaystyle m'=s^{e}{\text{ (mod }}n)} ורק אם מתקיים m = m ′ {\displaystyle m=m'} הוא מקבל את החתימה. זה נכון בשל הזהות הבאה: s d = ( m e ) d = m e d = m 1 + ϕ ( n ) k ≡ m  (mod  n ) {\displaystyle s^{d}=(m^{e})^{d}=m^{ed}=m^{1+\phi (n)k}\equiv m{\text{ (mod }}n)} כי לפי אוילר m ϕ ( n ) ≡ 1  (mod  n ) {\displaystyle m^{\phi (n)}\equiv 1{\text{ (mod }}n)} עבור כל m {\displaystyle m} ולכן גם m 1 + ϕ ( n ) ≡ m  (mod  n ) {\displaystyle m^{1+\phi (n)}\equiv m{\text{ (mod }}n)} . היות שאף אחד חוץ מאליס אינו יודע מהם d {\displaystyle d} או ϕ ( n ) {\displaystyle \phi (n)} כיוון שהם מעולם לא פורסמו ולא ניתן לחשב אותם מתוך e {\displaystyle e} ו- n {\displaystyle n} מבלי לדעת מהם הגורמים הראשוניים, זהו מאפיין יסודי של הצפנה אסימטרית, לכן בוב יכול לקבל את החתימה כאותנטית. כמובן שהשיטה המתוארת נועדה רק להדגים את הקונספט של חתימה דיגיטלית, אין לראות בה בשום אופן שיטה מעשית לחתימה דיגיטלית. בפועל מיישמים חתימה דיגיטלית באופן אחר לגמרי כדי למנוע התקפות קריפטוגרפיות ידועות. אפשר לבסס חתימה דיגיטלית על מערכות הצפנת מפתח ציבורי אחרות כמו חתימה דיגיטלית של רבין המבוססת על הצפנת רבין או DSA המבוססת על הצפנת אל-גמאל. אפשר להרחיב כמעט כל פרוטוקול חתימה דיגיטלית לחתימה דיגיטלית עיוורת. הטכניקה הראשונה שפורסמה הייתה של דויד צ'אום, שהתאים את חתימת RSA ב-1992 פרסם אוקמוטו גרסת חתימה עיוורת המבוססת על חתימת שנור. מאפיין רצוי בהצבעה דיגיטלית הוא שאימות זהות המצביע יהיה מופרד מאימות ההצבעה עצמה. חתימה דיגיטלית רגילה יוצרת זיקה בין המצביע לפתק ההצבעה ולכן אנונימיות המצביע נפגעת. מצד שני בהצבעה מקוונת גובר הסיכון להצבעה כפולה או התחזות והונאה. פרוטוקול הצבעה אנונימי מפריד בין תהליך אימות המצביע לבין תהליך אימות ההצבעה באופן כזה שהגורם המאשר את זהות המצביע אינו מסוגל לשייך או ליצור זיקה בינו לבין פתק ההצבעה שלו ומצד שני המצביע אינו יכול להצביע פעמיים או להתחזות למצביע אחר. באופן כללי פרוטוקול הצבעה עם חתימה עיוורת מכיל את המאפיינים הבאים. נניח שהמצביע הוא בוב והגורם הרשמי המאשר את ההצבעה היא אליס. בוב יוכל להוכיח לאליס את זהותו האמיתית והיא תוכל לבדוק בהתאם את זכאותו להצבעה. לא יהיה אפשרי לשכפל את החתימה של אליס. כל אחד יכול לוודא שהחתימה של אליס תקפה. בוב יכול להצביע באופן כזה שאליס לא תוכל לדעת מה הצביע. ההבדל היחידי בין פתק ההצבעה שבוב שלח לאליס לבין פתק ההצבעה שהוא הניח בקלפי הוא החתימה של אליס. אם מתרגמים את המושגים הללו לשפה קריפטוגרפית אז שלוש הדרישות הראשונות מקבילות לתהליך אימות קריפטוגרפי עם חתימה דיגיטלית קונבנציונלית. חתימת אליס היא S a {\displaystyle S_{a}} ופונקציית האימות הציבורית שלה היא V a {\displaystyle V_{a}} כך שמתקיים V a ( S a ( M ) ) = M {\displaystyle V_{a}(S_{a}(M))=M} . שתי הדרישות האחרונות אומרות שהבוחר בוב צריך להצפין את פתק ההצבעה שלו באמצעות פונקציית הצפנה כזו כך שפתק ההצבעה ניתן יהיה לאימות גם במצבו הגלוי (לאחר פענוח). לשם המחשה נניח שפתק ההצבעה של בוב מסומן באות B {\displaystyle B} , פונקציית ההצפנה שלו היא E b {\displaystyle E_{b}} ופונקציית הפענוח שלו היא D b {\displaystyle D_{b}} אז צריך שיתקיים D b ( S a ( E b ( B ) ) ) = S a ( B ) {\displaystyle D_{b}(S_{a}(E_{b}(B)))=S_{a}(B)} . אפקטיבית, פעולת הפענוח של בוב מסירה את ההצפנה שלו על הפתק מבלי לפגוע בתקפות החתימה. קיימות מספר פונקציות הצפנה שמקיימות את הדרישה האמורה, אפשר למשל להשתמש ב-RSA, אך יש להיזהר ממלכודות, בדרך כלל משתמשים בהצפנת פליאיי. תהליך ההצבעה יבוצע כדלהלן: בוב מצפין את פתק ההצבעה שלו E b ( B ) {\displaystyle E_{b}(B)} ושולח אותו מאומת לאליס (הם משתמשים בפרוטוקול אימות בנפרד מפרוטוקול זה). אליס מאמתת את זהותו של בוב וחותמת על פתק ההצבעה המוצפן S a ( E b ( B ) ) {\displaystyle S_{a}(E_{b}(B))} ומחזירה אותו לבוב. בוב מפענח את המסר החתום שקיבל D b ( S a ( E b ( B ) ) ) {\displaystyle D_{b}(S_{a}(E_{b}(B)))} ומקבל את S A ( B ) {\displaystyle S_{A}(B)} . כדי למנוע מרמאי מלהחליף את פתק ההצבעה שלו במהלך המשלוח הוא מוודא שמתקיים V a ( S a ( B ) ) = B {\displaystyle V_{a}(S_{a}(B))=B} . בוב שולח את פתק ההצבעה שלו S a ( B ) {\displaystyle S_{a}(B)} לקלפי באופן אנונימי. היות שפונקציית האימות של אליס ציבורית כל אחד יכול לחשב את V a ( S a ( B ) ) {\displaystyle V_{a}(S_{a}(B))} ולוודא את אמינותו של פתק ההצבעה אך אף אחד לא יידע לשייך אותו לבוב כיוון שבוב שלח את הפתק באופן אנונימי. כדי למנוע הצבעה כפולה, חברי ועדת הקלפי צריכים לוודא שפתקי ההצבעה מכילים מרכיב אקראי שאליו מוצמדת ההצבעה כך שכל הצבעה עם S a ( B ) {\displaystyle S_{a}(B)} תהיה שונה. בדרך זו אפשר להבטיח ספירה אמינה של הקולות ולזהות כפילויות. התרשים מצד שמאל ממחיש מערכת הצבעה דיגיטלית טיפוסית. בניגוד לרכישה באמצעות כרטיס אשראי או המחאה בנקאית, המאפיין המרכזי בכסף מזומן הוא שכאשר הלקוח מושך מזומנים מהבנק, הבנק אינו יודע איפה הלקוח מתכוון לבזבז אותם וכן כאשר הלקוח מבצע רכישה, הסוחר אינו יודע מי הוא הקונה. כך הכסף החליף ידיים מבלי שניתן יהיה להתחקות אחר הרוכש. אפשר לדמות מאפיין זה של רכישה במזומן גם בכסף דיגיטלי. לצורך המחשה נניח שאליס מייצרת מטבע דיגיטלי C {\displaystyle C} . היא מחשבת את פונקציית הגיבוב של המטבע f ( C ) {\displaystyle f(C)} ואז מצפינה אותה באמצעות פונקציית ההצפנה שלה E a {\displaystyle E_{a}} עם המפתח הסודי a {\displaystyle a} . את התוצאה E a (   f ( C )   ) {\displaystyle E_{a}(\ f(C)\ )} היא שולחת לבנק ומבקשת את אישורו. הבנק מזהה את הלקוחה באמצעי זיהוי רגילים ואז חותם על הגיבוב של המטבע באמצעות פונקציית החתימה שלו S b {\displaystyle S_{b}} , מחזיר לה את החתימה S b (   E a (   f ( C )   )   ) {\displaystyle S_{b}(\ E_{a}(\ f(C)\ )\ )} ומנכה את הסכום המתאים מחשבונה. כעת אליס מסירה את ההצפנה שלה מהמטבע על ידי חישוב D a (   S b (   f ( C )   )   ) {\displaystyle D_{a}(\ S_{b}(\ f(C)\ )\ )} ומתקבל S b (   f ( C )   ) {\displaystyle S_{b}(\ f(C)\ )} , כמו כן היא מוודא שמתקיים V b (   S b (   f ( C )   )   ) = f ( C ) {\displaystyle V_{b}(\ S_{b}(\ f(C)\ )\ )=f(C)} כדי למנוע רמאות מצד גורם שלישי. כעת כדי לבזבז את המטבע היא משלמת עבור סחורה כלשהי עם C {\displaystyle C} ועם S b (   f ( C )   ) {\displaystyle S_{b}(\ f(C)\ )} . הסוחר מוודא שהמטבע אותנטי ואושר על ידי הבנק על ידי בדיקה שמתקיים V b (   S b (   f ( C )   )   ) = f ( C ) {\displaystyle V_{b}(\ S_{b}(\ f(C)\ )\ )=f(C)} כנדרש. פונקציית הגיבוב נחוצה כאן כדי למנוע מאליס מלרמות את הסוחר, כי ללא פונקציית הגיבוב אליס יכולה לבחור ערך אקראי כלשהו X {\displaystyle X} ולמסור לו את ( X , V b ( X ) {\displaystyle X,V_{b}(X)} ) כמטבע לגיטימי. כעת הסוחר שולח את המטבע C {\displaystyle C} ואת החתימה S b (   f ( C )   ) {\displaystyle S_{b}(\ f(C)\ )} לבנק שמוודא שהמטבע תקף ואם כן הבנק מזכה את חשבונו של הסוחר בהתאם. כמו כן הבנק צריך לאחסן את C {\displaystyle C} במקום כלשהו כמטבע שבוזבז כך שאליס לא תבזבז אותו שוב. אפשר להדגים מטבע דיגיטלי עם פונקציית ההצפנה RSA. המטבע C {\displaystyle C} בשווי דולר אחד יהיה מהצורה C = ( x , H ( x ) 1 / 3  (mod  n ) ) {\displaystyle C=(x,H(x)^{1/3}{\text{ (mod }}n))} כאשר n {\displaystyle n} הוא מודולוס RSA של הבנק, H {\displaystyle H} היא פונקציית גיבוב ו- x {\displaystyle x} הוא ערך אקראי שנבחר על ידה. ביתר פירוט, פרוטוקול להנפקה ובזבוז של מטבע אחד מתנהל כדלהלן: אליס מגרילה שני שלמים אקראיים x {\displaystyle x} ו- r {\displaystyle r} ושולחת לבנק את המטבע המוסתר B = ( r 3 ⋅ H ( x ) )  (mod  n ) {\displaystyle B=(r^{3}\cdot H(x)){\text{ (mod }}n)} . הבנק מחזיר לה את השורש ממעלה שלישית של B {\displaystyle B} מודולו n {\displaystyle n} שהוא ( r ⋅ H ( x ) 1 / 3 )  (mod  n ) {\displaystyle (r\cdot H(x)^{1/3}){\text{ (mod }}n)} ומנכה מחשבונה דולר אחד. אליס מחלצת מתוך B {\displaystyle B} את החתימה על המטבע C {\displaystyle C} שהיא H ( x ) 1 / 3  (mod  n ) {\displaystyle H(x)^{1/3}{\text{ (mod }}n)} . אליס מבזבזת את המטבע, היא שולחת לבוב את הזוג ( x , H ( x ) 1 / 3  (mod  n ) ) {\displaystyle (x,H(x)^{1/3}{\text{ (mod }}n))} . בוב מתקשר לבנק מייד ומוודא שהמטבע לא בוזבז כבר. אם לא הוא בודק את חתימת הבנק ואת פונקציית הגיבוב. אם הבדיקות הצליחו הוא מקבל את המטבע ומספק את הסחורה או השרות תמורתו לאליס. הבנק מזכה את חשבונו של בוב בדולר אחד ורושם את המטבע כמי שכבר בוזבז, כדי למנוע בזבוז כפול. יהיו p = 353 , q = 449 {\displaystyle p=353,q=449} ו- n = p q = 158497 {\displaystyle n=pq=158497} . מפתח האימות הציבורי של חתימת הבנק יהיה 3 {\displaystyle 3} ואילו מפתח החתימה הפרטי הוא 105131 {\displaystyle 105131} . להכנת המטבע C {\displaystyle C} אליס בוחרת את x = 330 {\displaystyle x=330} ואת r = 502 {\displaystyle r=502} מחשבת את H ( 330 ) = 37 {\displaystyle H(330)=37} (במקרה זה הוגרל מספר כלשהו רק לצורך הדוגמה) ושולחת לבנק את ( 25402 ⋅ 37 ) ≡ 147389  (mod  158497 ) {\displaystyle (25402\cdot 37)\equiv 147389{\text{ (mod }}158497)} . הבנק מחזיר את חתימתו 147389 105131 ≡ 67047  (mod  158497 ) {\displaystyle 147389^{105131}\equiv 67047{\text{ (mod }}158497)} . אליס מפענחת את חתימת הבנק על ידי חילוק ב- r {\displaystyle r} (ליתר דיוק הכפלה בהופכי הכפלי שלו מודולו n {\displaystyle n} ) ומתקבלת החתימה ( 67047 ⋅ 37572 ) ≡ 97063  (mod  158497 ) {\displaystyle (67047\cdot 37572)\equiv 97063{\text{ (mod }}158497)} . המטבע של אליס הוא x = 330 {\displaystyle x=330} וחתימת הבנק על המטבע הגלוי היא 97063 {\displaystyle 97063} . את הזוג C = ( 330 , 97063 ) {\displaystyle C=(330,97063)} היא שולחת לסוחר בוב. הסוחר מצידו תחילה מוודא את תוקף המטבע על ידי בדיקת החתימה של הבנק (העלאה בחזקת 3) קל לראות שבמקרה זה מתקבל 97063 3 ≡ 37  (mod  158497 ) = H ( x ) {\displaystyle 97063^{3}\equiv 37{\text{ (mod }}158497)=H(x)} . כמו כן כדי למנוע רמאות מצד אליס הוא בודק שאכן מתקבל H ( 330 ) = 37 {\displaystyle H(330)=37} . אם שתי הבדיקות עלו בהצלחה הוא מספק את הסחורה או השרות לאליס ומפקיד את המטבע בבנק. כאשר הבנק חתם על H ( x ) = 37 {\displaystyle H(x)=37} הוא לא ראה אותו כיוון שהיה מוסתר בכפל ב- r 3 {\displaystyle r^{3}} לכן כאשר הסוחר מפקיד את המטבע, הבנק לא יודע שהמטבע התקבל מאליס. ערך מורחב – הוכחה באפס ידיעה בשיטה המתוארת לעיל נשמרת האנונימיות של אליס בזמן הרכישה וכן הבנק מסוגל למנוע בזבוז כפול אך החיסרון שלה הוא שהיא לא מענישה את הרמאי במקרה של ניסיון לבצע בזבוז כפול. הדרך היחידה למנוע מאליס מלנסות לבזבז את המטבע שוב היא שהסוחר יוודא מול הבנק את תקפות המטבע בזמן הרכישה און ליין, מצב שלא תמיד אפשרי. לכן הציעו דויד צ'אום, עמוס פיאט ומוני נאור רעיון להשתמש בהוכחה באפס ידיעה כדי לבנות פרוטוקול מטבע דיגיטלי שייחודו הוא בכך שעונשה של אליס במקרה של ניסיון לבצע בזבוז כפול הוא חשיפת זהותה. הפרוטוקול שלהם תאורטי ומסתמך על הרעיון של Cut-and-Choose, שבו שני משתתפים מבטיחים הוגנות על ידי אינטראקציה. כמו בשיטה המתוארת לעיל הבנק בוחר תחילה מודולוס n {\displaystyle n} ופרמטר ביטחון k {\displaystyle k} שמגדיר את ההסתברות לתפוס מבזבז כפול. k {\displaystyle k} גדול פירושו שקשה יותר לרמות וההסתברות שהרמאי יתגלה מתקרבת ל-1 די מהר ככל ש- k {\displaystyle k} גדל. נניח שמספר החשבון של אליס הוא u {\displaystyle u} עם מונה כלשהו v {\displaystyle v} , כך שהבנק ואליס יודעים מהם. נניח שנתונות שתי פונקציות חד-כיווניות חסינות התנגשויות f {\displaystyle f} ו- g {\displaystyle g} שמפיקות פלט באורך קבוע (אפשר להשתמש ב-SHA-2 למשל). המטבע של אליס יהיה אחד מ- k {\displaystyle k} הרביעיות ( a i , c i , d i , r i ) {\displaystyle (a_{i},c_{i},d_{i},r_{i})} של מספרים שלמים מודולו n {\displaystyle n} שהיא בוחרת באופן אקראי. רביעיות אלה נקראות "מועמדים". כדי להחתים את הבנק על המטבע היא מבצעת כדלהלן: היא מסתירה את k {\displaystyle k} המועמדים באמצעות פונקציית ההצפנה שלה: B i = E r i (   f ( x i , y i )   ) {\displaystyle B_{i}=E_{r_{i}}(\ f(x_{i},y_{i})\ )} כאשר x i = g ( a i , c i ) {\displaystyle x_{i}=g(a_{i},c_{i})} וכן y i = g (   a i ⊕ ( u   ‖   ( v + i )   ) , d i ) {\displaystyle y_{i}=g(\ a_{i}\oplus (u\ \|\ (v+i)\ ),d_{i})} ושולחת אותם לבנק. הסימן ⊕ {\displaystyle \oplus } מייצג XOR והסימן ‖ {\displaystyle \|} מייצג שרשור מחרוזות. הבנק בוחר קבוצת אתגר אקראית R {\displaystyle R} באורך k / 2 {\displaystyle k/2} מועמדים מתוך הרשימה שקיבל ושולח אותה לאליס. אליס חושפת בפני הבנק את ( a i , c i , d i , r i ) {\displaystyle (a_{i},c_{i},d_{i},r_{i})} עבור כל i ∈ R {\displaystyle i\in R} . הבנק בודק עבור כל רביעייה שמתקבל B i {\displaystyle B_{i}} כיוון שהוא יודע מהם u {\displaystyle u} ו- v {\displaystyle v} . לכן אם אליס מנסה לרמותו הסיכויים שהוא יגלה את הרמאות מאוד גבוהים. לאחר שנחה שדעתו של הבנק והוא משוכנע שאליס אינה רמאית הוא חותם על המטבע הממוסך S b ( Π i ∉ R B i ) {\displaystyle S_{b}(\Pi _{i\not \in R}B_{i})} ומנכה את הסכום המתאים מחשבונה. הרעיון כאן הוא שהבנק צריך להחסיר מהחתימה את כל הערכים שאליס חשפה בשלב ההוכחה, כי הם אינם יכולים יותר לשמש כמטבע לגיטימי. הסימן Π {\displaystyle \Pi } היא פעולה כלשהי שהתכונה שלה היא שהיא נשמרת גם לאחר תהליך הפענוח של אליס. במאמר המקורי הפעולה הייתה כפל בגלל שסכמת החתימה הייתה חישוב שורש ממעלה שלישית וההצפנה של אליס הייתה כפל ב- r i 3 {\displaystyle r_{i}^{3}} . כעת מפעילה אליס את פונקציית הפענוח שלה כדי לחשוף את הערך C = S b ( Π i ∉ R f ( x i , y i ) ) {\displaystyle C=S_{b}(\Pi _{i\not \in R}f(x_{i},y_{i}))} , בודקת שהתוצאה נכונה על ידי הפעלת פונקציית האימות V b {\displaystyle V_{b}} ומקדמת את המונה v = v + k {\displaystyle v=v+k} . עבור ϵ {\displaystyle \epsilon } קבוע כלשהו, אם פחות מ- ( 1 − ϵ ) {\displaystyle (1-\epsilon )} מתוך k {\displaystyle k} המועמדים המוסתרים B i {\displaystyle B_{i}} אינו במבנה הנכון (   E r i ( f ( g ( a i , c i ) , g ( a i ⊕ ( u ‖ ( v + i ) ) , d i ) ) )   ) {\displaystyle (\ E_{r_{i}}(f(g(a_{i},c_{i}),g(a_{i}\oplus (u\|(v+i)),d_{i})))\ )} (יש לזכור שהבנק יודע מהו u ‖ ( v + i ) {\displaystyle u\|(v+i)} ), אז אליס תיתפס כמי שניסתה לרמות בהסתברות של 1 − exp ⁡ ( − c ϵ k ) {\displaystyle 1-\exp(-c\epsilon k)} . כעת בידי אליס מטבע דיגיטלי אותו היא יכולה לבזבז כדלהלן: היא שולחת את C {\displaystyle C} לסוחר. הסוחר שולח לאליס מחרוזת אתגר אקראית בינארית באורך k / 2 {\displaystyle k/2} סיביות. אם הסיבית ה- i {\displaystyle i} היא 1 אליס צריכה לשלוח לבוב את a i , c i , y i {\displaystyle a_{i},c_{i},y_{i}} ואם הסיבית ה- i {\displaystyle i} היא 0 היא אמורה לשלוח את x i , a i ⊕ ( u   ‖   ( v + i ) ) {\displaystyle x_{i},a_{i}\oplus (u\ \|\ (v+i))} ואת d i {\displaystyle d_{i}} . הסוחר בודק שהערכים שקיבל תואמים את הערך של C {\displaystyle C} . היות שההנחה היא שהפונקציות f {\displaystyle f} ו- g {\displaystyle g} בלתי הפיכות והחתימה של הבנק נחשבת אמינה, אם אליס מרמה בשלב זה היא תיתפס בהסתברות גבוהה. הסוחר שולח תעתיק של השיחה שלו עם אליס לבנק שמזכה אותו בסכום המתאים ושומר את תעתיק השיחה בקובץ לצורך תיעוד. האנונימיות של אליס באינטראקציה שלה עם הסוחר נשמרת. המידע המזהה היחידי שהיא מסרה הוא מספר החשבון שלה כשהוא ממוסך עם ערך אקראי a i {\displaystyle a_{i}} לכן הסוחר אינו יכול לעשות בו כל שימוש. הערכים c i , d i {\displaystyle c_{i},d_{i}} נחוצים כך שגם אם יתגלה שהחד-כיווניות של הפונקציה g {\displaystyle g} חלשה מהצפוי ומישהו הצליח לפצח אותה הוא יישאר עם מספר עצום של זוגות אפשריים ( a i , c i ) {\displaystyle (a_{i},c_{i})} וכן ( a i ⊕ ( u   ‖   ( v + i ) ) , d i ) {\displaystyle (a_{i}\oplus (u\ \|\ (v+i)),d_{i})} שהפונקציה g {\displaystyle g} ממפה לערכים x i , y i {\displaystyle x_{i},y_{i}} . כך שגם אם הסוחר מצליח להפוך את g {\displaystyle g} הוא לא יצליח לחלץ מידע מועיל לגבי זהות אליס. אם אליס תנסה לבזבז את המטבע C {\displaystyle C} שוב, יקרה דבר מעניין, הבנק ישווה את תעתיק השיחה מהרכישה החדשה עם התעתיק השמור מהרכישה הקודמת ובגלל שהאתגר אקראי יש סבירות גבוהה שיכול להיות אינדקס i {\displaystyle i} כלשהו כך שסיבית האתגר ה- i {\displaystyle i} הייתה 1 בעותק הראשון ו-0 בעותק השני כי שניהם אקראיים. לכן לא רק שהבנק יודע כעת שנעשה ניסיון לבזבוז כפול, אם הוא יבצע XOR של שני תעתיקי השיחות שבידו הוא יקבל את u   ‖   ( v + i ) {\displaystyle u\ \|\ (v+i)} , שבעצם חושף את מספר חשבונה של אליס ואת זהותה. הבעיה בשיטה זו היא שבעוד שהבנק מסוגל לגלות אם אליס ניסתה להונות אותו, הוא עצמו יכול להמציא תעתיק שיחה בדוי כדי להפליל אותה, לכן מעצם טענה זו הבנק לא יוכל לשכנע אף אחד אחר שאליס אכן רמאית (זוהי תכונה מהותית בהוכחה באפס ידיעה). אפשר לתקן את הבעיה על ידי הוספת חתימה דיגיטלית של אליס כדי להגן עליה מפני רמאות מצד הבנק. כאשר אליס בוחרת את המועמדים היא מגרילה k {\displaystyle k} זוגות נוספים של ערכים ( p i , q i ) {\displaystyle (p_{i},q_{i})} משרשרת אותם ביחד g ( p 1 , q 1 )   ‖   ⋯   ‖   g ( p k , q k ) {\displaystyle g(p_{1},q_{1})\ \|\ \cdots \ \|\ g(p_{k},q_{k})} , חותמת על התוצאה ושולחת הכול לבנק. בנוסף כאשר היא מחשבת את f ( x i , y i ) {\displaystyle f(x_{i},y_{i})} היא מחליפה את u {\displaystyle u} בביטוי u   ‖   p i   ‖   q i {\displaystyle u\ \|\ p_{i}\ \|\ q_{i}} . ואז אם הבנק יכול לספק k / 2 + 1 {\displaystyle k/2+1} זוגות נכונים ( p i , q i ) {\displaystyle (p_{i},q_{i})} בידו ההוכחה שאליס ניסתה לרמות. אך התועלת כאן היא שהבנק אינו יכול לשנות את הערכים g ( p i , q i ) {\displaystyle g(p_{i},q_{i})} בגלל החתימה של אליס עליהם. גם אם נניח שהבנק מסוגל לפצח את g {\displaystyle g} כל מה שאליס צריכה לעשות זה לחשוף את הזוג המתאים ( p i , q i ) {\displaystyle (p_{i},q_{i})} שברשותה כדי להוכיח שנעשה ניסיון לרמותה. אפשר להרחיב את השיטה להמחאה בנקאית דיגיטלית שאינה ניתנת למעקב או התחקות אחר הרוכש. אליס יכולה לבקש מהבנק "פנקס" המחאות שבכל אחד מהם היא יכולה לבזבז עד הסכום הנקוב בו והבנק ינכה מחשבונה בהתאם את הסכום שבזבזה, אך הבנק לא יידע היכן היא השתמשה בהמחאה או באיזה סכום. השיטה המתוארת עובדת מבחינה תאורטית אך אינה פרקטית בגלל המחיר הכבד שהצדדים צריכים לשלם מבחינה חישובית כדי להגיע לתוצאה המיוחלת. בשיטות חדשות מנסים להגיע לרמת ביטחון דומה ללא הצורך בתקורה הגבוהה של פרוטוקול Cut-and-Choose. חתימה דיגיטלית DSA וכן חתימה דיגיטלית של שנור מבוססים על הצפנת אל-גמאל שהיא מערכת מפתח ציבורי המבוססת על בעיית הלוגריתם הבדיד. פונקציית החתימה של שנור בגרסה הלא עיוורת פשוטה יותר מ-DSA והיא פועלת באופן כללי כדלהלן: בהינתן המפתח הציבורי ( p , q , g , y ) {\displaystyle (p,q,g,y)} כאשר ( p , q , g ) {\displaystyle (p,q,g)} הם פרמטרים ציבוריים המשותפים לכל המשתמשים. p {\displaystyle p} ו- q {\displaystyle q} הם מספרים ראשוניים מתארים תת-חבורה Z q ∗ {\displaystyle \mathbb {Z} _{q}^{*}} של Z p ∗ {\displaystyle \mathbb {Z} _{p}^{*}} מסדר q {\displaystyle q} עם היוצר g {\displaystyle g} כאשר q | ( p − 1 ) {\displaystyle q|(p-1)} . המפתח הציבורי הוא y = g − x  mod  p {\displaystyle y=g^{-x}{\text{ mod }}p} ואילו המפתח הפרטי הוא x {\displaystyle x} . אם H {\displaystyle H} היא פונקציית גיבוב מוסכמת המפיקה פלט בטווח [ 1 , q − 1 ] {\displaystyle [1,q-1]} , אז תהליך החתימה על המסר m {\displaystyle m} מתבצע כך. החותם מגריל שלם אקראי k {\displaystyle k} בטווח [ 1 , q − 1 ] {\displaystyle [1,q-1]} ומחשב את ( r , e , s ) {\displaystyle (r,e,s)} כדלהלן: r = g k  mod  p {\displaystyle r=g^{k}{\text{ mod }}p} e = H ( m   ‖   r )  mod  q {\displaystyle e=H(m\ \|\ r){\text{ mod }}q} s = ( k + x e )  mod  q {\displaystyle s=(k+xe){\text{ mod }}q} הסמל " ‖ {\displaystyle \|} " מייצג שרשור. לאימות החתימה באמצעות המפתח הציבורי של החותם בודקים שמתקיים: r ≡ ( g s ⋅ y e )  mod  p {\displaystyle r\equiv (g^{s}\cdot y^{e}){\text{ mod }}p} או e = H ( m , ( g s ⋅ y e )  mod  p ) {\displaystyle e=H(m,(g^{s}\cdot y^{e}){\text{ mod }}p)} . כדי להפוך את החתימה המתוארת לחתימה עיוורת (נניח אליס מעוניינת להחתים את הבנק על המטבע C {\displaystyle C} ), מבצעים את הפרוטוקול של אוקמוטו המבוסס על שנור כדלהלן: הבנק בוחר את k {\displaystyle k} כמו קודם ומייצר את r = g k  mod  p {\displaystyle r=g^{k}{\text{ mod }}p} ושולח את r {\displaystyle r} לאליס. אליס מגרילה שלמים אקראיים a {\displaystyle a} ו- b {\displaystyle b} בטווח [ 1 , q − 1 ] {\displaystyle [1,q-1]} ומחשבת את ( r ′ , e ′ , e ) {\displaystyle (r',e',e)} כדלהלן: r ′ = ( r ⋅ g − a ⋅ y − b )  mod  p {\displaystyle r'=(r\cdot g^{-a}\cdot y^{-b}){\text{ mod }}p} e ′ = H ( C   ‖   r ′ )  mod  q {\displaystyle e'=H(C\ \|\ r'){\text{ mod }}q} e = ( e ′ + b )  mod  q {\displaystyle e=(e'+b){\text{ mod }}q} את הערכים הללו שולחת אליס לבנק. הבנק מחשב את s = ( k + e x )  mod  q {\displaystyle s=(k+ex){\text{ mod }}q} ושולח לאליס את s {\displaystyle s} . אליס מחשבת את s ′ = ( s − a )  mod  q {\displaystyle s'=(s-a){\text{ mod }}q} והזוג ( e ′ , s ′ ) {\displaystyle (e',s')} הם חתימה תקפה על C {\displaystyle C} . כי מתקיים: e ′ = H ( m , ( g s ′ ⋅ y e ′ )  mod  p ) {\displaystyle e'=H(m,(g^{s'}\cdot y^{e'}){\text{ mod }}p)} חתימת שנור היא שילוב של פרוטוקול אימות של שנור יחד עם רעיון של עמוס פיאט ועדי שמיר. פונקציית הגיבוב לצורך חתימת שנור לא חייבת להיות חסינת התנגשויות, מחקרים מראים שבניגוד ל-DSA אפשר להסתפק בחתימת שנור בפונקציית גיבוב חלשה כמו SHA-1 וכן אפשר להסתפק בערך גיבוב קצר יותר בכעשרים וחמש אחוז. הביטחון של חתימת שנור ניתן להוכחה במסגרת מודל אורקל אקראי תחת ההשערה שבעיית הלוגריתם הבדיד קשה. ב-2012 בוצע מחקר באשר לביטחון המדויק של חתימת שנור והטענה היא שלפי למת הפיצול קיים איבוד זמן בפקטור של O ( q h ) {\displaystyle O(q_{h})} כאשר q h {\displaystyle q_{h}} הוא מספר השאילתות לאורקל האקראי. במילים אחרות אם קיים זייפן שיכול לזייף חתימת שנור בהסתברות ϵ F {\displaystyle \epsilon _{F}} אז אפשר יהיה לחשב את הלוגריתם הבדיד בהסתברות קבועה על ידי חזרה לאחור O ( q h / ϵ F ) {\displaystyle O(q_{h}/\epsilon _{F})} פעמים, תחת הנחות נוספות אפשר להגיע לרדוקציה של q h 2 / 3 {\displaystyle q_{h}^{2/3}} לכל היותר בשיעור ההצלחה-זמן. נתון q = 179 , p = 359 , g = 164 {\displaystyle q=179,p=359,g=164} וכן המפתח הפרטי של אליס הוא x = 81 {\displaystyle x=81} והמפתח הציבורי הוא y = 245 {\displaystyle y=245} . הבנק בוחר שלם אקראי k = 45 {\displaystyle k=45} ושולח לאליס את האתגר r = 164 45 ≡ 120  (mod  359 ) {\displaystyle r=164^{45}\equiv 120{\text{ (mod }}359)} . אליס בוחרת את a = 64 , b = 120 {\displaystyle a=64,b=120} ונניח שהמטבע הוא הערך c = 12345678 {\displaystyle c=12345678} . היא מחשבת את 120 ⋅ 164 − 64 ⋅ 245 − 120 ≡ 158  (mod  359 ) {\displaystyle 120\cdot 164^{-64}\cdot 245^{-120}\equiv 158{\text{ (mod }}359)} . נניח לצורך הפשטות שתוצאת הגיבוב היא H ( c   ‖   158 ) = 54  (mod  179 ) {\displaystyle H(c\ \|\ 158)=54{\text{ (mod }}179)} . הבנק מחזיר לאליס את s = ( 45 + 174 ⋅ 81 )  mod  179 = 177 {\displaystyle s=(45+174\cdot 81){\text{ mod }}179=177} כך שמתקיים 120 ≡ ( 174 177 ⋅ 245 174 )  (mod  359 ) {\displaystyle 120\equiv (174^{177}\cdot 245^{174}){\text{ (mod }}359)} אליס מחלצת את חתימת הבנק על המטבע כך: תחילה s ′ = 177 − 64 = 113 {\displaystyle s'=177-64=113} ואז הצמד ( 113 , 54 ) {\displaystyle (113,54)} הוא חתימה תקפה על c {\displaystyle c} כי מתקיים H ( c   ‖   ( ( 164 113 ⋅ 245 54 ) = 64  mod  359 ) ) = 54 {\displaystyle H(c\ \|\ ((164^{113}\cdot 245^{54})=64{\text{ mod }}359))=54} קיימות מספר שיטות חתימה עיוורת חדשות יעילות ובטוחות יותר, בהן אפשר לציין את Camenisch-Lysyanskaya שייחודה בכך שניתן לחלץ חתימה על קבוצה של מסרים בבת אחת, ולהוכיח תקפות על כל אחד מהם בנפרד. הרעיון שימושי גם למטבע דיגיטלי תוך שמירה על אנונימיות המשתמש. כמו כן קיימת שיטת חתימה עיוורת המסתמכת על תחום חדש בקריפטוגרפיה הקרוי מיפוי ביליניארי. בנוסף קיימת מחלקה של חתימה עיוורת שכאמור מענישה את הלקוח שמנסה לבזבז פעמיים בחשיפת זהותו. שיטה אחת כזו היא חתימה עיוורת של סטפן ברנדס שהוטמעה בטכנולוגיית אימות חדשה מבית מיקרוסופט הנקראת U-Prove. הרעיון של ברנד בעצם לוקח את החיסרון הידוע של חתימת DSA שבה אסור להשתמש במפתח הארעי יותר מפעם אחת לחתימה על שני מסמכים שונים והופך אותו ליתרון, בזה שהוא משתמש בו כדי לחשוף את זהות המשתמש במקרה של בזבוז כפול. הבנק B {\displaystyle {\mathcal {B}}} בוחר באקראי שלושה יוצרים ( g , g 1 , g 2 ) {\displaystyle (g,g_{1},g_{2})} של החבורה G q {\displaystyle G_{q}} מסדר q {\displaystyle q} ראשוני, שלם אקראי x ∈ Z q ∗ {\displaystyle x\in \mathbb {Z} _{q}^{*}} וכן שתי פונקציות גיבוב H , H 0 {\displaystyle H,H_{0}} כאשר H {\displaystyle H} משמשת ליצירה ואימות חתימת הבנק ואילו H 0 {\displaystyle H_{0}} משמשת לצורך האתגר בפרוטוקול התשלום. הערכים הציבוריים המשותפים לכל הלקוחות הם G q {\displaystyle G_{q}} וכן הראשוניים p {\displaystyle p} ו- q {\displaystyle q} כאשר G q {\displaystyle G_{q}} היא תת-קבוצה של Z p ∗ {\displaystyle \mathbb {Z} _{p}^{*}} וכן היוצרים ופונקציות הגיבוב. המפתח הסודי של הבנק הוא x {\displaystyle x} . כרגיל ההנחה היא שהבנק מנהל מסד נתונים המכיל פרטים מזהים של כל הלקוחות וכל הסוחרים ובנפרד מסד נתונים המכיל מעקב אחרי כל המשיכות וההפקדות. מטבע דיגיטלי יכיל זוג הערכים ( A , B ) ∈ G q × G q {\displaystyle (A,B)\in G_{q}\times G_{q}} שבהמשך יוסבר איך מחשבים אותם והחתימה של הבנק עליהם sign ( A , B ) = ( z , a , b , r ) {\displaystyle {\text{sign}}(A,B)=(z,a,b,r)} כך שמתקיים g r = h H ( A , B , z , a , b ) a {\displaystyle g^{r}=h^{H(A,B,z,a,b)}a} , וכן A r = z H ( A , B , z , a , b ) b {\displaystyle A^{r}=z^{H(A,B,z,a,b)}b} . ההוכחה שהמטבע שייך ללקוח היא אם הוא יכול להוכיח שידוע לו הייצוג הלוגריתמי של A {\displaystyle A} ו- B {\displaystyle B} ביחס ליוצרים g 1 {\displaystyle g_{1}} ו- g 2 {\displaystyle g_{2}} . בתהליך פתיחת חשבון הלקוח מזהה עצמו מול הבנק באמצעי זיהוי רגילים, מייצר ערך אקראי u 1 {\displaystyle u_{1}} ומחשב את I = g 1 u 1 {\displaystyle I=g_{1}^{u_{1}}} אם g 1 u 1 ⋅ g 2 ≠ 1 {\displaystyle g_{1}^{u_{1}}\cdot g_{2}\neq 1} הוא משדר את I {\displaystyle I} לבנק ושומר בסוד את u 1 {\displaystyle u_{1}} . הבנק מחשב ומחזיר ללקוח את z = ( I ⋅ g 2 ) x {\displaystyle z=(I\cdot g_{2})^{x}} . המשיכה מתבצעת בשלושה מהלכים, לאחר שהלקוח זיהה עצמו מול הבנק בדרכים רגילות: הבנק מגריל ערך אקראי w {\displaystyle w} ושולח ללקוח את a = g w {\displaystyle a=g^{w}} ואת b = ( I ⋅ g 2 ) w {\displaystyle b=(I\cdot g_{2})^{w}} . הלקוח מייצר מטבע; בוחר שלושה ערכים אקראיים ( s , x 1 , x 2 ) {\displaystyle (s,x_{1},x_{2})} ומחשב את A = ( I ⋅ g 2 ) s {\displaystyle A=(I\cdot g_{2})^{s}} , את B = g 1 x 1 g 2 x 2 {\displaystyle B=g_{1}^{x_{1}}g_{2}^{x_{2}}} וכן z ′ = z s {\displaystyle z'=z^{s}} . כמו כן בוחר שני ערכים אקראיים נוספים u , v {\displaystyle u,v} ומחשב את a ′ = a u g v {\displaystyle a'=a^{u}g^{v}} וכן b ′ = b s u A v {\displaystyle b'=b^{su}A^{v}} ואז מחשב את האתגר c ′ = H ( A , B , z ′ a ′ , b ′ ) {\displaystyle c'=H(A,B,z'a',b')} ושולח לבנק את c = c ′ / u {\displaystyle c=c'/u} מודולו q {\displaystyle q} . הבנק מחזיר ללקוח תגובה המכילה את r = c x + w {\displaystyle r=cx+w} מודולו q {\displaystyle q} ומחייב את חשבון הלקוח בהתאם. הלקוח U {\displaystyle {\mathcal {U}}} מקבל את חתימת הבנק רק אם מתקיים g r = h c a {\displaystyle g^{r}=h^{c}a} וכן ( I ⋅ g 2 ) r = z c b {\displaystyle (I\cdot g_{2})^{r}=z^{c}b} . אם כן הוא מחשב את r ′ = r u + v {\displaystyle r'=ru+v} מודולו q {\displaystyle q} . בפרוטוקול זה מספר המטבעות לעולם לא יעבור את מספר המשיכות לכן הלקוח לא יכול לייצר לעצמו מטבעות במיוחד לאור העובדה שכדי להצליח בכך הוא חייב לדעת את הייצוג של המטבע ביחס ליוצרים שזו בעיה קשה הנגזרת מבעיית הלוגריתם הבדיד. וההוכחה דומה להוכחה של פרוטוקול האימות של שנור. תכונה מעניינת נוספת היא שהפרוטוקול נחשב לחתימה עיוורת חלקית כי הלקוח יכול להסתיר את המעטפת החיצונית של המטבע אבל לא את המבנה הפנימי שלו. כאשר U {\displaystyle {\mathcal {U}}} רוצה לבזבז את המטבע אצל S {\displaystyle {\mathcal {S}}} הוא מבצע כדלהלן: שולח לסוחר את המטבע ⟨ ( A , B ) , sign ( A , B ) ⟩ {\displaystyle \langle (A,B),{\text{sign}}(A,B)\rangle } . הסוחר מחשב את d = H 0 ( A   ‖   B   ‖   I D ) {\displaystyle d=H_{0}(A\ \|\ B\ \|\ ID)} כאשר I D {\displaystyle ID} מכיל פרטים מזהים של הסוחר כמו גם תאריך העסקה. הלקוח מחשב ושולח ל- S {\displaystyle {\mathcal {S}}} את המענה r 1 = d ( u 1 s ) + x 1 {\displaystyle r_{1}=d(u_{1}s)+x_{1}} ואת r 2 = d s + x 2 {\displaystyle r_{2}=ds+x_{2}} (מודולו q {\displaystyle q} ). הסוחר מקבל את המטבע כלגיטימי רק אם שני הדברים הבאים מתקיימים: החתימה של הבנק תקפה וכן שמתקיים g 1 r 1 g 2 r 2 = A d B {\displaystyle g_{1}^{r_{1}}g_{2}^{r_{2}}=A^{d}B} . אם הלקוח יודע את פרטי הסוחר מראש אפשר לצמצם את פרוטוקול התשלום למהלך אחד שכן הוא יכול לחשב את d {\displaystyle d} לבדו. ברור שנכונות d {\displaystyle d} חשובה לסוחר ולא ללקוח כי תקפותו תקבע אם הבנק יכבד את העסקה ויזכה את הסוחר בהתאם. הסוחר יכול לאחר מכן לשלוח לבנק את תעתיק העסקה הכולל את A , B , sign ( A , B ) , ( r 1 , r 2 ) {\displaystyle A,B,{\text{sign}}(A,B),(r_{1},r_{2})} וכן התאריך הכלול בה. הבנק לא יכבד את העסקה אם A = 1 {\displaystyle A=1} , אחרת הוא מחשב את d {\displaystyle d} בעזרת זהותו של הסוחר הרשומה במסד הנתונים של הבנק ותעתיק העסקה. ומוודא שמתקיים g 1 r 1 g 2 r 2 = A d B {\displaystyle g_{1}^{r_{1}}g_{2}^{r_{2}}=A^{d}B} וכן שהחתימה שלו על המטבע תקפה ואם הבדיקות עלו בהצלחה הוא מפקיד את המטבע בחשבונו של הסוחר. אם המטבע כבר רשומה במאגרי הבנק משמע אחד מהשניים או ש- S {\displaystyle {\mathcal {S}}} מנסה להפקיד את אותה מטבע פעמיים או שנעשה ניסיון לבזבוז כפול מצד U {\displaystyle {\mathcal {U}}} . קל לזהות את המקרה שהסוחר מנסה להפקיד את אותה מטבע פעמיים כי תעתיק העסקה זהה לחלוטין. במקרה שתעתיק העסקה שונה הבנק יכול לחשוף את זהות U {\displaystyle {\mathcal {U}}} כי בידיו כעת ( d , r 1 , r 2 ) {\displaystyle (d,r_{1},r_{2})} מהעסקה החדשה וכן ( d ′ , r 1 ′ , r 2 ′ ) {\displaystyle (d',r_{1}',r_{2}')} מעסקה קודמת. הוא יכול לחשב את g 1 ( r 1 − r 1 ′ ) / ( r 2 − r 2 ′ ) {\displaystyle g_{1}^{(r_{1}-r_{1}')/(r_{2}-r_{2}')}} . התוצאה היא למעשה מספר החשבון של הלקוח שניסה לבזבז את המטבע פעמיים והוא מהווה הוכחה לכך. Chaum, David (1983). "Blind signatures for untraceable payments" (PDF). Advances in Cryptology Proceedings of Crypto. 82 (3): 199-203 "Untraceable Electronic Cash", David Chaum, Amos Fiat & Moni Naor, CRYPTO 1988: Advances in Cryptology — CRYPTO’ 88 pp 319-327 Provably Secure and Practical Identification Schemes and Corresponding Signature Schemes, Tatsuaki Okamoto, Crypto’92, LNCS 740, Springer-Verlag, pp. 31–53, 1992 Provably Secure and Practical Identification Schemes and Corresponding Signature Schemes, Tatsuaki Okamoto, Preproceedings of Crypto '92. Fiat; Shamir (1986). "How To Prove Yourself: Practical Solutions to Identification and Signature Problems" (PDF). Proceedings of CRYPTO '86. Hash function requirements for Schnorr signatures Seurin, Yannick (2012-01-12). "On the Exact Security of Schnorr-Type Signatures in the Random Oracle Model" (PDF). Cryptology ePrint Archive. International Association for Cryptologic Research. Retrieved 2014-08-11. Jan Camenisch, Anna Lysyanskaya, A Signature Scheme with Efficient Protocols, Lecture Notes in Computer Science (LNCS, volume 2576) Jan Camenisch, Anna Lysyanskaya, Signature Schemes and Anonymous Credentials from Bilinear Maps Lecture Notes in Computer Science book series (LNCS, volume 3152) Stefan Brands, Untraceable Off-line Cash in Wallets with Observers, Proceeding CRYPTO '93 Proceedings of the 13th annual international cryptology conference on Advances in cryptology Pages 302-318