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

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

AEAD มีพร็อพเพอร์ตี้ต่อไปนี้

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

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

AEAD สามารถใช้เพื่อเชื่อมโยงข้อความที่เข้ารหัสกับข้อมูลที่เชื่อมโยงที่เฉพาะเจาะจง สมมติว่าคุณมีฐานข้อมูลที่มีช่อง 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 ซึ่งมีข้อจำกัดเกี่ยวกับจำนวนข้อความและขนาดข้อความเหมือนกับ AES128_GCM แต่เมื่อมีการส่งข้อความเกินขีดจำกัดเหล่านี้ การเข้ารหัสจะดำเนินการไม่สำเร็จในลักษณะที่ร้ายแรงน้อยกว่า ซึ่งอาจเปิดเผยเฉพาะข้อเท็จจริงที่ว่าข้อความ 2 รายการเท่ากัน ซึ่งทำให้ใช้งานได้ปลอดภัยกว่า AES128_GCM แต่ในทางปฏิบัติมีการใช้งานน้อยกว่า หากต้องการใช้สิ่งนี้ใน Java คุณต้องติดตั้ง Conscrypt
  • XChaCha20Poly1305 จำกัดจำนวนข้อความและขนาดข้อความได้มากกว่า AES128_GCM มาก แต่เมื่อดำเนินการไม่สำเร็จ (ซึ่งมีโอกาสน้อยมาก) ก็จะรั่วไหลข้อมูลคีย์ด้วย ซึ่งไม่มีการเร่งฮาร์ดแวร์ จึงอาจช้ากว่าโหมด AES ในสถานการณ์ที่การเร่งฮาร์ดแวร์พร้อมใช้งาน

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

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

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

ตัวอย่าง Use Case

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