plaintext0123456789ABCDEF14 roundsSubBytesShiftRowsMixColumnsciphertext????????????????????????????????AES-256: 14 rounds of confusion + diffusion

הצפנת AES

11 דקות קריאהקריפטוגרפיה

AES הוא אלגוריתם ההצפנה. נבחר על ידי ממשלת ארה"ב בשנת 2001 לאחר תחרות פתוחה רב שנתית, הוא היה סוס העבודה של ההצפנה לכל עידן האינטרנט המודרני. TLS, WireGuard, BitLocker, FileVault, הצפנת האחסון של הטלפון שלך - כולם, מתחת למכסה המנוע, הם AES.

גוף המאמר המלא מסופק באנגלית להלן.

AES (תקן הצפנה מתקדם) הוא צופן בלוק סימטרי שנבחר על ידי NIST בשנת 2001 לאחר תחרות פתוחה של חמש שנים שהעמידה חמישה עשר עיצובים זה מול זה. הזוכה - בשם במקור Rijndael, שתוכנן על ידי המצפנים הבלגיים ג'ואן דימן ווינסנט רימן - הפך לתקן ההצפנה עבור נתונים פדרליים בארה"ב ובמהירות ברירת המחדל של כמעט כל מערכת מסחרית. השווה לקריפטוגרפיה של מפתח ציבורי (RSA, ECDH) שם יש מפתחות נפרדים לכל כיוון.

Block צופן: מצפין נתחי נתונים בגודל קבוע בכל פעם. AES משתמש בגודל בלוק של 128 סיביות (16 בתים) ללא קשר לגודל המפתח.

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

גדלי מפתח

AES תומך בשלושה גדלים של מפתחות:

  • AES-128 — מפתח 128 סיביות של 10 סיבובים פנימיים פעולות
  • AES-192 — מפתח 192 סיביות, 12 סיבובים
  • AES-256 — מפתח 256 סיביות, 14 סיבוביםXPLZ32PLXX3X34 נחשבים מאובטחים. ל-AES-128 יש 2^128 מפתחות אפשריים, שהם הרבה מעבר לטווח הכוח הגס - בטריליון ניסיונות בשנייה, מיצוי מרחב המפתחות לוקח בערך 10 דציליוני שנים. AES-256 נבחר עבור מרווח אבטחה נומינלי נוסף כנגד התקדמות קריפטוגרפית עתידית, במיוחד קוונטית (האלגוריתם של גרובר מפחית את חוזק המפתח האפקטיבי בחצי מול מחשבים קוונטיים, כך ש-AES-256 נותן רמת אבטחה פוסט-קוונטית של 128 סיביות). רצף של פעולות על פני מספר סבבים:

    • SubBytes — החלף כל בת באמצעות טבלת החלפה לא ליניארית (S-box). matrix.
    • MixColumns — הכפל כל עמודה במטריצה קבועה (בשדה סופי מיוחד).
    • AddRoundKey — XOR עם מפתח עגול-ספציפי הנגזר ממפתח הראשי של PLZ56 ושילוב של XXPL56 ו-XXPL5XX5 התמורה מספקת גם בלבול (כל סיביות פלט תלויה בסיביות מפתח רבות) וגם דיפוזיה (כל סיבית טקסט רגיל משפיעה על סיביות פלט רבים) - שני המאפיינים שאנון זוהה כחיוניים לצופן מאובטח.

      מצבי פעולה

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

      • ECB (ספר קודים אלקטרוני) - כל בלוק מוצפן באופן עצמאי. אל תשתמש לכלום; בלוקים זהים של טקסט רגיל מייצרים טקסט צופן זהה, חושף מבנה.
      • CBC (Cipher Block Chaining) - כל בלוק מסומן בטקסט ההצפנה הקודם לפני ההצפנה. תקן לשנים רבות; פגיע להתקפות ריפוד-אורקל אם לא מאומת.
      • CTR (Counter) — הצפין מונה מתגבר ו-XOR בטקסט רגיל. הופך ביעילות את AES לצופן זרם.
      • GCM (Galois/מצב מונה) — CTR + תג אימות במעבר אחד. המצב המודרני הדומיננטי; בשימוש על ידי TLS 1.3, WireGuard ורוב הפרוטוקולים החדשים. AEAD (Authenticated Encryption with Associated Data) הוא השם הרשמי למחלקה זו.

      אם אתה בוחר מצב AES היום, השתמש ב-AES-GCM אלא אם יש לך סיבה ספציפית שלא לעשות זאת. AES-CBC רגיל ללא HMAC הוא רובה רגלית.

      האצת חומרה

      Intel הציגה את ערכת ההוראות של AES-NI ב-2010; ARM עשתה את אותו הדבר כמה שנים מאוחר יותר. מעבדים מודרניים מצפינים AES בקצבים העולה על 10 GB/s לכל ליבה. הצופן הוא חינמי בעצם בעלות המעבד; צוואר הבקבוק לתקשורת מוצפנת הוא רק לעתים רחוקות AES עצמו.

      זו הסיבה ש-AES-GCM הוא ברירת המחדל בפרוטוקולים מודרניים: זה גם מאובטח וגם חינמי בחומרה. ללא תמיכת חומרה, ChaCha20-Poly1305 היא החלופה המועדפת מכיוון שהיא מהירה יותר מתוכנת AES במעבדים פשוטים וליבות ARM.

      במקומות שבהם לא נעשה שימוש ב-AES

      במקומות מסוימים נמנעים במפורש מ-AES. WireGuard משתמש ב-ChaCha20 מכיוון שהפרוטוקול מכוון להתקנים משובצים ולמגוון צופנים מינימלי. פרוטוקולים ישנים יותר (SSH מדור קודם, OpenVPN ישן יותר) עדיין ברירת המחדל לצפנים אחרים לצורך תאימות. Tor משתמש בשילוב של צפנים שנבחרו למגוון ולא לביצועים. אבל עבור הצפנה חדשה למטרות כלליות - הצפנת דיסק, חיבורי TLS, הצפנת קבצים - AES היא ברירת המחדל והבחירה הבטוחה.

      המתמטיקה מחזיקה מעמד

      אחרי יותר משני עשורים של ניתוח הצפנה, ל-AES אין התקפות מעשיות. ההתקפה האקדמית הטובה ביותר על הצופן המלא מפחיתה את עלות ה-Brute Force בפקטור של בערך 4 - כלומר האבטחה האפקטיבית של AES-128 היא בסביבות 126 סיביות, עדיין לא מעשי לחלוטין לשבירה. התקפות של ערוץ צדדי (תזמון, ניתוח הספק) יכולות לחשוף מפתחות כאשר יישום הוא נאיבי, אך יישומים בזמן קבוע עם האצת חומרה סוגרים את החור הזה. הצופן מאובטח, בכל מידה סבירה.

שאלות נפוצות

האם AES-256 טוב יותר מ-AES-128?
באופן נומינלי בטוח יותר, בפועל שניהם הרבה מעבר לכוח הברוט-force מעשי. הסיבה העיקרית לבחור ב-AES-256 היא חוסן פוסט-קוונטי - האלגוריתם של גרובר מפחית בחצי את האבטחה האפקטיבית נגד תוקפים קוונטיים, כך ש-AES-256 נותן אבטחה פוסט-קוונטית של 128 סיביות לעומת 64 סיביות של AES-128 (שמתחיל להיות לא נוח). עבור רוב ההקשרים, שניהם בסדר.
האם ניתן לפצח AES?
לא בכוח גס בשום זמן ריאלי. התקפות ערוץ צדדי על AES מיושם בצורה גרועה שחזרו מפתחות; קיימות התקפות קריפטאנליטיות על AES מופחת; אבל ל-AES המלא של 10/12/14 עם יישום בזמן קבוע אין הפסקה מעשית ידועה. הצופן עצמו הוא צליל.
מדוע מערכות מסוימות משתמשות ב-ChaCha20 במקום ב-AES?
ביצועים בחומרה ללא AES-NI (התקנים משובצים, ליבות ARM ישנות יותר, מיקרו-בקרים פשוטים). ChaCha20 מיושם בתוכנה במהירות תחרותית עם AES מואצת בחומרה. ב-x86 וב-ARM המודרניים עם AES-NI, AES בדרך כלל מהיר יותר. WireGuard בחרה ב-ChaCha20 כדי להבטיח ביצועים עקביים בכל החומרה.
מה זה AES-GCM לעומת AES-CBC?
שניהם מצבי פעולה AES. AES-GCM היא הצפנה מאומתת - היא מצפינה ומייצרת תג אימות במעבר אחד, ומביסה התעסקות. AES-CBC הוא רק הצפנה; אם אתה צריך אימות אתה צריך להוסיף HMAC בנפרד, וקל לקלקל את השילוב הנכון. השתמש ב-GCM לעיצובים חדשים.
האם AES מגן מפני מחשבים קוונטיים?
צפנים סימטריים כמו AES הם הרבה יותר עמידים לקוונטים מאשר RSA או ECDH. האלגוריתם של גרובר מפחית את חוזק המפתח האפקטיבי בחצי - AES-256 הופך שווה ערך למפתח קלאסי של 128 סיביות, עדיין בלתי ניתן לביצוע. AES-128 הופך ל-64 סיביות, וזה לא נוח. ההמלצה הפוסט-קוונטית היא AES-256 בתוספת גדלי תגי MAC גדולים.
הסבר על הצפנת AES: הצופן מאחורי כמעט הכל מוצפן