הפרימיטיב של Streaming AEAD מספק הצפנה מאומתת לנתוני סטרימינג. היא שימושית כשהנתונים שרוצים להצפין גדולים מדי לעיבוד בשלב אחד. תרחישים נפוצים לדוגמה: הצפנה של קבצים גדולים או של מקורות נתונים פעילים.
ההצפנה מתבצעת בפלחים, שמקושרים למיקום שלהם בתוך מחרוזת הצפנה, ואי אפשר להסיר אותם או לשנות את הסדר שלהם. אי אפשר להוסיף פלחים ממסך מוצפן אחד למסך מוצפן אחר. כדי לשנות טקסט מוצפן קיים, צריך להצפין מחדש את כל מקור הנתונים.1
פענוח המידע מהיר כי רק חלק מהטקסט המוצפן מפוענח ומאומת בכל פעם. אפשר לקבל טקסטים חלקיים ללא עיבוד של כל המידע המוצפן.
הטמעות של AEAD בסטרימינג עומדות בהגדרה של AEAD ובטוחות לפי nOAE. אלה המאפיינים שלהם:
- Secrecy: לא ידוע דבר על הטקסט ללא הצפנה, מלבד האורך שלו.
- Authenticity: אי אפשר לשנות את הטקסט ללא הצפנה שמהווה את הבסיס לטקסט המוצפן בלי שיזוהה.
- Symmetric: הצפנת הטקסט ללא הצפנה ופענוח הטקסט המוצפן מתבצעים באמצעות אותו מפתח.
- ארגון בסדר אקראי: ההצפנה מתבצעת באופן אקראי. שתי הודעות עם אותו טקסט ללא הצפנה יוצרות טקסטים מוצפנים שונים. תוקפים לא יכולים לדעת איזה מידע מוצפן תואם לטקסט ללא הצפנה נתון.
נתונים משויכים
אפשר להשתמש ברכיב ה-Streaming AEAD כדי לקשר טקסט מוצפן לנתונים ספציפיים המשויכים. נניח שיש לכם מסד נתונים עם השדות user-id
ו-encrypted-medical-history
: בתרחיש הזה, אפשר להשתמש ב-user-id
כנתונים משויכים כשמצפינים את encrypted-medical-history
. כך תימנע מהתקפת גורם זדוני אפשרות להעביר היסטוריה רפואית ממשתמש אחד למשתמש אחר.
בחירת סוג מפתח
מומלץ להשתמש ב-AES128_GCM_HKDF_1MB ברוב השימושים. באופן כללי:
- AES-GCM-HKDF
- AES128_GCM_HKDF_1MB (או AES256_GCM_HKDF_1MB) היא האפשרות המהירה יותר. הוא יכול להצפין 264 קבצים בגודל של עד 264 בייטים כל אחד. בתהליך ההצפנה והפענוח נצרך נפח זיכרון של כ-1MB.
- האפשרות AES128_GCM_HKDF_4KB צורכת כ-4KB של זיכרון, והיא בחירה טובה אם למערכת שלכם אין הרבה זיכרון.
- AES-CTR HMAC
- AES128_CTR_HMAC_SHA256_1MB (או AES256_CTR_HMAC_SHA256_1MB) היא אפשרות שמרנית יותר.
התחייבויות אבטחה
הטמעות של AEAD בסטרימינג מציעות:
- אבטחה מסוג CCA2.
- חוזק אימות של 80 ביט לפחות.
- היכולת להצפין לפחות 264 הודעות3 באורך כולל של 251 בייטים2 . לאף התקפה עם עד 232 טקסטים רגילים או טקסטים מוצפנים שנבחרו, אין סיכוי הצלחה גדול מ-2-32.
תרחיש לדוגמה
אני רוצה להצפין קבצים גדולים או מקורות נתונים
-
אחת מהסיבות להגבלה הזו היא השימוש במפתח הצפנה מסוג AES-GCM. הצפנה של מקטע טקסט ללא הצפנה אחר באותו מיקום תהיה זהה לשימוש חוזר ב-IV, שמפר את ההתחייבויות לאבטחה של AES-GCM. סיבה נוספת היא שכך אפשר למנוע התקפות חזרה לאחור, שבהן התוקף עשוי לנסות לשחזר גרסה קודמת של הקובץ בלי שיזוהה. ↩
-
יש תמיכה ב-232 פלחים, כאשר כל פלח מכיל
segment_size - tag_size
בייטים של טקסט ללא הצפנה. בקטעים של 1MB, הגודל הכולל של הטקסט ללא הצפנה הוא 232 * (220-16) ~= 251 בייטים. ↩ -
הצפנת AEAD בסטרימינג הופכת ללא מאובטחת כשחוזרים על שילוב של מפתח נגזר (128 ביט) וקידומת של nonce (ערך אקראי עצמאי באורך 7 בייטים). יש לנו עמידות בהתנגשויות של 184 סיביות, שמתרגמת בערך ל-264 הודעות אם אנחנו רוצים שסיכוי ההצלחה יהיה קטן מ-2-32. ↩