GNU/Linux >> Tutoriales Linux >  >> Linux

¿De qué manera proporcionar un archivo Asc garantiza que estoy descargando el código fuente deseado?

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:

  1. ¿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?
  2. ¿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.

Relacionado:¿Cuál es el punto de agregar una nueva línea al final de un 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.


Linux
  1. ¿Tail lee todo el archivo?

  2. ¿Cómo funciona el comando Tee??

  3. ¿Cómo sabe el comando Xdg-open qué aplicación usar para abrir un archivo?

  4. ¿Cómo el comando Sed '1!g;h;$!d' invierte el contenido de un archivo?

  5. ¿Cómo agregar la salida a un archivo?

Linux:¿cómo se inspecciona la información de la estructura del directorio de un archivo Unix/linux?

¿Cómo calcula el comando stat los bloques de un archivo?

¿Cómo leo el código fuente de los comandos de shell?

¿Cómo RSYNC un solo archivo?

¿Cómo encontrar el administrador de archivos predeterminado?

¿Cómo funciona el comando ps?