חתימה דיגיטלית

**חתימה דיגיטלית** היא שיטה קריפטוגרפית, שמטרתה לאמת את המקוריות והשלמות של הודעה או מסמך דיגיטלי.

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

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

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

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

## דוגמה ליצירת ייחודיות

בחשבון מודולרי, קל יחסית להוציא שורש מודולו מספר ראשוני, אך הוצאת שורש מודולו מכפלה של שני ראשוניים דורשת את היכולת לפרק את המכפלה לגורמים (ואף שקולה אליה מבחינה חישובית), והרי פירוק מספר גדול לגורמיו הראשוניים היא בעיה קשה. עובדות אלה מציעות סכימה לחתימה דיגיטלית: החותם יבחר זוג ראשוניים גדולים, P ו-Q, ויפרסם את המכפלה שלהם N=PQ. ברצונו לחתום על הודעה X, הוא יחשב את השורש הריבועי שלה מודולו N (על ידי חישוב השורשים מודולו P ו-Q, ושילובם באמצעות משפט השאריות הסיני). השורש הוא חתימה, שאותה קל לבדוק על ידי העלאה בריבוע, וקשה חישובית לזייף.

## הגדרה מתמטית
חתימה דיגיטלית מורכבת משלושה אלגוריתמים: אלגוריתם הכנה "Gen", אלגוריתם חתימה "Sign" ואלגוריתם אימות "Verify" המוגדרים כך:
*אלגוריתם הכנת המפתחות מקבל פרמטר ביטחון n ומפיק זוג מפתחות (pk,sk) הראשון נקרא מפתח ציבורי (public key) והשני מפתח פרטי. שניהם באורך n סיביות.
*אלגוריתם החתימה (שיכול להיות הסתברותי) מקבל כקלט את מפתח החתימה sk ואת המסר m\in\{0,1\}^* ומפיק את החתימה \sigma בניסוח רשמי \sigma=\text{Sign}_{sk}(m).
*אלגוריתם האימות, הוא אלגוריתם דטרמיניסטי שהקלט שלו הוא מפתח האימות הציבורי pk, המסר m והחתימה \sigma והפלט שלו הוא הסמל b כאשר b=1 פירושו שהחתימה תקפה ואילו b=0 פירושו שהחתימה לא תקפה. בניסוח רשמי b=\text{Verify}_{pk}(m,\sigma).

לצורך תקינות, עבור כל n ועבור כל זוג מפתחות תואם (pk,sk) שהוכנו באמצעות אלגוריתם ההכנה המתואר ועבור כל מסר m צריך תמיד להתקיים:
:\text{Verify}_{pk}(m,\text{Sign}_{sk}(m))=1.
אלגוריתם החתימה מגודר רק אם המסר m הוא באורך המתאים למשל אם הוא פונקציה של פרמטר הביטחון n אז החתימה תקפה רק אם m הוא באורך \ell(n) לכל היותר. במילים אחרות סכמת החתימה אינה מתאימה כאשר המסר אינו בגודל הרצוי.

שימוש בסכימת חתימה נעשה כך שהחותם S מפעיל את אלגוריתם ההכנה \text{Gen}(n) כדי לקבל את (pk,sk).
החותם שומר את sk בסוד ומפרסם את pk באופן שיהיה אפשרי לוודא את שייכותו אליו. למשל, אפשר לפרסמו באתר אינטרנט או ברשומות ציבוריות כלשהן. כאשר S רוצה לחתום על המסמך m הוא מבצע השמה \sigma\leftarrow\text{Sign}_{sk}(m) ושולח את (m,\sigma) ליעדם; המקבל יכול לבצע בדיקת תקפות על ידי חישוב \text{Verify}_{pk}(m,\sigma) ובדיקה האם הערך המתקבל הוא 1. מבדיקה זו מוכיחים שני דברים. ש-S הוא המקור וכן ש-m אותנטי ולא חל בו שינוי בידי צד שלישי בזדון או שינוי בגלל תקלה בתקשורת.

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

### ביטחון
בהינתן מפתח ציבורי pk, אדם מוגדר כמי שזייף את החתימה אם הצליח להנפיק מסר m (שלא נחתם בעבר על ידי S) וחתימה \sigma תקפה כך שאלגוריתם האימות יחזיר 1 (שהחתימה אותנטית כאילו נעשתה על ידי השולח S). כאשר לפי המודל המקובל המתקיף רשאי או מסוגל להשיג או לבקש חתימות תקפות של S על מסמכים רבים (בכמות פולינומית) לפי בחירתו. נניח שנתונה סכמת חתימה דיגיטלית \Pi=(\text{Gen},\text{Sign},\text{Verify}), הניסוי \text{Forge} הבא מנסח את הגדרת הביטחון של סכמת החתימה בנוכחות המתקיף \mathcal{A} עם פרמטר הביטחון n כדלהלן:
:ניסוי \boldsymbol{\mathbb{Forge}_{\mathcal{A},\Pi}(n)}
#פונקציית ההכנה \text{Gen}(1^n) מייצרת מפתחות (sk,pk) באורך n.
#המפתח pk ניתן למתקיף \mathcal{A} וכן ניתנת לו גישה לאורקל חתימה שנקרא \text{Sign}_{sk}(\cdot). האורקל הוא מעין קופסה שחורה שהמתקיף מסוגל להפעיל כרצונו ולקבל עבור כל m' שיבחר את \sigma=\text{Sign}_{sk}(m') אך הוא אינו רשאי לראות את sk.
#נניח ש-Q מייצגת את השאילתות שהמתקיף שלח לאורקל. תוצאת הניסוי תוגדר מוצלחת אם מתקיים ש \text{Verify}_{pk}(m,\sigma)=1 וגם m\not\in Q.
לאור הניסוי האמור אפשר להגדיר ביטחון של סכמת חתימה דיגיטלית נגד זיופים לפי מודל מסר נבחר אדפטיבי אם עבור כל אלגוריתם יריב \mathcal{A} קיימת פונקציה זניחה \text{negl} כך שמתקיים:
:\Pr[\text{Forge}_{\mathcal{A},\Pi}(n)=1]\le\text{negl}(n).
במילים אחרות, הכוונה היא שסיכוייו של הזייפן להצליח בזיוף החתימה נמוכים מערך זניח שניתן להתעלם ממנו.

## שימושי חתימה דיגיטלית
### דואר אלקטרוני
* **וידוא זהות שולח [[דואר אלקטרוני]]**. הודעה חתומה דיגיטלית מאשרת את זהות השולח, ומוודאת שלא מדובר בהודעה מזויפת.
* **וידוא הקריאה של ההודעה**. באמצעות החתימה האלקטרונית ומנגנון אישור S/MIME אפשר לוודא ששום אדם זולת הנמען לא קרא באמצע את הודעת הדואר ואם היא נקראה מי היו אנשים והמועדים. כל אלו מגיעים בדואר חוזר לשולח.
* **הצפנה**. שיטות שונות של חתימה דיגיטלית מאפשרות להצפין באמצעות המפתח הפומבי כך שרק בעל המפתח הפרטי יוכל לפענח את ההודעה. לצורך כך אלגוריתם חתימת ואימות ההודעה צריך להכיל שלב "הפיך", לדוגמה בחתימה מבוססת על חשבון מודולרי על מכפלה של שני גורמים ראשוניים, בהינתן הודעה X ונמען עם מפתח פומבי N (שמוגדר להיות מכפלה של P ו-Q ראשוניים גדולים ידועים רק לנמען) השולח יחשב את X^2\mod N וישלח, למקבל יהיה קל לחשב את השורש של X ולחלץ ככה את ההודעה.

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

## סוגי חתימה דיגיטלית
מנגנוני חתימה דיגיטלית מתחלקים בין היתר לסוגים אלה (קיימים סוגים נוספים שלא תוארו בפרק):
* **מנגנון חתימה נפרדת:** אלגוריתם חתימה דיגיטלית שבו החתימה מוצמדת למסמך כקובץ נפרד כאשר המסמך עצמו יכול להיות קריא. מנגנון זה מחייב קבלת המסמך המקורי כקלט לצורך אימות החתימה.
* **מנגנון חתימה מבוררת:** מנגנון זה מחייב מעורבות של צד שלישי נאמן הן בתהליך החתימה והן בתהליך האימות. מנגנון זה ייחודי בכך שהוא המאפשר גם שימוש בהצפנה סימטרית בלבד, אך מחייב שימוש באלגוריתם שיתוף מפתח.
* **מנגנון חתימה חד פעמית:** אלגוריתם מבוסס פונקציית גיבוב שמתאים לחתימה על מסמך אחד בלבד. כלומר, עבור כל מסמך דרושים מפתחות חתימה ואימות שונים. חתימה זו במהותה מאפשרת לתוקף לזייפה בקלות אם נעשה בה שימוש לחתימה על יותר ממסמך אחד. דוגמאות לחתימה כזו היא חתימת למפורט ואלגוריתם חתימה חד פעמית של רבין.
***חתימת סף:** מנגנון המאפשר להחתים שתי ישויות או יותר על מסמך באופן כזה שניתן לאמת את החתימה של כל הישויות על המסמך, אך אף אחד מהם בנפרד לא יוכל לבצע חתימה דיגיטלית תקפה של המסמך לבדו. יש קשר בין רעיון זה לבין הצפנת סף וכן לחישוב רב משתתפים משמר סודיות. בהקשר של חתימה דיגיטלית ההגדרה הכללית היא שנתונים n משתתפים שמתוכם רשאית קבוצה של t משתתפים לחתום על מסמך, באופן כזה שלא יהיה באפשרות תת-קבוצה של t-1 משתתפים לעשות זאת.

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

**המפתח המצפין** – נקרא **מפתח ציבורי** בשל שימושו השכיח בשליחת מסרים בפומבי (כחלק משימושו נחשף לציבור), אך בפועל תפקידו ברמת האלגוריתם הוא להצפין את המסרים כך שרק בעל המפתח המפענח התואם לו יוכל לפענח.

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

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

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

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

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

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

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

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

### רשת אמון
רשת אמון (Web of trust) היא אסטרטגיה לאימות מפתח ציבורי שננקטה לראשונה על ידי חברי מיזם PGP; ההתאמה של מפתח ציבורי לאדם מסוים אפשרית בדרך הפשוטה של הכרות אישית. כדי לעשות כן יש להכיר את האדם, לפוגשו ולזהותו באמצעי זיהוי מקובלים (למשל תעודת זהות). לאחר שזוהה האדם בתור האישיות שהוא טוען לה, ניתן לרשום את המפתח הציבורי השייך לו. אולם, בעולם האמיתי דרך זו אינה מעשית כי ארגונים מסחריים רבים נדרשים לעיתים קרובות לתקשר עם עמיתיהם או לקוחותיהם בצד האחר של העולם ולכן הפתרון הוא רשת אמון במסגרתה מקבל המסמך יכול לסמוך על אמינות המפתח הציבורי של השולח אם ואך ורק אם קיימת שרשרת אנשים אשר וידאו זה את מפתחו של זה שבראשה עומדת ישות בעלת אמינות גבוהה. החוליה האחרונה בשרשרת – מקבל המסמך, יכול ליהנות מאמינות המפתח הציבורי של השולח על סמך אמינות השרשרת כולה.

## מניעת הכחשה וחותם-זמן
מניעת הכחשה (Non-repudiation) מסייעת במניעה מגורם כלשהי להכחיש או לכפור בהתחייבות שנתנה או פעולה שביצעה.

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

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

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

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

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

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

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

## ראו גם
* חתימה עיוורת
* מסיבת חתימות
* פונקציית גיבוב קריפטוגרפית
* פרוטוקול אתגר-מענה
* Digital Signature Algorithm

## קישורים חיצוניים

* 
* 
* PKCS #1, תקן חתימה דיגיטלית של מעבדות RSA
* FIPS-186 או DSS, תקן חתימה דיגיטלית של ממשלת ארצות הברית

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

*
קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:דיני ראיות
קטגוריה:אבטחת מידע