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

โดยสตรีมมิง 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

โปรดดูฉันต้องการเข้ารหัสไฟล์หรือสตรีมข้อมูลขนาดใหญ่


  1. เหตุผลของข้อจํากัดนี้คือการใช้การเข้ารหัส AES-GCM การเข้ารหัสส่วนของข้อความธรรมดาอื่นในตำแหน่งเดียวกันจะเทียบเท่ากับการใช้ IV ซ้ำ ซึ่งละเมิดการรับประกันความปลอดภัยของ AES-GCM อีกเหตุผลหนึ่งคือการป้องกันการโจมตีแบบย้อนกลับ ซึ่งผู้โจมตีอาจพยายามกู้คืนไฟล์เวอร์ชันก่อนหน้าโดยที่ตรวจไม่พบ 

  2. ระบบรองรับกลุ่ม 232 กลุ่ม โดยแต่ละกลุ่มมีข้อความธรรมดา segment_size - tag_size ไบต์ สำหรับกลุ่ม 1 MB ขนาดข้อความธรรมดาทั้งหมดคือ 232 * (220-16) ~= 251 ไบต์ 

  3. AEAD แบบสตรีมมิงจะกลายเป็นไม่ปลอดภัยเมื่อใช้ชุดค่าผสมของคีย์ที่ได้จากข้อมูล (128 บิต) และคำนำหน้า Nonce (ค่า 7 ไบต์แบบสุ่มอิสระ) ซ้ำ เรามีความต้านทานการชนกัน 184 บิต ซึ่งแปลเป็นข้อความประมาณ 264 รายการหากต้องการให้ความน่าจะเป็นในการประสบความสำเร็จน้อยกว่า 2-32