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

תוכן שנמחק תוכן שנוסף
Matanyabot (שיחה | תרומות)
מ בוט החלפות: ביטחו\1
אין תקציר עריכה
שורה 10:
===הצפנה===
להצפנת המסר <math>\ m</math> המצפין משיג לידיו עותק של המפתח הפומבי ופועל כדלהלן:
# מחלק את המסר ל-<math>\ t</math> לגושיםלבלוקים, כל אחד בגודל <math>\ h</math> סיביות, כאשר <math>\ h=\mbox{lg lg }n</math> (ה[[לוגריתם]] בבסיס 2 של מספר סיביות ה[[חשבון מודולרי|מודולוס]] בקירוב).
# בוחר גרעין אקראי סודי <math>\ x_0</math>, שהוא שארית ריבועית מודולו <math>\ n</math> (אפשר להשיג זאת על ידי בחירת שלם אקראי <math>\ r\in\mathbb{Z}^*_n</math> וחישוב <math>\ x_0=r^2\mbox{ mod }n</math>).
# ההצפנה מבוצעת באופן רקורסיבי ב-<math>\ t</math> סבבים כאשר בכל סבב: א. הוא מחשב את <math>\ x_i=x^2_{i-1}\mbox{ mod }n</math>, ב. מצפין את גושבלוק המסר <math>\ m_i</math> כדלהלן: <math>\ c_i=p_i\oplus m_i</math>, כאשר ערכו של <math>\ p_i</math> הוא <math>\ h</math> הסיביות הנמוכות של <math>\ x_i</math>.
# מחשב את <math>\ x_{t+1}=x^2_t\mbox{ mod }n</math>.
# הטקסט המוצפן הוא <math>\ (c_1,c_2,...,c_t,x_{t+1})</math>.
שורה 22:
# ואת <math>\ v=x^{d_2}_{t+1}\mbox{ mod }q</math>
# ואז מחלץ את הגרעין ההתחלתי <math>\ x_0=vap+ubq\mbox{ mod }n</math>.
# הוא מפענח את המסר באותה הדרך בה הוצפן, עבור כל גושבלוק מוצפן <math>\ c_i</math> מחשב את <math>\ x_i=x^2_{t-1}\mbox{ mod }n</math> ואז משתמש ב-<math>\ h</math> הסיביות הנמוכות כדי לחבר ב-XOR עם גושבלוק הטקסט המוצפן: <math>\ m_i=p_i\oplus c_i</math> כדי לקבל את <math>\ m_i</math>.
 
===הוכחה לנכונות האלגוריתם===
שורה 43:
לצורך הכנת מפתחות המקבל בוחר ראשוניים מתאימים נניח <math>\ p=643</math> ו-<math>\ q=859</math> ומחשב את <math>\ n=pq=552337</math> ואז מחשב את משוואת אוקלידס <math>\ 171\cdot 643+-128\cdot 859=1</math> כך ש-<math>\ a=171,b=-128</math>. המפתח הפומבי הוא אם כן <math>\ 552337</math> והמפתח הפרטי הוא <math>\ (643,859,171,-128)</math>.
 
כעת אם השולח מעוניין להצפין את המסר <math>\ m=\mbox{9C5B82}</math> (בייצוג [[בסיס הקסדצימלי|הקסדצימלי]], בסה"כ 24 סיביות). הוא מחשב תחילה את <math>\ \left\lfloor\log_2(552337)\right\rfloor=19</math> ואז <math>\ h=\left\lfloor\log_2(19)\right\rfloor=4</math> ואז מחלק את סיביות המסר לשישה גושיםבלוקים בני ארבע סיביות כל אחד ומתקבל:
: <math>\ m_1=1001,m_2=1100,m_3=0101,m_4=1011,m_5=1000,m_6=0010</math>
כעת בוחר גרעין התחלתי אקראי, נניח <math>\ x=201036</math> (שהוא <math>\ 21403^2\mbox{ mod }552337</math>). הצפנת המסר <math>\ m</math> מוצגת בטבלה הבאה, כאשר <math>\ p_i</math> מייצג את ארבע הסיביות הנמוכות של <math>\ x_i</math>, בכל שלב לאחר העלאת <math>\ x_i</math> בריבוע מחשבים את <math>\ c_i=p_i\oplus m_i</math>: