הצפנה היברידית

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

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

להצפנה היברידית יש את המאפיינים הבאים:

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

הצפנה היברידית מיוצגת ב-Tink כצמד של פרימיטיבים:

  • HybridEncrypt להצפנה
  • HybridDecrypt לפענוח

פרמטר של פרטי הקשר

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

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

  • משתמשים ב-context_info כקלט נתונים משויך להצפנה סימטרית של AEAD (cf. RFC 5116).
  • משתמשים בפונקציה context_info כקלט "CtxInfo" של HKDF (אם ההטמעה משתמשת ב-HKDF כפונקציית נגזרת מפתח, cf. RFC 5869).

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

ברוב התרחישים לדוגמה מומלץ להשתמש בסוג המפתח DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM. בסוג המפתח הזה מוטמע תקן הצפנת מפתח ציבורי היברידי (HPKE), כפי שצוין ב-RFC 9180. HPKE מורכב ממנגנון אנקפסולציה של מפתחות (KEM), פונקציית נגזרת מפתחות (KDF) ואלגוריתם הצפנה מאומתת עם נתונים משויכים (AEAD).

DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM משתמש/ת באופן ספציפי ב:

  • KEM: Diffie–Hellman ב-Curve25519 בעזרת HKDF-SHA-256, כדי להסיק את הסוד המשותף.
  • KDF: HKDF-SHA-256 כדי להסיק את ההקשר של השולח והמקבל.
  • AEAD: AES-256-GCM עם צפנים חד-פעמיים של 12 בייטים שנוצרים בהתאם לתקן HPKE.

סוגים נתמכים אחרים של מפתחות HPKE כוללים, בין היתר:

  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
  • DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
  • DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM

לפרטים נוספים על אפשרויות האלגוריתם ל-KEM, KDF ו-AEAD, ראו RFC 9180.

למרות ש-Tink כבר לא מומלץ, היא תומכת גם בכמה וריאציות של ECIES כפי שמתואר בתקן ISO 18033-2 של ויקטור שופ. דוגמאות לסוגים נתמכים של מפתחות ECIES:

  • ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
  • ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
  • ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256

תכונות מינימליות

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

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

אני רוצה לראות החלפת נתונים.