**הצפנת קריימר-שׁוּפּ** (באנגלית: **Cramer–Shoup cryptosystem**) היא מערכת הצפנה א-סימטרית פרקטית, מוכחת כבטוחה סמנטית נגד התקפת מוצפן-נבחר שהומצאה ב-1998 על ידי רונלד קריימר מהמכון הטכנולוגי של ציריך וויקטור שופ ממעבדות IBM והוצגה בוועידת CRYPTO '98 בקליפורניה. ביטחונה מסתמך על קושיה המשוער של בעיית הכרעה דיפי-הלמן והיא הרחבה של צופן אל-גמאל. שבניגוד לאחרון שנקרא חשיל ואינו מוגן כלל כנגד התקפת מוצפן-נבחר (בקיצור CCA), לגרסת קריימר-שופ נוספו כמה אלמנטים כדי להבטיח אי-חשילות (Non-malleability) ועמידות כנגד התקפת CCA בשילוב של פונקציית גיבוב חד-כיוונית אוניברסלית ומחולל מספרים אקראיים בטוח.

### מודל ביטחון

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

### בעיית הכרעת דיפי-הלמן

בעיית הכרעת דיפי-הלמן ניתנת להצגה באופן הבא: נתונה חבורה {\displaystyle G} מסדר ראשוני {\displaystyle q} גדול. ונתונות שתי ההתפלגויות:

* ההתפלגות R של רביעיות אקראיות {\displaystyle (g\_{1},g\_{2},u\_{1},u\_{2})\in G^{4}},
* ההתפלגות D של הרביעיות {\displaystyle (g\_{1},g\_{2},u\_{1},u\_{2})\in G^{4}} כאשר {\displaystyle g\_{1},g\_{2}} אקראיים ואילו {\displaystyle u\_{1}=g\_{1}^{r}} וכן {\displaystyle u\_{2}=g\_{2}^{r}} עבור {\displaystyle r} אקראי כלשהו.

הבעיה היא להכריע בשאלה האם ניתן להבחין בהבדל סטטיסטי משמעותי כלשהו בין שתי ההתפלגויות המתוארות. אם נחליף את הערכים הללו בערכים: {\displaystyle g\_{1}=g,g\_{2}=g^{x},u\_{1}=g^{y},u\_{2}=g^{xy}}, אפשר לצמצם את בעיית ההכרעה המתוארת לבעיית דיפי-הלמן בהינתן {\displaystyle g^{x},g^{y}} חשב את {\displaystyle g^{xy}} וכן לבעיית הלוגריתם הבדיד שהיא חישוב {\displaystyle x} מתוך {\displaystyle g^{x}} (מודולו {\displaystyle q}). כאן לצורך הבעיה {\displaystyle g} יכול להיות קבוע. לכן בעיית הכרעת דיפי-הלמן שקולה לבעיה הכללית, כלומר במקרה הגרוע כאשר נתונים {\displaystyle g^{x},g^{y},g^{z}} קשה להכריע עם שגיאה הסתברותית זניחה אם {\displaystyle z=xy{\text{ mod }}q}.
בעיית לוגריתם בדיד והגרסאות המנויות ידועות כבעיות קשות שטרם נמצא להם פתרון פולינומי יעיל.  קיים מודל המציע ביטחון סמנטי דומה, שיכול להיות מושתת על כל פונקציה חד-כיוונית עם דלת מלכודת. ראו חשילות.

תיאור האלגוריתם
---------------

#### הכנת מפתחות

1. בוחרים שלמים אקראיים {\displaystyle g\_{1},g\_{2}\in G} וכן את הערכים האקראיים {\displaystyle x\_{1},x\_{2},y\_{1},y\_{2},z\in Z\_{q}}.
2. מחשבים את {\displaystyle c=g\_{1}^{x\_{1}}g\_{2}^{x\_{2}},d=g\_{1}^{y\_{1}}g\_{2}^{y\_{2}},h=g\_{1}^{z}}
3. המפתח הפומבי הוא הסט: {\displaystyle (g\_{1},g\_{2},c,d,h)} ופונקציית גיבוב ידועה ומוסכמת H. והמפתח הפרטי הוא הסט: {\displaystyle (x\_{1},x\_{2},y\_{1},y\_{2},z)}.

#### הצפנה

להצפנת המסר {\displaystyle m\in G} בוחרים שלם אקראי {\displaystyle r\in Z\_{q}} ומחשבים: 

1. {\displaystyle u\_{1}=g\_{1}^{r},u\_{2}=g\_{2}^{r},e=h^{r}m}
2. {\displaystyle \alpha =H(u\_{1},u\_{2},e)} ממירים את תוצאת פונקציית הגיבוב לערך שלם ב-{\displaystyle G}.
3. {\displaystyle v=c^{r}d^{r\alpha }}

הטקסט המוצפן הוא הרביעייה: {\displaystyle (u\_{1},u\_{2},e,v)}.

#### פענוח

נתון הטקסט המוצפן {\displaystyle (u\_{1},u\_{2},e,v)}.

1. תחילה מחשבים את ערך הגיבוב {\displaystyle \alpha =H(u\_{1},u\_{2},e)}
2. בודקים אם מתקיים {\displaystyle v=u\_{1}^{x\_{1}+y\_{1}\alpha }u\_{2}^{x\_{2}+y\_{2}\alpha }}, במידה שלא מחזירים הודעת שגיאה.
3. הטקסט המקורי הוא {\displaystyle m=e/u\_{1}^{z}}.

#### הוכחת נכונות

היות ש-{\displaystyle u\_{1}=g\_{1}^{r}} ו-{\displaystyle u\_{2}=g\_{2}^{r}} מתקבל

{\displaystyle u\_{1}^{x\_{1}}u\_{2}^{x\_{2}}=g\_{1}^{rx\_{1}}g\_{2}^{rx\_{2}}=c^{r}}
וכן לגבי {\displaystyle u\_{1}^{y\_{1}}u\_{2}^{y\_{2}}=d^{r}} ו-{\displaystyle u\_{1}^{z}=h^{r}} לכן הבדיקה בשורה 2 צריכה להחזיר אמת והטקסט הוא למעשה {\displaystyle e/h^{r}}.

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

נניח שהראשוני {\displaystyle q=21523} והערכים האקראיים שנבחרו הם: 

{\displaystyle z=2112,x\_{1}=11341,x\_{2}=5844,y\_{1}=13399,y\_{2}=10981,g\_{1}=17716,g\_{2}=5611}

הערכים שחושבו הם: 
{\displaystyle c=20419,d=17636,h=10910}

1. כעת להצפנת המסר {\displaystyle m=12345} תחילה נבחר {\displaystyle r=19438}
2. ואז מחשבים את {\displaystyle u\_{1}=20491,u\_{2}=12522}
3. מחשבים את {\displaystyle e=8282} ואת ערך הגיבוב {\displaystyle a={\mbox{H}}(12345)=193} (כאן לצורך הדוגמה נלקח רק הבית הראשון של תוצאת פונקציית הגיבוב SHA-1).
4. מחשבים את {\displaystyle v=4870}

הטקסט המוצפן לפי הסדר הוא: {\displaystyle (20491,12522,8282,4870)}.

לפענוח תחילה בודקים שאכן 

1. {\displaystyle v=20491^{11341+13399\cdot 193}\cdot 12522^{5844+10981\cdot 193}} ומפענחים,
2. {\displaystyle m=8211\cdot 8282=12345{\pmod {21523}}}

יש לציין שהמחיר לביטחון הסמנטי הוא התנפחות הצופן פי ארבעה מגודלו של {\displaystyle m}.

ביטחון
------

הצפנת קריימר שופ היא מערכת מפתח ציבורי יעילה, הראשונה שהוכח לגביה שהיא בטוחה נגד התקפת מוצפן-נבחר בלי מודל אורקל אקראי, תוך שימוש במדדי סיבוכיות מקובלים. הרעיון הבסיסי בהגדרת ביטחון מחמירה של מערכת מפתח ציבורי נקרא ביטחון סמנטי תחת התקפת מוצפן נבחר "אדפטיבית" המסומנת IND-CCA2. המושג הוטבע לראשונה על ידי סיימון וארקוף וההוכחה הראשונה שמערכת כזו קיימת ניתנה על ידי דני דולב ואחרים. מעשית כבר היו קיימות מערכות בטוחות שמשתמשות במודל אורקל אקראי כמו OAEP של RSA המוכחות כבטוחות סמנטית לפי הגדרה זו. אולם החידוש במערכת של קריימר ושופ שהיא אינה מנצלת את מודל האורקל האקראי. קריימר ושופ הוכיחו שהמערכת שלהם בטוחה תחת הנחה שבעיית ההכרעה של דיפי-הלמן קשה וכן שהפונקציה {\displaystyle H} חסינת התנגשויות.

בתמצית ההוכחה היא כדלהלן. אם קיים תוקף שמסוגל לשבור את המערכת תחת המודל IND-CCA2 הרי שאפשר לבנות אלגוריתם {\displaystyle B} עם זמן ריצה דומה לתוקף שיוכל להכריע בבעיית דיפי-הלמן. האלגוריתם {\displaystyle B} יפעל כמו אורקל. מכין זוג מפתחות פרטי וציבורי ושולח לתוקף את המפתח הציבורי, כעת הוא משתמש ברביעיית הערכים {\displaystyle (g\_{1},g\_{2},u\_{1},u\_{2})} כדי לשלוח אתגר מוצפן לתוקף כדי שהוא יפענחו. קריימר ושופ מראים שאם הרביעייה האמורה היא בעיית דיפי-הלמן אקראית הרי שהתוקף יצליח לפתור את הבעיה בהסתברות משמעותית. לעומת זאת עם הרביעייה היא ערכים אקראיים ב-{\displaystyle G^{4}} הרי שלתוקף יש יתרון אפס בסיכויי ההצלחה שלו לנצח במשחק. ההבדל הזה בעצם מאפשר ל-{\displaystyle B} לשבור את המערכת כיוון שהוא מפר את ההנחה היסודית של אי-יכולת הבחנה (IND) מכאן שהמערכת כולה בטוחה.

  

### CS-Lite

בעיקרון מערכת הצפנת קריימר-שופ יכולה להיות מוכחת כבטוחה בשתי דרכים. הראשונה המתוארת לעיל שאינה עושה שימוש במודל אורקל אקראי והיא מוכחת תחת ההנחה שבעיית הכרעת דיפי-הלמן בקיצור DDH קשה וכן שפונקציית הגיבוב {\displaystyle H} בטוחה והשנייה *עם* רעיון מודל אורקל אקראי. התכונה המעניינת שלה היא שמודל האורקל האקראי מהווה מעין משוכה נוספת במקרה שההנחה הראשונה נכשלת. לכן אפשר להוכיח את ביטחונה תחת הנחה קלה יותר כמו הקושי שבבעיית דיפי-הלמן החישובית.

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

#### אלגוריתם CS-Lite

**הכנה**:

1. כמו קודם בוחרים אלמנטים אקראיים: {\displaystyle p,q,g\_{1},g\_{2},x\_{1},x\_{2},z\in G} כאשר {\displaystyle p} ראשוני.
2. מחשבים את {\displaystyle X=g\_{1}^{x\_{1}}\cdot g\_{2}^{x\_{2}}{\text{ mod }}p} וכן את {\displaystyle Z=g\_{1}^{z}{\text{ mod }}p}
3. הפרמטרים הציבוריים של המערכת יהיו {\displaystyle (p,q,g\_{1},g\_{2})}. המפתח הפרטי הוא {\displaystyle (x\_{1},x\_{2},z)} והמפתח הפומבי הוא {\displaystyle (X,Z)}.

**הצפנה**:

1. בוחרים אלמנט אקראי חד פעמי {\displaystyle r}.
2. מחשבים את {\displaystyle R\_{1}=g\_{1}^{r}{\text{ mod }}p}
3. מחשבים את {\displaystyle R\_{2}=g\_{2}^{r}{\text{ mod }}p}
4. הטקסט המוצפן הוא הצמד {\displaystyle R\_{1},R\_{2}} וכן {\displaystyle E=Z^{r}\cdot M{\text{ mod }}p} ו-{\displaystyle V=X^{r}{\text{ mod }}p}

**פענוח**:

1. {\displaystyle {\text{If }}V\not \equiv R\_{1}^{x\_{1}}\cdot R\_{2}^{x\_{2}}({\text{mod }}p){\text{ then return null}}}
2. {\displaystyle {\text{Else }}M=E\cdot R\_{1}^{-z}{\text{ mod }}p}

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

* רונלד קריימר וויקטור שופ. "A practical public key cryptosystem provably secure against adaptive chosen ciphertext attack." in proceedings of Crypto 1998, LNCS 1462, p. 13ff (ps,pdf)
* אנציקלופדיה לקריפטוגרפיה ואבטחת מידע

| קריפטוגרפיה |
| --- |
| 

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

 |
| 

| הצפנה קלאסית |
| --- |
| מכונת הצפנה • צופן החלפה • צופן אתב"ש • צופן קיסר • צופן ויז'נר • צופן ורנם • צופן פלייפייר • צופן היל • אולטרה • אניגמה • ציקלומטר • קולוסוס • PURPLE • ג'ייד • מג'יק • צופן שחלוף |

 |
| 

| צופן בלוקים |
| --- |
| לוציפר • AES • 3DES • DES • Threefish • Twofish • Blowfish • FEAL • SEED • CAST • IDEA • RC2 • RC6 • MARS • RC5 • GOST • סרפנט • MISTY • KASUMI • קמליה • ARIA • SAFER • TEA • LEA • CLEFIA • SEA • Hummingbird • PRESENT • KATAN • KeeLoq • Simon & Speck • אנוביס |

 |
| 

| אופני הפעלה |
| --- |
| אופן הפעלה של צופן בלוקים • EAX • OCB • IAPM • CWC mode • GCM • CCM |

 |
| 

| צופן זרם |
| --- |
| RC4 • Salsa20 • SOSEMANUK • גריין • E0 • A5/1 • A5/2 • A5/3 • A5/4 • MICKEY • HC-128 • SNOW • Trivium • Rabbit • ZUC • ChaCha |

 |
| 

| הצפנה אסימטרית |
| --- |
| פרוטוקול דיפי-הלמן • חידות מרקל • חתימת למפורט • הצפנת תרמיל • RSA • הצפנת רבין • חתימה דיגיטלית רבין • צופן אל-גמאל • חתימה דיגיטלית אל-גמאל • DSA • הצפנת בלום-גולדווסר • ECC • הצפנת קריימר-שופ • הצפנת פאיי • הצפנת מקאליס • GGH • NTRU • עקום 25519 • חתימה דיגיטלית של שנור • הצפנת אוקמוטו-אושיאמה |

 |
| 

| פרוטוקולים |
| --- |
| עץ מרקל • פרוטוקול אתגר-מענה • פרוטוקול נידהאם-שרודר • פרוטוקול קרברוס • הוכחה באפס ידע • פרוטוקול פייגה-פיאט-שמיר • העברה עלומה • חלוקת סוד • TLS (SSL) • Secure Shell • MQV • X.509 • פרוטוקול שיתוף מפתח
• מיסור שלא לפרסום • פרוטוקול סיגנל |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| מחולל פסבדו-אקראי קריפטוגרפי • פונקציה חד-כיוונית • תמורה חד-כיוונית • סיבית קשה • פונקציה פסבדו-אקראית קריפטוגרפית • תמורה פסאודו-אקראית • פונקציית גיבוב קריפטוגרפית • וקטור אתחול • פונקציית ספוג • הצפנה מבוססת סריג |

 |
| 

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

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| בעיית לוגריתם בדיד • תחשיב אינדקסים • נפה ריבועית • אלגוריתם rho של פולרד • נפת שדה מספרים • אלגוריתם רו של פולרד ללוגריתמים • אלגוריתם פוליג-הלמן |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| SHA • MD5 • MD4 • SHA-1 • SHA-2 • SHA-3 • RIPEMD • Skein • BLAKE • Grøstl • SipHash |

 |
| 

| אימות וזיהוי |
| --- |
| אימות זהות • סיסמה • קוד אימות מסרים • Poly1305 • סיסמה חד-פעמית |

 |
| 

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

 |