HPKP és una capçalera de resposta de seguretat web obsoleta, l'acrònim significa HTTP Public Key Pins. Es pretenia evitar que una autoritat de certificació compromesa o canalla emeti un certificat HTTPS de confiança pública, però controlat per pirates informàtics per a un lloc web. En aquest escenari, els pirates informàtics podrien desxifrar qualsevol trànsit HTTPS interceptat al lloc web afectat.
Consell: les capçaleres de resposta web són peces de metadades que el servidor inclou quan respon a les sol·licituds. Un petit subconjunt d'aquests s'anomena capçaleres de seguretat, ja que habiliten i configuren diverses funcions de seguretat.
Infraestructura de certificats HTTPS
La infraestructura de certificats sobre la qual es construeix HTTPS es basa en una xarxa de confiança. Diverses empreses actuen com a autoritats de certificació (CA) que publiquen un o més certificats arrel. S'inclouen un conjunt de certificats arrel a tots els dispositius d'un magatzem de confiança. Quan un lloc web sol·licita un certificat HTTPS propi a una CA, el certificat està signat per un certificat arrel. Quan el vostre ordinador veu un certificat HTTPS, comprova la signatura. Si el certificat està signat per un certificat arrel en el qual confia, el vostre ordinador també confia en el certificat HTTPS.
Consell: una CA també pot tenir certificats intermedis signats pel certificat arrel. Aquests certificats intermedis també es poden utilitzar per signar certificats HTTPS per a llocs web.
La funció d'una autoritat de certificació és emetre un certificat només quan hagi comprovat que la persona que el sol·licita és l'autèntic propietari del lloc web. La idea d'aquesta estructura és que si un pirata informàtic crea el seu propi certificat per a un lloc web, no serà signat per una CA en la qual confia el vostre ordinador i, per tant, veureu un avís.
Què va fer HPKP?
Tot el sistema de certificats es basa en la fiabilitat de les autoritats de certificació. Al principi, però, no hi havia cap protecció contra una CA que es veiés compromesa per pirates informàtics o que es convertís en canalla i optés per emetre certificats incorrectament.
HPKP va ser dissenyat per ser una protecció contra aquesta possibilitat. Permet als llocs web especificar una llista exclusiva de certificats en què es pot confiar per al lloc web en un procés anomenat fixació. Va ser possible fixar el certificat arrel o intermedi, permetent essencialment que una única CA emetés certificats per al lloc web. També va ser possible fixar el certificat del propi lloc web, impedint que fins i tot la CA adequada emetés un altre certificat vàlid.
Tècnicament, no és el certificat en si el que està fixat, sinó un hash de la clau del certificat. Un hash és una funció criptogràfica unidireccional. Això significa que és possible verificar que el certificat presentat al navegador pel lloc web coincideix amb un certificat fixat, però no és possible utilitzar el hash per fer un certificat vàlid.
HPKP necessitava fixar almenys dues claus, almenys una de les quals ha de ser una còpia de seguretat i no a la cadena de certificats actual. Aquesta còpia de seguretat us permet configurar un lliurament suau a un certificat nou que no impedeix que els usuaris es puguin connectar.
Si el certificat HTTPS presentat al navegador pel lloc web no coincideix amb un dels certificats fixats, el navegador ha de rebutjar-lo i evitar que l'usuari passi el missatge d'error del certificat.
Estructura de HPKP
La capçalera HPKP té tres parts obligatòries i dues opcionals. La capçalera s'ha de titular "Public-Key-Pins", els dos o més certificats següents han de tenir un hash SHA256 codificat en base64 fixat en el format "pin-sha256=""". L'última part obligatòria és la "edat màxima", que és un recompte en segons del temps durant el qual el navegador hauria d'aplicar les restriccions.
Consell: SHA256 és l'algoritme hash utilitzat per HPKP. Base64 és un conjunt de caràcters amb 64 caràcters: 0-9, az, AZ i els caràcters especials "+" i "/". El "=" s'utilitza per completar els dos últims caràcters si cal.
La configuració opcional és "includeSubDomains" i "report-uri". "includeSubDomains indica al navegador que aplique les proteccions HPKP a qualsevol subdomini del lloc web actual durant la durada del temporitzador d'"edat màxima". "report-uri" és una característica que permet especificar un lloc web on es poden enviar informes d'errors i està dissenyat per ajudar a identificar i resoldre problemes.
Hi ha una segona variant de la capçalera titulada "Public-Key-Pins-Report-Only". Tot és igual, però, si es troba un error, no es duu a terme cap acció més enllà de retornar un missatge d'error al navegador i al "report-uri" si n'hi ha configurat. La variant només d'informe es va dissenyar per permetre la prova a gran escala de la capçalera abans del desplegament, on els errors no causarien problemes als usuaris.
Problemes amb HPKP
HPKP va ser obsolet per dos motius principals. Hi havia dues maneres en què la capçalera podia causar problemes greus al lloc web que l'utilitzava, aquestes es van anomenar HPKP Suicide i Ransom PKP.
HPKP Suicide és un problema en què els propietaris legítims del lloc web perden l'accés a totes les claus fixades. Això podria passar per supressió accidental, pirateria, virus, corrupció de dades o per moltes altres raons. A causa de la complexitat d'implementar correctament HPKP, i sobretot mantenir-lo actualitzat durant les rotacions de certificats, és relativament fàcil cometre un error de configuració. Amb HPKP, però, si us equivoqueu, tots els visitants recents del vostre lloc web no podran accedir al vostre lloc web durant la durada del temporitzador de "edat màxima". El lloc web smashingmagazine.com va publicar un article que detallava la seva experiència exactament amb aquest problema, que essencialment va deixar el lloc fora de línia per a la majoria dels visitants durant quatre dies abans que es implementés una solució.
Ransom PKP és un atac teòric en què un pirata informàtic obté accés a un servidor web, després roba tots els certificats i claus de confiança i després demana un rescat per retornar-los. En una configuració normal, només podríeu generar claus i certificats nous i fer que el lloc web estigui en funcionament en menys d'una hora. Tanmateix, amb HPKP habilitat, aquestes claus estan fixades; si no podeu enviar un certificat fixat als usuaris, no podran accedir al lloc web durant el temporitzador de "edat màxima". Depenent de la configuració i si hi ha còpies de seguretat, podria ser impossible resoldre aquest problema.
Amb aquests dos problemes, els nous usuaris podrien accedir al lloc web amb normalitat, ja que mai no haurien vist l'antiga capçalera HPKP indicant al seu navegador que només confiés en els certificats que ara falten. Tanmateix, tots els visitants recents, com ara els clients habituals i els lectors, haurien d'esperar durant tota la durada del temporitzador d'edat màxima.
Donada la gravetat d'aquests problemes i la complexitat de la configuració i el manteniment, l'ús de la capçalera HPKP era molt baix. Finalment, els principals navegadors van acordar abandonar el suport per complet i, al cap d'un parell d'anys, la capçalera HPKP va quedar en desús universal.