הצפנה מאומתת עם נתונים משויכים (AESD)

השימוש הבסיסי של הצפנה עם נתונים משויכים (AEAD) הוא הבסיס הנפוץ ביותר להצפנת נתונים, והוא מתאים לרוב הצרכים.

ל-AEAD יש את המאפיינים הבאים:

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

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

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

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

אנחנו ממליצים על AES128_GCM לרוב השימושים, אבל יש סוגים שונים של מפתחות שמתאימים לצרכים שונים (לאבטחת 256 ביט, צריך להחליף את AES128 ב-AES256 שבהמשך). באופן כללי:

  • המצב השמרני ביותר עם גבולות טובים הוא AES128_CTR_HMAC_SHA256 עם וקטור אתחול (IV) בגודל 16 בייטים.
  • AES128_EAX קצת פחות שמרני ומהיר מעט יותר מ-AES128_CTR_HMAC_SHA256.
  • AES128_GCM הוא בדרך כלל המצב המהיר ביותר עם המגבלות המחמירות ביותר על מספר ההודעות וגודל ההודעות. כשיש חריגה מהמגבלות על אורכי נתונים של טקסט ללא הצפנה ושל נתונים משויכים (בהמשך), השימוש ב-AES128_GCM נכשל וחומר המפתח דולף.
  • AES128_GCM_SIV כמעט מהיר כמו AES128_GCM עם גבולות טובים מאוד לכמות גדולה של הודעות אבל קצת פחות מבוסס. כדי להשתמש באפשרות הזו ב-Java, צריך להתקין את Conscrypt.
  • ל-XChaCha20Poly1305 יש מגבלה גדולה יותר על מספר ההודעות וגודל ההודעות מאשר ב-AES128_GCM, אבל אם היא נכשלת (בסבירות נמוכה מאוד) היא גם דולפת של חומר מפתח. היא לא מאיצה באמצעות חומרה, לכן היא עשויה להיות איטית יותר ממצבי AES במצבים שבהם שיפור המהירות באמצעות חומרה זמינה.

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

יישומים של AEAD מציעים:

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

תרחישים לדוגמה

אני רוצה להצפין נתונים ואני רוצה לחבר מידע מוצפן (ciphertext) להקשר שלהם.