Revault מצפינה קובץ גדול במקטעים של כ-5 MiB, לכל אחד תג אימות משלו, כך שאין צורך להחזיק את כל הקובץ בזיכרון בבת אחת. באפליקציית האינטרנט זה מה שמאפשר קבצים של עד 1 GiB.
למה לא להצפין את כל הקובץ בבת אחת?
קבצים גדולים לא צריכים כמות גדולה של זיכרון. Revault קורא קבצים במקטעים של כ-5 MiB, מצפין כל מקטע בדפדפן ומכין את המידע המוצפן ב-IndexedDB. הקובץ המקורי לא נקרא לעולם לתוך מאגר ענק אחד.
עבודה במקטעים גם אומרת שהעלאה שנקטעה יכולה להמשיך מטקסט מוצפן שכבר הוכן, במקום להצפין את כל הקובץ מחדש.
מה מגן על סדר המקטעים ועל שלמותם?
כל קובץ מקבל מפתח הצפנה משלו, שנגזר באמצעות HKDF ממפתח האב של הכספת. הקשר הגזירה כולל את מזהי הכספת והקובץ, את אורך הקובץ בבתים ואת גודל המקטע.
ה-nonce של כל מקטע, בגודל 12 בתים, משלב קידומת אקראית שנבחרה לאותו קובץ, מונה מקטעים בן ארבעה בתים ודגל שמסמן את המקטע האחרון. המקטעים נושאים תגי GCM של 128 סיביות. אם מקטעים מוחלפים, משתנים או נחתכים, האימות נכשל.
מה קורה אם העלאה נקטעת?
לאחר שההצפנה הושלמה, אפשר להמשיך העלאות ברשת ממידע מוצפן שנשמר במטמון גם אחרי רענון הדף. ניסיונות חוזרים שולחים את אותם בייטים מוצפנים, ולא מצפינים מקור חדש תחת nonces ישנים. אם ההצפנה עצמה הופסקה, יש לבטל את ההעלאה הלא שלמה ולהתחיל מחדש עם זהות קובץ חדשה.
איך מאמתים הורדות?
הורדות מאמתות כל מקטע לפני שהוא משוחרר. מכיוון שהבדיקה מתבצעת תוך כדי הזרמת הקובץ, שגיאה בשלב מאוחר בהורדה עלולה להשאיר קובץ לא שלם, ולכן ודאו שההורדה הסתיימה בהצלחה לפני שאתם נשענים עליה.
מהן המגבלות?
כל קובץ באפליקציית האינטרנט יכול להגיע עד 1 GiB. לתצוגות מקדימות של תמונות וסרטונים יש מגבלת זיכרון נפרדת. ניקוי האחסון המקומי של הדפדפן עלול להסיר את הטקסט המוצפן הדרוש כדי להמשיך העלאה.
פורמט הסטרימינג מבוסס על מבנה הסטרימינג AES-GCM-HKDF המתועד של Tink, בעזרת רכיבי Web Crypto מובנים. זהות הקובץ והאורך הצפוי נקשרים להקשר גזירת המפתח; מונים של מקטעים וסמן סיום מגנים על הסדר ועל ההשלמה. המימוש הזה לא עבר ביקורת קריפטוגרפית עצמאית.
דף מודל האבטחה מתאר את הבנייה המלאה, כולל כותרת הזרם וגזירת המפתחות.