Estoy instalando cmake desde el sitio web cmake.org y proporcionan dos archivos que creo que están destinados a verificar la descarga del código fuente cmake-3.11.0-rc3.tar.gz
En la misma página tienen enlaces para descargar un cmake-3.11.0-rc3-SHA-256.txt archivo y un cmake-3.11.0-rc3-SHA-256.txt.asc archivo
Lo que no entiendo es:
- ¿Cómo asegura un archivo asc de la misma fuente (cmake.org) la integridad del código fuente? Si el código fuente ofrecido por el sitio se vio comprometido, ¿no podría el atacante también comprometer el archivo asc?
-
¿No necesito una clave pública para verificar verdaderamente la descarga del código fuente? Y pensé que se suponía que el archivo asc era la clave pública. Sin embargo, cuando intento importar el archivo asc con
gpg --import cmake-3.11.0-rc3-SHA-256.txt.asc
Recibo un error que dice "no se encontraron datos OpenPGP válidos"
Respuesta aceptada:
Echa un vistazo dentro de .asc
archivo, verá que comienza con:
-----BEGIN PGP SIGNATURE-----
Esta es una firma de PGP . Significa que firma algún contenido con alguna clave PGP específica.
1) El contenido
Según el nombre, el contenido es el archivo .txt
, es la lista de archivos correspondientes al software a descargar y cada archivo tiene su hash correspondiente.
2) La firma
Si ejecuta gpg
en ambos archivos, aquí está el resultado:
$ gpg --verify cmake-3.11.0-rc3-SHA-256.txt.asc cmake-3.11.0-rc3-SHA-256.txt
gpg: Signature made Fri Mar 9 10:29:10 2018 EST
gpg: using RSA key 2D2CEF1034921684
gpg: Can't check signature: No public key
Entonces, cómo funciona todo? Se supone que debes tener la clave 2D2CEF1034921684
en tu llavero local. ¿Cómo lo obtienes y, lo que es más importante, te aseguras de obtener el adecuado? (el id por sí solo no es suficiente). Aquí es donde tiene lugar el modelo web de confianza de OpenPGP. Sería demasiado largo detallarlo aquí, pero en resumen, idealmente, obtienes acceso a las claves fuera de banda y tienes los medios para autenticarlas... o para autenticar alguna otra clave de alguien que sabes que él mismo ha autenticado la otra clave. Y/o lo encuentra en línea en uno o varios lugares, protegido por HTTPS (con un certificado y una CA de confianza), e idealmente con DNSSEC.
Si tiene la clave pública y confía en que es buena y no falsificada (y que normalmente corresponde a los desarrolladores de software de la herramienta que está tratando de descargar), el comando anterior le muestra que el .txt
los archivos no han sido manipulados. Y, a su vez, esto le brinda el hash de todos los archivos, por lo que puede descargarlo y volver a ejecutar el algoritmo hash (SHA256 como está escrito en el nombre del archivo) y compararlo con el valor almacenado en el archivo.
Si alguien hubiera comprometido el servidor y cambiado algunos archivos, podría, como usted mismo dice, también cambiar el .txt
con los nuevos valores hash para que pueda creer que los archivos coinciden.
Sin embargo, este tercero no podría generar el .asc
adecuado archivo con la firma PGP (sobre gpg --verify
obtendría un error sobre firma no válida), porque para hacerlo necesitaría tener acceso a la clave privada que supuestamente está debidamente protegida y no almacenada en el servidor web de todos modos.
Y si la genera con otra clave lo verás porque no confiarás en esta clave desconocida.
Pero, por supuesto, todo el modelo colapsa si la clave misma se ve comprometida.