Перейти к содержанию

Архитектура Безопасности

HistorySync обрабатывает чувствительные данные — историю браузера и учётные данные WebDAV. На этой странице подробно объясняется, как эти данные защищаются.


Модель Угроз

HistorySync разработан для защиты от:

  • Кражи учётных данных — вредоносный процесс, читающий файл конфигурации на диске, не должен иметь возможности восстановить пароли WebDAV в открытом виде.
  • Перехвата данных при передаче — резервное копирование и восстановление истории должны использовать зашифрованные соединения.
  • Случайной потери данных — повреждённые конфигурации и неудавшиеся загрузки не должны оставлять базу данных в несогласованном состоянии.

HistorySync не защищает от:

  • Скомпрометированной ОС или злоумышленника уровня root (который может напрямую получить доступ к хранилищу ключей).
  • Атак физического доступа (полное шифрование диска выходит за рамки данного приложения).
  • Злоумышленника, способного выполнять код в той же пользовательской сессии.

Архитектура Безопасности V2

Хранение Мастер-Ключа

Криптографически случайный 256-битный мастер-ключ генерируется при первом запуске и хранится в системном хранилище ключей ОС с использованием библиотеки keyring:

Платформа Бэкенд хранилища
Windows Диспетчер учётных данных Windows
macOS Связка ключей macOS
Linux Secret Service API (GNOME Keyring, KWallet и др.)

Мастер-ключ никогда напрямую не касается диска. Все данные, сохраняемые на диске, используют производные подключи.


Деривация Ключей (HKDF)

Из мастер-ключа HistorySync выводит независимые подключи для каждой цели, используя HKDF (Функция Деривации Ключей на основе HMAC):

Мастер-Ключ (256 бит)
    ├── HKDF(info="encryption") → Подключ Шифрования (256 бит)
    └── HKDF(info="authentication") → Подключ Аутентификации (256 бит)

Использование независимых подключей означает, что компрометация одного подключа (например, через криптоаналитическую атаку на алгоритм шифрования) не компрометирует другой.


Шифрование Чувствительных Значений

Пароли WebDAV и другие чувствительные значения конфигурации шифруются с помощью XOR потоком ключей HKDF-SHA256 с аутентификацией через HMAC-SHA256:

зашифровать(открытый_текст, master_key):
    salt       ← случайная 16-байтовая соль
    prk        ← HMAC-SHA256(key=salt, data=master_key)          # HKDF-Extract
    enc_key    ← HKDF-Expand(prk, info="historysync-enc-key")
    auth_key   ← HKDF-Expand(prk, info="historysync-auth-key")
    keystream  ← HKDF-Expand(prk, info="historysync-enc-key", length=len(padded_plaintext))
    ciphertext ← padded_plaintext XOR keystream
    tag        ← HMAC-SHA256(key=auth_key, data=salt ‖ ciphertext)
    return base64(0x02 ‖ salt ‖ tag ‖ ciphertext)

Результат хранится как строка Base64 в config.json. При загрузке тег HMAC проверяется до попытки расшифровки.

HMAC-SHA256 обеспечивает аутентифицированное шифрование — любое вмешательство в зашифрованный текст приводит к ошибке проверки HMAC DecryptionError, которая перехватывается и журналируется. Приложение продолжает работу с пустым паролем, а не падает или молча принимает повреждённое значение.


Безопасность Файла Конфигурации

Файл конфигурации (config.json) записывается с использованием атомарного переименования:

  1. Данные записываются во временный файл в той же директории.
  2. Вызывается fsync() для сброса на диск.
  3. Временный файл переименовывается поверх существующего файла конфигурации.

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

Если файл конфигурации при загрузке окажется повреждённым, он: 1. Резервируется в config.json.bak. 2. Заменяется свежей конфигурацией по умолчанию. 3. Пользователю показывается диалог предупреждения.


Безопасность Транспорта WebDAV

  • Все соединения WebDAV по умолчанию используют HTTPS.
  • Проверка SSL-сертификата включена по умолчанию (webdav.verify_ssl = true).
  • Отключение проверки SSL (verify_ssl = false) возможно для самоподписанных сертификатов на доверенных внутренних сетях, но не рекомендуется для серверов, доступных из интернета.
  • Загрузки резервных копий используют атомарную потоковую передачу — удалённый файл заменяется только после успешного завершения загрузки.

Пароль / Мастер-Пароль (Блокировка GUI)

HistorySync поддерживает опциональный мастер-пароль, который блокирует GUI. Это отдельно от шифрования учётных данных WebDAV, описанного выше.

  • Пароль хранится как bcrypt-хеш в config.json (поле master_password_hash).
  • bcrypt-хеш односторонний — даже если config.json будет похищен, открытый пароль не может быть восстановлен.
  • Мастер-пароль не шифрует саму базу данных истории — он только блокирует GUI.

Функции Конфиденциальности

Функция Описание
Чёрный список доменов Домены в чёрном списке никогда не импортируются, а существующие записи удаляются навсегда.
Фильтры префиксов URL Внутренние URL браузеров (chrome://, about:, file:// и др.) фильтруются по умолчанию.
Мягкое скрытие Записи можно скрыть из основного вида без удаления.
Вид скрытых записей Отдельный вид с контролем доступа для мягко скрытых записей.
Без интерфейса / Fresh режим Режим --fresh использует временную директорию — чтения или записи в реальную конфигурацию/базу данных не происходит. Полезно для демонстраций, требующих конфиденциальности, или устранения неполадок.

Сообщение об Уязвимостях

Не открывайте публичный GitHub issue для уязвимостей безопасности.

Пожалуйста, отправьте письмо на 0x4fe6@gmail.com с:

  • Описанием уязвимости.
  • Шагами для воспроизведения.
  • Возможным воздействием.

Вы получите ответ в течение 72 часов. Мы скоординируем с вами исправление и сроки ответственного раскрытия информации.