Primitive การเข้ารหัสที่ผ่านการรับรองพร้อมข้อมูลที่เชื่อมโยง (AEAD) เป็น Primitive ที่พบบ่อยที่สุดสำหรับการเข้ารหัสข้อมูลและเหมาะกับความต้องการส่วนใหญ่
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
ดูว่าฉันต้องการเข้ารหัสข้อมูลและต้องการเชื่อมโยงข้อความที่เข้ารหัสกับบริบทของข้อความ