Proyecto de Criptografía 2026-1 - Sistema de gestión segura de claves y firma de transacciones.
- Ed25519 para firmas digitales
- Argon2id para derivación de claves (KDF)
- AES-256-GCM para encriptación autenticada
- SHA3-256 para derivación de direcciones estilo Ethereum
- Python 3.8 o superior
- pip (gestor de paquetes de Python)
# Clonar el repositorio
git clone https://github.com/gomezmaciel/cold-wallet.git
cd cold-wallet
# Instalar dependencias
pip3 install -r requirements.txt# Clonar el repositorio
git clone https://github.com/gomezmaciel/cold-wallet.git
cd cold-wallet
# Instalar dependencias
pip install -r requirements.txt
# Si pip no funciona, usar:
python -m pip install -r requirements.txtMac/Linux:
python3 wallet.py helpWindows:
python wallet.py helpMac/Linux:
python3 wallet.py initWindows:
python wallet.py initMac/Linux:
python3 wallet.py signWindows:
python wallet.py signMac/Linux:
python3 wallet.py verify signed_tx_1.jsonWindows:
python wallet.py verify signed_tx_1.jsonEjecuta la suite completa de pruebas:
Mac/Linux:
python3 test_wallet.pyWindows:
python test_wallet.pyEsto ejecutará 5 pruebas:
- ✅ Inicialización de Wallet
- ✅ Desencriptación de Keystore
- ✅ Firma de Transacción
- ✅ Verificación de Firma (incluye detección de fraude)
- ✅ Múltiples Transacciones
cold-wallet/
├── crypto_utils.py # Funciones criptográficas principales
├── wallet.py # Interfaz CLI (comandos: init, sign, verify)
├── test_wallet.py # Suite de pruebas automatizadas
├── requirements.txt # Dependencias del proyecto
├── README.md # Esta documentación
├── .gitignore # Archivos ignorados por Git
│
├── app/ # Implementación modular (Fase 1)
│ ├── crypto/ # Módulos de criptografía
│ ├── transaction/ # Manejo de transacciones
│ ├── ui/ # Interfaz de usuario
│ └── main.py # Punto de entrada
│
├── docs/ # Documentación técnica
│ └── technical_report.md
│
├── tests/ # Pruebas unitarias adicionales
│
└── [Archivos generados localmente, no en Git]
├── keystore.json # Tu wallet encriptada
└── signed_tx_*.json # Transacciones firmadas
Este proyecto se desarrolló en dos fases:
- Estructura de carpetas separadas (
app/crypto/,app/transaction/,app/ui/) - Sistema completo de transacciones con CLI
- Implementación inicial del sistema de keystores
- Consolidación en 3 archivos principales
- Interfaz CLI mejorada y más intuitiva
- Suite completa de pruebas automatizadas
- Documentación compatible Windows/Mac
Ambas versiones están disponibles en el repositorio para referencia.
- Genera par de claves Ed25519 (32 bytes cada una)
- Deriva dirección estilo Ethereum usando SHA3-256
- Almacena clave pública y dirección en el keystore
- Encripta clave privada con Argon2id + AES-256-GCM
- Parámetros Argon2id:
- Time cost: 3 iteraciones
- Memory: 64MB (65536 KB)
- Parallelism: 4 hilos
- Output: 32 bytes
- Nonce aleatorio de 12 bytes para AES-GCM
- Tag de autenticación incluido (AEAD)
- Canonicalización JSON (claves ordenadas alfabéticamente)
- Firma Ed25519 de 64 bytes (128 caracteres hexadecimales)
- Almacena transacción + firma + clave pública
- Verifica autenticidad usando la clave pública
- Detecta cualquier modificación en los datos de la transacción
- Protección contra:
- Modificación de montos
- Cambio de direcciones
- Alteración de cualquier campo
┌─────────────────────────────────────────────┐
│ Generación de Claves │
│ Ed25519 (32 bytes privada/pública) │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Derivación de Dirección │
│ SHA3-256 → últimos 20 bytes → 0x... │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Almacenamiento (Keystore) │
│ Password → Argon2id → AES-256-GCM │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Firma de Transacciones │
│ JSON Canonicalizado → Ed25519 Sign │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Verificación de Firmas │
│ Detecta modificaciones / Valida origen │
└─────────────────────────────────────────────┘
Para demostrar la detección de fraude:
- Firma una transacción:
python3 wallet.py sign-
Modifica manualmente el archivo
signed_tx_X.json(cambia el monto) -
Intenta verificarla:
python3 wallet.py verify signed_tx_X.json- El sistema detectará la modificación: ❌ FIRMA INVÁLIDA
- Guarda tu contraseña de forma segura - No hay forma de recuperarla
- Haz backup de tu keystore.json - Contiene tu wallet encriptada
- No subas tu keystore a Git - Ya está en .gitignore por seguridad
- Este proyecto es educativo - No usar con dinero real en producción
- Python 3.8+
- cryptography - Implementación de Ed25519 y AES-GCM
- argon2-cffi - Derivación de claves con Argon2id
- García Gonzales Alejandro
- Gómez Maciel Viridiana
- Pérez del Angel Joaquín Eduardo
- Romero Pizano Christian Gustavo
Proyecto académico - Criptografía 2026-1
Universidad Nacional Autónoma de México
Para más detalles técnicos, consulta:
docs/technical_report.md- Reporte técnico completo del proyecto
- Reporte Técnico Completo: Ver en Google Docs
- Documentación Local: Ver
docs/technical_report.md