การเข้ารหัสที่ตรวจสอบสิทธิ์แล้วด้วยข้อมูลที่เชื่อมโยง (AEAD)

พริมิทีฟ Authenticated Encryption with Associated Data (AEAD) เป็นพริมิทีฟที่ใช้กันมากที่สุดสำหรับการเข้ารหัสข้อมูลและเหมาะกับความต้องการส่วนใหญ่

AEAD มีคุณสมบัติดังต่อไปนี้

  • Secrecy: ไม่มีใครทราบข้อมูลเกี่ยวกับข้อความธรรมดา ยกเว้นความยาวของข้อความ
  • ความถูกต้อง: เป็นไปไม่ได้ที่จะเปลี่ยนแปลงข้อความธรรมดาที่เข้ารหัสซึ่งอยู่ภายใต้ข้อความเข้ารหัสโดยไม่ถูกตรวจพบ
  • สมมาตร: การเข้ารหัสข้อความธรรมดาและการถอดรหัสข้อความเข้ารหัสจะดำเนินการด้วยคีย์เดียวกัน
  • การสุ่ม: การเข้ารหัสจะได้รับการสุ่ม ข้อความ 2 ข้อความที่มีข้อความธรรมดาเหมือนกันจะให้ข้อความเข้ารหัสที่ต่างกัน ผู้โจมตีจะไม่ทราบว่าข้อความเข้ารหัสใดสอดคล้องกับข้อความธรรมดาที่ระบุ หากต้องการหลีกเลี่ยงปัญหานี้ ให้ใช้ AEAD เชิงกำหนดแทน

ข้อมูลที่เกี่ยวข้อง

คุณสามารถใช้ AEAD เพื่อเชื่อมโยงข้อความเข้ารหัสกับข้อมูลที่เชื่อมโยงที่เฉพาะเจาะจงได้ สมมติว่าคุณมีฐานข้อมูลที่มีช่อง user-id และ encrypted-medical-history ในสถานการณ์นี้ คุณสามารถใช้ user-id เป็นข้อมูลที่เชื่อมโยงเมื่อเข้ารหัส encrypted-medical-history ได้ ซึ่งจะป้องกันไม่ให้ผู้โจมตีย้ายประวัติทางการแพทย์จากผู้ใช้รายหนึ่งไปยังอีกรายหนึ่ง

ข้อมูลที่เกี่ยวข้องเป็นตัวเลือกซึ่งจะเลือกหรือไม่ก็ได้ หากระบุไว้ การถอดรหัสจะสำเร็จก็ต่อเมื่อมีการส่งข้อมูลที่เชื่อมโยงเดียวกันไปยังทั้งการเรียกใช้การเข้ารหัสและการถอดรหัส

เลือกประเภทคีย์

แม้ว่าเราจะแนะนำ AES128_GCM สำหรับการใช้งานส่วนใหญ่ แต่ก็มีคีย์ประเภทต่างๆ สำหรับความต้องการที่แตกต่างกัน AES128 มีการรักษาความปลอดภัยแบบ 128 บิต และ AES256 มีการรักษาความปลอดภัยแบบ 256 บิต

ข้อจำกัดด้านความปลอดภัยที่สำคัญ 2 ประการเมื่อเลือกโหมดมีดังนี้

  1. QPS: มีข้อความกี่รายการที่เข้ารหัสด้วยคีย์เดียวกัน
  2. ขนาดข้อความ: ข้อความมีขนาดเท่าใด

ประเภทคีย์ที่รองรับ

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) ที่มีเวกเตอร์การเริ่มต้น (IV) ขนาด 16 ไบต์เป็นโหมดที่ปลอดภัยที่สุดและมีขอบเขตที่ดี
    • การคอมมิตคีย์
  • AES-EAX (AES128_EAX, AES256_EAX) มีความปลอดภัยน้อยกว่าและเร็วกว่า AES128_CTR_HMAC_SHA256 เล็กน้อย
    • MLGR ที่ไม่ใช้ Key-Committing
  • AES-GCM (AES128_GCM, AES256_GCM) มักจะเป็นโหมดที่เร็วที่สุดโดยมีขีดจำกัดที่เข้มงวดที่สุดเกี่ยวกับจำนวนข้อความ (232) และขนาดข้อความ (~64 GB ต่อข้อความ) เมื่อเกินขีดจำกัดเหล่านี้ AES-GCM จะล้มเหลวอย่างรุนแรงโดยการรั่วไหลของข้อความธรรมดาและส่วนการตรวจสอบสิทธิ์ของคีย์ภายใน AES-GCM
    • AES-GCM ไม่ใช่ทั้งแบบ Robust [ABN] และ Key-committing [GLR] คุณสามารถสร้างข้อความเข้ารหัสลับที่ถอดรหัสได้ด้วยคีย์ 2 คีย์ที่แตกต่างกัน ซึ่งอาจนำไปสู่การโจมตีที่เกิดขึ้นจริงได้ [DGRW] ตรวจสอบโมเดลภัยคุกคามอย่างรอบคอบหากฝ่ายตรงข้ามเลือกคีย์
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] ทนทานต่อการใช้ Nonce ในทางที่ผิดโดยไม่ตั้งใจ และมีประสิทธิภาพเกือบเท่ากับ AES-GCM ขีดจำกัดจำนวนข้อความและขนาดข้อความสำหรับ AES-GCM-SIV ที่มี IV แบบสุ่มจะสูงกว่าขีดจำกัดของ AES-GCM มาก เมื่อเกินขีดจำกัดเหล่านี้ AES-GCM-SIV จะล้มเหลวโดยไม่ก่อให้เกิดความเสียหายมากนัก โดยจะรั่วไหลเฉพาะข้อมูลที่ว่าข้อความ 2 ข้อความมีค่าเท่ากัน AES-GCM-SIV มีความปลอดภัยมากกว่า แต่มีการใช้งานในทางปฏิบัติน้อยกว่า
    • ขอบเขตสำหรับ Nonce แบบสุ่ม
      • 232 ข้อความ โดยที่ข้อความธรรมดาแต่ละรายการมีขนาดไม่เกิน 8 GiB
      • 248 ข้อความ โดยที่ข้อความธรรมดาแต่ละข้อความมีขนาดไม่เกิน 32 MiB
      • 264 ข้อความ โดยที่ข้อความธรรมดาแต่ละรายการมีขนาดไม่เกิน 128 KiB
    • หากต้องการใช้ใน Java ให้ติดตั้ง Conscrypt
    • ADGKLS ที่ไม่ใช้ Key-Committing
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) มีขีดจำกัดจำนวนข้อความและขนาดข้อความมากกว่า AES-GCM มาก แต่เมื่อดำเนินการไม่สำเร็จ (ซึ่งไม่น่าเป็นไปได้) ก็จะทำให้ข้อมูลคีย์รั่วไหลด้วย ซึ่งไม่ได้เร่งฮาร์ดแวร์ จึงอาจช้ากว่าโหมด AES ในสถานการณ์ที่มีการเร่งฮาร์ดแวร์
    • LGR ที่ไม่ใช้คีย์คอมมิตติ้ง

ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบการส่งข้อมูลของข้อความเข้ารหัส AEAD

การรับประกันความปลอดภัย

การติดตั้งใช้งาน AEAD มีดังนี้

  • การรักษาความปลอดภัย CCA2
  • ระดับการตรวจสอบสิทธิ์อย่างน้อย 80 บิต
  • ความสามารถในการเข้ารหัสข้อความอย่างน้อย 232 ข้อความที่มีขนาดรวม 250 ไบต์ ไม่มีการโจมตีด้วยข้อความธรรมดาที่เลือกหรือข้อความเข้ารหัสที่เลือกสูงสุด 232 รายการที่มีความน่าจะเป็นที่จะสำเร็จมากกว่า 2-32

ตัวอย่าง Use Case

ดูหัวข้อฉันต้องการเข้ารหัสข้อมูลและฉันต้องการเชื่อมโยงข้อความเข้ารหัสกับบริบท