סטרימינג של הצפנה מאומתת עם נתונים משויכים (Streaming AEAD)

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

ההצפנה מתבצעת בפילוחים שקשורים למיקום שלהם בתוך מידע מוצפן, ואי אפשר להסיר אותם או לשנות את הסדר שלהם. אי אפשר להוסיף קטעים ממידע מוצפן אחד לטקסט מוצפן אחר. כדי לשנות מידע מוצפן (ciphertext) קיים, כל מקור הנתונים צריך להיות מוצפן מחדש.1

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

הטמעות של AEAD פועלות בהתאם להגדרה של AEAD, והן מאובטחות על ידי OAE2. יש להם את המאפיינים הבאים:

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

נתונים משויכים

אפשר להשתמש בסטרימינג של AEAD כדי לקשר בין מידע מוצפן (ciphertext) לנתונים משויכים ספציפיים. נניח שיש לכם מסד נתונים עם השדות user-id ו-encrypted-medical-history. בתרחיש הזה, אפשר להשתמש ב-user-id כנתונים משויכים במהלך ההצפנה של encrypted-medical-history. זה מונע מתוקפים להעביר את ההיסטוריה הרפואית ממשתמש אחד לאחר.

בחירת סוג מפתח

אנחנו ממליצים על AES128_GCM_HKDF_1MB לרוב השימושים. באופן כללי:

  • AES128_GCM_HKDF_1MB (או AES256_GCM_HKDF_1MB) היא האפשרות המהירה יותר. הוא יכול להצפין 264 קבצים בגודל של עד 264 בייטים כל אחד. בתהליך ההצפנה והפענוח נעשה שימוש בכ-1MB מהזיכרון.
  • AES128_GCM_HKDF_4KB צורך זיכרון בנפח של כ-4KB , ומומלץ להשתמש בה אם אין למערכת הרבה זיכרון.
  • AES128_CTR_HMAC_SHA256_1MB (או AES256_CTR_HMAC_SHA256_1MB) היא אפשרות שמרנית יותר.

התחייבויות אבטחה

יישומי סטרימינג של AEAD מציעים:

  • אבטחת CCA2.
  • עוצמת אימות של 80 סיביות לפחות.
  • יכולת להצפין לפחות 264 הודעות3 בסכום כולל של 251 בייטים2 . לאף מתקפה עם עד 232 טקסטים ללא הצפנה שנבחרו או עם מידע מוצפן (ciphertext) שנבחרו יש סבירות גבוהה מ-232.

תרחיש לדוגמה

לפרטים, קראו את המאמר אני רוצה להצפין קבצים גדולים או מקורות נתונים גדולים.


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

  2. יש תמיכה ב-232 פלחים, וכל מקטע מכיל segment_size - tag_size בייטים של טקסט ללא הצפנה. לגבי פלחים בגודל 1MB, הגודל הכולל של הטקסט ללא הצפנה הוא 232 * (220-16) ~= 251 בייטים.

  3. סטרימינג של AEAD הופך ללא מאובטח כשחוזרים על שילוב של מפתח נגזר (128 סיביות) וקידומת חד-פעמית (ערך אקראי עצמאי של 7 בייטים). יש לנו עמידות בפני התנגשויות של 184 ביט, כלומר, פחות מ-264 הודעות, אם אנחנו רוצים שההסתברות להצלחה תהיה נמוכה מ- 2-32 הודעות.