הצפנת פליאיי

הצפנת פֵּלִיאֵי (באנגלית: Paillier Encryption) היא סכימת הצפנה אסימטרית הסתברותית הומומורפית וחתימה דיגיטלית שהומצאה ב-1999 על ידי פסקל פליאיי (Pascal Paillier) לשעבר מחברת GEMPLUS לוקסמבורג. הצפנת פליאיי הומצאה בהשראת סכימות הצפנה הסתברותית כמו בלום גולדווסר והיא מבוססת על פונקציה חד-כיוונית עם דלת צונחת שנגזרת מבעיה בתורת המספרים הנקראת בעיית השאריות הפריקות (Composite Residuosity Class Problem) מודולו n 2 {\displaystyle \textstyle n^{2}} כאשר n {\displaystyle n} מכונה "מספר RSA" (כפולה של שני ראשוניים שונים שווים בגודלם בקירוב). הבסיס התאורטי של המערכת הוא, בהינתן שלם n = p q {\displaystyle n=pq} כאשר p {\displaystyle p} ו- q {\displaystyle q} ראשוניים גדולים, שווים באורכם בקירוב והחבורה Z n × Z n ∗ ≃ Z n 2 ∗ {\displaystyle \mathbb {Z} _{n}\times \mathbb {Z} _{n}^{*}\simeq \mathbb {Z} _{n^{2}}^{*}} , השלם z {\displaystyle z} ייקרא שארית n {\displaystyle n} -ית (ממעלה n {\displaystyle n} ) מודולו n 2 {\displaystyle n^{2}} אם קיים שלם y ∈ Z n 2 ∗ {\displaystyle y\in \mathbb {Z} _{n^{2}}^{*}} המקיים z = y n  mod  n 2 {\displaystyle z=y^{n}{\text{ mod }}n^{2}} . קבוצת השאריות ה- n {\displaystyle n} -יות היא תת-חבורה כפלית Z n 2 ∗ {\displaystyle \mathbb {Z} _{n^{2}}^{*}} . לכל z {\displaystyle z} כזה קיימים בדיוק n {\displaystyle n} שורשים ממעלה n {\displaystyle n} . בעיית ההכרעה האם שלם נתון הוא שארית n {\displaystyle n} -ית או לא, המסומנת בקיצור CR [ n ] {\displaystyle {\text{CR}}[n]} (קיצור של Composite Residuosity) נחשבת לבעיה קשה ולא ידוע על אלגוריתם יעיל שיכול לבצעה בזמן פולינומי. סדר החבורה Z n 2 ∗ {\displaystyle \mathbb {Z} _{n^{2}}^{*}} הוא n ϕ ( n ) {\displaystyle n\phi (n)} כאשר ϕ ( n ) {\displaystyle \phi (n)} היא פונקציית אוילר של n {\displaystyle n} . הפונקציה E g ( x , y ) {\displaystyle {\mathcal {E}}_{g}(x,y)} המוגדרת על ידי ( x , y ) ↦ g x y n  mod  n 2 {\displaystyle (x,y)\mapsto g^{x}y^{n}{\text{ mod }}n^{2}} עבור x ∈ Z n {\displaystyle x\in \mathbb {Z} _{n}} ו- y ∈ Z n ∗ {\displaystyle y\in \mathbb {Z} _{n}^{*}} היא פונקציה חד-חד-ערכית ועל מעל החבורה Z n 2 ∗ {\displaystyle \mathbb {Z} _{n^{2}}^{*}} ביחס לבסיס g ∈ B {\displaystyle g\in {\mathcal {B}}} נתון. g {\displaystyle g} הוא אלמנט מסדר α ⋅ n {\displaystyle \alpha \cdot n} עבור מחלק α {\displaystyle \alpha } כלשהו של ϕ {\displaystyle \phi } . הקבוצה B {\displaystyle {\mathcal {B}}} היא קבוצת כל האלמנטים מסדר n α {\displaystyle n\alpha } עבור α = 1 , . . . , ϕ {\displaystyle \alpha =1,...,\phi } (לדוגמה אפשר לבחור g = n + 1 {\displaystyle g=n+1} כש- α = 1 {\displaystyle \alpha =1} ). אפשר לראות שהפונקציה w = E g ( x , y ) {\displaystyle w={\mathcal {E}}_{g}(x,y)} הפיכה. כדי להפוך את הפונקציה מגדירים את L ( u ) = ( u − 1 ) / n {\displaystyle L(u)=(u-1)/n} שהיא פונקציה מעל תת-חבורה כפלית של השלמים מודולו n 2 {\displaystyle n^{2}} המקיימים u ≡ 1  mod  n {\displaystyle u\equiv 1{\text{ mod }}n} . שחזור הערכים x , y {\displaystyle x,y} מתוך w = E g ( x , y ) {\displaystyle w={\mathcal {E}}_{g}(x,y)} מתבצע על ידי x = ( L ( w ϕ  mod  n 2 ) L ( g ϕ  mod  n 2 ) )  mod  n {\displaystyle x=\left({\frac {L(w^{\phi }{\text{ mod }}n^{2})}{L(g^{\phi }{\text{ mod }}n^{2})}}\right){\text{ mod }}n} y = ( w g − x ) 1 / n  mod  n {\displaystyle y=(wg^{-x})^{1/n}{\text{ mod }}n} במקום ϕ {\displaystyle \phi } של n {\displaystyle n} אפשר לעבוד עם פונקציית קרמייקל שהיא λ ( n ) = lcm ( p − 1 , q − 1 ) {\displaystyle \lambda (n)={\text{lcm}}(p-1,q-1)} . זהו האקספוננט של חבורת אוילר ו- lcm {\displaystyle {\text{lcm}}} היא כפולה משותפת מינימלית. שימו לב שלפי משפט קרמייקל עבור כל אלמנט w ∈ Z n 2 ∗ {\displaystyle w\in \mathbb {Z} _{n^{2}}^{*}} מתקיים w λ ≡ 1  mod  n {\displaystyle w^{\lambda }\equiv 1{\text{ mod }}n} וכן w n λ ≡ 1  mod  n 2 {\displaystyle w^{n\lambda }\equiv 1{\text{ mod }}n^{2}} . בהמשך ייעשה שימוש ב- λ {\displaystyle \lambda } בכל המקומות בהן הופיעה פונקציית אוילר. דלת המלכודת היא הגורמים הראשוניים או λ {\displaystyle \lambda } . כאשר הגורמים הראשוניים של n {\displaystyle n} לא ידועים שחזור x {\displaystyle x} מתוך E g ( x , y ) {\displaystyle {\mathcal {E}}_{g}(x,y)} ואפילו להכריע האם x = 0 {\displaystyle x=0} ללא λ {\displaystyle \lambda } נחשבים לבעיה קשה תחת המודל הסטנדרטי של סיבוכיות חישובית, בהנחה שפירוק לגורמים של n {\displaystyle n} אינו מעשי. האחרונה נקראת בעיית הכרעה של השאריות הפריקות ומסומנת בקיצור DCRA. על בסיס הרעיון האמור הצפנת פליאיי פועלת כדלהלן. יהי n = p q {\displaystyle n=pq} ויהי g ∈ B {\displaystyle g\in {\mathcal {B}}} , אפשר למצוא ערך כזה על ידי בדיקה אם gcd ( L ( g λ  mod  n 2 ) , n ) = 1 {\displaystyle {\text{gcd}}(L(g^{\lambda }{\text{ mod }}n^{2}),n)=1} . הפונקציה gcd {\displaystyle {\text{gcd}}} מייצגת מחלק משותף מקסימלי. הערכים n {\displaystyle n} ו- g {\displaystyle g} יהיו מפתחות ציבוריים ואילו p {\displaystyle p} ו- q {\displaystyle q} יהיו המפתחות הפרטיים (במקום המספרים הראשוניים אפשר לשמור את λ {\displaystyle \lambda } ). בהינתן מסר m {\displaystyle m} הנמוך מ- n {\displaystyle n} להצפנה בוחרים שלם אקראי r < n {\displaystyle r<n} ומבצעים: c = g m ⋅ r n  mod  n 2 {\displaystyle c=g^{m}\cdot r^{n}{\text{ mod }}n^{2}} לפענוח: m = L ( c λ  mod  n 2 ) L ( g λ  mod  n 2 )  mod  n {\displaystyle m={\frac {L(c^{\lambda }{\text{ mod }}n^{2})}{L(g^{\lambda }{\text{ mod }}n^{2})}}{\text{ mod }}n} או L ( c λ  mod  n 2 ) ⋅ L ( g λ  mod  n 2 ) − 1 {\displaystyle L(c^{\lambda }{\text{ mod }}n^{2})\cdot L(g^{\lambda }{\text{ mod }}n^{2})^{-1}} מודולו n {\displaystyle n} . הסכימה נחשבת הסתברותית בגלל r {\displaystyle r} והיא בטוחה סמנטית כנגד יריב פסיבי, בהנחה שבעיית CR [ n ] {\displaystyle {\text{CR}}[n]} היא בעיה קשה ושקשה לפרק את n {\displaystyle n} לגורמים. סיבוכיות ההצפנה היא מסדר גודל של O ( | n | 3 ) {\displaystyle O(|n|^{3})} בקירוב. לצורך המחשה הראשוניים יהיו q = 331 {\displaystyle q=331} , p = 149 {\displaystyle p=149} . לכן n = 49319 {\displaystyle n=49319} ו- n 2 = 243236376 {\displaystyle n^{2}=243236376} . הערך λ = lcm ( 148 , 330 ) = 24420 {\displaystyle \lambda ={\text{lcm}}(148,330)=24420} . הבסיס נקבע ל- g = n + 1 = 49320 {\displaystyle g=n+1=49320} . מפתח ציבורי: 49319 {\displaystyle 49319} . מפתח פרטי: 24420 {\displaystyle 24420} . לצורך הצפנת המסר m = 12345 {\displaystyle m=12345} בוחרים מספר אקראי נניח r = 47026 {\displaystyle r=47026} ואז מחשבים את c = 49320 12345 ⋅ 47026 49319  mod  2432363761 = 159515031 {\displaystyle c=49320^{12345}\cdot 47026^{49319}{\text{ mod }}2432363761=159515031} . הטקסט המוצפן הוא אם כן c = 159515031 {\displaystyle c=159515031} . לפענוח תחילה מחשבים את L ( 49320 12345  mod  2432363761 ) = 27172 {\displaystyle L(49320^{12345}{\text{ mod }}2432363761)=27172} וכן L ( 47026 49319  mod  2432363761 ) = 24420 {\displaystyle L(47026^{49319}{\text{ mod }}2432363761)=24420} . ההופכי הכפלי של 24420 {\displaystyle 24420} מודולו 49319 {\displaystyle 49319} הוא 27388 {\displaystyle 27388} לכן m = 27172 ⋅ 27388  mod  49319 = 12345 {\displaystyle m=27172\cdot 27388{\text{ mod }}49319=12345} . להלן סכימה לא הסתברותית המבוססת חלקית על RSA שנקראת פרמוטציה חד כיוונית עם דלת מלכודת כאשר דלת המלכודת היא λ {\displaystyle \lambda } . והיא מסתמכת על בעיית CR [ n ] {\displaystyle {\text{CR}}[n]} בהנחה שפירוק לגורמים של n {\displaystyle n} היא בעיה קשה. למרות התלות ב-RSA הסכימה ראויה לציון בשל העובדה שפרמוטציות חד כיווניות עם דלת מלכודת (דוגמת RSA ורבין) הן אובייקטים נדירים וחשובים בקריפטוגרפיה מודרנית. להצפנה: תחילה מפצלים את המסר המיועד להצפנה m {\displaystyle m} בדרך הפיכה כלשהי לשני חלקים m 1 , m 2 {\displaystyle m_{1},m_{2}} . למשל m = m 1 + n m 2 {\displaystyle m=m_{1}+nm_{2}} . מחשבים את c = g m 1 m 2 n  mod  n 2 {\displaystyle c=g^{m_{1}}m_{2}^{n}{\text{ mod }}n^{2}} לפענוח: תחילה m 1 = L ( c λ  mod  n 2 ) L ( g λ  mod  n 2 ) {\displaystyle m_{1}={\frac {L(c^{\lambda }{\text{ mod }}n^{2})}{L(g^{\lambda }{\text{ mod }}n^{2})}}} מחשבים את ערך הביניים c ′ = c g − m 1  mod  n {\displaystyle c'=cg^{-m_{1}}{\text{ mod }}n} m 2 = ( c ′ ) n − 1  mod  λ  mod  n {\displaystyle m_{2}=(c')^{n^{-1}{\text{ mod }}\lambda }{\text{ mod }}n} ואז המסר הוא m = m 1 + n m 2 {\displaystyle m=m_{1}+nm_{2}} . אפשר להשתמש בכל תמורה פומבית מוסכמת שממפה את m {\displaystyle m} לערכים m 1 , m 2 {\displaystyle m_{1},m_{2}} . יש לשים לב שהסכימה הזו אינה הסתברותית, כלומר אינה מערבת שימוש במספר אקראי. לצורך חתימה דיגיטלית תהי h : N → { 0 , 1 } k {\displaystyle h:\mathbb {N} \rightarrow \{0,1\}^{k}} פונקציית גיבוב קריפטוגרפית של המסר שתסומן בקיצור h ( m ) {\displaystyle h(m)} . עבור המסר m {\displaystyle m} החותם מחשב את החתימה ( s 1 , s 2 ) {\displaystyle (s_{1},s_{2})} כדלהלן: s 1 = L ( h ( m ) λ  mod  n 2 ) L ( g λ  mod  n 2 )  mod  n {\displaystyle s_{1}={\frac {L(h(m)^{\lambda }{\text{ mod }}n^{2})}{L(g^{\lambda }{\text{ mod }}n^{2})}}{\text{ mod }}n} s 2 = ( h ( m ) g − s 1 ) 1 / n  mod  λ  mod  n {\displaystyle s_{2}=(h(m)g^{-s_{1}})^{1/n{\text{ mod }}\lambda }{\text{ mod }}n} מקבל החתימה יכול לוודא את תקפותה על ידי הבדיקה שמתקיים h ( m ) = g s 1 s 2 n  mod  n 2 {\displaystyle h(m)=g^{s_{1}}s_{2}^{n}{\text{ mod }}n^{2}} סכימות כמו RSA סובלות מחסרון בכך שהפענוח דורש זמן ואינו יעיל במונחי מחשוב. מסיבה זו מערכת הצפנה אסימטרית תהיה אטרקטיבית אם הפענוח יהיה מסדר גודל כמעט ריבועי ביחס ל- n {\displaystyle n} . להלן גרסה שונה מעט שבה סיבוכיות הפענוח היא בסדר גודל של O ( | n | 2 + ϵ ) {\displaystyle O(|n|^{2+\epsilon })} עבור ϵ > 0 {\displaystyle \epsilon >0} קטן כלשהו. הרעיון הוא להגביל את מרחב הטקסט המוצפן Z n 2 ∗ {\displaystyle \mathbb {Z} _{n^{2}}^{*}} לתת קבוצה < g > {\displaystyle <g>} מסדר נמוך יותר. מסיבות של ביטחון λ {\displaystyle \lambda } צריך להיות כפולה של ראשוני גדול. בהינתן הבסיס g ∈ B α {\displaystyle g\in {\mathcal {B}}_{\alpha }} עבור 1 ≤ α ≤ λ {\displaystyle 1\leq \alpha \leq \lambda } כלשהו, הסכימה היא כדלהלן. הצפנה: בוחרים אלמנט אקראי r {\displaystyle r} הנמוך מ- n {\displaystyle n} . מחשבים את c = g m + r n  mod  n 2 {\displaystyle c=g^{m+rn}{\text{ mod }}n^{2}} פענוח: m = L ( c α  mod  n 2 ) L ( g α  mod  n 2 )  mod  n {\displaystyle m={\frac {L(c^{\alpha }{\text{ mod }}n^{2})}{L(g^{\alpha }{\text{ mod }}n^{2})}}{\text{ mod }}n} הפעם דלת המלכודת מסתמכת על ידיעת α {\displaystyle \alpha } כמפתח סודי במקום λ {\displaystyle \lambda } . צוואר הבקבוק בפעולת הפענוח הוא הפעולה c α  mod  n 2 {\displaystyle c^{\alpha }{\text{ mod }}n^{2}} שסיבוכיותה היא בסדר גודל O ( | n | 2 | α | ) {\displaystyle O(|n|^{2}|\alpha |)} בלבד. אם g {\displaystyle g} נבחר באופן כזה ש- | α | = Ω ( | n | ϵ ) {\displaystyle |\alpha |=\Omega (|n|^{\epsilon })} אז כל תהליך הפענוח יתבצע עם O ( | n | 2 + ϵ ) {\displaystyle O(|n|^{2+\epsilon })} פעולות בסיביות. זהו מאפיין חשוב בהשוואה למערכת אסימטריות אחרות. אולם יש לשים לב שבמקרה זה המערכת לא מסתמכת על בעיית CR [ n ] {\displaystyle {\text{CR}}[n]} כיוון שכעת ידוע שהטקסט המוצפן שייך לקבוצה < g > {\displaystyle <g>} . הבעיה האחרונה, דהיינו לחשב את x , y {\displaystyle x,y} בהינתן w ∈< g > {\displaystyle w\in <g>} נקראת בעיית הלוגריתם הבדיד 'חלקית' וגם היא משוערת כבעיה קשה. הסכמות המתוארות הוכחו בטוחות מהיבט תאורטי תחת ההנחות הסטנדרטיות, אך לא הוכחו כבטוחות כנגד התקפת מוצפן-נבחר. כדי להבטיח עמידות כנגד התקפות מוצפן נבחר יש לבצע שינויים נוספים. אפשר להגיע לביטחון כזה לפחות תחת מודל אורקל אקראי. לפי ההמלצות המקובלות הראשוניים p {\displaystyle p} ו- q {\displaystyle q} צריכים להיבחר באופן שיהיה קשה לפרק את n {\displaystyle n} לגורמים. הבסיס g {\displaystyle g} יכול להיבחר באקראי (בגרסה המהירה יידרש טיפול שונה למשל להעלות אלמנט בחזקת λ / α {\displaystyle \lambda /\alpha } ). כדי לשפר ביצועים אפשר לאמץ את שיטת CRT כמו ב-RSA, כלומר כל החישובים יתבצעו מודולו p 2 {\displaystyle p^{2}} ו- q 2 {\displaystyle q^{2}} בהתאמה והתוצאה הסופית תהיה חישוב מערכת המשוואות המודולריות המתקבלת באמצעות משפט השאריות הסיני שהוא זניח יחסית לפעולה של העלאה בחזקה מודולרית. אם בוחרים g {\displaystyle g} קטן (כמו g = 2 {\displaystyle g=2} ) כל עוד הוא מקיים את ההגדרות של הסכימה, יתקבל שיפור נוסף בביצועים בסדר גודל של 1 / 3 {\displaystyle 1/3} . יתרה מזו g {\displaystyle g} יכול להיות קבוע מה שמאפשר חישוב מוקדם כדי להאיץ ביצועים. בכללות כל הערכים הקבועים וכן חישוב r n {\displaystyle r^{n}} או g n r {\displaystyle g^{nr}} יכולים להתבצע מראש. בפענוח חישוב הפונקציה L ( u ) = ( u − 1 ) / n {\displaystyle L(u)=(u-1)/n} ניתן לביצוע במחיר פעולת כפל אחת מודולו 2 | n | {\displaystyle 2^{|n|}} על ידי חישוב מוקדם של הקבוע n − 1  mod  2 | n | {\displaystyle n^{-1}{\text{ mod }}2^{|n|}} . הקבועים L ( g λ  mod  n 2 ) − 1  mod  n {\displaystyle L(g^{\lambda }{\text{ mod }}n^{2})^{-1}{\text{ mod }}n} או L ( g α  mod  n 2 ) − 1  mod  n {\displaystyle L(g^{\alpha }{\text{ mod }}n^{2})^{-1}{\text{ mod }}n} בגרסה המהירה ניתנים לחישוב מראש. כדי לנצל את משפט השאריות הסיני (CRT) לשיפור ביצועים, יש להגדיר את הפונקציות L p {\displaystyle L_{p}} ו- L q {\displaystyle L_{q}} כדלהלן: L p ( u ) = ( u − 1 ) / p {\displaystyle L_{p}(u)=(u-1)/p} וכן L q ( u ) = ( u − 1 ) / q {\displaystyle L_{q}(u)=(u-1)/q} בהתאמה. פענוח יתבצע כעת עם הקבועים הבאים אותם מחשבים מראש: h p = L p ( g p − 1  mod  p 2 ) − 1  mod  p {\displaystyle h_{p}=L_{p}(g^{p-1}{\text{ mod }}p^{2})^{-1}{\text{ mod }}p} h q = L q ( g q − 1  mod  q 2 ) − 1  mod  q {\displaystyle h_{q}=L_{q}(g^{q-1}{\text{ mod }}q^{2})^{-1}{\text{ mod }}q} ואז תהליך הפענוח הוא כדלהלן: m p = L p ( c p − 1  mod  p 2 ) h p  mod  p {\displaystyle m_{p}=L_{p}(c^{p-1}{\text{ mod }}p^{2})h_{p}{\text{ mod }}p} m q = L q ( c q − 1  mod  q 2 ) h q  mod  q {\displaystyle m_{q}=L_{q}(c^{q-1}{\text{ mod }}q^{2})h_{q}{\text{ mod }}q} m = C R T ( m p , m q )  mod  n {\displaystyle m=CRT(m_{p},m_{q}){\text{ mod }}n} כאשר CRT היא מימוש של פתרון מערכת הקונגרואנציות לפי משפט השאריות הסיני. ובגרסה המהירה יש להחליף את p − 1 {\displaystyle p-1} ו- q − 1 {\displaystyle q-1} ב- α {\displaystyle \alpha } . הצפנת פליאיי הורחבה למספר כיוונים. איוון דמגרד הציע גרסה שבה המודולוס הוא מהצורה n s {\displaystyle n^{s}} במקום בחזקת 2. וכן הוצעה גרסה מבוזרת (סכמת סף - threshold cryptography) וכן הוצע מימוש ב-ECC. סכימות ההצפנת פליאיי m ↦ g m r n {\displaystyle m\mapsto g^{m}r^{n}} וכן m ↦ g m + n r {\displaystyle m\mapsto g^{m+nr}} , מודולו n 2 {\displaystyle n^{2}} הן הומומורפיות מהחבורה הכפלית ( Z n 2 ∗ , × ) {\displaystyle (\mathbb {Z} _{n^{2}}^{*},\times )} לחבורה החיבורית ( Z n , + ) {\displaystyle (\mathbb {Z} _{n},+)} . בניסוח פורמלי עבור כל m 1 , m 2 ∈ Z n {\displaystyle m_{1},m_{2}\in \mathbb {Z} _{n}} ו- k ∈ N {\displaystyle k\in \mathbb {N} } , פונקציית הצפנה E {\displaystyle E} ופונקציית פענוח D {\displaystyle D} בהתאמה, מתקיים D ( E ( m 1 ) E ( m 2 )  mod  n 2 ) = m 1 + m 2  mod  n {\displaystyle D(E(m_{1})E(m_{2}){\text{ mod }}n^{2})=m_{1}+m_{2}{\text{ mod }}n} D ( E ( m ) k  mod  n 2 ) = k m  mod  n {\displaystyle D(E(m)^{k}{\text{ mod }}n^{2})=km{\text{ mod }}n} D ( E ( m 1 ) g m 2  mod  n 2 ) = m 1 + m 2  mod  n {\displaystyle D(E(m_{1})g^{m_{2}}{\text{ mod }}n^{2})=m_{1}+m_{2}{\text{ mod }}n} וכן הלאה. ההשלכה של מאפיין זה היא שהסכימה תהיה שימושית עבור מגוון פרוטוקולים קריפטוגרפיים כמו הצבעה ממוחשבת, סכימת סף, חלוקת סוד ומנגנון הגנת העתקה (Copy protection). הסתרה עצמית (self blinding) היא התכונה שכל טקסט מוצפן ניתן לשינוי לטקסט מוצפן אחר מבלי שהשינוי ישפיע על הטקסט המקורי, בניסוח פורמלי עבור כל m ∈ Z n {\displaystyle m\in \mathbb {Z} _{n}} ו- r ∈ N {\displaystyle r\in \mathbb {N} } מתקיים D ( E ( m ) r n  mod  n 2 ) = m {\displaystyle D(E(m)r^{n}{\text{ mod }}n^{2})=m} או D ( E ( m ) g n r  mod  n 2 ) = m {\displaystyle D(E(m)g^{nr}{\text{ mod }}n^{2})=m} במקרה של ההצפנה המהירה. בעיקרון התכונה הזו מאפשרת לבצע פעולות חישוב על ידי צד שלישי מבלי שהוא עצמו ידע מהו תוכן המידע עליו בוצעו החישובים. לתכונה שימושים רבים בקריפטוגרפיה למשל חתימה עיוורת או מחשוב ענן. Public-Key Cryptosystems Based on Composite Degree Residuosity Classes Catalano, Dario, Rosario Gennaro, Nick Howgrave-Graham, and Phong Q. Nguyen (2001). “Paillier’s cryptosystem revisited.” Proceedings of the 8th ACM conference on Computer and Communications Security ACM Press, New York, 206–214 Damgard, Ivan and Mads Jurik (2001). “A generalization, a simplification and some applications of paillier’s probabilistic public-key system.” Public Key Cryptography—PKC 2001, Lecture Notes in Computer Science, vol. 1992, ed. K. Kim. Springer-Verlag, Berlin, 119–136. Galbraith, Steven D. (2002). “Elliptic curve paillier schemes.” Journal of Cryptology, 15 (2), 129–138.