Захист починається до завантаження
Нативні сховища працюють локально без облікового запису Revault. Вміст файлів, імена файлів, типи MIME, мініатюри, назви сховищ, папки, теги й обране шифруються на пристрої. Локальне використання не завантажує файли сховища до Revault. Нативна хмарна синхронізація та спільний доступ — необов’язкові, окремі операції.
Модель виходить із того, що операційна система, встановлений застосунок і криптографічне джерело випадковості надійні під час створення чи розблокування сховища. Той, хто має лише зашифровані файли та обгортки ключів, не може розшифрувати їх без потрібного секрету. Шкідливе ПЗ або скомпрометований застосунок, що працює, поки сховище відкрите, може перехопити відкритий текст і ключі.
Незалежні ключі для кожного сховища
Кожне сховище починається з випадкового 256-бітного головного ключа AES, згенерованого криптографічним джерелом випадковості операційної системи. Жест безпосередньо не визначає цей ключ. Кожне сховище має незалежний матеріал головного ключа, тож розкриття ключа одного сховища не дає змоги вивести інше.
Графічний ключ пристрою поєднує впорядковану послідовність точок з випадковим 256-бітним секретом пристрою. Отримані дані нормалізуються за NFKC і передаються в PBKDF2-HMAC-SHA-256 зі свіжою 128-бітною сіллю та 600 000 ітерацій. Виведений 256-бітний ключ обгортає головний ключ за допомогою AES-256-GCM. Застосунок не зберігає графічний ключ у відкритому вигляді чи окремого відбитка графічного ключа.
Графічні ключі використовують сітку 5 × 5 із шістьма–25 різними точками й мають бути унікальними для всіх сховищ, доданих на одному пристрої. Відповідний графічний ключ відкриває лише своє сховище; назви й вміст інших сховищ залишаються прихованими. Передбачувані жести вгадати легше. Той, хто отримає і секрет пристрою, і його зашифровану обгортку, може пробувати вгадувати графічний ключ офлайн.
Для відкриття нативного сховища потрібен його локальний графічний ключ або явний процес відновлення, а не обліковий запис Revault чи ключ доступу (passkey). Необов’язкова хмарна синхронізація використовує авторизацію платформи Apple або Google, а покупки в магазині — платіжний обліковий запис платформи. Ні хмарна авторизація, ні покупка не надають ключа розшифрування сховища.
| Призначення | Конструкція |
|---|---|
| Головний ключ сховища | Випадковий 256-бітний ключ AES |
| Обгортання ключів | PBKDF2-HMAC-SHA-256 · 600 000 ітерацій · 128-бітна сіль → AES-256-GCM |
| Метадані та мініатюри | AES-256-GCM · випадковий 96-бітний nonce · 128-бітний тег автентифікації |
| Виведення ключа файлу | HKDF-SHA-256 · випадкова 256-бітна сіль для кожного файлу · 256-бітний вихід AES |
| Секрет відновлення | Згенерована: 18 випадкових слів (198 біт); власна: щонайменше 6 різних слів і 32–512 символів |
Захист ключа лише на пристрої
На iOS блокування пристрою зберігається як елемент Keychain без синхронізації із захистом WhenUnlockedThisDeviceOnly. Він доступний лише тоді, коли пристрій розблоковано, і не переноситься через синхронізацію Keychain. Збережений секрет не є ключем Secure Enclave.
На Android блокування пристрою шифрується за допомогою AES-256-GCM неекспортованим ключем Android Keystore, який вимагає розблокованого пристрою. Зашифрований файл блокування зберігається в каталозі застосунку, що не потрапляє до резервних копій. Апаратна підтримка Keystore залежить від пристрою; застосунок не обіцяє, що кожен пристрій використовує апаратні ключі.
Локальні секрети розблокування виключено з нативної хмарної синхронізації та портативних резервних копій сховища. Наявність облікового запису Apple чи Google не відтворює цих секретів і не розблоковує відновлене сховище автоматично. Новий пристрій має підтвердити незалежний секрет відновлення та додати власний графічний ключ.
Конфіденційність і виявлення підробки
Метадані сховища, метадані файлів, мініатюри та обгорнуті ключі використовують AES-256-GCM із 128-бітними тегами автентифікації. Кожне незалежне шифрування використовує новий випадковий 96-бітний nonce. Розшифрування перевіряє тег до повернення відкритого тексту; змінений шифротекст або неправильний ключ призводить до помилки автентифікації.
Додаткові автентифіковані дані прив’язують кожен зашифрований об’єкт до версії формату, ідентифікатора сховища, ідентифікатора об’єкта та призначення. Наприклад, мініатюра й запис метаданих файлу використовують різні контексти. Переміщення зашифрованого об’єкта в інше сховище або підміна ним іншого об’єкта змінює автентифікований контекст і не проходить перевірку.
Автентифікований контекст не приховує ідентифікатори й не доводить актуальності. Дійсний старіший запис усе ще може мати дійсний тег. Перевірки версій застосунку виявляють звичайні одночасні оновлення, але це не криптографічний захист від зловмисного сервісу, що відтворює повний старіший стан.
Великі файли використовують автентифіковані сегменти
Нативне шифрування файлів використовує потокову конструкцію AES-256-GCM-HKDF-SHA-256, описану в Tink. iOS використовує CryptoKit для AES-GCM і HKDF; Android використовує криптографічні примітиви платформи. Кожен новий потік має 40-байтовий заголовок, що містить маркер довжини, випадкову 32-байтову сіль і випадковий семибайтовий префікс nonce.
HKDF виводить окремий ключ шифрування файлу з головного ключа сховища. Його контекст включає ідентифікатори сховища та файлу, довжину відкритого тексту в байтах і налаштований розмір сегмента. 12-байтовий nonce кожного сегмента поєднує випадковий префікс, чотирибайтовий лічильник сегмента та прапорець останнього сегмента. Сегменти мають 128-бітні теги GCM.
Нативні застосунки обробляють файли обмеженими сегментами приблизно по 5 MiB. Лічильники сегментів, позначка останнього сегмента та очікувані довжини в байтах виявляють змінені, переставлені чи обрізані сегменти. Кожен сегмент автентифікується перед використанням, а приватний попередній перегляд публікується лише після завершення розшифрування файлу. У разі помилки неповний результат відкидається; повторні спроби передають наявні зашифровані байти.
Конструкція відповідає специфікації потокового шифрування Tink AES-GCM-HKDF. Реалізація Revault і конфігурація сегментів не проходили незалежного аудиту чи сертифікації Tink.
Приватне сховище, імпорт і попередні перегляди
Зашифровані файли сховища зберігаються в приватному сховищі застосунку. Імена файлів, типи MIME, папки, теги, обране та мініатюри — це автентифіковані зашифровані записи. Пошук і фільтрація за тегами працюють із розшифрованими метаданими активного сховища після розблокування; серверного індексу пошуку у відкритому вигляді немає.
Імпорт фото, відео та файлів може використовувати приватну тимчасову проміжну область до шифрування. Зйомка камерою всередині сховища автоматично не зберігає копію в галереї. Імпорт із Фото чи від іншого провайдера залишає оригінал провайдера недоторканим. Необов’язкова оптимізація медіа відбувається локально до шифрування й змінює лише щойно імпортовані медіа.
Приватні попередні перегляди потребують тимчасового відкритого тексту, поки вони відкриті. Застосунки видаляють тимчасові попередні перегляди під час закриття, блокування та наступного запуску; iOS застосовує до розшифрованих файлів попереднього перегляду повний захист файлів. Файли, явно експортовані до іншого застосунку, виходять за межі захисту сховища. Видалення тимчасових файлів не гарантує судово-технічного стирання.
Необов’язкова нативна хмарна синхронізація
Синхронізація вимкнена за замовчуванням і вмикається окремо для кожного сховища на кожному пристрої. iOS зберігає зашифровані записи та сегменти файлів у приватній базі даних CloudKit користувача в iCloud. Android використовує приватну appDataFolder у Google Drive. Жоден із цих способів не вимагає облікового запису Revault і не завантажує дані нативної синхронізації у вебхмару Revault.
Хмара отримує зашифровані метадані, сегменти файлів і обгортки ключів, а не головний ключ сховища у відкритому вигляді, локальний секрет пристрою чи секрет відновлення. Іншому пристрою на тій самій платформі потрібні той самий нативний хмарний обліковий запис і ключ відновлення сховища, щоб додати власний графічний ключ. Авторизація Apple та Google контролює доступ до зашифрованих записів, а не їх розшифрування.
Вимкнення синхронізації припиняє подальше передавання для цього сховища з поточного пристрою; наявні зашифровані хмарні копії залишаються. Зміни та видалення синхронізації можуть поширюватися, а одночасні редагування можуть потребувати перегляду конфліктів. iCloud і Google Drive — окремі сховища без автоматичного міжплатформного моста. Для переходу між iPhone та Android скористайтеся зашифрованим перенесенням між телефонами.
Відновлення — другий шлях до того самого ключа
Згенеровані фрази відновлення містять 18 незалежно вибраних слів із вбудованого списку з 2048 слів, що забезпечує 198 біт випадковості. Натомість ви можете вибрати власну фразу щонайменше з шести різних слів і 32–512 символів; її надійність залежить від вашого вибору. В обох випадках ключ обгортання виводиться незалежно за допомогою PBKDF2-HMAC-SHA-256 зі свіжою сіллю, після чого той самий головний ключ сховища обгортається за допомогою AES-256-GCM. Будь-хто, хто має фразу та зашифроване сховище, може його розшифрувати.
Секрет відновлення показується під час налаштування і не зберігається в сховищі нативного застосунку та не завантажується в нативне хмарне сховище. Зберігайте його окремо від зашифрованих файлів. Щоб додати інший пристрій, потрібні зашифроване сховище з початкового нативного хмарного облікового запису або зашифрована резервна копія, а також ключ відновлення. Секрет не може відновити відсутні дані файлів, а в Revault немає ключа скидання в провайдера.
Портативна резервна копія .qvault містить зашифровані обгортки ключів, автентифікований зашифрований перелік і зашифровані сегменти файлів. Вона не містить локального секрету розблокування пристрою. Імпорт перевіряє перелік, метадані та кожен сегмент, перш ніж відновити у сховищі зі свіжими ідентифікаторами, головним ключем, ключами файлів і новим графічним ключем пристрою. Збережіть новий ключ відновлення після відновлення.
Нові фрази відновлення зберігають регістр, нормалізують Unicode за NFKC і стискають зайві пробіли. Застарілі шістнадцяткові ключі й надалі підтримуються. Фразу відновлення сховища можна замінити в його налаштуваннях після збереження нової фрази. Це замінює поточну обгортку відновлення; старі резервні копії та пристрої, що не синхронізувалися, можуть і далі містити стару обгортку. Зміна графічного ключа чи фрази відновлення не змінює головний ключ сховища і не скасовує копії. Якщо ключовий матеріал скомпрометовано, перенесіть файли до нового сховища зі свіжими ключами.
Зашифроване перенесення з телефона на телефон
Перенесення між телефонами створює портативну зашифровану копію зі свіжими ідентифікаторами сховища, головним ключем, ключами файлів і заголовками потоків. Його незалежний секрет перенесення не може розблокувати вихідне сховище, а секрет відновлення джерела та секрет розблокування пристрою не включаються. Зашифрований пакет і секрет перенесення потрібно передавати окремо.
Застосунок-отримувач автентифікує пакет і його сегменти файлів, а потім відновлює вміст у нове сховище з новим локальним графічним ключем і ключем відновлення. Це працює між iOS та Android без з’єднання їхніх хмарних облікових записів. Оригінал залишається на старому пристрої; перш ніж його видаляти, перевірте відновлений вміст і збережіть новий ключ відновлення.
Блокування та очищення сеансу
Мобільні застосунки блокуються одразу після згортання та за замовчуванням через 60 секунд неактивності. Для кожного сховища можна вибрати 30 секунд, 1 хвилину, 2 хвилини, 5 хвилин або 10 хвилин. Спільне сховище використовує значення за замовчуванням — 60 секунд. Вихід повертає до екрана графічного ключа і завершує розшифрований сеанс.
Блокування скасовує роботу сеансу, очищає розшифровані метадані та стан пошуку, закриває попередні перегляди, видаляє тимчасові файли й перезаписує буфери ключів перед їх звільненням. Тимчасові ключі виведення також очищаються після використання. Керування пам’яттю Swift і JVM, криптографічні бібліотеки та декодери медіа можуть створювати копії; негайного стирання кожної копії гарантувати не можна.
iOS закриває знімки перемикача застосунків екраном приватності. Android використовує прапорець безпечного вікна, щоб обмежити знімки екрана й попередні перегляди в списку нещодавніх застосунків. Ці захисти платформи не заважають сфотографувати розблокований екран і не відкликають файли, раніше експортовані до іншого застосунку.
Revault Cloud
Revault Cloud — необов’язковий провайдер сховища Pro для синхронізації між платформами. Зашифровані сегменти та зашифровані метадані файлів прив’язуються до псевдонімної інсталяції для виставлення рахунків. Сервіс бачить ідентифікатори сховища, розміри, контрольні суми, ревізії та активність передавання, але не отримує розгорнутого ключа сховища чи фрази відновлення. Окремий випадковий код підключення надає доступ до сховища; щоб підключити ще один пристрій, потрібна також фраза відновлення. Наявні хмарні дані залишаються придатними для читання з метою відновлення після завершення дії Pro.
Транспорти нативного спільного доступу та контроль доступу
На iOS приватне запрошення CloudKit лише для читання розміщує зашифрований знімок в окремій ієрархії записів спільного доступу, поза особистою зоною синхронізації. Apple контролює доступ до запрошення; отримувачу все одно потрібен окремий секрет розшифрування. Запрошення CloudKit не застосовують серверних лічильника сеансів доступу, фіксованого терміну дії чи таймера знищення. Власник може припинити майбутній доступ через CloudKit.
Міжплатформний спільний доступ завантажує зашифровані частини до служби спільного доступу Revault. Незалежні випадкові 256-бітні права читання та керування зберігаються як хеші SHA-256. Посилання на вебсайті несе право читання у фрагменті, а не секрет розшифрування. Його відкриття переспрямовує на спільне сховище й запитує секрет відправника; особистий графічний ключ чи наявне сховище не потрібні. Особисті сховища залишаються заблокованими.
Контрольований серверний спільний доступ забезпечує максимальну кількість сеансів доступу, встановлену відправником, фіксований термін дії до 30 днів, скасування й необов’язковий дозвіл на експорт. Сеанс надається атомарно й триває щонайбільше 15 хвилин, у межах строків спільного доступу. Доступ зараховується в момент надання сеансу, навіть якщо завантаження чи розшифрування не вдалося. Засіб перегляду перевіряє поточний доступ і закривається в крайній термін.
Контрольні суми SHA-256 перевіряють передані частини, а автентифіковане шифрування перевіряє їхній вміст. Якщо експорт дозволено, глядач може зберегти зашифровану копію .qvault, яка відкривається за допомогою секретного коду доступу. Вимкнення експорту прибирає цю дію в застосунку, але не може криптографічно завадити знімкам екрана чи зміненому клієнту зберегти відкриті дані. Видалення вихідного файлу не скасовує доступ, створений незалежно.
Необов’язкова активність сховища
Нативні журнали аудиту за замовчуванням вимкнені та налаштовуються для кожного сховища на кожному пристрої. Останні 500 локальних подій шифруються головним ключем сховища та окремим автентифікованим контекстом. Вони не містять ключів, графічних ключів, вмісту файлів і даних інших сховищ, не синхронізуються та можуть бути очищені або вимкнені. Вони не є доказом, захищеним від підробки. Невдалі спроби розблокування не прив’язуються до сховища.
Нові контрольовані спільні доступи, створені з увімкненим журналюванням, зберігають на сервісі спільного доступу до 100 часових позначок сеансів доступу. Отримати їх може лише можливість керування; журнал не містить особи отримувача чи секрету розшифрування. Вимкнення локального журналювання впливає на майбутні спільні доступи. Наявні журнали спільного доступу зберігають своє початкове налаштування до скасування або завершення терміну й очищення.
Необов’язкові зашифровані фото спроб злому
Власники можуть вмикати «Сповіщення про спроби злому» окремо для кожного сховища на кожному пристрої. Після трьох невдалих графічних ключів застосунок на передньому плані може зробити фото фронтальною камерою за умови дозволу, доступності камери та однохвилинної паузи. Системні індикатори камери залишаються видимими. Останні десять сповіщень зберігаються локально й ніколи не додаються до Фото та не завантажуються. Невдалий графічний ключ не визначає цільове сховище, тому кожне сховище, для якого ввімкнено цю функцію, отримує окремо зашифрований запис про спробу на пристрої.
Окремий відкритий ключ RSA-3072 обгортає новий 256-бітний ключ AES-GCM для кожного сповіщення за допомогою OAEP із SHA-256 і MGF1-SHA-256. Це дозволяє шифрувати, поки сховище заблоковане. Відповідний закритий ключ сам зашифрований головним ключем цього сховища з окремим автентифікованим контекстом. Лише розблокування цього сховища може розшифрувати його фото. Сповіщення відображаються в його перегляді аудиту незалежно від звичайного журналювання активності й можуть бути очищені в налаштуваннях «Сповіщень про спроби злому». Вони не є доказом, захищеним від підробки.
«Безпечний вихід» прибирає локальний доступ
Одне сховище на пристрої можна призначити для Безпечного виходу. Введення його графічного ключа відкриває його як звичайно, а всі інші локальні записи сховищ, зашифровані фрагменти, дані розблокування пристрою та черга змін видаляються. Застосунок зберігає постійний локальний список дозволених сховищ, щоб синхронізація непомітно не відновила виключені сховища. Зашифровані передачі, що вже тривають, можуть завершитися.
Нативні хмарні копії та копії на інших пристроях залишаються. Для явного відновлення перед створенням нового локального графічного ключа потрібен ключ відновлення виключеного сховища. Сховище лише офлайн без окремої резервної копії може бути втрачене. Це налаштування стосується поточного встановлення, а не кожного пристрою, що використовує той самий хмарний обліковий запис.
Безпечний вихід не гарантує криміналістичного стирання чи приховування. Флеш-пам’ять, кеші операційної системи, резервні копії та попередні експорти можуть зберігати сліди. Видалення даних застосунку або перевстановлення може прибрати межу локальної ізоляції; тоді хмарні записи можуть бути знову виявлені через нативний хмарний обліковий запис. Розблокувати ці записи може лише секрет відновлення.
Що залишається видимим
Шифрування приховує вміст, але не всю службову інформацію. Локальні записи та хмарні провайдери можуть бачити ідентифікатори, зв’язки між записами, кількість об’єктів, розміри, ревізії, часові позначки, зашифровані обгортки ключів і заголовки потоків. Ідентифікатори використовують UUIDv7 і містять інформацію про час створення; вони не є секретами. Apple або Google можуть пов’язувати активність нативної синхронізації з обліковим записом платформи.
Керована служба спільного доступу Revault може бачити розміри зашифрованих пакетів, контрольні суми частин, налаштування терміну дії, кількість сеансів доступу та необов’язкові часові позначки сеансів, але не бачить окремо переданий секретний код розшифрування. Спільний доступ через CloudKit передає Apple інформацію про запрошення та учасників. Мережеві та службові записи можуть розкривати дані про з’єднання. Revault не забезпечує анонімності чи стійкості до аналізу трафіку.
HTTPS захищає мережеві запити під час передачі. Автентифіковане шифрування на пристрої окремо захищає вміст сховища, що зберігається локально та в хмарі. Ні транспортне шифрування, ні шифротекст не приховують усіх відомостей про те, коли, звідки і скільки даних передається.
Аналітика використання
Увімкнено за замовчуванням. Mixpanel отримує події використання функцій із випадковим аналітичним ідентифікатором. Вміст сховищ, назви, графічні ключі, ключі та секретні коди доступу не включаються. Ви можете в будь-який час вимкнути аналітику для цього браузера чи пристрою.
Де закінчується захист
Розблоковане сховище неминуче відкриває розшифровану інформацію сеансу застосунку. Шкідливе ПЗ, скомпрометована операційна система чи застосунок, сторонній погляд на екран або недовірений отримувач можуть її перехопити. Зберігання ключів лише на пристрої є додатковою межею, а не гарантією проти повністю скомпрометованого пристрою. Передбачуваний графічний ключ небезпечний, щойно його локальний секрет скомпрометовано.
Шифрування не запобігає видаленню даних у хмарі, програмам-вимагачам, втраті секрету відновлення, відмові провайдера видати записи чи відкату всього раніше чинного зашифрованого стану. Зберігайте незалежні зашифровані резервні копії та перевіряйте відновлення, перш ніж позбутися старого пристрою. Скасування доступу не може повернути знімки екрана, експорти чи копії, які вже зберіг інша особа.
Revault не проходив незалежного аудиту безпеки. Це опис реалізованої криптографічної конструкції, а не сертифікація чи гарантія від будь-якого вторгнення.
Криптографічні джерела
NIST SP 800-38D — автентифіковане шифрування GCMRFC 8018 — PBKDF2RFC 5869 — HKDFНаявні браузерні сховища
Цей довідник описує нативні застосунки. Наявні браузерні сховища мають окремий обліковий запис, сховище на пристрої та вебхмарну модель. Браузерні завантаження до S3 і браузерні посилання для доступу не є нативною хмарною синхронізацією. Обліковий запис браузера не виконує вхід у мобільні застосунки; щоб перенести наявні дані з браузера в нативне сховище, скористайтеся зашифрованою резервною копією та її ключем відновлення.