Skip to main content

Cifrado de credenciales y gestión de claves

Cada base de datos aprovisionada tiene una contraseña real en MySQL — esa contraseña se guarda cifrada del lado del plano de control, nunca en texto plano.

Sin la clave, es irrecuperable para siempre

El cifrado es simétrico: sin la clave exacta, el intento de descifrado devuelve NULL, no un error. Si se pierde la clave de cifrado, todas las contraseñas ya cifradas quedan irrecuperables permanentemente — no hay proceso de recuperación posible. Por eso la clave se respalda en una ubicación completamente distinta de donde vive el backup del propio plano de control (nunca el mismo disco o bucket).

Validación obligatoria al arrancar

El backend verifica, antes de aceptar tráfico, que la clave de cifrado configurada coincide con el hash ya registrado en la base de datos. Si no coincide, el proceso no arranca — se prefiere una falla explícita e inmediata a operar silenciosamente produciendo descifrados corruptos que nadie notaría hasta que un usuario reportara una contraseña que no funciona.

Por qué rotar la clave no es un endpoint HTTP

Rotar la clave de cifrado es una operación de altísimo privilegio — literalmente puede volver irrecuperables todas las credenciales del sistema si algo sale mal. Por eso, a propósito, no existe como endpoint HTTP: se invoca directamente contra la base de datos con acceso administrativo restringido, nunca a través de la superficie pública del backend.

El Stored Procedure de rotación descifra cada fila con la clave vieja y la re-cifra con la nueva, todo dentro de una única transacción — si la clave vieja resulta incorrecta para una sola fila, toda la rotación se aborta, no queda nada a medio rotar. Es el mismo patrón de "todo o nada" descrito en Convenciones de Stored Procedures.

Flujo de rotación (alto privilegio, fuera del backend HTTP)
Operador con acceso administrativo directo a la base


Stored Procedure de rotación (clave vieja, clave nueva)
│ - descifra cada fila con la clave vieja
│ - re-cifra con la clave nueva
│ - TODO dentro de una sola transacción

Si una sola fila falla → rollback completo, nada queda a medio rotar
Si todo tiene éxito → el hash de verificación se actualiza


Se actualiza la clave en la configuración del backend y se reinicia el proceso