
Безопасное офлайн-десктопное приложение для генерации и управления TOTP-кодами двухфакторной аутентификации. Включает зашифрованное хранилище, современную криптографию (Argon2 + AES‑GCM), модульную архитектуру и локально-ориентированный подход без облачных зависимостей. Разработано для надежности, расширяемости и будущего кроссплатформенного интерфейса.
Безопасный офлайн-менеджер двухфакторной аутентификации (2FA) для настольных сред. Создан на Python с использованием сильного шифрования и без облачных зависимостей.
🌐 Сайт: desktop-2fa.org
| Функция | Описание |
|---|
| 🔐 Безопасность хранилища | Шифрование AES-256-GCM с выводом ключа Argon2id |
| ⏱️ Генерация TOTP | Генерация кодов в соответствии с RFC 6238 |
| 💻 Полный CLI | Полный интерфейс командной строки для управления токенами |
| 📋 Поддержка буфера обмена | Автоматическое копирование TOTP-кодов в буфер обмена |
| 🔓 Без сохранения состояния | Каждая команда требует явной аутентификации по паролю |
| 🛡️ Политика паролей | Настраиваемая проверка надёжности пароля с помощью zxcvbn |
| 🧪 Хорошо протестировано | 289 тестов пройдено с полным покрытием |
| 📖 Модель безопасности | Подробный анализ угроз и документация по криптографическому дизайну |
Добавление новой TOTP-записи в интерактивном режиме
Генерация TOTP-кода для записи
Переименование записи с обнаружением дубликатов
Просмотр информации о версии и списка всех записей
pip install desktop-2fa
Проверка установки:
python -c "import desktop_2fa; print(desktop_2fa.__version__)"
# Output: 0.8.1dev
# Initialize a new vault
d2fa vault init
# Add a new TOTP token
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP
# List all entries
d2fa vault list
# Generate a code
d2fa code GitHub
# Provide password via command line
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP --password mypassphrase
# Provide password via file
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP --password-file /path/to/passphrase.txt
Хранилище — это зашифрованный файл, расположенный по адресу ~/.desktop-2fa/vault.
Когда команда требует хранилище, а оно не существует:
--password/--password-file (неинтерактивный режим)Vault created at <path>Когда команда требует хранилище, и оно существует:
typer.Exit(1)Команда rename обеспечивает детерминированное поведение, если несколько записей соответствуют целевому имени:
Error: Multiple entries named '<name>' exist. Operation aborted. Resolve duplicates first.| Команда | Описание |
|---|---|
d2fa vault add <name> <issuer> <secret> | Добавить новую TOTP-запись |
d2fa vault list | Список всех сохранённых TOTP-записей |
d2fa vault rename <old> <new> | Переименовать запись |
d2fa vault remove <name> | Удалить запись |
d2fa code <name> [--copy|--copy-only] | Сгенерировать TOTP-код с опциями копирования в буфер обмена |
| Команда | Описание |
|---|---|
d2fa vault init [--force] | Инициализировать новое хранилище |
d2fa vault unlock | Открыть хранилище с предупреждением о слабом пароле (если настроено) |
d2fa vault change-password | Изменить пароль хранилища |
d2fa vault backup | Создать зашифрованную резервную копию хранилища |
d2fa vault export <path> | Экспортировать хранилище в файл |
d2fa vault import <path> [--force] | Импортировать хранилище из файла |
| Опция | Описание |
|---|---|
--password <pwd> | Указать пароль хранилища напрямую |
--password-file <path> | Прочитать пароль хранилища из файла |
--json | Вывод в формате JSON |
--raw | Сырой вывод (без форматирования) |
--quiet | Подавить необязательный вывод |
--copy | Скопировать TOTP-код в буфер обмена и отобразить |
--copy-only | Скопировать TOTP-код только в буфер обмена |
--force | Принудительное выполнение (без подтверждений) |
Хранилище использует:
Каждая команда требует явной аутентификации по паролю. Доступ на основе сессии отсутствует.
Desktop-2FA использует zxcvbn для оценки надёжности пароля при создании или смене пароля хранилища:
Примеры:
password, 123456, qwerty, admin2024Battery-Horse-Staple-Correct, Mountain@River*2024, MySecureVault#42Конфигурация (~/.config/d2fa/config.toml):
[security]
# Require strong passwords (score >= 3)
reject_weak_passwords = false # warn but allow | true: reject weak passwords
Когда reject_weak_passwords = false:
Когда reject_weak_passwords = true:
Обратная совместимость:
Если в вашей конфигурации установлен параметр min_password_entropy (устаревшая опция), он распознаётся и считается эквивалентным требованию оценки zxcvbn >= 3.
Версия 0.8.0 сохраняет все предыдущие улучшения безопасности из v0.7.3 и вводит модульную архитектуру для лучшей изоляции кода:
| Документ | Описание |
|---|---|
| User Manual | Полное руководство по использованию |
| Security Model | Подробный анализ угроз и криптографический дизайн |
| CLI UX Specification | Контракт UX и поведение |
| Cryptography | Детали реализации безопасности |
pytest tests/ # Run all tests
pytest --cov=src/desktop_2fa # Run with coverage
src/desktop_2fa/
├── app/ # Application components
├── cli/ # Command-line interface
├── crypto/ # Encryption utilities
├── totp/ # TOTP generation
├── ui/ # User interface components
├── vault/ # Vault management
└── utils/ # Utilities
Лицензия Apache 2.0. См. файл LICENSE.
Łukasz Perek
desktop‑2fa поддерживается через программу спонсорства Kilo OSS.
По вопросам или за поддержкой свяжитесь с нами по адресу [email protected]
Desktop‑2FA — это независимый инструмент с открытым исходным кодом, созданный с упором на автономию, прозрачность и офлайн-безопасность. Если вы считаете его полезным и хотите поддержать дальнейшее развитие, вы можете сделать это через следующие платформы: