Repository di pacchetti FreeBSD: come eseguire la verifica manuale della firma?


11

Sto cercando di verificare una firma di un pacchetto sul sito Web del pacchetto FreeBSD

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

Questo dà tre file: digests, digests.pub digests.sig
lo prendo che digests.sigè una firma per il file digestscon digests.publa chiave pubblica. Ma ho provato a confermare che:

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

e ho ricevuto il messaggio

Verification Failure

Presumo di aver sbagliato qualcosa: qualcuno può dirmi cosa mi sto perdendo?

EDIT: Basato su una caccia attraverso il codice sorgente, penso che l'importante funzione si trovi qui , chiamata rsa_verify_cert_cbquali chiamate RSA_verifydalla libreria openssl. Ma non ho capito cosa sia stato alimentato o se è possibile chiamare quella funzione usando gli opensslstrumenti da riga di comando.


Questo sembra rilevante lists.freebsd.org/pipermail/freebsd-ports/2014-February/... Tuttavia, il comando analogo a quello di cui ci openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse non sembra corrispondere sia.
Sauce

... cioè non sembra corrispondere asha256sum digests
SauceCode del

Risposte:


1

Dato che non esiste un "How To" su Internet per la verifica manuale del pacchetto FreeBSD, ecco cosa ho capito.

Il trucco è che la stringa di ottetti openssl rsautlnell'output è in realtà l' hash della stringa che è l'hash SHA256 di un file.

Ad esempio, scarica corrente http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, estrailo e procedi come segue:

Metodo 1 (usando una linea openssl dgst)

In questo caso è importante tr -d '\n'eliminare una nuova riga dall'input standard, quindi non è inclusa nell'input della stringa per openssl dgst.

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

Questo comando dovrebbe essere emesso Verified OK.

Metodo 2 (confronto visivo della stringa di ottetti dal file .sig con hash generato manualmente)

  1. Utilizzare l'utilità OpenSSL per scaricare i contenuti da 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./..`"
    

    Qui puoi vedere che l'oggetto incorporato è un hash SHA256 e il suo valore è acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Ora calcola SHA256 del file digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. E infine calcola SHA256 di questa stringa usando il echocomando e confronta con il valore restituito da openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Notare come il valore del passaggio 3. corrisponde al valore del passaggio 1., quindi il file digestsè valido.


0

Quel messaggio dice che la chiave pubblica non corrisponde al file scaricato. Secondo la manpage di dgst -verify nomefile, verificare la firma usando la chiave pubblica in "nomefile". L'output è "Verifica OK" o "Errore verifica" La causa più probabile è che il file sia stato danneggiato durante il download. Proverei a scaricarlo di nuovo e se continua a fallire il controllo, questo è un segno di un link di download compromesso (ma dal momento che proviene dal sito Web di Freebsd sospetto che sia semplicemente un errore di download. Anche allora verificherei il nuovo scarica solo per essere al sicuro). Se disponi di una connessione Internet lenta / inaffidabile, potrebbero essere necessari alcuni tentativi per scaricarlo correttamente. Se hai mai bisogno di controllare le informazioni sui comandi esso '


Questo era un po 'di tempo fa, ma sono abbastanza sicuro che non sia stato un errore di download (o un download compromesso) da quando l'ho provato più volte.
Sauce
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.