צופן אל-גמאל

הצפנת אל גמאל (ElGamal encryption) היא שיטת הצפנה אסימטרית אקראית שהומצאה ב-1984 על ידי טאהר אל-גמאל, קריפטוגרף אמריקאי ממוצא מצרי. בדומה לפרוטוקול דיפי-הלמן, ביטחונה מסתמך על הקושי המשוער שבבעיית הלוגריתם הבדיד ובעיית דיפי-הלמן. והיא יכולה לשמש הן להצפנה והן לחתימה דיגיטלית. צופן אל-גמאל היה בשימוש בתוכנות חופשיות GPG וכן PGP ומערכות אחרות. אלגוריתם חתימה דיגיטלית DSA הוא וריאציה של חתימה דיגיטלית של אל-גמאל. אף על פי ש-RSA קדמה לה, להצפנת אל-גמאל חשיבות היסטורית מאחר שהיא הצפנת מפתח-ציבורי הנחשבת המשך ישיר למאמר המפורסם של דיפי והלמן מ-1979 "כיוונים חדשים בהצפנה" שהעלה לראשונה את ההצפנה האסימטרית וחתימה דיגיטלית על המפה. אפשר ליישם את הצפנת אל-גמאל מעל שדה סופי F p ∗ {\displaystyle \mathbb {F} _{p}^{*}} או מעל חבורת עקום אליפטי. וכן זוהי ההצפנה הראשונה שיישמה הצפנה הסתברותית, כלומר מוכחת כבטוחה סמנטית תחת מודל התקפת מוצפן-נבחר, בהנחה שבעיית דיפי-הלמן היא בעיה קשה. תיאור הצופן מהספר An Introduction to Mathematical Cryptography. כמו בכל הצפנת מפתח ציבורי, בהצפנת אל-גמאל המקבלת אליס מכינה לעצמה שני מפתחות, מפתח סודי שנשאר אצלה ומיועד לפענוח ומפתח ציבורי שאותו היא שולחת לבוב, או מפרסמת אותו לכל דורש. כדי להכין את המפתחות, תחילה עליה לבחור מספר ראשוני p {\displaystyle p} אקראי גדול. היות שביטחון ההצפנה מסתמך על בעיית הלוגריתם הבדיד בשדה הראשוני אליס צריכה לבחור ראשוני מספיק גדול כך שפתרון הבעיה יהיה "קשה". בביטוי קשה מתכוונים שהניסיון לנחש את המפתח הסודי מתוך המפתח הציבורי השקול לפתרון בעיית הלוגריתם הבדיד, עם מיטב האלגוריתמים הידועים יהיה אסימפטוטית בסיבוכיות מעריכית, כלומר אינו מעשי. וכן צריכה לבחור אלמנט g {\displaystyle g} מסדר ראשוני גבוה שנקרא יוצר. את שני המספרים הללו היא יכולה להכין ולפרסם בעצמה או להשתמש בסט מספרים קבוע שפורסם על ידי צד שלישי נאמן. כעת כמו בפרוטוקול דיפי-הלמן היא בוחרת מספר אקראי a {\displaystyle a} המשמש כמפתח פרטי ומחשבת את הערך: A ≡ g a  (mod  p ) {\displaystyle A\equiv g^{a}{\text{ (mod }}p)} . אליס מפרסמת את המפתח הציבורי A {\displaystyle A} לכל דורש ושומרת בסוד את a {\displaystyle a} . כעת אם בוב מעוניין להצפין מסר m {\displaystyle m} כלשהו עבור אליס, תחילה הוא בוחר מספר חד פעמי k {\displaystyle k} (מודולו p {\displaystyle p} ) איתו הוא מסתיר את המסר ולאחר מכן משמיד אותו. השלם k {\displaystyle k} נקרא מפתח ארעי (ephemeral key) כיוון שנועד אך ורק להצפנת מסר יחיד. בוב לוקח את המסר m {\displaystyle m} עם השלם החד-פעמי k {\displaystyle k} והמפתח הציבורי של אליס A {\displaystyle A} ומחשב את זוג הערכים: c 1 ≡ g k  (mod  p ) {\displaystyle c_{1}\equiv g^{k}{\text{ (mod }}p)} , c 2 ≡ m A k  (mod  p ) {\displaystyle c_{2}\equiv mA^{k}{\text{ (mod }}p)} . כזכור p {\displaystyle p} ו- g {\displaystyle g} הם פרמטרים ציבוריים כך שלכולם יש נגישות אליהם. הטקסט המוצפן שבוב הכין הוא הזוג ( c 1 , c 2 ) {\displaystyle (c_{1},c_{2})} אותם הוא שולח לאליס בערוץ ציבורי. אפשר להבחין בחיסרון בולט של הצופן: הטקסט המוצפן הוכפל בנפחו. כעת אם אליס רוצה לפענח את הטקסט המוצפן שקיבלה היא משתמשת במפתח הפרטי שלה כדי לחשב את: x ≡ c 1 a  (mod  p ) {\displaystyle x\equiv c_{1}^{a}{\text{ (mod }}p)} , וכן מחשבת את x − 1  (mod  p ) {\displaystyle x^{-1}{\text{ (mod }}p)} שהוא ההופכי הכפלי של x {\displaystyle x} מודולו p {\displaystyle p} . ואז מכפילה את c 2 {\displaystyle c_{2}} ב- x − 1 {\displaystyle x^{-1}} כדי לקבל את m {\displaystyle m} או בניסוח פורמלי. m ≡ x − 1 ⋅ c 2  (mod  p ) {\displaystyle m\equiv x^{-1}\cdot c_{2}{\text{ (mod }}p)} . כדי לראות מדוע זה עובד מתבוננים בביטוי x − 1 ⋅ c 2 {\displaystyle x^{-1}\cdot c_{2}} , לאחר הרחבה מתקבל: כדי להבין מדוע k {\displaystyle k} חייב להיות חד-פעמי ואין להשתמש בו להצפנת שני מסרים עם אותו מפתח. נניח שבוב הצפין את m 1 {\displaystyle m_{1}} ו- m 2 {\displaystyle m_{2}} עם k {\displaystyle k} זהה. לאחר הצפנה מתקבל: c 1 ≡ g k  (mod  p ) , c 2 ≡ m 1 A k  (mod  p ) {\displaystyle c_{1}\equiv g^{k}{\text{ (mod }}p),c_{2}\equiv m_{1}A^{k}{\text{ (mod }}p)} עבור המסר הראשון, c 3 ≡ m 2 A k  (mod  p ) {\displaystyle c_{3}\equiv m_{2}A^{k}{\text{ (mod }}p)} עבור המסר השני ( c 1 {\displaystyle c_{1}} נשאר זהה בשתי ההצפנות). נניח שהמצותתת איב משיגה את שני זוגות הטקסטים המוצפנים שנשלחו על ידי בוב ( c 1 , c 2 ) , ( c 1 , c 3 ) {\displaystyle (c_{1},c_{2}),(c_{1},c_{3})} , שימו לב שמתקיים: c 3 ⋅ c 2 − 1 ≡ m 2 ⋅ m 1 − 1 {\displaystyle c_{3}\cdot c_{2}^{-1}\equiv m_{2}\cdot m_{1}^{-1}} מזה נובע ש- m 2 ≡ c 3 ⋅ c 2 − 1 m 1 {\displaystyle m_{2}\equiv c_{3}\cdot c_{2}^{-1}m_{1}} (מודולו p {\displaystyle p} ). כעת אם איב גילתה את m 1 {\displaystyle m_{1}} בדרך כלשהי (למשל אם הוא קבוע כלשהו שידוע מראש) היא יכולה בעזרת מידע זה לחשב את m 2 {\displaystyle m_{2}} . מסיבה זו אסור להצפין שני מסרים עם אותו k {\displaystyle k} . המשימה של איב (המצותתת) היא לנסות לפענח את המסר המוצפן ( c 1 , c 2 ) {\displaystyle (c_{1},c_{2})} שבוב שלח לאליס. היא יודעת מה הם p {\displaystyle p} ו- g {\displaystyle g} וכן מהו המפתח הציבורי של אליס A {\displaystyle A} כי הם נתונים ציבוריים. אם איב מסוגלת לפתור את בעיית דיפי הלמן (או בעיית הלוגריתם הבדיד) בקלות, היא יכולה פשוט לחלץ את המפתח הפרטי של אליס מתוך המפתח הציבורי (לחשב את a {\displaystyle a} מתוך A {\displaystyle A} ) ולפענח את המסר בדיוק כמו שאליס עושה. השאלה היא האם הצפנת אל-גמאל קשה לפיצוח לפחות כפתרון בעיית דיפי-הלמן או שהיא מכילה פגם ניסתר המאפשר לפצח אותה בקלות ללא צורך בפתרון בעיית דיפי-הלמן. ההוכחה לכך מבוססת על דרך המשל, נניח שישנו "אורקל אל-גמאל" ממנו יכולה איב לבקש פענוח באמצעות אלגוריתם אל-גמאל כל טקסט מוצפן שתבחר. אפשר לראות שבעזרתו היא יכולה לפתור את בעיית דיפי-הלמן כדלהלן: כאשר איב מגישה לאורקל את הזוג ( c 1 , c 2 ) {\displaystyle (c_{1},c_{2})} יחד עם מפתח ציבורי A {\displaystyle A} כלשהו היא מקבלת בחזרה את ( c 1 a ) − 1 ⋅ c 2  (mod  p ) {\displaystyle (c_{1}^{a})^{-1}\cdot c_{2}{\text{ (mod }}p)} שזהו כביכול הפענוח המבוקש של הטקסט המוצפן עם המפתח הפרטי המתאים ל- A {\displaystyle A} . כזכור בעיית דיפי-הלמן היא למצוא את g a b {\displaystyle g^{ab}} מתוך A = g a {\displaystyle A=g^{a}} ו- B = g b {\displaystyle B=g^{b}} (כאשר a {\displaystyle a} ו- b {\displaystyle b} סודיים). עם האורקל האמור איב יכולה לבצע את הטריק הבא: היא בוחרת c 1 = B {\displaystyle c_{1}=B} ו- c 2 {\displaystyle c_{2}} אקראי כלשהו והמפתח ציבורי הוא A {\displaystyle A} , היא שולחת אותם לאורקל ומבקשת ממנו להחזיר את תוצאת הפענוח שלהם. מה שהיא מקבלת בחזרה הוא כביכול את m {\displaystyle m} שהוא פענוח הטקסט המוצפן המקיים m ≡ ( c 1 a ) − 1 ⋅ c 2 ≡ ( B a ) − 1 ⋅ c 2 ≡ ( g a b ) − 1 ⋅ c 2  (mod  p ) {\displaystyle m\equiv (c_{1}^{a})^{-1}\cdot c_{2}\equiv (B^{a})^{-1}\cdot c_{2}\equiv (g^{ab})^{-1}\cdot c_{2}{\text{ (mod }}p)} . כעת כדי לקבל את g a b {\displaystyle g^{ab}} היא יכולה לחשב את: m − 1 ⋅ c 2 ≡ g a b  (mod  p ) {\displaystyle m^{-1}\cdot c_{2}\equiv g^{ab}{\text{ (mod }}p)} הרי שלכאורה עם מידע שהתקבל מאורקל אל-גמאל היא "פתרה" את בעיית דיפי-הלמן. זוהי הוכחה שמי שיכול לפצח את הצפנת אל-גמאל יכול גם לפתור את בעיית דיפי הלמן כך שהצפנת אל-גמאל בטוחה לפחות כבעיית דיפי-הלמן. כל עוד בעיה זו קשה לפתרון בכלים הקיימים ההצפנה תיוותר בטוחה. יש לשים לב שבהתקפה המתוארת איב לא פתרה את בעיית הלוגריתם הבדיד כלומר לא הצליחה לגלות מה הם a {\displaystyle a} או b {\displaystyle b} אלא רק את g a b {\displaystyle g^{ab}} . כלומר השאלה נותרה פתוחה האם בעיית דיפי-הלמן קשה כמו בעיית הלוגריתם הבדיד. ההתקפה המתוארת נקראת התקפת גלוי-נבחר, מזה נובע שהצפנת אל-גמאל עמידה במודל ביטחון מחמיר בתנאי שפתרון בעיית דיפי-הלמן יהיה קשה בשדה הנבחר. מסיבה זו רצוי שסדר השדה יהיה גדול, כלומר יש לבחור מספר ראשוני כזה שניסיון לנחש את המפתח הסודי בכוח גס או באמצעות האלגוריתם הטוב ביותר הידוע כיום לפתרון הבעיה, יהיה מעבר ליכולת המחשוב הנוכחית. ידוע שאלגוריתם תחשיב אינדקסים פותר את בעיית הלוגריתם הבדיד (ומכאן גם את בעיית דיפי-הלמן) בזמן תת-מעריכי. כלומר היכן שהוא באמצע הדרך בין זמן פולינומי לזמן מעריכי. אלגוריתם נפת שדה המספרים יכול גם הוא להתאים לפתרון בעיית הלוגריתם הבדיד ונחשב כיום כאלגוריתם הטוב ביותר למטרה זו. אלגוריתמים אילו מציגים זמן ביצוע טוב בהרבה מכוח גס. לאור עובדה זו בהערכה גסה רצוי שגודל הסדר הראשוני יהיה לפחות כ-2000 ספרות בינאריות (שזה בערך מספר בן 600 ספרות עשרוניות). ראוי להזכיר שכאשר מחשב קוונטי סקלאבילי יהיה מעשי, ניתן יהיה לפתור את בעיית הלוגריתם הבדיד או בעיית דיפי הלמן בזמן פולינומי באמצעות אלגוריתם שור, מה שגורם לכך שהצפנת אל-גמאל לא תהיה בטוחה יותר לשימוש במקרה כזה. לצורך ההדגמה ולמען הפשטות נניח שאליס בוחרת את הראשוני p = 467 {\displaystyle p=467} ואיבר פרימיטיבי g = 2 {\displaystyle g=2} . למפתח פרטי היא בוחרת את a = 153 {\displaystyle a=153} ומחשבת את המפתח הציבורי שלה A ≡ g a ≡ 2 153 ≡ 224  (mod  467 ) {\displaystyle A\equiv g^{a}\equiv 2^{153}\equiv 224{\text{ (mod }}467)} . בוב מקבל את המפתח הציבורי A = 224 {\displaystyle A=224} והוא מעוניין להצפין את המסר נניח m = 331 {\displaystyle m=331} . תחילה הוא בוחר מספר חד-פעמי k = 197 {\displaystyle k=197} ומחשב את הערכים הבאים: c 1 ≡ 2 197 ≡ 87  (mod  467 ) {\displaystyle c_{1}\equiv 2^{197}\equiv 87{\text{ (mod }}467)} , ואת c 2 ≡ 331 ⋅ 224 197 ≡ 57  (mod  467 ) {\displaystyle c_{2}\equiv 331\cdot 224^{197}\equiv 57{\text{ (mod }}467)} את הזוג ( c 1 , c 2 ) = ( 87 , 57 ) {\displaystyle (c_{1},c_{2})=(87,57)} הוא שולח לאליס. אליס משתמשת במפתח הפרטי שלה a = 153 {\displaystyle a=153} כדי לחשב את הערכים הבאים: x ≡ c 1 a ≡ 87 153 ≡ 367  (mod  467 ) {\displaystyle x\equiv c_{1}^{a}\equiv 87^{153}\equiv 367{\text{ (mod }}467)} , x − 1 ≡ 14  (mod  467 ) {\displaystyle x^{-1}\equiv 14{\text{ (mod }}467)} . ואז המסר m {\displaystyle m} מתקבל על ידי חישוב: m = c 2 ⋅ x − 1 ≡ 57 ⋅ 14 ≡ 331  (mod  467 ) {\displaystyle m=c_{2}\cdot x^{-1}\equiv 57\cdot 14\equiv 331{\text{ (mod }}467)} . m = 331 {\displaystyle m=331} . היסטורית אל-גמאל היה הצופן הראשון שיישם הצפנה הסתברותית. בניגוד לשיטות הצפנה דטרמיניסטיות צופן אל-גמאל מוסיף מספר אקראי בתהליך ההצפנה ולכן בכל הצפנה של אותו מסר יתקבל טקסט מוצפן אחר גם אם מפתח ההצפנה זהה. אלגוריתם שעונה להגדרה זו מספק ביטחון סמנטי, שפירושו שהטקסט המוצפן אינו מדליף שום מידע אודות טקסט המקור שתוקף פוטנציאלי המוגבל בזמן ומקום לא היה יכול להשיג בדרך אחרת. ביטחון סמנטי ניתן לפירוש כגרסה מרוככת של ביטחון מושלם. ההבדל ביניהם הוא שביטחון מושלם בהגדרה הוא כזה שגם תוקף בעל עצמת חישוב בלתי מוגבלת לא ילמד מאומה מהטקסט המוצפן אודות טקסט המקור. למשל RSA הבסיסי הוא דטרמיניסטי ולכן בכל הצפנה של אותו מסר עם אותו מפתח הצפנה יתקבל תמיד טקסט מוצפן זהה. בדרך זו המתקיף יכול לזהות הצפנה חוזרת של מסר מסוים גם אם הוא לא יודע מהו ולכן אינו מוגדר כבטוח סמנטית. אפשר להפוך כל הצפנה דטרמיניסטית לבטוחה סמנטית על ידי ריפוד המסר לפני ההצפנה. החסרון העיקרי של צופן אל-גמאל הוא שהטקסט המוצפן כפול בנפחו מהמסר המקורי. בנוסף צופן אל-גמאל מצריך שתי העלאות בחזקה מודולרית. לא כל הפעולות תלויות לגמרי במסר כך שניתן לחשב לפחות אחת מהן מראש. בניגוד לשיטות הצפנה אחרות לא ניתן להאיץ את צופן אל-גמאל באמצעות CRT. לייעול הצופן אפשר לשתף מספר ראשוני ויוצר בין מספר משתתפים כפרמטרים ציבוריים משותפים לכולם. לשיטה זו יתרון כיוון שאפשר לנצל זאת כדי להאיץ את תהליך ההצפנה בעזרת טכניקות לחישוב העלאה בחזקה המנצלות את העובדה שבסיס החזקה קבוע. הצפנת אל-גמאל אינה נפוצה בשימוש מעשי מהסיבה שישנן שיטות יעילות יותר. למשל פרוטוקול דיפי-הלמן בשילוב עם צופן סימטרי מהיר כמו AES מציעים פתרון טוב יותר. אולם להצפנת אל-גמאל תכונות חשובות שאין בפרוטוקול דיפי הלמן. היא מאפשרת הצפנה הומומורפית חלקית וכן הצפנת סף. נתון הסוד s ∈ Z p {\displaystyle s\in \mathbb {Z} _{p}} . כל משתתף A i {\displaystyle A_{i}} מחזיק בסוד s i {\displaystyle s_{i}} שנוצר לפי שיטת שמיר (ראה חלוקת סוד). כל המשתתף A i {\displaystyle A_{i}} מתחייב לסוד s i {\displaystyle s_{i}} על ידי פרסום המפתח הציבורי h i = g s i {\displaystyle h_{i}=g^{s_{i}}} . ממשפט לגראנז' נובע שהיות ש- s = ∑ c i s i {\displaystyle \textstyle s=\sum {c_{i}s_{i}}} עבור c i {\displaystyle c_{i}} כלשהו לכן g s {\displaystyle g^{s}} ניתן לחישוב מהמידע הציבורי על ידי ∏ i ∈ X ( g s i ) c i {\displaystyle \textstyle \prod _{i\in X}(g^{s_{i}})^{c_{i}}} כאשר X {\displaystyle X} הוא תת-קבוצה של לפחות k {\displaystyle k} רשאים. כעת היות שמתקיים h = g s , s = ∑ c i s i {\displaystyle \textstyle h=g^{s},s=\sum c_{i}s_{i}} לפענוח ( y , x ) = ( m h r , g r ) {\displaystyle (y,x)=(mh^{r},g^{r})} המשתתפים A i {\displaystyle A_{i}} מחשבים כדלהלן: כל אחד משדר את w i = x s i {\displaystyle w_{i}=x^{s_{i}}} ומוכיח באמצעות פרוטוקול אפס ידיעה שמתקיים log g ⁡ h i = log x ⁡ w i {\displaystyle \log _{g}h_{i}=\log _{x}w_{i}} . תהי X {\displaystyle X} תת-קבוצה של k {\displaystyle k} משתתפים הטקסט המוצפן ניתן לפענוח על ידי: m ′ = y ∏ i ∈ X w i c i {\displaystyle m'={\frac {y}{\prod _{i\in X}w_{i}^{c_{i}}}}} . זה נכון כי w i c i ≡ x c i s i ≡ g r c i s i {\displaystyle w_{i}^{c_{i}}\equiv x^{c_{i}s_{i}}\equiv g^{rc_{i}s_{i}}} לכן m ′ ≡ m g r s / ∏ g r c i s i ≡ m {\displaystyle \textstyle m'\equiv mg^{rs}/\prod {g^{rc_{i}s_{i}}}\equiv m} . אף על פי שצופן אל-גמאל ניתן ליישום מעל כל חבורה ציקלית סופית   G {\displaystyle \ G} , בתנאי שפעולות אריתמטיות בחבורה זו קלות יחסית בעוד שפתרון בעיית הלוגריתם הבדיד בה קשה מאוד. לא כל חבורה בטוחה ליישום צופן אל-גמאל, החבורה   G {\displaystyle \ G} תהיה בטוחה רק אם היא עומדת בהגבלות מסוימות. למשל החבורה   Z p {\displaystyle \ \mathbb {Z} _{p}} אינה בטוחה אם   p {\displaystyle \ p} אינו מספר ראשוני בטוח. מספר ראשוני יקרא בטוח רק אם ל-   p − 1 {\displaystyle \ p-1} יש לפחות גורם ראשוני אחד גדול. להלן מספר חבורות המתאימות ליישום אלגוריתם אל-גמאל: חבורה כפלית   Z p ∗ {\displaystyle \ \mathbb {Z} _{p}^{*}} של השלמים מודולו   p {\displaystyle \ p} ראשוני בטוח. חבורה כפלית   F 2 m ∗ {\displaystyle \ \mathbb {F} _{2^{m}}^{*}} של שדה סופי   F 2 m {\displaystyle \ \mathbb {F} _{2^{m}}} עם מציין 2. קבוצת הנקודות בעקום אליפטי מעל שדה סופי. האחרונה נחשבת לדרך עדיפה גם ליישום DSA ואלגוריתמים נוספים. יתרונה הוא מפתח קטן יחסית ועמידות גבוהה. צופן אל-גמאל אינו מוגן בפטנט כלשהו כיום. גם שיטת דיפי-הלמן אינה מוגנת כיום בפטנט (תוקפו פג ב-1997). כך שלמעשה צופן אל-גמאל ניתן לשימוש חופשי הן לצורך הצפנה והן לצורך חתימה דיגיטלית. אל-גמאל (חתימה דיגיטלית) בעיית הלוגריתם הבדיד פרוטוקול דיפי-הלמן ביטחון סמנטי A Public Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms, Taher Elgamal, 1984 New Directions in Cryptography, Whitfield Diffie and Martin E. Hellman, IEEE An Introduction to Mathematical Cryptography, Jeffrey Hoffstein, Jill Pipher, Joseph H. Silverman, Springer 2008