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

AEAD สำหรับสตรีมมิงแบบดั้งเดิมจะให้การเข้ารหัสที่มีการตรวจสอบสิทธิ์สำหรับการสตรีมข้อมูล ข้อมูลที่จะเข้ารหัสจะมีประโยชน์เมื่อข้อมูลที่จะเข้ารหัสมีขนาดใหญ่เกินกว่าที่จะประมวลผลในขั้นตอนเดียวได้ กรณีการใช้งานทั่วไปรวมถึงการเข้ารหัสไฟล์ขนาดใหญ่หรือสตรีมข้อมูลสด

การเข้ารหัสจะทำในเซกเมนต์ ซึ่งผูกกับตำแหน่งของการเข้ารหัสข้อความเข้ารหัสและนำออกหรือเรียงลำดับใหม่ไม่ได้ คุณไม่สามารถแทรกเซกเมนต์จากข้อความเข้ารหัสหนึ่ง ลงในข้อความเข้ารหัสอื่นได้ หากต้องการแก้ไขข้อความเข้ารหัสที่มีอยู่ ต้องเข้ารหัสสตรีมข้อมูลทั้งหมดอีกครั้ง1

การถอดรหัสทำได้รวดเร็วเนื่องจากมีการถอดรหัสและตรวจสอบสิทธิ์จากข้อความเข้ารหัสเพียงบางส่วนเท่านั้น ผู้ใช้จะรับข้อความธรรมดาบางส่วนได้โดยไม่ต้องประมวลผลข้อความเข้ารหัสทั้งหมด

การใช้งาน AEAD สำหรับสตรีมมิงเป็นไปตามคำจำกัดความ AEAD และความปลอดภัยแบบ OAE2 โดยมีพร็อพเพอร์ตี้ต่อไปนี้

  • ความลับ: ไม่มีข้อมูลเกี่ยวกับข้อความธรรมดา นอกจากความยาว
  • ความถูกต้อง: เป็นไปไม่ได้ที่จะเปลี่ยนข้อความธรรมดาที่เข้ารหัสซึ่งอยู่ภายใต้ข้อความเข้ารหัสโดยที่ระบบตรวจไม่พบ
  • แบบสมมาตร: การเข้ารหัสข้อความธรรมดาและการถอดรหัสข้อความเข้ารหัสจะทำโดยใช้คีย์เดียวกัน
  • การสุ่ม: การเข้ารหัสเป็นแบบสุ่ม ข้อความ 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

ตัวอย่างกรณีการใช้งาน

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


  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