โดยสตรีมมิง AEAD แบบเดิมจะเข้ารหัสที่ตรวจสอบสิทธิ์แล้วสำหรับข้อมูลสตรีมมิง ซึ่งจะมีประโยชน์เมื่อข้อมูลที่จะเข้ารหัสมีขนาดใหญ่เกินกว่าที่จะประมวลผลในขั้นตอนเดียวได้ กรณีการใช้งานทั่วไปรวมถึงการเข้ารหัสไฟล์ขนาดใหญ่หรือสตรีมข้อมูลแบบสด
การเข้ารหัสจะดำเนินการเป็นกลุ่มๆ ซึ่งเชื่อมโยงกับตําแหน่งภายในข้อความที่เข้ารหัส และไม่สามารถนําออกหรือเรียงลําดับใหม่ได้ คุณจะแทรกกลุ่มข้อความที่เข้ารหัสจากข้อความที่เข้ารหัสอีกข้อความหนึ่งไม่ได้ หากต้องการแก้ไขข้อความที่เข้ารหัสที่มีอยู่ สตรีมข้อมูลทั้งหมดต้องได้รับการเข้ารหัสอีกครั้ง1
การถอดรหัสเป็นไปอย่างรวดเร็วเนื่องจากมีข้อความเข้ารหัสเพียงบางส่วนเท่านั้นที่มีการถอดรหัสและตรวจสอบสิทธิ์ในแต่ละครั้ง คุณสามารถดูข้อความธรรมดาบางส่วนได้โดยไม่ต้องประมวลผลข้อความที่เข้ารหัสทั้งข้อความ
การใช้งาน AEAD แบบสตรีมเป็นไปตามคำจำกัดความของ AEAD และปลอดภัยแบบ nOAE โดยมีพร็อพเพอร์ตี้ดังต่อไปนี้
- Secrecy: เราไม่ทราบเกี่ยวกับข้อความธรรมดา ยกเว้นความยาวของข้อความ
- ความถูกต้อง: ไม่สามารถเปลี่ยนแปลงข้อความธรรมดาที่เข้ารหัสซึ่งอยู่ภายใต้ข้อความที่เข้ารหัสได้โดยที่ไม่มีการตรวจพบ
- แบบสมมาตร: การเข้ารหัสข้อความธรรมดาและการถอดรหัสข้อความที่เข้ารหัสจะใช้คีย์เดียวกัน
- การสุ่ม: การเข้ารหัสเป็นแบบสุ่ม ข้อความ 2 รายการที่มีข้อความธรรมดาเหมือนกันจะให้ข้อความที่เข้ารหัสต่างกัน ผู้โจมตีจะไม่ทราบว่ามีการเข้ารหัสใดที่สอดคล้องกับข้อความธรรมดาที่ระบุ
ข้อมูลที่เกี่ยวข้อง
คุณสามารถใช้ AEAD แบบสตรีมเพื่อเชื่อมโยงข้อความที่เข้ารหัสกับข้อมูลที่เชื่อมโยงที่เฉพาะเจาะจง สมมติว่าคุณมีฐานข้อมูลที่มีช่อง user-id
และ encrypted-medical-history
ในกรณีนี้ user-id
สามารถใช้เป็นข้อมูลที่เชื่อมโยงเมื่อเข้ารหัส encrypted-medical-history
ซึ่งจะช่วยป้องกันไม่ให้ผู้โจมตีย้ายประวัติทางการแพทย์จากผู้ใช้รายหนึ่งไปยังอีกรายหนึ่ง
เลือกประเภทคีย์
เราขอแนะนำให้ใช้ AES128_GCM_HKDF_1MB สำหรับการใช้งานส่วนใหญ่ โดยทั่วไป
- AES128_GCM_HKDF_1MB (หรือ AES256_GCM_HKDF_1MB) เป็นตัวเลือกที่เร็วกว่า โดยสามารถเข้ารหัสไฟล์ 264 ไฟล์ที่มีขนาดไฟล์ละไม่เกิน 264 ไบต์ ระบบจะใช้หน่วยความจำประมาณ 1 MB ในระหว่างกระบวนการเข้ารหัสและการถอดรหัส
- AES128_GCM_HKDF_4KB ใช้หน่วยความจําประมาณ 4 KB และเป็นตัวเลือกที่ดีหากระบบมีหน่วยความจําไม่มาก
- AES128_CTR_HMAC_SHA256_1MB (หรือ AES256_CTR_HMAC_SHA256_1MB) เป็นตัวเลือกที่ ระมัดระวังมากกว่า
การรับประกันความปลอดภัย
การใช้งาน AEAD แบบสตรีมมิงมีข้อดีดังนี้
- การรักษาความปลอดภัย CCA2
- ระดับการตรวจสอบสิทธิ์อย่างน้อย 80 บิต
- ความสามารถในการเข้ารหัสข้อความอย่างน้อย 264 รายการ3 โดยรวมมีความยาว 251 ไบต์2 การโจมตีที่มีข้อความธรรมดาหรือข้อความที่เข้ารหัสที่เลือกไม่เกิน 232 รายการไม่มีความน่าจะเป็นในการโจมตีสำเร็จมากกว่า 2-32
ตัวอย่าง Use Case
โปรดดูฉันต้องการเข้ารหัสไฟล์หรือสตรีมข้อมูลขนาดใหญ่
-
เหตุผลของข้อจํากัดนี้คือการใช้การเข้ารหัส AES-GCM การเข้ารหัสส่วนของข้อความธรรมดาอื่นในตำแหน่งเดียวกันจะเทียบเท่ากับการใช้ IV ซ้ำ ซึ่งละเมิดการรับประกันความปลอดภัยของ AES-GCM อีกเหตุผลหนึ่งคือการป้องกันการโจมตีแบบย้อนกลับ ซึ่งผู้โจมตีอาจพยายามกู้คืนไฟล์เวอร์ชันก่อนหน้าโดยที่ตรวจไม่พบ ↩
-
ระบบรองรับกลุ่ม 232 กลุ่ม โดยแต่ละกลุ่มมีข้อความธรรมดา
segment_size - tag_size
ไบต์ สำหรับกลุ่ม 1 MB ขนาดข้อความธรรมดาทั้งหมดคือ 232 * (220-16) ~= 251 ไบต์ ↩ -
AEAD แบบสตรีมมิงจะกลายเป็นไม่ปลอดภัยเมื่อใช้ชุดค่าผสมของคีย์ที่ได้จากข้อมูล (128 บิต) และคำนำหน้า Nonce (ค่า 7 ไบต์แบบสุ่มอิสระ) ซ้ำ เรามีความต้านทานการชนกัน 184 บิต ซึ่งแปลเป็นข้อความประมาณ 264 รายการหากต้องการให้ความน่าจะเป็นในการประสบความสำเร็จน้อยกว่า 2-32 ↩