הצפנת אוקמוטו-אושיאמה

בקריפטוגרפיה, הצפנת אוקמוטו-אושיאמה (באנגלית: Okamoto-Uchiyama Cryptosystem) המסומנת בקיצור OU, היא מערכת הצפנת מפתח ציבורי הומומורפית חלקית שהתגלתה ב-1998 על ידי Tatsuaki Okamoto ו-Shigenori Uchiyama מחברת ניפון טלגרף אנד טלפון (NTT). היא שונה מ-RSA ומדיפי-הלמן בכך שזאת מערכת הצפנה מוכחת כבטוחה בהנחה שפירוק לגורמים היא בעיה קשה והיא פועלת מעל חבורת אוילר Z n ∗ {\displaystyle \mathbb {Z} _{n}^{*}} כאשר n = p 2 q {\displaystyle n=p^{2}q} וכן p {\displaystyle p} ו- q {\displaystyle q} ראשוניים. OU היא תמורה חד-כיוונית עם דלת צונחת כאשר הדלת הצונחת היא אלגוריתם יעיל לחישוב לוגריתמים בתת-חבורה ספציפית הנקראת חבורת p. החד-כיווניות שלה נובעת מבעיית פירוק לגורמים של המודולוס n = p 2 q {\displaystyle n=p^{2}q} וכן אפשר להוכיח שהטקסט המוצפן בטוח סמנטית כולו נגד יריב פסיבי. בגלל ש-OU הסתברותית הטקסט המוצפן נראה אקראי, כי כל טקסט קריא יכול להיות מוצפן עם אותו מפתח באופן שונה בכל פעם. הביטחון הסמנטי מסתמך על הקושי שבהבחנה בין E ( 0 , r ) = h r  mod  n {\displaystyle E(0,r)=h^{r}{\text{ mod }}n} לבין E ( 1 , r ′ ) = g h r ′  mod  n {\displaystyle E(1,r')=gh^{r'}{\text{ mod }}n} כאשר r {\displaystyle r} ו- r ′ {\displaystyle r'} אקראיים ובלתי תלויים ב- Z n {\displaystyle \mathbb {Z} _{n}} . בעיה זו נחשבת לבעיה קשה והיא שקולה לבעיית השארית הריבועית וכן שארית מסדר גבוה יותר שנחשבות לבעיות קשות. שיטת OU נחשבת ליעילה יותר בהשוואה ל-RSA להצפנה של ערכים קטנים כמו מפתח הצפנה והיא הומומורפית בגלל התכונה הבאה: E ( m 0 , r 0 ) E ( m 1 , r 1 )  mod  n = E ( m 0 + m 1 , r 3 ) {\displaystyle E(m_{0},r_{0})E(m_{1},r_{1}){\text{ mod }}n=E(m_{0}+m_{1},r_{3})} אם m 0 + m 1 < p {\displaystyle m_{0}+m_{1}<p} . תכונה זו שימושית במקומות בהם נדרשת הצפנה אנונימית כמו בהצבעה דיגיטלית ובמטבע דיגיטלי. החסרונות של שיטת OU הם: התנפחות הטקסט המוצפן וכן העובדה שהיא אינה בטוחה נגד יריב אקטיבי לפי מודל התקפת מוצפן-נבחר. אפשר ליישם טכניקת ריפוד דומה לזו שנעשתה ב-RSA כדי לקבל ביטחון סמנטי במסגרת מודל אורקל אקראי. כמו כן שיטה זו חשילה כי זה נובע מהתכונה הייחודית שלה. לא ידוע אם הקושי שבפירוק n = p 2 q {\displaystyle n=p^{2}q} שונה מהקושי שבפירוק n = p q {\displaystyle n=pq} לכן n {\displaystyle n} יכול להיות באורך זהה בשני המקרים (למשל 2046 סיביות כאשר כל ראשוני באורך 682 סיביות). נתונה החבורה Z n {\displaystyle \mathbb {Z} _{n}} (כאשר n = p 2 q {\displaystyle n=p^{2}q} וכן p {\displaystyle p} ו- q {\displaystyle q} ראשוניים), הפונקציה הלוגריתמית L {\displaystyle L} מוגדרת מעל p {\displaystyle p} -סילו - תת-חבורה של החבורה הכפלית Z p 2 ∗ {\displaystyle \mathbb {Z} _{p^{2}}^{*}} . אם נתון ראשוני p {\displaystyle p} הקבוצה: Γ = { x ∈ Z p 2 ∗ | x ≡ 1  (mod  p ) } {\displaystyle \Gamma =\{x\in \mathbb {Z} _{p^{2}}^{*}|x\equiv 1{\text{ (mod }}p)\}} . היא חבורה ציקלית מסדר p ( p − 1 ) {\displaystyle p(p-1)} לכן # Γ = p {\displaystyle \#\Gamma =p} . הפונקציה L {\displaystyle L} עבור x ∈ Γ {\displaystyle x\in \Gamma } קלה לחישוב והיא: L ( x ) = x − 1 p {\displaystyle L(x)={\frac {x-1}{p}}} . והיא מוגדרת היטב. הפונקציה L ( x ) {\displaystyle L(x)} נקראת "פונקציה לוגריתמית" של Γ {\displaystyle \Gamma } והביטוי שקול ל- log ⁡ ( x ) {\displaystyle \log(x)} מעל Z p 2 ∗ {\displaystyle \mathbb {Z} _{p^{2}}^{*}} מודולו p {\displaystyle p} . היא הומומורפית ביחס לפעולות הכפל והחיבור כי: ∀ x , y ∈ Γ     log ⁡ ( x y  mod  p 2 ) = log ⁡ ( x ) + log ⁡ ( y )  mod  p {\displaystyle \forall x,y\in \Gamma \ \ \log(xy{\text{ mod }}p^{2})=\log(x)+\log(y){\text{ mod }}p} ולכן מתקיים: ∀ g ∈ Γ , m ∈ Z p     log ⁡ ( g m  mod  p 2 ) = m ⋅ log ⁡ ( g )  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} פרמטר ביטחון (למשל k = 682 {\displaystyle k=682} ), בוחרים שני ראשוניים אקראיים p {\displaystyle p} ו- q {\displaystyle q} כאשר | p | = | q | = k {\displaystyle |p|=|q|=k} ומחשבים את n = p 2 q {\displaystyle n=p^{2}q} . בוחרים אלמנט אקראי g ∈ R Z n ∗ {\displaystyle g\in _{R}\mathbb {Z} _{n}^{*}} כך שהסדר של g p = g p − 1  mod  p 2 {\displaystyle g_{p}=g^{p-1}{\text{ mod }}p^{2}} הוא p {\displaystyle p} . לא קשה למצוא איבר כזה כי gcd ( p , q − 1 ) = 1 {\displaystyle {\text{gcd}}(p,q-1)=1} וכן gcd ( q , p − 1 ) = 1 {\displaystyle {\text{gcd}}(q,p-1)=1} כאשר gcd היא פונקציית מחלק משותף מקסימלי (לכן כל מה שצריך זה לוודא ש- g p ≠ 1 {\displaystyle g_{p}\neq 1} ). מחשבים את h = g n  mod  n {\displaystyle h=g^{n}{\text{ mod }}n} . המפתח הציבורי הוא: ( n , g , h ) {\displaystyle (n,g,h)} . המפתח הפרטי הוא: ( p , q ) {\displaystyle (p,q)} . h {\displaystyle h} ניתן לחישוב בכל שלב מתוך g {\displaystyle g} ו- n {\displaystyle n} והוא נועד רק להקל על החישובים בצד המצפין, אין חובה לשלוח אותו. בהינתן טקסט גלוי m {\displaystyle m} באורך k − 1 {\displaystyle k-1} סיביות לכל היותר. בוחרים שלם אקראי r ∈ R Z n {\displaystyle r\in _{R}\mathbb {Z} _{n}} ומחשבים את: c = g m h r  mod  n {\displaystyle c=g^{m}h^{r}{\text{ mod }}n} . תחילה מחשבים את c p = c p − 1  mod  p 2 {\displaystyle c_{p}=c^{p-1}{\text{ mod }}p^{2}} ואז הטקסט הגלוי מתקבל על ידי m = L ( c p ) L ( g p )  mod  p {\displaystyle m={\frac {L(c_{p})}{L(g_{p})}}{\text{ mod }}p} דרך אחרת להציג זאת (הכפלה בהופכי כפלי במקום חילוק): m = log ⁡ ( c p ) ⋅ log ⁡ ( g p ) − 1  mod  p {\displaystyle m=\log(c_{p})\cdot \log(g_{p})^{-1}{\text{ mod }}p} זה נכון כי לפי חוקי הלוגריתמים log ⁡ ( x ) / log ⁡ ( g ) {\displaystyle \log(x)/\log(g)} הוא במובן מסוים הלוגריתם של x {\displaystyle x} בבסיס g {\displaystyle g} , לפי זה אם נתון: ( g m h r ) p − 1 ≡ ( g m g n r ) p − 1 ≡ ( g p − 1 ) m  (mod  p 2 ) {\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 m} זה לקחת לוגריתם בבסיס g p − 1 {\displaystyle g^{p-1}} . את זה אפשר לעשות על ידי m = log ⁡ ( ( g p − 1 ) m ) log ⁡ ( g p − 1 ) {\displaystyle \textstyle m={\frac {\log((g^{p-1})^{m})}{\log(g^{p-1})}}} מודולו p {\displaystyle p} . יהי G 1 {\displaystyle {\mathcal {G}}_{1}} מייצר G 1 ( 1 k ) → n , n = p 2 q , | p | = | q | = k {\displaystyle {\mathcal {G}}_{1}(1^{k})\rightarrow n,n=p^{2}q,|p|=|q|=k} כאשר p {\displaystyle p} ו- q {\displaystyle q} ראשוניים. בעיית הפירוק בהינתן ( n , k ) {\displaystyle (n,k)} למצוא את ( p , q ) {\displaystyle (p,q)} קשה אם עבור כל אלגוריתם פולינומי הסתברותי A {\displaystyle {\mathcal {A}}} ועבור כל קבוע c {\displaystyle c} עם k {\displaystyle k} גדול מספיק מתקיים: Pr [ A ( 1 k , n ) = ( p , q ) ] < 1 / k c {\displaystyle \Pr[{\mathcal {A}}(1^{k},n)=(p,q)]<1/k^{c}} . כמו כן בהינתן מייצר G 2 ( 1 k ) → ( n , g , c ) {\displaystyle {\mathcal {G}}_{2}(1^{k})\rightarrow (n,g,c)} ו- ( n , g , k ) {\displaystyle (n,g,k)} מפתח ציבורי, c {\displaystyle c} הטקסט המוצפן, היפוך הפונקציה קשה אם עבור כל אלגוריתם פולינומי הסתברותי A {\displaystyle {\mathcal {A}}} ועבור כל קבוע c {\displaystyle c} עם k {\displaystyle k} גדול מספיק מתקיים: Pr [ A ( 1 k , n , g , c ) = m ] < 1 / k c {\displaystyle \Pr[{\mathcal {A}}(1^{k},n,g,c)=m]<1/k^{c}} . קיימת הוכחה ששתי הבעיות המתוארות שקולות. אם מצליחים להפוך את פונקציית ההצפנה אז אפשר לפרק את n {\displaystyle n} לגורמים. בכך מוכיחים שההצפנה בטוחה בהנחה שבעיית פירוק לגורמים קשה. בדומה לבעיית השארית הריבועית, מסתמכים על העובדה שקשה להכריע האם איבר x ∈ Z n ∗ {\displaystyle x\in \mathbb {Z} _{n}^{*}} הוא בתת-חבורה מסדר p {\displaystyle p} ומזה נובע שהטקסט המוצפן כולו בטוח סמנטית. נניח שנבחרו הפרמטרים הבאים: p = 107 , q = 89 , n = p 2 q = 1018961 {\displaystyle p=107,q=89,n=p^{2}q=1018961} . אם g = 23 {\displaystyle g=23} אז g p = 23 106  mod  11449 = 5030 {\displaystyle g_{p}=23^{106}{\text{ mod }}11449=5030} וכן h = 23 1018961  mod  1018961 = 19003 {\displaystyle h=23^{1018961}{\text{ mod }}1018961=19003} . אם המסר להצפנה הוא m = 100 {\displaystyle m=100} ו- r = 9 {\displaystyle r=9} אז מתקבל c = g m h r = 46063 ⋅ 764299 ≡ 802287 {\displaystyle c=g^{m}h^{r}=46063\cdot 764299\equiv 802287} מודולו 1018961 {\displaystyle 1018961} . לפענוח קודם מחשבים את: c p = 802287 106  mod  11449 ≡ 10594 {\displaystyle c_{p}=802287^{106}{\text{ mod }}11449\equiv 10594} . הלוגריתמים של c p {\displaystyle c_{p}} ושל g p {\displaystyle g_{p}} (מודולו p {\displaystyle p} ) הם: log ⁡ ( 10594 ) = 10593 / 107 = 99 {\displaystyle \log(10594)=10593/107=99} וכן log ⁡ ( 5030 ) = 5029 / 107 = 47 {\displaystyle \log(5030)=5029/107=47} ואז m = log ⁡ ( 10594 ) ⋅ log ⁡ ( 5030 ) − 1 = 99 ⋅ 47 − 1  mod  107 ≡ 99 ⋅ 41  mod  107 = 100 {\displaystyle m=\log(10594)\cdot \log(5030)^{-1}=99\cdot 47^{-1}{\text{ mod }}107\equiv 99\cdot 41{\text{ mod }}107=100} . השלב הראשון בפענוח דורש O ( k 3 ) {\displaystyle O(k^{3})} פעולות על סיביות בגלל העלאה בחזקת p − 1 {\displaystyle p-1} . קורון נקש ופלייר הציעו לייעל את שיטת OU כך שסיבוכיותה תהיה O ( k 2 ) {\displaystyle O(k^{2})} מבלי לאבד את השקילות לבעיית הפירוק. הם הציעו להשתמש בראשוני p {\displaystyle p} כך של- p − 1 {\displaystyle p-1} יש גורם ראשוני גדול t {\displaystyle t} (באורך 160 סיביות לפחות), כלומר p = t u + 1 {\displaystyle p=tu+1} . כמו בגרסה המקורית, בוחרים שלם g < n {\displaystyle g<n} ומחשבים את g p = g p − 1  mod  p 2 {\displaystyle g_{p}=g^{p-1}{\text{ mod }}p^{2}} כך שהסדר שלו הוא p {\displaystyle p} . מחשבים את G = g u  mod  n {\displaystyle G=g^{u}{\text{ mod }}n} , מגרילים את h {\displaystyle h} ומחשבים את H = h n u  mod  n {\displaystyle H=h^{nu}{\text{ mod }}n} . השלישייה ( n , G , H ) {\displaystyle (n,G,H)} היא המפתח הציבורי ואילו המפתח הפרטי הוא ( p , q ) {\displaystyle (p,q)} . להצפנה בוחרים שלם אקראי r < n {\displaystyle r<n} ומחשבים את c = G m H r  mod  n {\displaystyle c=G^{m}H^{r}{\text{ mod }}n} ואילו לפענוח מחשבים את: הסיבוכיות השתפרה כי t {\displaystyle t} קטן מ- p {\displaystyle p} . EPOC קיצור של Efficient Probabilistic Public Key Encryption היא מערכת הצפנה הסתברותית שפותחה ב-1999 על ידי Okamoto, Uchiyama ו-Fujisaki מ-NTT והוצעה לתקן 1363a-2004 IEEE. היא מבוססת על פונקציית OU המתוארת והיא הוכחה בטוחה סמנטית נגד תקיפת מוצפן-נבחר במסגרת מודל אורקל אקראי, כלומר היא פועלת בשילוב עם פונקציית גיבוב. הגרסה הראשונה EPOC-1 נועדה רק לשיתוף מפתח. גרסת EPOC-2 משלבת גם פד חד-פעמי/צופן סימטרי. גרסת EPOC-3 משתמשת בשתי פונקציות גיבוב H {\displaystyle H} ו- G {\displaystyle G} והיא מבצעת הצפנה מאומתת כדלהלן. בהינתן פרמטר ביטחון k {\displaystyle k} של פונקציית הצפנה אסימטרית ASYM {\displaystyle {\text{ASYM}}} כמו זו המתוארת לעיל ופונקציית הצפנה סימטרית SYM {\displaystyle {\text{SYM}}} כמו צופן זרם או צופן בלוקים. מכינים מפתח פרטי s k {\displaystyle sk} ומפתח ציבורי p k {\displaystyle pk} של פונקציית ההצפנה האסימטרית ומבצעים: הביטוי ← R {\displaystyle \leftarrow _{R}} פירושו בחירה של ערך אקראי בהתפלגות אחידה. הסימן ⊥ {\displaystyle \bot } מייצג הודעת שגיאה. הצפנת מפתח ציבורי ביטחון סמנטי הצפנת פליאיי 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 Accelerating Okamoto-Uchiyama public-key cryptosystem, J.-S. Coron ; D. Naccache ; P. Paillier, 1999 EPOC: Efficient Probabilistic Public-Key Encryption Secure Integration of Asymmetric and Symmetric Encryption Schemes, Fujisaki, E. & Okamoto, T. J Cryptol (2013)