בקריפטוגרפיה, **הצפנת אוקמוטו-אושיאמה** (באנגלית: Okamoto-Uchiyama Cryptosystem) המסומנת בקיצור OU, היא מערכת הצפנת מפתח ציבורי הומומורפית חלקית שהתגלתה ב-1998 על ידי Tatsuaki Okamoto ו-Shigenori Uchiyama מחברת ניפון טלגרף אנד טלפון (NTT). היא שונה מ-RSA ומדיפי-הלמן בכך שזאת מערכת הצפנה מוכחת כבטוחה בהנחה שפירוק לגורמים היא בעיה קשה והיא פועלת מעל חבורת אוילר {\displaystyle \mathbb {Z} \_{n}^{\*}} כאשר {\displaystyle n=p^{2}q} וכן p ו-q ראשוניים.

תיאור כללי
----------

**OU** היא תמורה חד-כיוונית עם דלת צונחת כאשר הדלת הצונחת היא אלגוריתם יעיל לחישוב לוגריתמים בתת-חבורה ספציפית הנקראת חבורת p. החד-כיווניות שלה נובעת מבעיית פירוק לגורמים של המודולוס {\displaystyle n=p^{2}q} וכן אפשר להוכיח שהטקסט המוצפן בטוח סמנטית **כולו** נגד יריב פסיבי. בגלל ש-OU הסתברותית הטקסט המוצפן נראה אקראי, כי כל טקסט קריא יכול להיות מוצפן עם אותו מפתח באופן שונה בכל פעם. הביטחון הסמנטי מסתמך על הקושי שבהבחנה בין {\displaystyle E(0,r)=h^{r}{\text{ mod }}n} לבין {\displaystyle E(1,r')=gh^{r'}{\text{ mod }}n} כאשר r ו-{\displaystyle r'} אקראיים ובלתי תלויים ב-{\displaystyle \mathbb {Z} \_{n}}. בעיה זו נחשבת לבעיה קשה והיא שקולה לבעיית השארית הריבועית וכן שארית מסדר גבוה יותר שנחשבות לבעיות קשות. שיטת OU נחשבת ליעילה יותר בהשוואה ל-RSA להצפנה של ערכים קטנים כמו מפתח הצפנה והיא הומומורפית בגלל התכונה הבאה: 

{\displaystyle E(m\_{0},r\_{0})E(m\_{1},r\_{1}){\text{ mod }}n=E(m\_{0}+m\_{1},r\_{3})} אם {\displaystyle m\_{0}+m\_{1}<p}.

תכונה זו שימושית במקומות בהם נדרשת הצפנה אנונימית כמו בהצבעה דיגיטלית ובמטבע דיגיטלי. החסרונות של שיטת OU הם: התנפחות הטקסט המוצפן וכן העובדה שהיא אינה בטוחה נגד יריב אקטיבי לפי מודל התקפת מוצפן-נבחר. אפשר ליישם טכניקת ריפוד דומה לזו שנעשתה ב-RSA כדי לקבל ביטחון סמנטי במסגרת מודל אורקל אקראי. כמו כן שיטה זו חשילה כי זה נובע מהתכונה הייחודית שלה. לא ידוע אם הקושי שבפירוק {\displaystyle n=p^{2}q} שונה מהקושי שבפירוק n=pq לכן n יכול להיות באורך זהה בשני המקרים (למשל 2046 סיביות כאשר כל ראשוני באורך 682 סיביות).

פונקציה לוגריתמית
-----------------

נתונה החבורה {\displaystyle \mathbb {Z} \_{n}} (כאשר {\displaystyle n=p^{2}q} וכן p ו-q ראשוניים), הפונקציה הלוגריתמית L מוגדרת מעל p-סילו - תת-חבורה של החבורה הכפלית {\displaystyle \mathbb {Z} \_{p^{2}}^{\*}}. אם נתון ראשוני p הקבוצה:

{\displaystyle \Gamma =\{x\in \mathbb {Z} \_{p^{2}}^{\*}|x\equiv 1{\text{ (mod }}p)\}}.
היא חבורה ציקלית מסדר {\displaystyle p(p-1)} לכן {\displaystyle \#\Gamma =p}. הפונקציה L עבור {\displaystyle x\in \Gamma } קלה לחישוב והיא: 

{\displaystyle L(x)={\frac {x-1}{p}}}.
והיא מוגדרת היטב. הפונקציה {\displaystyle L(x)} נקראת "פונקציה לוגריתמית" של \Gamma והביטוי שקול ל-{\displaystyle \log(x)} מעל {\displaystyle \mathbb {Z} \_{p^{2}}^{\*}} מודולו p. היא הומומורפית ביחס לפעולות הכפל והחיבור כי:

{\displaystyle \forall x,y\in \Gamma \ \ \log(xy{\text{ mod }}p^{2})=\log(x)+\log(y){\text{ mod }}p}
ולכן מתקיים:

{\displaystyle \forall g\in \Gamma ,m\in \mathbb {Z} \_{p}\ \ \log(g^{m}{\text{ mod }}p^{2})=m\cdot \log(g){\text{ mod }}p}
ההוכחה במאמר המקורי.

הצפנה ופענוח
------------

#### הכנה

יהי k פרמטר ביטחון (למשל {\displaystyle k=682}), בוחרים שני ראשוניים אקראיים p ו-q כאשר {\displaystyle |p|=|q|=k} ומחשבים את {\displaystyle n=p^{2}q}. בוחרים אלמנט אקראי {\displaystyle g\in \_{R}\mathbb {Z} \_{n}^{\*}} כך שהסדר של {\displaystyle g\_{p}=g^{p-1}{\text{ mod }}p^{2}} הוא p. לא קשה למצוא איבר כזה כי {\displaystyle {\text{gcd}}(p,q-1)=1} וכן {\displaystyle {\text{gcd}}(q,p-1)=1} כאשר gcd היא פונקציית מחלק משותף מקסימלי (לכן כל מה שצריך זה לוודא ש-{\displaystyle g\_{p}\neq 1}). מחשבים את {\displaystyle h=g^{n}{\text{ mod }}n}.

המפתח הציבורי הוא: {\displaystyle (n,g,h)}.
המפתח הפרטי הוא: {\displaystyle (p,q)}.

h ניתן לחישוב בכל שלב מתוך g ו-n והוא נועד רק להקל על החישובים בצד המצפין, אין חובה לשלוח אותו.

#### הצפנה

בהינתן טקסט גלוי m באורך {\displaystyle k-1} סיביות לכל היותר. בוחרים שלם אקראי {\displaystyle r\in \_{R}\mathbb {Z} \_{n}} ומחשבים את:

{\displaystyle c=g^{m}h^{r}{\text{ mod }}n}.

#### פענוח

תחילה מחשבים את {\displaystyle c\_{p}=c^{p-1}{\text{ mod }}p^{2}} ואז הטקסט הגלוי מתקבל על ידי 

{\displaystyle m={\frac {L(c\_{p})}{L(g\_{p})}}{\text{ mod }}p}

דרך אחרת להציג זאת (הכפלה בהופכי כפלי במקום חילוק):

{\displaystyle m=\log(c\_{p})\cdot \log(g\_{p})^{-1}{\text{ mod }}p}

זה נכון כי לפי חוקי הלוגריתמים {\displaystyle \log(x)/\log(g)} הוא במובן מסוים הלוגריתם של x בבסיס g, לפי זה אם נתון:

{\displaystyle (g^{m}h^{r})^{p-1}\equiv (g^{m}g^{nr})^{p-1}\equiv (g^{p-1})^{m}{\text{ (mod }}p^{2})}
כל מה שצריך כדי לחלץ את m זה לקחת לוגריתם בבסיס {\displaystyle g^{p-1}}. את זה אפשר לעשות על ידי {\displaystyle \textstyle m={\frac {\log((g^{p-1})^{m})}{\log(g^{p-1})}}} מודולו p.

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

יהי {\displaystyle {\mathcal {G}}\_{1}} מייצר {\displaystyle {\mathcal {G}}\_{1}(1^{k})\rightarrow n,n=p^{2}q,|p|=|q|=k} כאשר p ו-q ראשוניים. בעיית הפירוק בהינתן {\displaystyle (n,k)} למצוא את {\displaystyle (p,q)} קשה אם עבור כל אלגוריתם פולינומי הסתברותי {\mathcal {A}} ועבור כל קבוע c עם k גדול מספיק מתקיים:

{\displaystyle \Pr[{\mathcal {A}}(1^{k},n)=(p,q)]<1/k^{c}}.
כמו כן בהינתן מייצר {\displaystyle {\mathcal {G}}\_{2}(1^{k})\rightarrow (n,g,c)} ו-{\displaystyle (n,g,k)} מפתח ציבורי, c הטקסט המוצפן, היפוך הפונקציה קשה אם עבור כל אלגוריתם פולינומי הסתברותי {\mathcal {A}} ועבור כל קבוע c עם k גדול מספיק מתקיים:

{\displaystyle \Pr[{\mathcal {A}}(1^{k},n,g,c)=m]<1/k^{c}}.
קיימת הוכחה ששתי הבעיות המתוארות שקולות. אם מצליחים להפוך את פונקציית ההצפנה אז אפשר לפרק את n לגורמים. בכך מוכיחים שההצפנה בטוחה בהנחה שבעיית פירוק לגורמים קשה. בדומה לבעיית השארית הריבועית, מסתמכים על העובדה שקשה להכריע האם איבר {\displaystyle x\in \mathbb {Z} \_{n}^{\*}} הוא בתת-חבורה מסדר p ומזה נובע שהטקסט המוצפן כולו בטוח סמנטית.

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

נניח שנבחרו הפרמטרים הבאים: {\displaystyle p=107,q=89,n=p^{2}q=1018961}. 

אם {\displaystyle g=23} אז {\displaystyle g\_{p}=23^{106}{\text{ mod }}11449=5030} וכן {\displaystyle h=23^{1018961}{\text{ mod }}1018961=19003}.

אם המסר להצפנה הוא {\displaystyle m=100} ו-{\displaystyle r=9} אז מתקבל {\displaystyle c=g^{m}h^{r}=46063\cdot 764299\equiv 802287} מודולו {\displaystyle 1018961}.

לפענוח קודם מחשבים את: {\displaystyle c\_{p}=802287^{106}{\text{ mod }}11449\equiv 10594}.

הלוגריתמים של {\displaystyle c\_{p}} ושל {\displaystyle g\_{p}} (מודולו p) הם: {\displaystyle \log(10594)=10593/107=99} וכן {\displaystyle \log(5030)=5029/107=47}

ואז {\displaystyle m=\log(10594)\cdot \log(5030)^{-1}=99\cdot 47^{-1}{\text{ mod }}107\equiv 99\cdot 41{\text{ mod }}107=100}.

שיפורים
-------

השלב הראשון בפענוח דורש {\displaystyle O(k^{3})} פעולות על סיביות בגלל העלאה בחזקת p-1. קורון נקש ופלייר הציעו לייעל את שיטת OU כך שסיבוכיותה תהיה {\displaystyle O(k^{2})} מבלי לאבד את השקילות לבעיית הפירוק. הם הציעו להשתמש בראשוני p כך של-p-1 יש גורם ראשוני גדול t (באורך 160 סיביות לפחות), כלומר {\displaystyle p=tu+1}. כמו בגרסה המקורית, בוחרים שלם {\displaystyle g<n} ומחשבים את {\displaystyle g\_{p}=g^{p-1}{\text{ mod }}p^{2}} כך שהסדר שלו הוא p. מחשבים את {\displaystyle G=g^{u}{\text{ mod }}n}, מגרילים את h ומחשבים את {\displaystyle H=h^{nu}{\text{ mod }}n}. השלישייה {\displaystyle (n,G,H)} היא המפתח הציבורי ואילו המפתח הפרטי הוא {\displaystyle (p,q)}.

להצפנה בוחרים שלם אקראי {\displaystyle r<n} ומחשבים את {\displaystyle c=G^{m}H^{r}{\text{ mod }}n} ואילו לפענוח מחשבים את:

|  |
| --- |
| {\displaystyle c\_{p}=c^{t}{\text{ mod }}p^{2}=g^{m(p-1)}h^{nr(p-1)}=g\_{p}^{m}{\text{ mod }}p^{2}}
{\displaystyle m=\log(c\_{p})\cdot \log(g\_{p})^{-1}{\text{ mod }}p} |

הסיבוכיות השתפרה כי t קטן מ-p.

EPOC
----

EPOC קיצור של Efficient Probabilistic Public Key Encryption היא מערכת הצפנה הסתברותית שפותחה ב-1999 על ידי Okamoto, Uchiyama ו-Fujisaki מ-NTT והוצעה לתקן 1363a-2004 IEEE. היא מבוססת על פונקציית OU המתוארת והיא הוכחה בטוחה סמנטית נגד תקיפת מוצפן-נבחר במסגרת מודל אורקל אקראי, כלומר היא פועלת בשילוב עם פונקציית גיבוב. הגרסה הראשונה EPOC-1 נועדה רק לשיתוף מפתח. גרסת EPOC-2 משלבת גם פד חד-פעמי/צופן סימטרי. גרסת EPOC-3 משתמשת בשתי פונקציות גיבוב H ו-G והיא מבצעת הצפנה מאומתת כדלהלן. בהינתן פרמטר ביטחון k של פונקציית הצפנה אסימטרית {\displaystyle {\text{ASYM}}} כמו זו המתוארת לעיל ופונקציית הצפנה סימטרית {\displaystyle {\text{SYM}}} כמו צופן זרם או צופן בלוקים. מכינים מפתח פרטי {\displaystyle sk} ומפתח ציבורי {\displaystyle pk} של פונקציית ההצפנה האסימטרית ומבצעים:

| **הצפנה** | **פענוח** |
| --- | --- |
| {\displaystyle \sigma \leftarrow \_{R}\{0,1\}^{k}}
{\displaystyle r\_{1}=H(\sigma ,m)}
{\displaystyle r\_{2}=G(\sigma )}
{\displaystyle c\_{1}={\text{ENC}}\\_{\text{ASYM}}\_{pk}(\sigma ,r\_{1})}
{\displaystyle c\_{2}={\text{ENC}}\\_{\text{SYM}}\_{r\_{2}}(m)}
‎
{\displaystyle {\text{return }}(c\_{1},c\_{2})} | {\displaystyle \sigma ={\text{DEC}}\\_{\text{ASYM}}\_{sk}(c\_{1})}
{\displaystyle r\_{2}=G(\sigma )}
{\displaystyle m={\text{DEC}}\\_{\text{SYM}}\_{r\_{2}}(c\_{2})}
{\displaystyle r\_{1}=H(\sigma ,m)}
{\displaystyle {\text{If }}c\_{1}={\text{ENC}}\\_{\text{ASYM}}\_{pk}(\sigma ,r\_{1}){\text{ then:}}}
{\displaystyle \ \ \ \ {\text{return }}m}
{\displaystyle {\text{else return }}\bot } |

הביטוי {\displaystyle \leftarrow \_{R}} פירושו בחירה של ערך אקראי בהתפלגות אחידה. הסימן {\displaystyle \bot } מייצג הודעת שגיאה.

ראו גם
------

* הצפנת מפתח ציבורי
* ביטחון סמנטי
* הצפנת פליאיי

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

1. ↑  A new public-key cryptosystem as secure as factoring, Tatsuaki OkamotoShigenori Uchiyama, Advances in Cryptology - EUROCRYPT'98. Lecture Notes in Computer Science. 1403. Springer. pp. 308-318
2. ↑  Accelerating Okamoto-Uchiyama public-key cryptosystem, J.-S. Coron ; D. Naccache ; P. Paillier, 1999
3. ↑  EPOC: Efficient Probabilistic Public-Key Encryption
4. ↑  Secure Integration of Asymmetric and Symmetric Encryption Schemes, Fujisaki, E. & Okamoto, T. J Cryptol (2013)

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

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

 |
| 

| הצפנה קלאסית |
| --- |
| מכונת הצפנה • צופן החלפה • צופן אתב"ש • צופן קיסר • צופן ויז'נר • צופן ורנם • צופן פלייפייר • צופן היל • אולטרה • אניגמה • ציקלומטר • קולוסוס • 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 • סיסמה חד-פעמית |

 |
| 

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

 |