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

Primitive การเข้ารหัสที่ผ่านการตรวจสอบสิทธิ์พร้อมข้อมูลที่เกี่ยวข้อง (AEAD) เป็น Primitive ที่ใช้กันมากที่สุดสำหรับการเข้ารหัสข้อมูลและเหมาะกับความต้องการส่วนใหญ่

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 ที่ไม่ผูกมัดคีย์
  • AES-GCM (AES128_GCM, AES256_GCM) มักจะเป็นโหมดที่เร็วที่สุดและมีข้อจำกัดที่เข้มงวดที่สุดเกี่ยวกับจำนวนข้อความ (232) และขนาดข้อความ (~64 GB ต่อข้อความ) เมื่อเกินขีดจำกัดเหล่านี้ AES-GCM จะล้มเหลวอย่างร้ายแรงโดยการรั่วไหลของข้อความธรรมดาและส่วนการตรวจสอบสิทธิ์ของคีย์ภายใน AES-GCM
    • AES-GCM ไม่มีความเสถียร [ABN] และไม่ผูกมัดคีย์ [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 ที่ไม่ผูกมัดคีย์
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) มีขีดจำกัดของจำนวนข้อความและขนาดข้อความสูงกว่า AES-GCM มาก แต่เมื่อล้มเหลว (ซึ่งเกิดขึ้นได้ยากมาก) ก็จะรั่วไหลข้อมูลคีย์ด้วย เนื่องจากไม่มีการเร่งฮาร์ดแวร์ จึงอาจช้ากว่าโหมด AES ในสถานการณ์ที่มีการเร่งฮาร์ดแวร์
    • LGR ที่ไม่ผูกมัดคีย์

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

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

การติดตั้งใช้งาน AEAD มีสิ่งต่อไปนี้

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

ตัวอย่าง Use Case

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