חתימה דיגיטלית של שנור

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

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

==תיאור כללי==
החתימה משתמשת במספר ראשוני <math>p</math> כך של-<math>p-1</math> יש גורם ראשוני גדול <math>q</math> (לפחות 140 סיביות) וכן <math>\alpha</math> שהוא בסיס הלוגריתם הדיסקרטי (מודולו <math>q</math>) כך שמתקיים <math>\alpha^q\equiv 1\text{ (mod }p)</math>. אורך החתימה קצר בהרבה מחתימת RSA או DSA (במאמר המקורי זה היה בערך 212 סיביות, אך מן הסתם לאור ההתקדמות הטכנולוגית נדרשים מספרים יותר גדולים). ביטחון החתימה מסתמך על החד-כיווניות של ההעלאה בחזקה <math>y=\alpha^x\text{ (mod }p)</math>. בהנחה שלוגריתם בדיד בסדר גודל כזה קשה מאוד לחישוב. החתימה על המסר נוצרת באופן כזה שכדי לזייפה יש צורך לחשב את הלוגריתם הבדיד.

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

==פירוט מהלכי האלגוריתם==
תחילה לצורך אתחול, מכינים את הראשוניים <math>p</math> ו-<math>q</math> כך שמתקיים <math>p|(q-1)</math>, כאשר <math>p\ge2^{512}</math> וכן <math>q\ge 2^{140}</math>. במקרה זה <math>p</math> נקרא ראשוני חזק. חשוב לזכור שהמספרים הללו נכונים רק לעת כתיבת המאמר המקורי של שנור. יש צורך לעדכן אותם בהתאם. בוחרים יוצר <math>\alpha\in\mathbb{Z}_p</math> מסדר <math>q</math> כך שמתקיים <math>\alpha^q\equiv 1\text{ (mod }p)</math> בתנאי ש-<math>\alpha\ne 1</math>. כמו כן בוחרים פונקציית גיבוב מתאימה <math>h:\mathbb{Z}_q\times\mathbb{Z}\rightarrow\{0,...,2^t-1\}</math> (פונקציית גיבוב שמפיקה פלט באורך <math>t</math> סיביות) כאשר <math>t</math> הוא פרמטר ביטחון (נניח <math>t=80</math>). הפרמטרים הציבוריים המשותפים לכל המשתמשים במערכת יהיו <math>(p,q,\alpha,h)</math>. אותם אפשר להכין על ידי צד שלישי נאמן. אותו צד שלישי יצטרך כנראה גם הוא לחתום בחתימה נפרדת על הערכים הללו כדי להבטיח את שלמותם.

כל משתמש צריך להכין מפתח פרטי ומפתח ציבורי כאשר המפתח הפרטי משמש לחתימה והמפתח הציבורי לאימות. הוא מגריל שלם אקראי <math>s</math> ומחשב את המפתח הציבורי <math>v\equiv \alpha^{-s}\text{ (mod }p)</math> (כלומר <math>s=-\log_{\alpha}v</math>). את <math>s</math> הוא שומר בסוד ואת <math>v</math> הוא מפרסם בדרך כלשהי. הפרוטוקול הבא מתאר את תהליך החתימה של אליס על מסמך כלשהו <math>m</math> ותהליך האימות של בוב.

לצורך החתימה אליס מחשבת את הערכים הבאים:
# מגרילה שלם אקראי <math>r</math> ומחשבת את <math>x\equiv \alpha^r\text{ (mod }p)</math>.
# מחשבת את <math>e=h(x,m)</math> (ערך הגיבוב באורך <math>t</math> סיביות של המסר יחד עם המפתח הארעי).
# מחשבת את <math>y=r+se\text{ (mod }q)</math>.
# החתימה על המסר <math>m</math> היא זוג הערכים <math>(e,y)</math>.

לצורך אימות החתימה בוב משתמש במפתח האימות הציבורי של אליס <math>v</math> כדי לבדוק את הערכים <math>(e,y)</math> שקיבל כך:
# מחשב את <math>x'=\alpha^yv^e\text{ (mod }p)</math>
# בודק שמתקיים <math>e=h(x',m)</math> ורק אם השוויון מתקיים הוא מקבל את החתימה.

אם החתימה נוצרה לפי הפרוטוקול אז זה נכון ש-
<center>
:<math>\boldsymbol{x\equiv\alpha^r\equiv\alpha^{r+se}v^e\equiv\alpha^yv^e\text{ (mod }p)}</math>.
</center>
לצורך החתימה צריך להעלות בחזקה אחת ולבצע כפל מודולרי אחד וחיבור אחד, חלק מהם ניתנים לחישוב מראש. לצורך האימות נדרשות שתי העלאות בחזקה מודולרית. את שתיהן אפשר לבצע בסיבוכיות של <math>1.5\ell+0.25 t</math> פעולות כפל מודולרי כאשר <math>\ell=\lceil\log_2q\rceil</math> (האורך של <math>q</math> בסיביות). הטריק הוא לחשב את ההעלאה בחזקה כדלהלן:
*תחילה מחשבים את <math>\alpha v</math> ואז מקבלים את <math>x'</math> על ידי הפעולות הבאות.
*מציבים <math>i=\ell,z=1</math>
*כל עוד <math>i\ge 0</math> מבצעים <math>i=i-1,z=z^2\alpha^{y_i}v^{e_i}\text{ (mod }p)</math>.
כאשר <math>y_i</math> ו-<math>v_i</math> הן הסיבית ה-<math>i</math> החל מימין לשמאל לפי <math>\textstyle y=\sum_{i=0}^{\ell-1}y_i2^i</math> וכן <math>\textstyle e=\sum_{i=0}^{\ell-1} e_i2^i</math>. 

הערך האקראי <math>r</math> נקרא מפתח ארעי. כלומר זהו מספר חד-פעמי שהוגרל לטובת חתימה על מסר אחד. בגלל התכונות של הלוגריתם הבדיד, כמו בהצפנת אל-גמאל, אסור לחתום על יותר ממסמך אחד עם אותו <math>r</math> כי אז אפשר לגלות את מפתח החתימה. כי אם נניח שבידי המתקיף שתי חתימות (<math>e,y</math>) וכן (<math>e',y'</math>) אז תמיד מתקיים:
<center>
:<math>y'-y=(r'-r)-s(e'-e)</math>
</center>
לכן אם <math>r'=r </math> אבל <math>e'\ne e</math> המתקיף יכול לבודד את <math>s</math> על ידי חילוק ב-<math>(e'-e)</math>.

===דוגמה במספרים קטנים===
נניח שהפרמטרים של המערכת הם (<math>p=467,q=233,\alpha=153</math>) 
*מפתח החתימה הפרטי של אליס הוא <math>s=202</math> 
*מפתח האימות הציבורי הוא <math>v=153^{-202}\equiv 198\text{ (mod }467)</math>. 

כעת לצורך החתימה על המסר <math>m </math> היא בוחרת את <math>r=94</math> ומחשבת את <math>x=153^{94}\equiv 38\text{ (mod }467)</math>. 

נניח שערך הגיבוב על המסר עם המפתח הארעי הוא <math>e=h(m,38)=120</math> החתימה על המסר היא אם כן הזוג (<math>120,102</math>) כי מתקיים:
:<math>38\equiv 153^{94}\equiv 153^{94+202\cdot 120}\cdot 198^{120}\equiv 153^{102}\cdot 198^{120}\text{ (mod }467)</math>
אם אליס תשתמש באותו <math>r=94</math> כדי לחתום על מסר אחר, נניח שהחתימה השנייה שהתקבלה היא (<math>50,175</math>) תוצאה זו התקבלה אם כל הערכים למעט המסר זהים. אז מתוך שתי החתימות אפשר לחשב את:
:<math>(y'-y)=(175-102)=73\text{ (mod }233)</math>, ואת 
:<math>(e'-e)=(50-120)\equiv 163\text{ (mod }233)</math> 
להכפיל בהופכי הכפלי של 163 (מודולו 233) שהוא 223 ומתקבל 
:<math>(73\cdot 223)\text{ mod }233=202</math> 
וזהו מפתח החתימה.

===חתימה עיוורת===

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

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

הביטחון של חתימת שנור ניתן להוכחה במסגרת מודל אורקל אקראי תחת ההשערה שבעיית הלוגריתם הבדיד קשה. ב-2012 בוצע מחקר באשר לביטחון המדויק של חתימת שנור והטענה היא שלפי למת הפיצול (Forking Lemma) קיים איבוד זמן בפקטור של <math>O(q_h)</math> כאשר <math>q_h</math> הוא מספר השאילתות לאורקל האקראי. במילים אחרות אם קיים זייפן שיכול לזייף חתימת שנור בהסתברות <math>\epsilon_F</math> אז אפשר יהיה לחשב את הלוגריתם הבדיד בהסתברות קבועה על ידי חזרה לאחור <math>O(q_h/\epsilon_F)</math> פעמים, תחת הנחות נוספות אפשר להגיע לרדוקציה של <math>q_h^{2/3}</math> לכל היותר בשיעור ההצלחה/זמן.

==ראו גם==
*חתימה דיגיטלית
*צופן אל-גמאל

==הערות שוליים==

קטגוריה:חתימה דיגיטלית
קטגוריה:מספרים ראשוניים