HPKP es un encabezado de respuesta de seguridad web obsoleto, el acrónimo significa HTTP Public Key Pins. Su objetivo era evitar que una CA 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 porque habilitan y configuran varias funciones de seguridad.
Infraestructura de certificados HTTPS
La infraestructura de certificados en la que se construye HTTPS se basa en una red confiable. 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 una tienda de confianza. Cuando un sitio web solicita su propio certificado HTTPS 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.
Sugerencia: 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 haya verificado que la persona que lo solicita es el verdadero propietario 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 autoridad certificadora en la que su computadora confíe y, por lo tanto, verá una advertencia.
¿Qué hizo HPKP?
Todo el sistema de certificación se basa en la confiabilidad de las autoridades de certificación. Sin embargo, en un principio, no existía protección contra la puesta en peligro de una CA por parte de piratas informáticos o contra convertirse en un matón y elegir emitir certificados de forma incorrecta.
HPKP fue diseñado para proteger contra esta posibilidad. Permite que los sitios web especifiquen una lista exclusiva de certificados en los que el sitio web puede confiar en un proceso llamado fijación. Era posible fijar el certificado raíz o intermedio, lo que básicamente permitía que una única CA emitiera certificados para el sitio web. También era posible anclar el certificado desde el sitio web, evitando que incluso la CA correcta emitiera otro certificado válido.
Técnicamente, no es el certificado en sí lo que se fija, 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 utilizar el hash para crear 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 ser parte de 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 se conecten.
Si el certificado HTTPS presentado al navegador por el sitio web no coincide con ninguno de los certificados fijados, el navegador debe rechazarlo y evitar que el usuario omita el mensaje de error del certificado.
Estructura HPKP
El encabezado HPKP tiene tres partes obligatorias y dos opcionales. El encabezado debe titularse «Pines de clave pública», los dos o más certificados siguientes deben tener un hash SHA256 codificado en base64 con el formato «pin-sha256 =»
Consejo: SHA256 es el algoritmo hash utilizado por HPKP. Base64 es un conjunto de 64 caracteres: 0-9, az, AZ y los caracteres especiales “+” y “/”. El «=» se utiliza para completar los dos últimos caracteres si es necesario.
Los parámetros opcionales son «includeSubDomains» y «report-uri». «IncludeSubDomains le dice al navegador que aplique protecciones HPKP a cualquier subdominio del sitio web actual durante la duración del temporizador» max-age «. “Report-uri” es una función que le permite especificar un sitio web donde se pueden enviar informes de errores y está diseñada para ayudar a identificar y resolver problemas.
Existe una segunda variante del encabezado llamada «Public-Key-Pins-Report-Only». Todo es igual, sin embargo, si se encuentra un error, no se realiza ninguna acción más allá de devolver un mensaje de error al navegador y al «report-uri» si hay uno configurado. La variante de solo 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 está obsoleto por dos razones principales. El encabezado podría causar serios problemas para el sitio web al usarlo de dos maneras: 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. Puede suceder por eliminación accidental, piratería, virus, corrupción de datos o por muchas otras razones. Debido a la complejidad de implementar correctamente HPKP, y especialmente actualizarlo durante las rotaciones de certificados, es relativamente fácil realizar una configuración incorrecta. Sin embargo, con HPKP, si se equivoca, todos los visitantes recientes de su sitio web no podrán acceder a su sitio web mientras dure el temporizador de «edad máxima». El sitio web smashingmagazine.com publicó un Articulo detallando su experiencia exactamente con 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 accede a un servidor web, roba todos los certificados y claves confiables y luego exige un rescate por su devolución. En una configuración normal, puede generar nuevas claves y certificados y poner el sitio web en funcionamiento en menos de una hora. Sin embargo, cuando HPKP está habilitado, estas claves se anclan, si no puede servir como un certificado anclado a los usuarios, no podrán acceder al sitio web mientras dure el temporizador de «edad máxima». Según la configuración y si existen copias de seguridad, es posible que no sea posible resolver este problema.
Con estos dos problemas, los nuevos usuarios podrían acceder al sitio web como de costumbre, ya que nunca habrían visto el antiguo encabezado HPKP instruyendo a su navegador a confiar solo en los certificados que ahora faltan. Sin embargo, todos los visitantes recientes, como los clientes habituales y los lectores, deben esperar la duración total del temporizador de «edad máxima».
Teniendo en cuenta 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 eliminar su soporte por completo y, en unos pocos años, el encabezado HPKP quedó obsoleto universalmente.