El aviso que aparece cuando se inicia un cliente VPN es fácil de malinterpretar. No es la contraseña de la cuenta VPN, no es la contraseña del túnel, y escribirla no demuestra que la conexión sea segura. Desbloquea una representación guardada de una clave privada para que el cliente pueda leer el material de la clave y usarlo para autenticarse. Todo lo que ocurre después es otra cuestión.

En la práctica, la respuesta falla en los bordes: la gente supone que la frase protege el túnel en funcionamiento, o que cambiarla revoca una copia de la clave que ya se filtró. Ambas suposiciones fallan, y fallan de forma que dejan una credencial expuesta mientras el operador cree que ya está resuelto.

Un diálogo, varios secretos distintos

La frase de una clave privada descifra un archivo. La contraseña de una cuenta te autentica ante un servicio. La contraseña de importación PKCS#12 descifra un paquete que contiene una clave y su certificado, y puede no ser la misma cadena que la frase propia de la clave. Estos avisos pueden parecer casi idénticos, y adivinar qué secreto va dónde es como las claves acaban pegadas en el campo equivocado.

El cifrado propio del túnel es una cuarta cosa. El canal de datos usa claves de sesión negociadas durante el handshake; la frase de la clave privada no desempeña ningún papel en la protección de paquetes individuales. Si alguien puede leer el archivo de la clave, puede intentar adivinar la frase sin conexión, pero si puede leer paquetes, la frase es irrelevante.

Qué cubre el cifrado en disco

Una clave PEM cifrada tiene dos formas, y la cabecera te dice cuál tienes. La forma moderna PKCS#8 comienza con -----BEGIN ENCRYPTED PRIVATE KEY-----; la forma PEM antigua, todavía común en configuraciones OpenVPN más viejas, comienza con -----BEGIN RSA PRIVATE KEY----- y lleva Proc-Type: 4,ENCRYPTED y una línea DEK-Info justo debajo. El archivo contiene la clave privada cifrada bajo una clave derivada de tu frase, normalmente mediante un KDF basado en contraseña con un número de iteraciones o factor de trabajo declarado. La documentación de OpenSSL pkey cubre los formatos y las opciones de frase que se aplican al leer una.

Se derivan dos consecuencias. Una frase débil se puede atacar sin conexión al ritmo que permita el KDF, así que los permisos del archivo y el acceso a las copias de seguridad siguen importando incluso cuando el archivo está cifrado. Y un atacante que solo obtiene el archivo sin la frase tiene que adivinar; quien obtiene el archivo y la frase tiene la clave, exactamente como si nunca se hubiera cifrado.

head -3 vpn.key
openssl pkey -in vpn.key -noout -pubout
openssl pkcs12 -in bundle.p12 -info -noout

head -3 muestra la cabecera y, en un archivo antiguo, las líneas Proc-Type y DEK-Info que demuestran el cifrado; una sola línea no es prueba en ningún sentido. La línea pkey pide la frase e imprime solo la mitad pública, lo que demuestra que el archivo y la frase funcionan sin exponer la clave privada. No uses -text para esa comprobación: imprime los componentes privados, privateExponent, prime1, prime2 y el resto, y esa salida no debe pegarse nunca en ningún sitio, ni en un ticket, ni en un chat, ni en un registro. El comando PKCS#12 también te dice si el paquete tiene una contraseña MAC o de cifrado separada, algo que conviene saber antes de pasárselo a un colega.

Qué deja de proteger una vez cargada la clave

El desbloqueo es un evento de un solo sentido para ese proceso. El cliente pide la clave al KDF, descifra el archivo y mantiene la clave privada en memoria todo el tiempo que la necesita. Desde ese momento la frase no protege nada de la sesión en funcionamiento: ni la memoria del proceso, ni un volcado de núcleo, ni una sesión de depuración conectada al cliente, ni una copia de seguridad de la máquina tomada mientras la clave estaba en uso.

Es la misma frontera que una clave SSH con frase, o la caja fuerte desbloqueada de un gestor de contraseñas. Eleva el coste de robar el archivo en reposo y no hace nada contra malware que se ejecute como tu usuario, una aplicación autorizada que pida al cliente firmar, o un administrador que pueda leer la memoria. Trátalo como una capa, no como el control que hace que una clave sea segura de dejar tirada.

Por qué el aviso sigue volviendo

Un cliente que vuelve a preguntar en cada reconexión no está necesariamente roto. Algunos clientes guardan la frase en caché para la sesión, otros la almacenan en el llavero del sistema operativo, y otros pueden apuntar a un asistente que la proporciona, así que el comportamiento depende del cliente y de su configuración, no del archivo de la clave.

Si el aviso repetido es la queja real, revisa las opciones de caché y autenticación del cliente antes de quitar el cifrado a la clave. Eliminar la frase convierte un archivo protegido en una clave de texto plano, y la reconexión se vuelve silenciosa a costa del único control en reposo que tenías. Una respuesta mejor suele ser un almacén de credenciales compatible con los mismos permisos de archivo que usarías de todos modos.

La pérdida y la exposición no son la misma reparación

Una frase perdida no se puede recuperar del certificado. El certificado es material público que vincula un nombre a una clave; no contiene ningún camino de vuelta a la clave privada ni ninguna pista sobre la frase. Las opciones prácticas son una copia de seguridad autorizada de la clave o una nueva identidad emitida mediante el proceso normal del operador. Quien ofrezca 'recuperar' la frase está ofreciendo adivinarla.

La exposición requiere otra respuesta. Volver a cifrar la misma clave con una frase nueva deja el material de la clave intacto, así que una copia que ya se había desbloqueado en otro sitio sigue funcionando. La reparación es revocar o sustituir la credencial: emitir una clave y un certificado nuevos, distribuirlos y retirar el viejo en el par. Hasta que eso ocurra, cambiar la contraseña del archivo es mantenimiento, no contención. Mantén el archivo viejo fuera de las copias de seguridad solo después de confirmar que la nueva identidad funciona, y anota qué número de serie o huella la sustituyó.

Artículos relacionados