Перейти к основному содержимому
Версия: 7.0

Локальное хранилище браузера

Пассворк позволяет сохранить мастер-ключ в браузере, чтобы не вводить мастер-пароль при каждом входе. Для защиты используется Local Storage Secret Code — токен, генерируемый сервером.

Важно

Сохранённый мастер-ключ защищён токеном, который выдаётся только при успешной базовой аутентификации. Без доступа к учётной записи расшифровать данные из localStorage невозможно.


Local Storage Secret Code​

Что это такое​

Local Storage Secret Code — случайный токен, который:

  • Генерируется сервером при создании пользователя
  • Выдаётся клиенту после успешной аутентификации
  • Используется для шифрования мастер-ключа в localStorage

Характеристики​

ПараметрВеб-приложениеРасширение браузера
Длина100 символов60 символов
АлфавитA-Z, a-z, 0-9A-Z, a-z, 0-9
Энтропия~596 бит~357 бит
ГенерацияНа сервереНа сервере
Хранение токенаНа сервереНа сервере

Жизненный цикл​

  1. Создание — при регистрации пользователя сервер генерирует Secret Code
  2. Выдача — при каждой успешной аутентификации сервер отправляет Secret Code клиенту
  3. Использование — клиент шифрует мастер-ключ и сохраняет в localStorage
  4. Ротация — Secret Code может быть перегенерирован администратором

Процесс сохранения мастер-ключа​

Последовательность сохранения:

  1. Пользователь включает опцию «Запомнить мастер-пароль»
  2. Пользователь вводит мастер-пароль
  3. Клиент вычисляет мастер-ключ (PBKDF2, 300 000 итераций, SHA-256)
  4. Клиент отправляет хеш мастер-ключа на сервер для проверки
  5. Сервер подтверждает корректность и возвращает Local Storage Secret Code
  6. Клиент шифрует мастер-ключ с помощью Secret Code (AES-256-CBC)
  7. Зашифрованный мастер-ключ сохраняется в localStorage
  8. Secret Code не сохраняется в localStorage

Алгоритм шифрования​

ПараметрЗначение
АлгоритмAES-256-CBC
ДополнениеPKCS#7
КлючLocal Storage Secret Code (100 символов → 256 бит)
IVАвтоматически генерируется (128 бит)

Что сохраняется в localStorage​

ДанныеФорматЗащита
Зашифрованный мастер-ключBase64 строкаAES-256-CBC
ID пользователяСтрока—
Настройки приложенияJSON—
Что НЕ сохраняется
  • Мастер-пароль (никогда)
  • Local Storage Secret Code (выдаётся при каждой аутентификации)
  • Незашифрованный мастер-ключ
  • Приватный RSA-ключ

Процесс восстановления мастер-ключа​

Последовательность автоматического входа:

  1. Пользователь открывает приложение
  2. Клиент проверяет наличие зашифрованного мастер-ключа в localStorage
  3. Если ключ есть — клиент запоминает его для последующей расшифровки
  4. Пользователь проходит базовую аутентификацию (логин/пароль)
  5. Сервер проверяет учётные данные
  6. Сервер возвращает токены доступа и Local Storage Secret Code
  7. Клиент расшифровывает мастер-ключ с помощью Secret Code (AES-256-CBC)
  8. Мастер-ключ восстановлен — ввод мастер-пароля не требуется

Условия автоматического входа​

Автоматическое восстановление мастер-ключа возможно, если:

УсловиеОписание
Наличие ключаВ localStorage есть зашифрованный мастер-ключ
АутентификацияПользователь прошёл базовую аутентификацию
Валидный Secret CodeСервер вернул корректный Secret Code
Успешная расшифровкаДанные не повреждены

Модель безопасности​

Защита от угроз​

УгрозаЗащита
Кража localStorageДанные зашифрованы, ключ шифрования на сервере
XSS-атакаSecret Code не хранится на клиенте
Кража сессииТребуется базовая аутентификация
Физический доступ к устройствуТребуется пароль учётной записи

Ключевой принцип​

Без успешной аутентификации на сервере расшифровать мастер-ключ невозможно.

Даже если злоумышленник:

  • Получит доступ к localStorage
  • Извлечёт зашифрованный мастер-ключ
  • Получит доступ к файловой системе устройства

Он не сможет расшифровать данные без:

  • Пароля учётной записи (или SSO/LDAP доступа)
  • Успешной аутентификации на сервере
  • Получения Secret Code от сервера

Ограничения​

СценарийРиск
Общее устройствоДругой пользователь может получить доступ после своей аутентификации
Синхронизация браузераЗашифрованный ключ синхронизируется между устройствами
Компрометация сервераЗлоумышленник может получить Secret Code

Управление сохранёнными данными​

Отключение функции​

Пользователь может:

  1. Снять галочку «Запомнить мастер-пароль» в настройках
  2. Данные будут удалены из localStorage

Принудительный сброс​

Администратор может:

  1. Перегенерировать Secret Code пользователя
  2. Все сохранённые мастер-ключи станут недействительными
  3. Пользователю потребуется ввести мастер-пароль заново

Выход из системы​

При выходе из системы:

  • Токены сессии удаляются
  • Зашифрованный мастер-ключ может оставаться в localStorage (для следующего входа)
  • При желании пользователь может выбрать «Выйти и забыть»

Рекомендации по безопасности​

Когда использовать «Запомнить»​

Рекомендуется:

  • На личном устройстве с паролем/биометрией
  • При ежедневном использовании Пассворка
  • Когда удобство важно, а устройство защищено

Не рекомендуется:

  • На общих/публичных устройствах
  • При строгих требованиях к безопасности
  • Если устройство может быть утеряно/украдено

Защита паролей в памяти​

Обфускация в оперативной памяти​

Помимо шифрования в localStorage, Пассворк использует механизм защиты паролей в оперативной памяти браузера:

МетодОписание
РазбиениеПароль разбивается на случайные части
ОбфускацияКаждая часть обфусцируется (смещение символов)
ПеремешиваниеЧасти хранятся в случайном порядке
ВосстановлениеПорядок восстановления хранится отдельно
Ограничение

Это обфускация, а не криптографическая защита. Она затрудняет простое чтение паролей из памяти (например, в дампах), но не защищает от целенаправленной атаки с отладчиком.


Различия для расширения браузера​

Расширение браузера имеет отличия в реализации:

ПараметрВеб-приложениеРасширение
Secret Code длина100 символов (~596 бит)60 символов (~357 бит)
ХранилищеlocalStoragechrome.storage.local
ИзоляцияОбщий доменИзолированное расширение
Защита от XSSЗависит от CSPПолная изоляция

Преимущества расширения​

  • Изолированное хранилище — недоступно с веб-страниц
  • Отдельный контекст выполнения — защита от вредоносных скриптов
  • Защита от XSS — на посещаемых сайтах не могут получить доступ к данным расширения