Revault เข้ารหัสไฟล์ขนาดใหญ่เป็นส่วน ๆ ส่วนละประมาณ 5 MiB แต่ละส่วนมีแท็กยืนยันความถูกต้องของตัวเอง ไฟล์ทั้งไฟล์จึงไม่ต้องอยู่ในหน่วยความจำพร้อมกันเลย ในเว็บแอป นี่คือสิ่งที่ทำให้รองรับไฟล์ได้สูงสุด 1 GiB

ทำไมไม่เข้ารหัสทั้งไฟล์ในครั้งเดียว

ไฟล์ขนาดใหญ่ไม่ควรต้องใช้หน่วยความจำจำนวนมาก Revault อ่านไฟล์ในส่วนขนาดประมาณ 5 MiB เข้ารหัสแต่ละส่วนในเบราว์เซอร์ และระยะไซเฟอร์เท็กซ์ใน IndexedDB ไฟล์ต้นฉบับจะไม่ถูกอ่านลงในบัฟเฟอร์ขนาดยักษ์ตัวเดียว

การทำงานเป็นส่วน ๆ ยังหมายความว่าการอัปโหลดที่ถูกขัดจังหวะสามารถทำต่อจากไซเฟอร์เท็กซ์ที่เตรียมไว้แล้ว แทนที่จะต้องเข้ารหัสทั้งไฟล์ใหม่อีกครั้ง

อะไรปกป้องลำดับและความครบถ้วนของส่วนต่าง ๆ

แต่ละไฟล์มีคีย์เข้ารหัสของตัวเอง ซึ่งได้มาด้วย HKDF จากคีย์หลักของห้องนิรภัย บริบทของการสร้างคีย์ประกอบด้วยตัวระบุห้องนิรภัยและไฟล์ ความยาวของไฟล์เป็นไบต์ และขนาดของส่วน

nonce ขนาด 12 ไบต์ของแต่ละส่วนรวมคำนำหน้าแบบสุ่มที่เลือกไว้สำหรับไฟล์นั้น ตัวนับส่วนขนาดสี่ไบต์ และแฟล็กที่ระบุส่วนสุดท้าย แต่ละส่วนมีแท็ก GCM ขนาด 128 บิต หากส่วนต่าง ๆ ถูกสลับ แก้ไข หรือตัดทิ้ง การตรวจสอบจะล้มเหลว

จะเกิดอะไรขึ้นหากการอัปโหลดถูกขัดจังหวะ

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

การดาวน์โหลดได้รับการตรวจสอบอย่างไร

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

มีขีดจำกัดอะไรบ้าง

แต่ละไฟล์ในเว็บแอปมีขนาดได้สูงสุด 1 GiB ตัวอย่างรูปภาพและวิดีโอมีขีดจำกัดหน่วยความจำแยกต่างหาก การล้างพื้นที่จัดเก็บในเบราว์เซอร์อาจลบไซเฟอร์เท็กซ์ที่จำเป็นต่อการอัปโหลดต่อ

รูปแบบการสตรีมเป็นไปตามโครงสร้างการสตรีม AES-GCM-HKDF ที่บันทึกไว้ของ Tink โดยใช้แบบดั้งเดิมของ Web Crypto ข้อมูลประจำตัวของไฟล์และความยาวที่คาดหวังจะผูกเข้ากับบริบทการได้มาของคีย์ ตัวนับส่วนและเครื่องหมายสุดท้ายช่วยป้องกันการสั่งซื้อและความสมบูรณ์ การใช้งานนี้ไม่ได้รับการตรวจสอบการเข้ารหัสลับที่เป็นอิสระ

หน้าโมเดลความปลอดภัยอธิบายโครงสร้างทั้งหมด รวมถึงส่วนหัวของสตรีมและการสร้างคีย์