Repo de paquete de FreeBSD: ¿cómo hacer la verificación manual de la firma?


11

Estoy tratando de verificar la firma de un paquete en el sitio web del paquete FreeBSD

wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz

Esto da tres archivos: digests, digests.pub digests.sig
puedo considerar que digests.siges una firma para el archivo digestscon el digests.pubque la clave pública. Pero intenté confirmar eso:

openssl dgst -verify digests.pub -signature digests.sig digests

y recibí el mensaje

Verification Failure

Supongo que tengo algo mal, ¿alguien puede decirme lo que me falta?

EDITAR: Basado en una búsqueda a través del código fuente, creo que la función importante se encuentra aquí , llamada rsa_verify_cert_cbqué llamadas RSA_verifyde la biblioteca openssl. Pero no he descubierto qué se le está dando, o si es posible llamar a esa función usando las opensslherramientas de línea de comandos.


Esto parece relevante lists.freebsd.org/pipermail/freebsd-ports/2014-February/… Sin embargo, el comando análogo al mencionado allí openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse tampoco parece coincidir.
SauceCode

... es decir, no parece coincidir consha256sum digests
SauceCode

Respuestas:


1

Como no hay un "Cómo" en Internet para la verificación manual del paquete de FreeBSD, esto es lo que he descubierto.

El truco es que la cadena de octeto en la openssl rsautlsalida es, de hecho, hash de la cadena que es el hash SHA256 de un archivo.

Por ejemplo, descargue el actual http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, extráigalo y haga lo siguiente:

Método 1 (uso de una línea openssl dgst)

Aquí es importante tr -d '\n'dejar caer una nueva línea desde la entrada estándar, por lo que no se incluye en la entrada de cadena para openssl dgst.

sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig

Este comando debería salir Verified OK.

Método 2 (comparación visual de la cadena de octetos del archivo .sig con hash generado manualmente)

  1. Utilice la utilidad OpenSSL para volcar contenidos de digests.sig

    openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
    0:d=0  hl=2 l=  49 cons: SEQUENCE          
    2:d=1  hl=2 l=  13 cons:  SEQUENCE          
    4:d=2  hl=2 l=   9 prim:   OBJECT            :sha256
    15:d=2  hl=2 l=   0 prim:   NULL              
    17:d=1  hl=2 l=  32 prim:  OCTET STRING      
      0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e   .....^acb.bK.w7n
      0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22   ....n.!.bd./..`"
    

    Aquí puede ver que el objeto incrustado es un hash SHA256 y su valor es acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Ahora calcule SHA256 del archivo digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. Y finalmente calcule SHA256 de esta cadena usando el echocomando y compárelo con el valor devuelto por openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Observe cómo el valor del paso 3. coincide con el valor del paso 1., por lo que el archivo digestses válido.


0

Ese mensaje dice que la clave pública no coincide con el archivo que descargó. De acuerdo con la página de manual de dgst -verify filename, verifique la firma utilizando la clave pública en "filename". El resultado es "Verificación correcta" o "Fallo de verificación" La causa más probable es que el archivo se corrompió durante la descarga. Intentaría descargarlo nuevamente y si continúa fallando la verificación, eso es una señal de un enlace de descarga comprometido (pero como es del sitio web de freebsd sospecharía que es simplemente un error de descarga. Incluso entonces verificaría el nuevo descargar solo para estar seguro). Si tiene una conexión a Internet lenta / poco confiable, puede tomar algunos intentos para que se descargue correctamente. Si alguna vez necesita verificar la información sobre los comandos, '


Esto fue hace un tiempo, pero estoy bastante seguro de que no fue un error de descarga (o una descarga comprometida) ya que lo intenté varias veces.
SauceCode
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.