Este proyecto incluye 3 componentes principales:
- Backend Python (
hsm_simulator.py) - Implementación completa en Python - Frontend HTML Standalone (
hsm_simulator.html) - Aplicación web que funciona sin internet - Documentación - Diagramas de clases, secuencias y documentación técnica
Requisitos: Solo un navegador web moderno (Chrome, Firefox, Edge)
Pasos:
- Descarga el archivo
hsm_simulator.html - Haz doble clic en el archivo o abre con tu navegador
- ¡Listo! La aplicación funciona completamente sin internet
Ventajas:
- ✅ No requiere instalación
- ✅ Funciona sin internet
- ✅ Interfaz visual intuitiva
- ✅ Ideal para demostraciones
Requisitos:
- Python 3.8 o superior
- pip (gestor de paquetes de Python)
Instalación:
# 1. Instalar la librería de criptografía
pip install cryptography
# 2. Ejecutar el simulador
python hsm_simulator.pyVentajas:
- ✅ Código profesional para mostrar implementación
- ✅ Fácil de extender y modificar
- ✅ Incluye ejemplo de uso completo
- ✅ Genera logs de auditoría en archivos
-
Iniciar el sistema
- Hacer clic en "Generar Master Key y Dividir"
- El sistema genera una clave maestra de 256 bits
- La divide en 3 componentes usando esquema XOR
-
Guardar componentes de custodios
- Cada custodio recibe:
- Componente en hexadecimal (256 bits)
- Hash SHA-256 para verificación
- IMPORTANTE: Guardar cada componente de forma segura
- Usar el botón "Exportar" para descargar como JSON
- Cada custodio recibe:
-
Cargar los 3 componentes
- Cada custodio ingresa:
- Su componente (hex)
- Su hash de verificación
- El sistema valida cada hash automáticamente
- Cada custodio ingresa:
-
Reconstrucción automática
- Cuando los 3 componentes están cargados
- El sistema reconstruye la Master Key:
MK = C1 ⊕ C2 ⊕ C3 - El indicador cambia a verde: "Master Key Cargada"
-
Ir a la pestaña "Claves"
-
Ingresar un ID único (ej:
DATA-KEY-001) -
Hacer clic en "Generar Clave"
- El sistema genera una clave AES-256 aleatoria
- La encripta con la Master Key usando AES-GCM
- La almacena de forma segura
-
Repetir para crear múltiples claves según necesidad
- Ir a la pestaña "Encriptar"
- Seleccionar una clave de trabajo del dropdown
- Ingresar el texto a encriptar
- Hacer clic en "Encriptar Datos"
- Copiar el resultado (JSON con ciphertext, IV, tag)
Resultado incluye:
ciphertext: Datos encriptados en Base64iv: Vector de inicializaciónalgorithm: "AES-256-GCM"keyId: ID de la clave usadatimestamp: Momento de encriptación
- Ir a la pestaña "Desencriptar"
- Pegar el JSON con los datos encriptados
- Hacer clic en "Desencriptar Datos"
- Ver el texto original recuperado
Seguridad:
- ✅ Verifica integridad mediante GCM tag
- ✅ Detecta cualquier modificación de datos
- ✅ Solo desencripta con la clave correcta
- Ir a la pestaña "Auditoría"
- Revisar todas las operaciones realizadas
- Timestamp exacto
- Tipo de operación
- Resultado (éxito/fallo)
- Detalles adicionales
| Algoritmo | Uso | Estándar |
|---|---|---|
| AES-256-GCM | Encriptación simétrica autenticada | NIST FIPS 197 |
| SHA-256 | Hashing para verificación | NIST FIPS 180-4 |
| CSPRNG | Generación de claves aleatorias | crypto.getRandomValues (Web Crypto API) |
| XOR Scheme | División de master key entre custodios | Esquema 3-of-3 |
Master Key (MK) de 256 bits
Generación:
- C1 = random(256 bits)
- C2 = random(256 bits)
- C3 = MK ⊕ C1 ⊕ C2
Reconstrucción:
- MK = C1 ⊕ C2 ⊕ C3
Verificación:
- H(Ci) = SHA-256(Ci) para cada componente
┌─────────────────────────────────────┐
│ Interfaz de Usuario (UI) │
│ - Tabs para diferentes funciones │
│ - Validación de entradas │
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ Lógica de Negocio (HSM Core) │
│ - MasterKeyManager │
│ - WorkingKeyStore │
│ - CryptoEngine │
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ Servicios Criptográficos │
│ - Web Crypto API │
│ - AES-GCM │
│ - SHA-256 │
└─────────────────────────────────────┘
1. Usuario → Genera MK → Divide en C1, C2, C3
2. Custodios → Cargan componentes → Reconstruyen MK
3. HSM → Genera Working Keys → Encripta con MK
4. Usuario → Encripta datos → Con Working Key
5. Usuario → Desencripta datos → Con Working Key
6. Sistema → Registra todo → Log de Auditoría
Actor: Administrador del Sistema
Flujo:
- Administrador inicia el HSM
- Sistema genera Master Key
- Sistema divide MK en 3 componentes
- Cada custodio recibe su componente + hash
- Custodios guardan sus componentes de forma segura
Actores: 3 Custodios
Flujo:
- Custodio 1 ingresa su componente + hash
- Sistema valida hash del componente 1
- Custodio 2 ingresa su componente + hash
- Sistema valida hash del componente 2
- Custodio 3 ingresa su componente + hash
- Sistema valida hash del componente 3
- Sistema reconstruye Master Key
- HSM queda operacional
Actor: Usuario de la Aplicación
Flujo:
- Usuario selecciona clave de trabajo
- Usuario ingresa datos a proteger
- Sistema obtiene working key (desencriptada con MK)
- Sistema encripta datos con working key
- Sistema retorna datos encriptados + metadata
- Sistema registra operación en auditoría
# Verificar que MK = C1 ⊕ C2 ⊕ C3
c1 = crypto_utils.randomBytes(32)
c2 = crypto_utils.randomBytes(32)
mk_original = crypto_utils.randomBytes(32)
c3 = crypto_utils.xor(crypto_utils.xor(mk_original, c1), c2)
# Reconstruir
mk_reconstructed = crypto_utils.xor(crypto_utils.xor(c1, c2), c3)
# Validar
assert mk_original == mk_reconstructed # ✓ PASS# Generar componente
component = crypto_utils.randomBytes(32)
hash_original = crypto_utils.sha256(component)
# Modificar un byte
component_modified = component.copy()
component_modified[0] = (component_modified[0] + 1) % 256
# Verificar
hash_modified = crypto_utils.sha256(component_modified)
assert hash_original != hash_modified # ✓ PASS - Detecta modificaciónplaintext = b"Datos secretos del HSM"
key = crypto_utils.randomBytes(32)
# Encriptar
encrypted = aes_gcm.encrypt(plaintext, key)
# Desencriptar
decrypted = aes_gcm.decrypt(encrypted.ciphertext, key, encrypted.iv)
# Validar
assert plaintext == decrypted # ✓ PASS✅ Separación de Deberes - Requiere 3 custodios ✅ Verificación de Integridad - SHA-256 hash de cada componente ✅ Encriptación Autenticada - AES-GCM con tag de autenticación ✅ Claves Aleatorias - CSPRNG para generación segura ✅ Auditoría Completa - Registro de todas las operaciones ✅ Key Wrapping - Working keys siempre encriptadas con MK
Para un sistema real, se necesitaría:
- Hardware Seguro - HSM físico certificado FIPS 140-2 Level 3+
- Almacenamiento Persistente - Base de datos encriptada
- Autenticación - Sistema robusto de usuarios y roles
- Network Security - TLS, firewalls, IDS/IPS
- Backup & Recovery - Procedimientos de respaldo de claves
- Compliance - Auditorías y certificaciones (PCI-DSS, SOC 2)
-
Mostrar generación de MK (1 min)
- Explicar el esquema XOR
- Mostrar los 3 componentes generados
-
Cargar custodios (2 min)
- Simular que 3 personas diferentes cargan
- Mostrar validación de hash
- Mostrar activación del HSM
-
Generar claves de trabajo (1 min)
- Crear 2-3 claves con diferentes IDs
- Explicar key wrapping
-
Encriptar datos (2 min)
- Encriptar un mensaje de ejemplo
- Mostrar el resultado (ciphertext, IV, tag)
-
Desencriptar datos (2 min)
- Recuperar el mensaje original
- Demostrar integridad
-
Mostrar auditoría (1 min)
- Revisar log de operaciones
- Destacar trazabilidad
- 🔐 Seguridad por diseño - Separación de custodios
- 🎯 Algoritmos estándar - NIST FIPS certified
- 📊 Auditoría completa - Compliance ready
- 💡 Arquitectura modular - Fácil de extender
- ✅ Validación de integridad - Detección de tampering
hsm-simulator/
├── README.md # Este archivo
├── hsm_simulator.py # Backend Python
├── hsm_simulator.html # Frontend standalone
├── docs/
│ ├── diagrama_clases.png # Diagrama de clases
│ ├── diagrama_secuencia.png # Diagramas de secuencia
│ ├── arquitectura.png # Arquitectura del sistema
│ └── presentacion.pptx # PowerPoint para exposición
├── examples/
│ ├── custodian_1.json # Ejemplo componente custodio 1
│ ├── custodian_2.json # Ejemplo componente custodio 2
│ └── custodian_3.json # Ejemplo componente custodio 3
└── tests/
└── test_hsm.py # Tests unitarios
Causa: Intentando usar el HSM sin haber cargado los 3 custodios
Solución: Cargar los 3 componentes de custodios primero
Causa: El componente o hash ingresado no coincide
Solución:
- Verificar que copiaste correctamente el componente
- Verificar que copiaste correctamente el hash
- No debe haber espacios adicionales
Causa: Datos encriptados modificados o clave incorrecta
Solución:
- Verificar que el JSON esté completo
- Verificar que la clave usada para encriptar exista
- No modificar manualmente el JSON encriptado
- NIST FIPS 197 - Advanced Encryption Standard (AES)
- NIST FIPS 180-4 - Secure Hash Standard (SHA-256)
- NIST SP 800-130 - Cryptographic Key Management
- NIST SP 800-57 - Recommendation for Key Management
- Shamir, A. (1979). "How to Share a Secret"
- Gennaro, R. et al. "Practical Threshold Signatures"
- Kocher, P. "Timing Attacks on Implementations"
- Thales Luna HSM - https://cpl.thalesgroup.com/
- Entrust nShield - https://www.entrust.com/
- AWS CloudHSM - https://aws.amazon.com/cloudhsm/
- Azure Key Vault - https://azure.microsoft.com/en-us/services/key-vault/
Proyecto: Simulador de HSM con Master Key y 3 Custodios
Funcionalidades:
- Master key para encriptar todas las llaves
- Módulo para ingresar llaves usando 3 custodios (llave y hash de comprobación)
- Funciones para encriptar y desencriptar con elección de llave
Entregas:
- ✅ Hito 1 (09/11/2024): Marco conceptual y diseño
- ✅ Hito 2 (30/11/2024): Implementación y demostración
Para preguntas o problemas:
- Revisar esta documentación
- Verificar los diagramas de clases y secuencias
- Ejecutar el código de ejemplo en Python
- Probar la versión HTML standalone
¡Éxito en tu presentación! 🚀