Документация
Шифрование
Для дополнительной защиты данных, доступна возможность использовать шифрование в документах. Шифрование будет применено на клиенте (браузере), до отправки документов на сервер.
Данные приходят на сервер уже в зашифрованном виде. Доступ к данным возможен только при наличии всей цепочки ключей шифрования (далее подробнее). Открытые значения ключей на сервер не отправляются.
На текущий момент могут быть зашифрованы только значения в записях таблицы.
Как это работает?
Пользователь создает пароль, а на его основе генерируется "фактический пароль" (RealKeyPwd), с помощью алгоритма PBKDF2.
XSDB генерирует ключ для документа.
Ключ шифрует данные.
RealKeyPwd шифрует ключ.
RealKeyPwd <— Key <— Value
Зашифрованные данные и зашифрованный ключ отправляются на сервер, а RealKeyPwd всегда остается на стороне клиента (браузера).
PBKDF2 — алгоритм генерации ключей на основе пароля, дополнительно защищает первоначальный пароль за счет длительности и сложности генерации.
Сохранение зашифрованного ключа необходимо для возможности разделить доступ к зашифрованному документу между несколькими участниками, при этом иметь разные пароли для всех участников.
Что знает XSDB?
Какие данные хранятся на сервере:
  • Информация о пароле:
    • Имя
    • Подсказка
    • hashRounds — количество раз, которое будет считаться контрольная сумма RealKeyPwd по цепочке. Необходимо для сильного замедления при подборе пароля методом перебора, в случае непреднамеренного доступа к информации о паролях.
    • Сгенерированный секрет, для шифрования RealKeyPwd на стороне клиента(браузера), и защиты, при выходе из аккаунта на всех устройствах.
    • Контрольная сумма(хэш) RealKeyPwd (SHA-256) — KeyPasswordHash
  • Зашифрованные данные (AES-256) — Encrypted(value, Key)
  • Контрольная сумма ключа (SHA-256) - KeyHash
  • Зашифрованный ключ (AES-256) — Encrypted(Key, RealKeyPwd)KeyCiphertext
Какие данные НИКОГДА не отправляются на сервер:
  • Исходный пароль — KeyPassword
  • Фактический пароль — RealKeyPwd (может быть сохранен в браузере, в зашифрованном виде)
  • Расшифрованный ключ - Key
  • Расшифрованные данные - value
Пароль, который вводит пользователь, используется только для генерации "фактического пароля" RealKeyPwd. При сохранении в браузере, сохраняется именно обработанная версия пароля, т.е. RealKeyPwd, и исключительно в зашифрованном виде.
Восстановить исходный пароль, на основе RealKeyPwd, невозможно, аналогично контрольной сумме.
Защита от неумышленной отправки оригинальных ключей
Генерацией ключей, хранением паролей и шифрованием занимается специальный модуль (BlackBox) с изолированной областью для хранения переменных. Получить доступ к приватным данным внутри, кодом извне, нельзя.
BlackBox принимает информацию о шифровании документа (KeyPasswordHash, KeyHash, KeyCiphertext), и отдельно запрашивает от пользователя пароль. Введенный пароль безопасно передается обратно в BlackBox, на его основе генерируется RealKeyPwd и сохраняется в изолированной области.
Ключ (из KeyCiphertext) расшифровывается с помощью RealKeyPwd и так же сохраняется в приватной области. Далее данные документа расшифровываются по запросу других модулей, без передачи какой-либо информации о ключе или "фактическом пароле".
Другие модули для сохранения состояния документов используют единственную функцию, которая перед сохранением запрашивает шифрование данных, и только после этого данные могут быть отправлены на сервер.
При сохранении RealKeyPwd в браузере, RealKeyPwd будет зашифрован двумя секретами, 1 - который приходит с информацией о пароле, 2 - который хранится в изолированной области в BlackBox, для защиты от непреднамеренного доступа к паролю из других модулей.
Общие детали
  • Для каждого документа генерируется уникальный ключ (Key), длинной в 256 знаков, содержащий сгенерированную последовательность из набора 144 символов.
Пример:
ъ7Б%⁄lЁWheЫьлeiЧNлчjFcmvXwжWU9Юgщ2_рNЛрМЮкМ#Q)lA*rЖH5<ЁJNсТЫу>Ёs9#тА>a9ЧйЩЗkЦ‚^*вЦиЩ%ы2йФФт>AЭ‚jTRпЯхJVЫFquТRSлСEПЦяУa!аИыFХACiаGНфьqци&TКMf_6DMoФVю7Q4Uщ_цB‚8Z<ГfzьКu0р!IН)хЫ⁄tМ4>В*phЩ!ъ⁄wмGсцcu)МОюhLжОmЯаФ8фlов<юW·нВн@xУбзxыsдSчgПЮSOлCйЦFQWaй‚d*ъQъёipIHШd
  • Для шифрования ключей можно использовать как один пароль для всех документов, так и разные пароли для разных документов.
  • Можно создать до 10 паролей.
  • Удалить пароль, если он используется для шифрования документов, нельзя.
  • Можно мигрировать с одного пароля на другой.

📌 Также может быть полезно: Начало | Таблицы