HPKP es un encabezado de respuesta de seguridad web obsoleto, el acrónimo significa HTTP Public Key Pins. Su objetivo era evitar que una autoridad de certificación comprometida o no autorizada emitiera un certificado HTTPS de confianza pública, pero controlado por piratas informáticos, para un sitio web. En este escenario, los piratas informáticos podrían descifrar cualquier tráfico HTTPS interceptado en el sitio web afectado.
Consejo: los encabezados de respuesta web son fragmentos de metadatos que el servidor incluye cuando responde a las solicitudes. Un pequeño subconjunto de estos se denomina encabezados de seguridad, ya que habilitan y configuran varias funciones de seguridad.
Infraestructura de certificados HTTPS
La infraestructura de certificados sobre la que se construye HTTPS se basa en una red de confianza. Varias empresas actúan como autoridades de certificación (CA) que publican uno o más certificados raíz. Se incluye un conjunto de certificados raíz en todos los dispositivos de un almacén de confianza. Cuando un sitio web solicita un certificado HTTPS propio de una CA, el certificado está firmado por un certificado raíz. Cuando su computadora ve un certificado HTTPS, verifica la firma. Si el certificado está firmado por un certificado raíz en el que confía, su computadora también confía en el certificado HTTPS.
Consejo: Una CA también puede tener certificados intermedios firmados por el certificado raíz. Estos certificados intermedios también se pueden utilizar para firmar certificados HTTPS para sitios web.
El trabajo de una autoridad de certificación es emitir un certificado solo cuando hayan verificado que la persona que los solicita es el propietario genuino del sitio web. La idea con esta estructura es que si un pirata informático crea su propio certificado para un sitio web, no estará firmado por una CA en la que su computadora confíe, por lo que verá una advertencia.
¿Qué hizo HPKP?
Todo el sistema de certificados se basa en la confiabilidad de las autoridades de certificación. Sin embargo, originalmente no existían protecciones contra una CA que se veía comprometida por piratas informáticos o que se volviera deshonesta y optara por emitir certificados incorrectamente.
HPKP fue diseñado para ser una protección contra esta posibilidad. Permite que los sitios web especifiquen una lista exclusiva de certificados en los que se puede confiar para el sitio web en un proceso llamado fijación. Era posible fijar el certificado raíz o intermedio, lo que básicamente permitía que una sola CA emitiera certificados para el sitio web. También era posible fijar el certificado del sitio web en sí, evitando que incluso la CA correcta emitiera otro certificado válido.
Técnicamente, no es el certificado en sí lo que está anclado, sino un hash de la clave del certificado. Un hash es una función criptográfica unidireccional. Esto significa que es posible verificar que el certificado presentado al navegador por el sitio web coincide con un certificado anclado, pero no es posible usar el hash para hacer un certificado válido.
HPKP requería que se fijaran al menos dos claves, al menos una de las cuales debe ser una copia de seguridad y no estar en la cadena de certificados actual. Esta copia de seguridad le permite configurar una transferencia sin problemas a un nuevo certificado que no impide que los usuarios puedan conectarse.
Si el certificado HTTPS presentado al navegador por el sitio web no coincide con uno de los certificados, entonces se requiere que el navegador lo rechace y evite que el usuario pase por alto el certificado mensaje de error.
Estructura de HPKP
El encabezado HPKP tiene tres partes obligatorias y dos opcionales. El encabezado debe titularse "Pines de clave pública", los siguientes dos o más certificados deben tener un hash SHA256 codificado en base64 con el formato "pin-sha256 ="
Sugerencia: SHA256 es el algoritmo hash utilizado por HPKP. Base64 es un conjunto de caracteres con 64 caracteres: 0-9, a-z, A-Z y los caracteres especiales “+” y “/”. El "=" se utiliza para rellenar hasta los dos últimos caracteres si es necesario.
Las configuraciones opcionales son "includeSubDomains" y "report-uri". "IncludeSubDomains indica al navegador que aplique las protecciones HPKP a cualquier subdominio del sitio web actual durante el tiempo de duración del temporizador" max-age ". “Report-uri” es una función que permite especificar un sitio web donde se pueden enviar informes de errores y está diseñado para ayudar a identificar y resolver problemas.
Existe una segunda variante del encabezado titulada “Public-Key-Pins-Report-Only”. Todo es igual, sin embargo, si se encuentra un error, no se toma ninguna acción más allá de devolver un mensaje de error al navegador y al “report-uri” si hay uno configurado. La única variante del informe se diseñó para permitir pruebas a gran escala del encabezado antes de la implementación, donde los errores no causarían problemas a los usuarios.
Problemas con HPKP
HPKP quedó en desuso por dos razones principales. Había dos formas en las que el encabezado podía causar serios problemas para el sitio web que lo usaba, se denominaron HPKP Suicide y Ransom PKP.
HPKP Suicide es un problema en el que los propietarios legítimos del sitio web pierden el acceso a todas las claves ancladas. Esto podría suceder por eliminación accidental, piratería, virus, corrupción de datos o por muchas otras razones. Debido a la complejidad de implementar HPKP correctamente, y especialmente mantenerlo actualizado durante las rotaciones de certificados, es relativamente fácil cometer un error de configuración. Sin embargo, con HPKP, si se equivoca, todos los visitantes recientes de su sitio web no podrán acceder a su sitio web durante el tiempo del temporizador de "edad máxima". El sitio web smashingmagazine.com publicó un artículo detallando su experiencia con exactamente este problema, que esencialmente dejó el sitio fuera de línea para la mayoría de los visitantes durante cuatro días antes de que se implementara una solución.
Ransom PKP es un ataque teórico en el que un pirata informático obtiene acceso a un servidor web, luego roba todos los certificados y claves confiables y luego exige un rescate por su devolución. En una configuración normal, podría generar nuevas claves y certificados y hacer que el sitio web vuelva a funcionar en menos de una hora. Sin embargo, con HPKP habilitado, esas claves están ancladas, si no puede entregar un certificado fijo a los usuarios, no podrán acceder al sitio web mientras dure el temporizador de "edad máxima". Dependiendo de la configuración y si existen copias de seguridad, podría ser imposible resolver este problema.
Con ambos problemas, los nuevos usuarios podrían acceder al sitio web con normalidad, como lo harían Nunca he visto el antiguo encabezado HPKP instruyendo a su navegador para que solo confíe en lo que ahora falta Certificados. Sin embargo, todos los visitantes recientes, como los clientes habituales y los lectores, tendrían que esperar toda la duración del temporizador de "edad máxima".
Dada la gravedad de estos problemas y la complejidad de la configuración y el mantenimiento, el uso del encabezado HPKP fue muy bajo. Finalmente, los principales navegadores acordaron dejar de admitirlo por completo y, en un par de años, el encabezado HPKP quedó en desuso universalmente.