הצפנת בלום-גולדווסר

סכימת בלום-גולדווסר (Blum-Goldwasser) היא סכימת הצפנה אסימטרית הסתברותית שהוצעה על ידי מנואל בלום ושפי גולדווסר ב-1984. היא יעילה מבין סכימות ההצפנה ההסתברויות הידועות ויעילה יותר בהשוואה ל-RSA מהיבט של מהירות והתנפחות הצופן וכן נחשבת לבטוחה סמנטית בהנחה שבעיית פירוק לגורמים קשה. סכימת בלום גולדווסר מנצלת את רעיון המחולל הפסאודו אקראי Blum-Blum-Shub (בקיצור BBS), כדי ליצור רצף סיביות פסאודו אקראי, המשמש לאחר מכן לחיבור ב-XOR עם המסר בדומה לפנקס חד פעמי. התוצאה ביחד עם הגרעין ההתחלתי כשהוא מוצפן מועברים למקבל שמשתמש במידע הסודי המצוי ברשותו הנקרא דלת צונחת (Trapdoor), כדי לחלץ את הגרעין ההתחלתי שהוזן למחולל ומשם הדרך לשחזור המסר קלה. אפשר לראות בשיטה זו מעין שילוב של צופן זרם עם מפתח פומבי. בדומה להצפנת רבין, הצפנת בלום-גולדווסר פגיעה להתקפת טקסט מוצפן נבחר.

אלגוריתם הכנת מפתח עבור הצפנת בלום-גולדווסר

  1. בוחרים שני שלמים ראשוניים גדולים ו- השקולים ל- מודולו .
  2. מחשבים את
  3. בעזרת אלגוריתם אוקלידס המורחב מוצאים שלמים ו- המקיימים את .
  4. המפתח הפומבי הוא והמפתח הפרטי הוא .

תהליך הצפנת בלום-גולדווסר

הצפנה

להצפנת המסר המצפין משיג לידיו עותק של המפתח הפומבי ופועל כדלהלן:

  1. מחלק את המסר ל- לבלוקים, כל אחד בגודל סיביות, כאשר לוגריתם בבסיס 2 של מספר סיביות המודולוס בקירוב).
  2. בוחר גרעין אקראי סודי , שהוא שארית ריבועית מודולו (אפשר להשיג זאת על ידי בחירת שלם אקראי וחישוב ).
  3. ההצפנה מבוצעת באופן רקורסיבי ב- סבבים כאשר בכל סבב: א. הוא מחשב את , ב. מצפין את בלוק המסר כדלהלן: , כאשר ערכו של הוא הסיביות הנמוכות של .
  4. מחשב את .
  5. הטקסט המוצפן הוא .

פענוח

  1. המקבל משתמש במפתח הפרטי שבידיו כדי לחשב את
  2. ואת
  3. ואז מחשב את
  4. ואת
  5. ואז מחלץ את הגרעין ההתחלתי .
  6. הוא מפענח את המסר באותה הדרך בה הוצפן, עבור כל בלוק מוצפן מחשב את ואז משתמש ב- הסיביות הנמוכות כדי לחבר ב-XOR עם בלוק הטקסט המוצפן: כדי לקבל את .

הוכחה לנכונות האלגוריתם

ראשית ממשפט השאריות הסיני נובע, היות ש- הוא שארית ריבועית מודולו , הוא שארית ריבועית מודולו הגורמים הראשוניים של . ולפי תכונות סימן לז'נדר .

שנית, ניתן לראות ש-

באופן דומה וכן וכן הלאה.

מזה נובע ש:

וגם

ולבסוף כיוון ש- לכן כנ"ל לגבי . לכן אם מחשבים את מתקבל הגרעין ההתחלתי . אם הגרעין ההתחלתי ידוע הפענוח טריוויאלי, כיון שכל מה שנדרש הוא פעולת XOR חוזרת על הטקסט המוצפן בדיוק כפי שנעשה עם המקור.

דוגמה להמחשה

לצורך הכנת מפתחות המקבל בוחר ראשוניים מתאימים נניח עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ p=643} ו-עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ q=859} ומחשב את ואז מחשב את משוואת אוקלידס עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 171\cdot 643+-128\cdot 859=1} כך ש-עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ a=171,b=-128} . המפתח הפומבי הוא אם כן עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 552337} והמפתח הפרטי הוא .

כעת אם השולח מעוניין להצפין את המסר עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ m={\mbox{9C5B82}}} (בייצוג הקסדצימלי, בסה"כ 24 סיביות). הוא מחשב תחילה את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ \left\lfloor\log_2(552337)\right\rfloor=19} ואז עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ h=\left\lfloor\log_2(19)\right\rfloor=4} ואז מחלק את סיביות המסר לשישה בלוקים בני ארבע סיביות כל אחד ומתקבל:

כעת בוחר גרעין התחלתי אקראי, נניח עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ x=201036} (שהוא עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 21403^2\mbox{ mod }552337} ). הצפנת המסר מוצגת בטבלה הבאה, כאשר מייצג את ארבע הסיביות הנמוכות של , בכל שלב לאחר העלאת בריבוע מחשבים את :

עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ i} בסיביות בסיביות בסיביות
1 עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 1101=\mbox{D}} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0100=4}
2 עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 1100=\mbox{C}} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0111=7} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 1011=\mbox{B}}
3 עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 477255} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0101=5} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0111=7}
4 עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 155302} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 1011=\mbox{B}} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0110=6} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 1101=\mbox{D}}
5
6 עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0100=4} עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 0110=6}
לסיום מחשב גם את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ x_7=166864} ואת הטקסט המוצפן עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ (c=\mbox{4B2DA6},x_7=166864)} הוא שולח למקבל.

כדי לפענח את הטקסט המוצפן המקבל מחשב תחילה את הערכים:

עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ d_{1}=(644/4)^{7}{\mbox{ mod }}642=479} ואת
עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ d_2=(860/4)^7\mbox{ mod }858=305} ואז
עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle \ v=166864^{305}{\mbox{ mod }}859=30} וכן
עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ u=166864^{479}\mbox{ mod }643=420}

ואז משחזר את הגרעין ההתחלתי כך: עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ x_0=30\cdot 171\cdot 643+420\cdot-128\cdot859\mbox{ mod }552337(=-351301)=201036} . בעזרת הגרעין ההתחלתי הוא משחזר את הרצף הפסאודו אקראי, בדיוק כפי שעשה זאת המצפין ומכאן שחזור המסר קל כיוון ש- עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ m_i=c_i\oplus p_i} לכן עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ m=\mbox{4B2DA6}\oplus \mbox{D77624}=\mbox{9C5B82}} .

ביטחון ויעילות

ערך מורחב – ביטחון סמנטי

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

שיטת הצפנה דטרמיניסטית כמו RSA מכילה מטבעה מספר חולשות מהותיות:

  1. היא אינה בטוחה עבור כל מסר במידה שווה (למשל במסרים קטנים מאוד, הצפנת הערך 0 או 1 תניב תוצאה זהה, כך שקל לזהות זאת).
  2. קל לעיתים לחשב מידע חלקי אודות מקור הצופן מתוך הטקסט המוצפן. למשל ב-RSA ניתן לחשב את הסיבית הנמוכה ביותר של המסר על ידי חישוב סימן יעקובי.
  3. הצפנה חוזרת של אותו המסר תניב תמיד תוצאה זהה. אפשר לזהות בקלות תעבורה של מסרים תדירים בעלי אופי מיוחד גם אם לא ניתן לקרוא את תוכנם.

אפשר להפוך כל שיטה דטרמיניסית לבטוחה סמנטית על ידי הוספת אקראיות למסר לפני תהליך ההצפנה. הכנת מסר באופן זה נהוגה למעשה כחלק מתקן מפתח פומבי של RSA ונקראת RSA-OAEP.

מספר בלום; המודולוס ייקרא מספר בלום אם הוא שלם פריק שהוא כפולה של שני ראשוניים שונים השקולים ל-3 מודולו 4. כלומר אם קיים שלם כלשהו המקיים עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ p=4t+3} . אלגוריתם בלום גולדווסר מיישם גרסה מובנית של המחולל הפסאודו האקראי BBS כאשר הסיביות הנמוכות של השארית הריבועית בכל סבב, משלימות את הרצף הפסאודו אקראי לצורך הצפנת המסר. השארית הריבועית האחרונה נשלחת באופן גלוי כאמור אל המקבל לצורך שחזור הגרעין ההתחלתי. בהנחה שפירוק לגורמים היא בעיה קשה, ניתן להוכיח כי הסיביות הנמוכות של בטוחות סימולטנית, כלומר אין דרך יעילה לחשב אותם מלבד ניחוש, מה שאומר שהמחולל נחשב לבטוח (כל עוד פירוק לגורמים היא בעיה קשה). כמובן הגדרה זו מוגבלת לביטחון חישובי בלבד.

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

הצפנת בלום גולדווסר יעילה מבחינה חישובית כיוון שהטקסט המוצפן המתקבל אינו גדול משמעותית מטקסט המקור, אלא במספר קבוע של סיביות (כגודל השלם בסיביות). תהליך ההצפנה יעיל ודורש רק הכפלה מודולרית (מודולו ) אחת כדי להצפין סיביות, כלומר עבור מודולוס בגודל עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ k} סיביות ומסר בגודל עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ l} סיביות תהליך ההצפנה לוקח עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ O(\frac{lk^2}{\mbox{log}\ k})} פעולות בסיסיות. לעומת RSA למשל שדורשת העלאה בחזקה מודולרית מלאה במידה והמעריך נבחר אקראית. ללא אופטימיזציה העלאה בחזקה מודולרית מלאה דורשת בממוצע עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ 3k/2} פעולות כפל מודולריות כאשר עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ k} שווה ללוגריתם בבסיס 2 של המודולוס. כמו כן תהליך הפענוח של אלגוריתם בלום גולדווסר דורש (בנוסף בשלב ההכנה) רק שלוש העלאות בחזקה מודולריות ללא תלות באורך המסר, יתר הפעולות דומות להצפנה, כלומר בסה"כ עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \ O(k^3)+O(\frac{lk^2}{\mbox{log}\ k})} . מה שאומר שעבור מסרים גדולים, שיטת בלום גולדווסר יעילה יותר מ-RSA.

ראו גם

  • הצפנת פייליר


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

הערך באדיבות ויקיפדיה העברית, קרדיט,
רישיון cc-by-sa 3.0
This article is issued from Hamichlol. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.