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 rsautl
salida 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)
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
.
Ahora calcule SHA256 del archivo digests
:
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- Y finalmente calcule SHA256 de esta cadena usando el
echo
comando 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 digests
es válido.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
tampoco parece coincidir.