-
Notifications
You must be signed in to change notification settings - Fork 0
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 | Аутентифицированное шифрование с тегом |
| Ротация ключей | автоматически при смене мастер-пароля | Все записи перешифровываются |
Класс EncryptionError → TamperDetectedError — при обнаружении модификации данных (GCM InvalidTag) выбрасывается специфичное исключение.
time_cost = 3
memory_cost = 65 536 KB
parallelism = 4
hash_len = 32 bytes
salt = 32 bytes (random, per-installation)
iterations = 600 000
salt_size = 32 bytes
hash_len = 32 bytes
N = 2^17, r = 8, p = 1
Чувствительные данные (пароли, ключи) хранятся в объектах SecureBytes / SecurePassword.
При очистке:
-
ctypes.memset()— перезапись нулями через указатель на буфер -
bytearrayзануляется передdel - Запрещён
copy()иpickle()—__copy__,__deepcopy__,__reduce__переопределены
Логгер автоматически фильтрует строки, похожие на пароли/ключи, через regex перед записью в файл.
Копировать пароль
│
▼
pyperclip / Win32 API / xclip
│
таймер (по умолчанию 60 сек)
│
▼
5× перезапись случайными данными
│
▼
Буфер очищен
| Платформа | Метод |
|---|---|
| Windows |
IsDebuggerPresent(), CheckRemoteDebuggerPresent()
|
| Linux |
/proc/self/status → TracerPid
|
| 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()с перезаписью
Реализован протокол k-Anonymity:
- Вычисляется SHA-1 от пароля
- На сервер отправляются только первые 5 символов хэша
- Сервер возвращает список суффиксов — программа проверяет совпадение локально
- Полный пароль и полный хэш никогда не покидают устройство
Перед применением обновления проверяется SHA-256 подпись скачанного файла. Поле sha256 берётся из GitHub Releases API. При несовпадении обновление отклоняется.