Volver a la wiki

Cifrado de credenciales

Descripción

Cifrado de credenciales es la práctica de almacenar de forma segura las credenciales de acceso a sistemas externos (APIs, bases de datos, servicios SaaS) usando cifrado simétrico. En CreaRack Pro, toda credencial guardada en la base de datos se cifra con una clave dedicada que viaja en variables de entorno.

Principios

  1. Never plaintext in DB: Ninguna credencial (password, token, secret) se almacena en texto plano
  2. Symmetric encryption: Se usa Fernet (AES-128-CBC + HMAC-SHA256) con una clave compartida en tiempo de ejecución
  3. Single decryption point: Todo descifrado pasa por CredentialManager, facilitando auditoría y rotación
  4. Environment isolation: La clave de cifrado es una variable de entorno, no hardcodeada

Implementación en CreaRack Pro

Modelo

class Credential(models.Model):
    # usuario, contraseña, token, etc. — almacenados en 'encrypted_value' como ciphertext
    encrypted_value = models.BinaryField()

Manager (core/security/credential_manager.py)

Cadena de descifrado

CREDENTIAL_ENCRYPTION_KEY (activa)
  ↓ (si falla)
CREDENTIAL_ENCRYPTION_KEY_OLD (si hay rotación)
  ↓ (si falla)
SECRET_KEY (legacy, fallback)
  ↓ (si falla)
DEV_KEY (rescue, solo dev)

Claves en uso

VariablePropósitoEjemplo fuente
CREDENTIAL_ENCRYPTION_KEYClave activa, la que cifra nuevos valoresDokploy env, generada con secrets.token_hex(32)
CREDENTIAL_ENCRYPTION_KEY_OLDClave anterior, solo descifra durante rotaciónVacía o la clave vieja durante transición
SECRET_KEYFallback para compatibilidadDjango secret_key
DEV_KEYConstante de rescate en desarrolloHardcoded en código

Seguridad de las claves

Auditoría

Antipatrones detectados

Véase también

Subir