
Una aplicación de escritorio offline segura para generar y gestionar códigos TOTP de 2FA. Cuenta con almacenamiento de bóveda cifrado, criptografía moderna (Argon2 + AES‑GCM), arquitectura modular y un enfoque local‑first sin dependencias en la nube. Diseñada para ser fiable, extensible y para una futura interfaz multiplataforma.
Un gestor seguro y offline de autenticación de dos factores (2FA) para entornos de escritorio. Construido con Python, con cifrado robusto y sin dependencias en la nube.
🌐 Página de inicio: desktop-2fa.org
| Característica | Descripción |
|---|
| 🔐 Seguridad del almacén | Cifrado AES-256-GCM con derivación de clave Argon2id |
| ⏱️ Generación de TOTP | Generación de códigos compatible con RFC 6238 |
| 💻 CLI completa | Interfaz de línea de comandos completa para gestionar tokens |
| 📋 Soporte de portapapeles | Copia automática de códigos TOTP al portapapeles |
| 🔓 Diseño sin estado | Cada comando requiere autenticación explícita de contraseña |
| 🛡️ Política de contraseñas | Aplicación de fortaleza de contraseñas configurable con zxcvbn |
| 🧪 Bien probado | 289 pruebas superadas con cobertura completa |
| 📖 Modelo de seguridad | Análisis detallado de amenazas y documentación de diseño criptográfico |
Añadiendo una nueva entrada TOTP interactivamente
Generando un código TOTP para una entrada
Renombrando una entrada con detección de duplicados
Visualizando información de versión y listando todas las entradas
pip install desktop-2fa
Verificar instalación:
python -c "import desktop_2fa; print(desktop_2fa.__version__)"
# Salida: 0.8.1dev
# Inicializar un nuevo almacén
d2fa vault init
# Añadir un nuevo token TOTP
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP
# Listar todas las entradas
d2fa vault list
# Generar un código
d2fa code GitHub
# Proporcionar contraseña mediante línea de comandos
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP --password miclave
# Proporcionar contraseña mediante archivo
d2fa vault add GitHub GitHub JBSWY3DPEHPK3PXP --password-file /ruta/al/archivo_de_clave.txt
El almacén es un archivo cifrado ubicado en ~/.desktop-2fa/vault.
Cuando un comando requiere un almacén y no existe:
--password/--password-file (modo no interactivo)Almacén creado en <ruta>Cuando un comando requiere un almacén y este existe:
typer.Exit(1)El comando rename aplica un comportamiento determinista cuando múltiples entradas coinciden con el nombre objetivo:
Error: Existen múltiples entradas llamadas '<nombre>'. Operación cancelada. Resuelve los duplicados primero.| Comando | Descripción |
|---|---|
d2fa vault add <nombre> <emisor> <secreto> | Añadir una nueva entrada TOTP |
d2fa vault list | Listar todas las entradas TOTP almacenadas |
d2fa vault rename <antiguo> <nuevo> | Renombrar una entrada |
d2fa vault remove <nombre> | Eliminar una entrada |
d2fa code <nombre> [--copy|--copy-only] | Generar código TOTP con opciones de copia al portapapeles |
| Comando | Descripción |
|---|---|
d2fa vault init [--force] | Inicializar un nuevo almacén |
d2fa vault unlock | Abrir almacén con advertencia de contraseña débil (si está configurado) |
d2fa vault change-password | Cambiar la contraseña del almacén |
d2fa vault backup | Crear una copia de seguridad cifrada del almacén |
d2fa vault export <ruta> | Exportar almacén a un archivo |
d2fa vault import <ruta> [--force] | Importar almacén desde un archivo |
| Opción | Descripción |
|---|---|
--password <pwd> | Proporcionar la contraseña del almacén directamente |
--password-file <ruta> | Leer la contraseña del almacén desde un archivo |
--json | Salida en formato JSON |
--raw | Salida sin formato |
--quiet | Suprimir salida no esencial |
--copy | Copiar código TOTP al portapapeles y mostrarlo |
--copy-only | Copiar código TOTP solo al portapapeles |
--force | Forzar operación (omitir confirmaciones) |
El almacén utiliza:
Cada comando requiere autenticación explícita de contraseña. No hay acceso basado en sesiones.
Desktop-2FA utiliza zxcvbn para evaluar la fortaleza de la contraseña al crear o cambiar la contraseña del almacén:
Ejemplos:
password, 123456, qwerty, admin2024Battery-Horse-Staple-Correct, Mountain@River*2024, MySecureVault#42Configuración (~/.config/d2fa/config.toml):
[security]
# Requerir contraseñas fuertes (puntuación >= 3)
reject_weak_passwords = false # advertir pero permitir | true: rechazar contraseñas débiles
Cuando reject_weak_passwords = false:
Cuando reject_weak_passwords = true:
Compatibilidad hacia atrás:
Si tienes min_password_entropy configurado en tu archivo de configuración (opción heredada), se reconoce y se trata como equivalente a requerir una puntuación de zxcvbn >= 3.
La versión 0.8.0 mantiene todo el endurecimiento de seguridad anterior de v0.7.3 e introduce una arquitectura modular para un mejor aislamiento de código:
| Documento | Descripción |
|---|---|
| Manual de usuario | Guía de uso completa |
| Modelo de seguridad | Análisis detallado de amenazas y diseño criptográfico |
| Especificación de UX de la CLI | Contrato de UX y comportamiento |
| Criptografía | Detalles de implementación de seguridad |
pytest tests/ # Ejecutar todas las pruebas
pytest --cov=src/desktop_2fa # Ejecutar con cobertura
src/desktop_2fa/
├── app/ # Componentes de la aplicación
├── cli/ # Interfaz de línea de comandos
├── crypto/ # Utilidades de cifrado
├── totp/ # Generación de TOTP
├── ui/ # Componentes de interfaz de usuario
├── vault/ # Gestión del almacén
└── utils/ # Utilidades
Apache License 2.0. Ver archivo LICENSE.
Łukasz Perek
desktop‑2fa cuenta con el apoyo del Programa de Patrocinio Kilo OSS.
Para preguntas o soporte, contáctanos en [email protected]
Desktop‑2FA es una herramienta independiente de código abierto construida con un enfoque en autonomía, transparencia y seguridad offline. Si te resulta útil y deseas apoyar su desarrollo continuo, puedes hacerlo a través de las siguientes plataformas: