Rotación de claves (seguridad)
Definición
Rotación de claves es el proceso de reemplazar una clave criptográfica activa por una nueva, retirando la anterior del uso futuro. En sistemas críticos, es una práctica de higiene de seguridad obligatoria para mitigar:
- Exposición accidental: Si la clave quedó registrada en logs, transcripts, backups o se filtró
- Envejecimiento: Claves generadas sin mecanismos automáticos pueden comprometerse con el tiempo
- Cumplimiento: Políticas de seguridad a menudo exigen rotación periódica
Patrón genérico
- Generación: Nueva clave creada mediante RNG seguro (fuera del sistema si es posible)
- Instalación: Nueva clave se activa; anterior se marca como “en rotación”
- Migración: Todos los datos cifrados con la antigua se re-cifran con la nueva
- Transición: Durante migración, el sistema intenta descifrar con ambas (nueva + antigua)
- Limpieza: Antigua se borra completamente tras verificar migración exitosa
Ventaja cero-downtime
Si la migración usa una cadena de descifrado que intenta múltiples claves en orden:
try_decrypt(plaintext, [nueva, antigua, legacy, rescue])
Entonces:
- Nuevas escrituras usan la clave nueva (rápido, primer intento)
- Lecturas de datos antiguos todavía funcionan (fallback a antigua)
- No hay interrupciones de servicio
Antipatrones
- Sin mechanism de fallback: Cambiar la clave activa sin soporte de descifrado con la anterior → todas las credenciales viejas quedan ilegibles
- Rotación sin test: No validar que todo ciphertext antiguo se migró correctamente
- Clave antigua no borrada: Mantener claves antiguas indefinidamente aumenta la superficie de ataque
- Rotación manual sin automación: Propenso a olvidos, inconsistencias o downtime
En CreaRack Pro
Implementado en [[feature—security—credential-key-rotation]] para credenciales de acceso a sistemas externos (Credential model).
Mecanismo específico:
- Variable
CREDENTIAL_ENCRYPTION_KEY_OLDalmacena la clave anterior CredentialManager._decryption_chain()intenta descifrar en orden: activa → OLD → SECRET_KEY → DEV_KEY- Comando
manage.py reencrypt_credentialsmigra los ciphertexts - Tras migración,
CREDENTIAL_ENCRYPTION_KEY_OLDse limpia
Véase también
- [[feature—security—credential-key-rotation]]
- [[entity—core—config—credential-encryption-key-old]]
- [[entity—core—service—credential-manager]]
- [[concept—security—credential-encryption]]