การเข้ารหัสที่ตรวจสอบสิทธิ์แล้วด้วยข้อมูลที่เชื่อมโยง (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 เล็กน้อย
  • โดยปกติแล้ว AES-GCM (AES128_GCM, AES256_GCM) จะเป็นโหมดที่เร็วที่สุดและมี ข้อจำกัดที่เข้มงวดที่สุดเกี่ยวกับจำนวนข้อความและขนาดข้อความ เมื่อความยาวของข้อความธรรมดาและข้อมูลที่เกี่ยวข้อง (ด้านล่าง) เกินขีดจำกัดเหล่านี้ AES-GCM จะทำงานล้มเหลวอย่างรุนแรงและทำให้ข้อมูลคีย์รั่วไหล
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) เร็วเกือบเท่า AES-GCM โดยมีข้อจำกัดเช่นเดียวกับ AES-GCM ในเรื่องจำนวนข้อความและขนาดข้อความ แต่เมื่อเกินขีดจำกัดเหล่านี้ ระบบจะทำงานล้มเหลวในลักษณะที่ร้ายแรงน้อยกว่า นั่นคืออาจเปิดเผยเพียงข้อเท็จจริงที่ว่าข้อความ 2 รายการเท่ากัน ซึ่งทำให้ปลอดภัยกว่าการใช้ AES-GCM แต่ในทางปฏิบัติแล้วมีการใช้น้อยกว่า หากต้องการใช้ ฟีเจอร์นี้ใน Java คุณต้องติดตั้ง Conscrypt
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) มีขีดจำกัดด้าน จำนวนข้อความและขนาดข้อความมากกว่า AES-GCM มาก แต่เมื่อเกิดข้อผิดพลาด (ซึ่งมีโอกาสน้อยมาก) ก็จะทำให้ข้อมูลคีย์รั่วไหลด้วย เนื่องจากไม่ได้ใช้การเร่งฮาร์ดแวร์ จึงอาจช้ากว่าโหมด AES ในกรณีที่ใช้การเร่งฮาร์ดแวร์ ได้

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

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

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

ตัวอย่าง Use Case

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