GCM

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש

Galois/Counter Mode הוא מצב הפעלה של צופן בלוקים שפותח ב-2005 על ידי ג'ון ויגה מחברת Secure Software ודייוויד מקגרו מסיסקו, המשלב צופן סימטרי במצב מונה ופונקציית גיבוב אוניברסלית מעל שדה סופי מורחב, כדי לייצר הצפנה מאומתת עם מידע נלווה המסומנת בקיצור AEAD לפי פרדיגמה של "הצפנה ואז אימות". השיטה מבוססת על רעיון שהוכח כבטוח על ידי בלייר, קיליאן, רוגווי ואחרים ומסתמך גם על ביטחון הצופן הסימטרי שבבסיסו, בהנחה שהוא תמורה פסאודו-אקראית (צופן AES נראה כעונה להגדרה זו, אם כי לא קיימת הוכחה פורמלית). כמו כן GCM יעיל וקל להטמעה בחומרה ומאפשר ביצועים טובים גם בתוכנה, בעיקר אם מנצלים טבלאות אחזור (lookup table). האלגוריתם מצפין את המידע ומייצר טקסט מוצפן ותג אימות מהמידע המוצפן ומידע נלווה נוסף אם קיים, כאשר תג האימות מבטיח מעצם ההגדרה שלא ניתן יהיה לזייף טקסט מוצפן ותג מתאים ללא ידיעת מפתח ההצפנה הסודי המשותף, כך שפונקציית האימות של המקבל תחזיר 'אמת'.

GCM חופשי לשימוש ואינו מעוגן בפטנט או זכויות יוצרים. והוא אומץ על ידי המכון הלאומי לתקנים וטכנולוגיה של ממשלת ארצות הברית בתקן NIST SP800-38D[1] להצפנה מאומתת ובתקן IEEE 802.1AE. הוצע ב-RFC 5288 ונכלל בפרוטוקול SSL. הוא פופולרי בשל ביצועיו הטובים, תפוקתו מהמהירות הידועות כיום להצפנה מאומתת (בערך 3.7 cpb על מעבד אינטל 64 ביט).

תיאור הערכים

תרשים לדוגמה של הצפנה מאומתת עם מסר המכיל שני בלוקים ומידע נלווה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} המכיל בלוק אחד. הסמל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle E_K} מייצג את צופן הבלוקים (לדוגמה AES) עם המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} . הסמל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{mult}_H} מייצג כפל פולינומים מעל (הסבר בהמשך), עם מפתח הגיבוב הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} אותו מייצרים על ידי הצפנה של מחרוזת אפסים. הסמל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{incr}} מייצג את פונקציית קידום המונה. פלט האלגוריתם הוא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C_1,C_2,T} .

קלט

  • מפתח הצפנה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} באורך המתאים לצופן הבלוקים שבשימוש (בדרך כלל 128 סיביות). מפתח ההצפנה צריך להיות משותף גם למקבל.
  • וקטור אתחול שאינו סודי, בגודל הנע בין בית אחד ל-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{64}} בתים. הערך המומלץ לצורך ביצועים אופטימליים הוא 96 סיביות.
  • טקסט מקור הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} בגודל שבין אפס בתים ל-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{39}-256} . מחרוזת ריקה מסומנת כאן "{}".
  • דטה מאומתת נוספת המסומנת כאן הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} . זהו מידע גלוי נלווה, שאמור להיות מאומת אך לא מוצפן. בגודל של עד בתים.

פלט

  • טקסט מוצפן הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C} שגודלו בדיוק כגודל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} .
  • תג אימות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} שגודלו יכול להיות בין 64 ל-128 סיביות (בין שמונה לשישה עשר בתים). אורך התג מסומן כאן ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle t} .

פענוח ואימות

אלגוריתם הפענוח המאומת מקבל את ומפיק את הטקסט המקורי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} או סימן מיוחד "FAIL" המציין שהאימות נכשל, אם הייתה שגיאה. לפי הגדרת האלגוריתם, הפענוח המאומת יחזיר את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} רק אם הערכים חושבו על ידי פונקציית ההצפנה המאומתת של GCM. במידה שאחד מהם שונה אפילו במעט, בסיכוי גבוה מאוד אלגוריתם הפענוח יחזיר הודעת שגיאה. כאשר אז המשמעות היא שאחד הערכים שגוי בגלל תקלה או בשל שינוי זדוני. המידע הנלווה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} משמש כמידע תפעולי ועשוי להכיל כתובות IP, פורטים, מספרי גרסאות וכיוצא בזה. אילו בדרך כלל מהווים חלק מהכותר הנלווה למידע כדי לאפשר למערכת בצד השני לטפל בו בצורה נכונה, לכן אמור להיות במצב גלוי. הפרוטוקול מאפשר לאמת ולהבטיח את שלמות המידע הנלווה כדי להגן על סודיות המידע המוצפן מפני התקפת מוצפן-נבחר.

המטרה העיקרית של ה-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle IV} שנקרא גם Nonce היא לספק ערך ייחודי וחד פעמי שנדרש בכל פעם שמפעילים את האלגוריתם עם מפתח נתון. ה-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle IV} אינו חייב להיות סודי ויכול להיות מספר אקראי או נומרטור כלשהו שצריך להיות ידוע גם לצד המקבל, המגבלה היחידה היא שלא יחזור על עצמו עם מפתח נתון. ב-GCM וקטור האתחול מאומת. אם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} מכיל 0 בתים, ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} מכיל בתים כלשהם, אזי למעשה מתקבל אימות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} בלבד. והיות ש- נותר גלוי, במקרה זה GCM מתנהג כקוד אימות מסרים ללא הצפנה. זאת ללא שינוי באלגוריתם. לצורך ההבחנה מסמנים מקרה זה כ-GMAC. הערך הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle t} צריך להיות לפחות 64 כדי לקבל רמת ביטחון מינימלי של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{-64}} . לטענת המפתחים התקפה על GCM של חיפוש רנדומלי של תגים עד שנמצא זיוף, תצליח בהסתברות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (B+1)2^{-t}} כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle B} הוא מספר הבלוקים שהוצפנו. לכן אפקטיבית חוזק התג הוא בסדר גודל של סיביות. מסיבה זו לא מומלץ להצפין עם מפתח נתון יותר מ-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{68}} בתים.

תיאור האלגוריתם

באלגוריתם הבא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle E} מייצג את צופן הבלוקים, פירוש הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle E(K,Y)} הוא הצפנה של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y} עם המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} . הפונקציה מחזירה ערך בגודל 64 סיביות המייצג את מספר הסיביות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle x} . הביטוי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 0^l} מתייחס למחרוזת של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle l} אפסים. הביטוי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle a\| b} מייצג שרשור, כלומר חיבור של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} עם למחרוזת ארוכה יותר המכילה את שניהם בזה אחר זה. הפונקציה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{MSB}_t(S)} מחזירה את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle t} הסיביות המשמעותיות ביותר של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle S} . הערכים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n,u} מייצגים את חלוקת המסר למקטעים לפי הנוסחה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (n-1)128+u} . כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 1\le u\le 128 } כך ש-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} מורכב למעשה ממערך של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n-1} בלוקים בגודל 128 סיביות פלוס בלוק אחד בגודל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle u} סיביות המרופד באפסים לפי הצורך כדי להשלימו לגודל בלוק מלא. למעשה מתקבל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P_1,P_2,...,P_{n-1},P_n^*} (הכוכבית מציינת שאורכו של הבלוק האחרון יכול להיות קטן מ-128). וכן לגבי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C} . והמידע הנלווה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} הוא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A_1,A_2,...,A_{m-1},A_m^*} . כאשר סך כל סיביות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A} הוא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (m-1)128+v} . ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 1\le v\le 128} . הפונקציה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{incr}(Y)} מייצגת קידום ערכו של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y} באחד מודולו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{32}} . למעשה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y} יכול להיות גדול מ-32 סיביות אך המונה נשאר בשל הצמצום המודולרי בגודל 32 סיביות. הסימן הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \oplus} מייצג XOR והפונקציה GHASH מוגדרת להלן.

מהלכי ההצפנה

  1. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H=E_K(0^{128})}
  2. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y_0=\begin{cases} IV \ \| \ 0^{31}1, & \text{if } \text{len}(IV)=96 \\ \text{GHASH}(H,\{\},IV), & \text{otherwise} \end{cases}}
  3. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y_i=\text{incr}(Y_{i-1})\text{ for }i=1,...,n-1}
  4. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C_i=P_i\oplus E_K(Y_i)\text{ for }i=1,...,n-1}
  5. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C_n^*=P_n^*\oplus \text{MSB}_u(E_K(Y_n))}
  6. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T=\text{MSB}_t(\text{GHASH}(H,A,C)\oplus E_K(Y_0))}

במילים, תחילה מצפינים מחרוזת של 128 אפסים עם המפתח הסודי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} , לאחר מכן מכינים את ערכו ההתחלתי של המונה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y} לאחר מכן מבצעים איטרציה ומכינים את כל ערכי המונה הדרושים: מחברים את המונים עם בלוקי הטקסט הקריא אחד אחרי השני באמצעות XOR להפקת הטקסט המוצפן ולאימות משתמשים ב-GHASH עם מפתח האימות והמידע הנלווה ומחברים ב-XOR עם הצפנת צופן הבלוקים עם המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} (שהוא טקסט מוצפן של וקטור האתחול שהוצפן עם המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} .

הפונקציה GHASH

פונקציה רקורסיבית המגדירה את ערכי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X_i} החל מ-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i=0} עד הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i=m+n+1} כדלהלן:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X_i= \begin{cases} 0, & \text{for }i=0 \\ (X_{i-1}\oplus A_i)\cdot H, & \text{for }i=1,...,m-1 \\ (X_{m-1}\oplus (A_m^* \ \| \ 0^{128-v}))\cdot H, & \text{for }i=m \\ (X_{i-1}\oplus (C_{i-m})\cdot H, & \text{for }i=m+1,...,m+n-1 \\ (X_{m+n-1}\oplus (C_n^* \ \| \ 0^{128-u}))\cdot H, & \text{for }i=m+n \\ (X_{m+n}\oplus (\text{len}(A) \ \| \ \text{len}(C)))\cdot H, & \text{for }i=m+n+1 \\ \end{cases}}

מהלכי הפענוח

  1. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H=E_K(0^{128})}
  2. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y_0=\begin{cases} IV \ \| \ 0^{31}1, & \text{if } \text{len}(IV)=96 \\ \text{GHASH}(H,\{\},IV), & \text{otherwise} \end{cases}}
  3. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T'=\text{MSB}_t(\text{GHASH}(H,A,C)\oplus E_K(Y_0))}
  4. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y_i=\text{incr}(Y_{i-1})\text{ for }i=1,...,n}
  5. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P_i=C_i\oplus E_K(Y_i)\text{ for }i=1,...,n}
  6. הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P_n^*=C_n^*\oplus \text{MSB}_u(E_K(Y_n))}

תג האימות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T'} מושווה לתג המקורי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} שהגיע יחד עם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle C} . אם הם שווים מוחזר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} אם לא, מוחזר "FAIL". שים לב שכדי למנוע התקפת תזמון, התהליך מתנהל באופן זהה גם במקרה של שגיאה כלומר במקרה של כישלון FAIL יוחזר רק לאחר שורה 6. אף על פי שאפשר לדעת אם חל שינוי בחלק מהערכים שהתקבלו כבר בשורה 3.

כפל פולינומים מעל השדה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle GF(2^{128})}

בפונקציה GHASH מבוצע כפל מודולרי בשדה הבינארי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \mathbb{F}_{2^{128}}} מודולו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{128}} . כלומר רואים במחרוזות הסיביות 'כמקדמים בינאריים' של פולינומים ממעלה נמוכה מ-128 לפי סדר בתים גדול (כלומר הסיבית הכי המשמעותית מייצגת את המקדם הראשון). לצורך הצמצום המודולרי משתמשים בפולינום פרימיטיבי קבוע הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle f(\alpha)=\alpha^{128}+\alpha^7+\alpha^2+\alpha+1} המיוצג על ידי המחרוזת הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R=11100001 \ \| \ 0^{120}} (כלומר הבית הראשון מכיל את 11100001 (0xE1) והיתר אפסים, בסך הכול 128 סיביות או 16 בתים).

בפונקציה מתבצע הכפל של הקבוע הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} (שהוא תוצאת הצפנה של מחרוזת אפסים) במשתנה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X} הדרך הארוכה לחישוב הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X\cdot H} אינה יעילה, אפשר לפשט את התהליך על ידי רקורסיה של הכפלות בפולינום הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha} המיוצג על ידי האלמנט הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} המקביל למחרוזת הבינארית '10' (או בבסיס הקסדצימלי 0x02). פעולה זו שוות ערך לפעולת Shift left, כלומר הזזה של כל הסיביות שמאלה (למעלה) פוזיציה אחת, הסיבית המשמעותית ביותר נפלטת והסיבית הראשונה מתאפסת, הפעולה Shift מובנית בכל המעבדים והיא יעילה. אם הסיבית המשמעותית ביותר של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X} (לפני ההזזה) המיוצגת על ידי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X_{127}} היא אפס, מתקבל למעשה פולינום ממעלה 127, אחרת התרחשה גלישה ולכן לפי כללי החשבון המודולרי יש צורך לחלק את התוצאה בפולינום הפרימיטיבי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle f(\alpha)} ולקחת את השארית. כלומר למצוא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle q} ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle r} המקיימים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha^{128}+\alpha=q\cdot f+r} . קל לפתור את המשוואה עבור המקרה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle q=1} כי אז מתקבל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle r=\alpha^{128}+\alpha-f} . יוצא שהצמצום המודולרי מקביל למעשה לפעולת חיסור אחת במקדמים הנמוכים של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle f} . בשדה בינארי פעולת חיבור מתבצעת על כל המקדמים בנפרד מודולו 2 שהיא מקבילה למעשה לפעולת XOR. היות ש-XOR הופכי של עצמו חיסור זהה לחיבור.

בסיכומו של דבר הכפל ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha} דורש רק הזזת כל סיביות המחרוזת פוזיציה אחת ופעולת XOR מותנית אחת עם הקבוע לעיל. שהן כידוע פעולות מהירות וזולות במונחי מחשוב. מכאן הדרך לביצוע כל כפל ביעילות רבה ברקורסיה. כדי לחשב את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y\cdot X} מייצגים את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y} כחזקות של האלמנט הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} , מבצעים רקורסיה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X,X\cdot P,X\cdot P^2,...} כלומר בכל שלב מכפילים את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X} ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} בשיטה המתוארת ואם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Y_i=1} מבצעים חיבור אחד נוסף ב-XOR (מלבד החיסור המותנה בכפל ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P} ), התוצאה היא ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z} כדלהלן:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=0,V=X}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i=0\text{ to }127\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{if }Y_i=1\text{ then: } Z=Z\oplus V}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle V=V\cdot P}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{Return }Z}

מספר הפעמים שיש להפעיל את אלגוריתם הכפל בהצפנה אחת של טקסט בגודל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle p} סיביות הוא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \left \lceil p/128 \right \rceil +1} . וכן אם יש מידע נלווה בגודל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle q} סיביות יש להוסיף הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \left \lceil q/128 \right \rceil +1} פעולות כפל. יתרה מזו, אם הזיכרון זמין, אפשר להאיץ את פעולת הכפל על ידי הכנה מוקדמת של טבלאות כפל. כלומר כדי לחשב את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X\cdot H} אפשר להכין טבלה של תת-קבוצה של חזקות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} . אם מחלקים את 128 הסיביות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} ל-16 בתים, ומכינים 16 טבלאות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0,...,M_{15}} של 256 ערכים כל אחת, פעולת הכפל של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X} כלשהו יכולה להיות:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=M_0[x_0]\oplus M_1[x_1]\oplus \cdots \oplus M_{15}[x_{15}]} .

הערך הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X_i} מתייחס לבית ה-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i} של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle X} . הרעיון הוא שאם מבודדים שמונה סיביות של כלשהו פעולת הכפל ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} היא תוצאה אחת מתוך הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^8} תוצאות אפשריות, כלומר 256 אלמנטים. אם מכפילים ב-16 מתקבל למעשה כל האפשרויות כאשר סך כל הזיכרון המנוצל הוא 65,536 בתים. ויקטור שופ הציע[2] רעיון לצמצם את דרישות הזיכרון במחיר של חישוב ארוך יותר. אפשר להיפטר מכל הטבלאות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_i} למעט הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0} ולבצע את הכפל כדלהלן:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H\cdot X=H\cdot \bigoplus_{i=0}^{15} x_i\cdot P^{8i} = \bigoplus_{i=0}^{15} (x_i\cdot H)\cdot P^{8i}}

כלומר אפשר לבצע את הכפל ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P^8} רקורסיבית יחד עם פעולות XOR. וכן להיעזר בטבלה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0} כדי לחשב את הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle x_i\cdot H} . אולם תהיה בעיה של עם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P^{128}} כי הוא חורג מגודל 16 בתים. אפשר להוסיף טבלה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R} שתכלול את כפולות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle x} ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle P^{128}} . בשיטת שופ אפשר לצמצם את דרישות הזיכרון של שתי הטבלאות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0} ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R} לסך הכול 256 ועוד 64 בתים במחיר של מעט עבודה נוספת. להלן תיאור אלגוריתם שופ:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=0}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i=15 \text{ down to }1\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=Z\oplus M_0[X_i]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle A=X_{15}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }j=15\text{ down to }1\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z_j=Z_{j-1}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=Z\oplus R[A]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle Z=Z\oplus M_0[X_0]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{Return }Z}

האלגוריתם להכנת הטבלה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0} הוא:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_{128}=H,i=64}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{While }i>0\text{ do }}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_i=M_{2i}\cdot P,i=\left\lfloor i/2\right\rfloor}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i=2}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{While }i<128\text{ do }}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{For }j=1\text{ to }i-1\text{ do: }M_{i+j}=M_i\oplus M_j}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i=2i}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_0=0^{128}}

באותה דרך אפשר להכין את יתר הטבלאות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_1,...,M_{15}} .

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

GCM בנוי לפי פרדיגמה של הצפנה מאומתת שנקראת "הצפנה ואז אימות" (encrypt-then-authenticate) שידועה בביטחון שהיא מספקת, בתנאי שהמרכיבים הבסיסיים כמו הצופן הסימטרי ופונקציית הגיבוב בטוחים. ההעדפה של מצב מונה נובעת מתכונת המקביליות ומהפשטות שלו. וניצול כפל פולינומים מעל השדה המורחב הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle GF(2^{128})} נובע גם בשל תכונת האקראיות המוכחת ובשל היעילות במימוש במיוחד בחומרה. פחות מעגלים ופחות עיכובים בצינור עיבוד נתונים. הפולינום של השדה נבחר באופן שיכיל משקל נמוך (מספר סיביות אחד נמוך) והוא נלקח מטבלה של גדיאל סרוסי מהטכניון. לצורך האלגוריתם נדרש רק מפתח הצפנה יחיד, בעוד שמפתח פונקציית האימות נגזר ממנו. השימוש בכפל פולינומים מעל שדה בינארי מורחב, הוכח כבטוח נגד התקפת גלוי-נבחר על ידי בלייר, קיליאן, רוגווי ואחרים. השימוש בפונקציית גיבוב 'אוניברסלית' להבטחת שלמות ואימות כמו בקוד אימות מסרים הוכח כבטוח על ידי ווגמן וקרטר. מצב מונה שהועלה לראשונה על ידי דיפי והלמן ב-1979 הוכח על ידם כיעיל ובטוח. לפי הצהרת המפתחים תפוקת האלגוריתם עם זיכרון של 256 בתים עומדת על כ-90 מחזורי שעון לבית בממוצע. וכן הסיכויים להתקפה מוצלחת כנגד מנגנון האימות הם בהסתברות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{-t}} .

ניילס פרגוסון (ממפתחי אלגוריתם Twofish) גילה[3] שתי חולשות במנגנון האימות של GCM כאשר משתמשים בתג אימות קצר כמו 32 או 8 סיביות, בנוסף להערות טכניות לגבי התכנון של GCM. הבעיה הראשונה שהעלה מראה שאפשר להעלות את הסיכויים לזיוף מוצלח לכדי חצי ממה שצפוי, לדוגמה עבור תג אימות בגודל 32 סיביות הסיכויים הם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{-16}} , שזה גבוה במידה ניכרת ממה שהצהירו המפתחים. הסיבה לבעיה אינה GHASH עצמה כיוון שהפונקציה מוכחת כחד כיוונית והתנגשויות הן בהסתברות של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{-(128-k)}} עבור הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^k} בלוקים. הסיבה לנקודת התורפה נעוצה בעובדה שתוצאת GHASH מוצפנת על ידי המפתח באמצעות XOR שכידוע אינו מגן מפני מניפולציה של סיביות הפלט (כלומר קלט עם סיבית שגויה אחת ישפיע רק על הסיבית המקבילה בפלט, זוהי פרצה שמאפשרת התקפה כאשר ידוע איזו סיבית שגויה). אבל הבעיה היותר חמורה היא שבעקבות זיוף מוצלח אחד ניתן להגביר את הסיכויים לחשיפת סיביות אחרות של מפתח האימות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle H} עד כדי חשיפת המפתח כולו אחרי מספר ניסיונות די קצר. ההמלצה שלו היא להשתמש בתג אימות באורך 128 סיביות ולא פחות או במנגנון אימות אחר. אם למשל משנים את GCM כך שלפני XOR עם המפתח מצפינים את התוצאה באמצעות צופן הבלוקים נראה שהבעיה תיפתר על חשבון יעילות.

כמו כן מעלה נילס פרגוסון כמה מגבלות ראויות לציון בתכנון GCM. העובדה שאורך המסר המאומת הוגבל ל-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^{36}-64} שזה יחסית קצר וכן העובדה שהאלגוריתם אינו מגביל את אורך המסר לגבולות בתים מה שעלול ליצור בעיות תאימות וכן העובדה שבמצב אופטימלי נדרשות טבלאות גדולות כדי להגיע לביצועים גבוהים, מה שלטענתו אינו מעשי.

יתרונות

  • מצב מונה נחשב בעיקרון למצב הפעלה מהיר, בטוח ויעיל. השימוש בפעולות אלגבריות פשוטות בשדה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle GF(2^{128})} ניתן למימוש יעיל ומאפשר ביצועים טובים הן בתוכנה והן בחומרה (להלן שיטות יישום מהירות ואלגוריתמים).
  • אפשר להשתמש ב-GCM גם כקוד אימות מסרים עצמאי, כאשר אין צורך בהצפנה, ללא מאמץ מיוחד.
  • במקרה שבוצע שינוי במסר לאחר שתג האימות עבורו הוכן, אפשר לחשב את התג מחדש במאמץ שהוא פרופורציונלי למספר הסיביות ששונו.
  • האלגוריתם מקבל וקטור אתחול באורך שרירותי. כך שאפשר לנצל קטע נתונים כלשהו גם אם גודלו עולה על גודל הבלוק שהצופן מקבל.

ראו גם

לקריאה נוספת

  • McGrew, David A.; Viega, John (2005). "The Galois/Counter Mode of Operation (GCM)". p. 5. Retrieved 20 July 2013. Note that there is a typo in the formulas in the article.

הערות שוליים

Logo hamichlol 3.png
הערך באדיבות ויקיפדיה העברית, קרדיט,
רשימת התורמים
רישיון cc-by-sa 3.0