Техническая документация

Как RusClouder защищает файл до отправки

Описание режима AES‑256‑GCM без подмены терминов: где возникает ключ, что именно лежит в S3, как обнаруживается повреждение и какие риски шифрование само по себе не устраняет.

AES‑256‑GCMЧанки 1 МиБ128‑битный тегКонтейнер CRUENC01

01 · Модель

Три режима — три разные границы доверия

HTTPS защищает сетевое соединение, но после завершения передачи сам по себе ничего не говорит о формате объекта в хранилище. Серверное шифрование S3 защищает носители провайдера, однако расшифрование выполняется инфраструктурой хранилища. Клиентское шифрование меняет границу: объект преобразуется на телефоне, и в S3 отправляется шифротекст.

РежимНа телефонеПри передачеВ S3
01 · Без дополнительногоОригиналHTTPSЗакрытый объект
02 · В хранилищеОригиналHTTPSSSE AES‑256
03 · На устройствеAES‑256‑GCMHTTPS + шифротекстCRUENC01

02 · Контейнер

Структура CRUENC01

Контейнер начинается с фиксированного 48‑байтного заголовка. Далее идут записи зашифрованных чанков. Для каждого чанка сохраняется полный 16‑байтный тег GCM; тег позволяет не только расшифровать данные, но и проверить, что шифротекст и связанные с ним параметры не были изменены.

48 байтЗаголовок CRUENC01версия, алгоритм, размер чанка, размер исходного файла, nonce prefix
1 МиБ + 16 байтЧанк 0 + GCM tagзашифрованные данные и метка подлинности
до 1 МиБ + 16 байтПоследний чанк + tagостаток файла и отдельная метка

Размер контейнера: 48 байт + размер исходного файла + 16 байт × количество чанков.

03 · Ключевой материал

Один объект — один случайный ключ

Для каждого оригинала и каждой миниатюры создаётся независимый 32‑байтный DEK (Data Encryption Key). DEK не записывается в контейнер: он оборачивается версионным мастер‑ключом аккаунта и хранится отдельно. Компрометация одного ключа объекта не должна автоматически раскрывать остальные объекты.

DEK · 256 бит

Ключ, которым шифруется ровно один объект: оригинал либо миниатюра.

Nonce · 96 бит

64‑битный случайный префикс контейнера и 32‑битный номер чанка. Пара «ключ + nonce» не должна повторяться.

Wrapped DEK

Зашифрованное представление ключа объекта. Оно существует вне CRUENC01 и связано с версией мастер‑ключа.

Один воображаемый «лист»13,8 млрд летвся история Вселенной
×≈ 1041таких листов до среднего результата

Если устройство гипотетически проверяет 1018 ключей каждую секунду, среднее ожидание составляет около 1,8 × 1051 лет — примерно 1,3 × 1041 текущих возрастов Вселенной.

Почему повтор nonce критичен: GCM требует уникальный nonce для каждого сообщения под одним ключом. Повтор может разрушить конфиденциальность и достоверность данных, поэтому после неудачного повторного шифрования пара DEK/nonce не используется заново.

04 · Аутентификация

Подмена не должна выглядеть как успешное восстановление

AES‑GCM аутентифицирует не только содержимое чанка. В AAD (данные, которые не шифруются, но входят в проверку) включены 48‑байтный заголовок, номер чанка, длина его открытого содержимого и признак последнего блока.

Перестановка чанковпроверка не проходит
Подмена заголовкапроверка не проходит
Усечение или дописываниепроверка не проходит
Перенос чанка из другого объектапроверка не проходит

Reader работает строго: неизвестная версия, неизвестный алгоритм, неверные размеры, лишние флаги или ошибка тега завершают восстановление ошибкой. Режима «попробовать вернуть хоть что‑нибудь» для непроверенного открытого текста нет.

05 · Большие файлы

Почему файл делится на чанки

Чанкирование не ослабляет алгоритм: каждый блок получает собственные nonce и tag. Оно позволяет обрабатывать большие видео без загрузки всего объекта в оперативную память, повторять локальные этапы и в дальнейшем читать нужные диапазоны.

При диапазонном чтении приложение запрашивает полные криптографические записи, проверяет соответствующие GCM‑теги и только затем отдаёт нужный фрагмент. Непроверенные байты не должны попадать в декодер изображения или видео.

1 ГиБ1024 чанка≈ 16 КиБ тегов + 48 байт
4 ГиБ4096 чанков≈ 64 КиБ тегов + 48 байт

06 · Границы

Что эта схема не обещает

Надёжная криптография не превращает приложение в магически неуязвимую систему. Она не защищает открытый файл на уже разблокированном заражённом телефоне, не исправляет слабый пароль и не отменяет необходимость защищать механизм восстановления ключей.

RusClouder не называет текущую архитектуру «zero knowledge»: восстановление архива на новом устройстве поддерживается через защищённый серверный контур. Это осознанный компромисс между восстановлением после потери телефона и моделью, где утраченный пользовательский секрет невозможно заменить.

07 · Основание

Стандарты и реализация

AES определён стандартом NIST FIPS 197, а режим GCM — NIST SP 800‑38D. В приложении используется поддерживаемая криптографическая библиотека с нативным ускорением; собственный код реализует формат контейнера, построение AAD, nonce и сопоставление диапазонов, но не сам алгоритм AES.

Описание соответствует формату aes-256-gcm-chunked-v1. Возраст Вселенной 13,8 млрд лет указан по материалам NASA ↗. Обновлено 27 сентября 2026 года.