Yo (creo que) entiendo el concepto de fijación de certificados . Sin embargo, me pregunto si, en el peor de los casos, ¿es el anclaje de certificados más seguro que el modelo de confianza jerárquico sobre el que se basa? Un escenario de ejemplo:
- Desarrollo una aplicación móvil que usa conexiones seguras
- Para cifrar estas conexiones seguras, necesito una clave
- En el pasado, solo usaba HTTPS para las conexiones seguras y me aseguraba de que mi servicio tuviera un certificado válido. Confío en los demás para mi seguridad.
- Ahora, ya no quiero confiar en otros, así que comienzo a fijar mi certificado de servicio (digamos certificado X). Esto significa que las CAs shifty no podrán romper mi seguridad. Digamos que pincho mi clave pública, así que efectivamente esto significa que no confío en ninguna CA (de lo contrario podría pinchar una CA).
- Esto me devuelve al problema de distribución de claves original, que PKI tenía que resolver: ¿cómo distribuyo mi aplicación a mis usuarios? No quiero que un atacante se siente en el medio del canal y reemplace mi aplicación con otra (y con otro certificado anclado Y).
- Bueno, eso es fácil: yo uso HTTPS.
- ...
- Utilizo HTTPS, que verifica los certificados en la tienda de MS Windows, y me baso en los CA's esquivos del paso 4.
- Sidenote: cada vez que envío una actualización, un atacante (una CA falsa) podría estar preparado para interceptar mi actualización y reemplazar la clave pública anclada con otra.
La página OWASP menciona que el pin se puede agregar durante el desarrollo o en el primer encuentro. Sin embargo, al agregarlo durante el desarrollo, todavía tenemos que distribuir la aplicación a los usuarios, lo que girará sobre el problema de seguridad al canal de distribución. Este canal de distribución también puede fijar certificados, pero al final, todo depende de la confianza de su primer canal. En el caso de MS Windows, esta es la lista de certificados de MS: aunque Chrome puede verificar el pin de todos los dominios de Google, primero necesito instalar Chrome a través de una conexión segura.
No estoy diciendo que la fijación de certificados no sea más segura (aunque no estoy seguro del valor agregado, especialmente cuando se considera el punto 9), me pregunto si el razonamiento anterior es correcto.