Skip to content

Security

Maximka1993271 edited this page Jun 10, 2026 · 1 revision

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

Общая схема

Мастер-пароль
     │
     ▼ Argon2id (time=3, mem=64MB, p=4)
  Ключ KDF
     │
     ├──▶ AES-256-GCM  ──▶  Поля в SQLCipher БД
     │
     └──▶ SQLCipher key ──▶  Шифрование всего .db файла

Шифрование базы данных

Слой Технология Описание
БД-файл целиком SQLCipher (AES-256-CBC) Весь .db файл зашифрован
Поля записей AES-256-GCM Аутентифицированное шифрование с тегом
Ротация ключей автоматически при смене мастер-пароля Все записи перешифровываются

Класс EncryptionErrorTamperDetectedError — при обнаружении модификации данных (GCM InvalidTag) выбрасывается специфичное исключение.


Производные ключи (KDF)

Argon2id (основной)

time_cost    = 3
memory_cost  = 65 536 KB
parallelism  = 4
hash_len     = 32 bytes
salt         = 32 bytes (random, per-installation)

PBKDF2-HMAC-SHA256 (fallback)

iterations   = 600 000
salt_size    = 32 bytes
hash_len     = 32 bytes

SCrypt (для SQLCipher ключа)

N = 2^17, r = 8, p = 1

Управление памятью

Чувствительные данные (пароли, ключи) хранятся в объектах SecureBytes / SecurePassword.

При очистке:

  1. ctypes.memset() — перезапись нулями через указатель на буфер
  2. bytearray зануляется перед del
  3. Запрещён copy() и pickle()__copy__, __deepcopy__, __reduce__ переопределены

Логгер автоматически фильтрует строки, похожие на пароли/ключи, через regex перед записью в файл.


Безопасный буфер обмена

Копировать пароль
       │
       ▼
  pyperclip / Win32 API / xclip
       │
  таймер (по умолчанию 60 сек)
       │
       ▼
  5× перезапись случайными данными
       │
       ▼
  Буфер очищен

Анти-отладка

Платформа Метод
Windows IsDebuggerPresent(), CheckRemoteDebuggerPresent()
Linux /proc/self/statusTracerPid
macOS sysctl PT_DENY_ATTACH
Все Детекция виртуальных машин и сэндбоксов

Для разработки/тестирования: python Secure_Pass_Pro.pyw --disable-anti-debug --disable-vm-check


Защита файлов

  • Папка .securepass скрыта на Windows через SetFileAttributesW(path, FILE_ATTRIBUTE_HIDDEN)
  • Запись в файлы — через os.replace() (атомарная операция, без повреждения при сбое питания)
  • Временные файлы удаляются через secure_delete() с перезаписью

Проверка HIBP (Have I Been Pwned)

Реализован протокол k-Anonymity:

  1. Вычисляется SHA-1 от пароля
  2. На сервер отправляются только первые 5 символов хэша
  3. Сервер возвращает список суффиксов — программа проверяет совпадение локально
  4. Полный пароль и полный хэш никогда не покидают устройство

Целостность обновлений

Перед применением обновления проверяется SHA-256 подпись скачанного файла. Поле sha256 берётся из GitHub Releases API. При несовпадении обновление отклоняется.

Clone this wiki locally