חתימה דיגיטלית רבין

אלגוריתם חתימה דיגיטלית רבין הוא מנגנון חתימה דיגיטלית עם שחזור, המבוסס על הצפנת מפתח פומבי של רבין. אלגוריתם רבין מבוסס על הפונקציה החד-כיוונית הנובעת מהקושי שבבעיית שורש ריבועי מודולו שלם פריק. האלגוריתם הומצא על ידי פרופסור מיכאל רבין (האוניברסיטה העברית בירושלים) במהלך ביקורו כפרופסור אורח, במכון הטכנולוגי של מסצ'וסטס בשנת 1979.
אלגוריתם חתימה דיגיטלית של רבין דומה לאלגוריתם חתימה דיגיטלית RSA ובנוי ממודולוס  כאשר  ו- הם ראשוניים (גדולים), אולם כאן המעריך הפומבי  הוא שלם זוגי קטן  (בגרסה בסיסית). המפתח הפרטי של החותם הוא צמד הגורמים , המפתח הפומבי הוא . החתימה על המסר היא בעצם השורש הריבועי של המסר (לאחר המרתו למספר שלם בדרך מוסכמת) ואילו אימות החתימה הוא הבדיקה שאכן ערך זה הוא שורש ריבועי. הבדיקה האם שלם כלשהו הוא שורש ריבועי מודולו  קלה למדי בעוד שהפעולה ההפוכה קרי, מציאת שורש ריבועי מודולו  קשה מאוד, אם הגורמים הראשוניים שלו אינם ידועים.
מרחב החתימה של המסר מוגבל לקבוצה  (קבוצת השאריות הריבועיות מודולו ). כלומר המסר חייב לייצג מספר שלם כזה שקיים עבורו שורש ריבועי מודולו . הבעיה היא שלא כל מסר עונה על דרישה זו, יכול להיות מסר שעבורו יהיה בלתי אפשרי לחשב שורש ריבועי מודולו . ניתן להתגבר על בעיה זו על ידי שרשור ערך אקראי קטן כלשהו למסר בתקווה שהתוצאה תהיה מספר שקיים עבורו שורש ריבועי מודולו . בממוצע מספר הניסיונות הדרושים עד שיימצא ערך כזה הוא 2. בשל חיסרון מהותי זה אלגוריתם רבין הבסיסי המתואר להלן אינו מעשי כל כך. להלן מתוארת גרסה משופרת של אלגוריתם רבין המבוססת על אלגוריתם ויליאמס (H. C. Williams) המבטלת בעיה זו.
בדומה ל-RSA גם אלגוריתם חתימה דיגיטלית של רבין מחייב שימוש בפונקציית יתירות בשל קיומה של בעיה מהותית הקרויה Existential forgery, כיוון שכל שלם  הוא חתימה תקפה עבור המסר , זאת ללא ידיעת המפתח הפרטי של החותם. בשל כך תוקף פונטנציאלי עלול לזייף ערך כלשהו ולטעון כי בידו חתימה תקפה עליו. אף על פי שלתוקף לא תהיה שליטה מלאה על תוכנו של המסר החתום, עובדה זו מהווה איום בלתי מבוטל.

דוגמה במספרים קטנים

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

בטיחות

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

פונקציית יתירות

כאמור פונקציית יתירות היא מרכיב קריטי באלגוריתם רבין. על כן ישנה חשיבות רבה בבחירת פונקציית יתירות בטוחה ככל האפשר. תקן איזו ISO/IEC 9796 מפרט פונקציה כזו. הרעיון הוא שימוש בפונקציה Shaddow function אשר מבצעת תמורה על שני חלקי כל בית במסר (ארבע סיביות כנגד ארבע סיביות) לפי טבלה קבועה. תוצאת הפונקציה משולבת בין בתי המסר לסירוגין. קיימות מספר שיטות הוספת יתירות עבור חתימה דיגיטלית.

גרסה משופרת של האלגוריתם

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

פירוט האלגוריתם

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

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

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

בטיחות

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