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

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה לניווט קפיצה לחיפוש

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

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

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

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

פירוט האלגוריתם הבסיסי[עריכת קוד מקור | עריכה]

תהליך הכנה[עריכת קוד מקור | עריכה]

  • החותם מכין מודולוס כאשר ו- הם ראשוניים שונים וגדולים (ראו להלן).
  • המפתח הפומבי הוא
  • המפתח הפרטי הוא הצמד .

תהליך החתימה על המסר m[עריכת קוד מקור | עריכה]

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

תהליך אימות ושחזור המסר המקורי m[עריכת קוד מקור | עריכה]

בהינתן המפתח הפומבי והחתימה בודקים כדלהלן:

  • מחשבים את .
  • בודקים אם נמצא בטווח המתאים (כלומר נמצא בטווח של פונקציית היתירות).
  • משחזרים את המסר (כלומר על ידי הפעלת הפונקציה ההפוכה של פונקציית היתרות ).

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

דוגמה במספרים קטנים[עריכת קוד מקור | עריכה]

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

בטיחות[עריכת קוד מקור | עריכה]

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

פונקציית יתירות[עריכת קוד מקור | עריכה]

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

גרסה משופרת של האלגוריתם[עריכת קוד מקור | עריכה]

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

פירוט האלגוריתם[עריכת קוד מקור | עריכה]

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

תהליך הכנה[עריכת קוד מקור | עריכה]

  • בוחרים ראשוניים ו- המקיימים וכן
  • מחשבים את .
  • המפתח הפומבי הוא .
  • המפתח הפרטי הוא .

תהליך חתימה על המסר m[עריכת קוד מקור | עריכה]

  • מחשבים את .
  • מחשבים את סימן יעקובי .
  • אם מחשבים את .
  • אם מחשבים את .
  • החתימה על המסר היא .

הערה: מעשית הסיכוי ש- יהיה שווה אפס נמוך ביותר מאחר שמשמעות הדבר היא ש- הוא אחד הגורמים הראשוניים של .

תהליך אימות החתימה ושחזור המסר המקורי m[עריכת קוד מקור | עריכה]

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

דוגמה במספרים קטנים לאלגוריתם המשופר[עריכת קוד מקור | עריכה]

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

בטיחות[עריכת קוד מקור | עריכה]

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

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

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]