FreeBSD package repo - comment faire la vérification manuelle de la signature?

11

J'essaie de vérifier la signature d'un paquet sur le site Web du paquet FreeBSD

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

Cela donne trois fichiers: digests, digests.pub digests.sig
je suppose que digests.sigest une signature pour le fichier digestsavec digests.pubcomme clé publique. Mais j'ai essayé de confirmer que:

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

et j'ai reçu le message

Verification Failure

Je suppose que j'ai quelque chose de mal - quelqu'un peut-il me dire ce qui me manque?

EDIT: Sur la base d'une recherche dans le code source, je pense que la fonction importante se trouve ici , appelée les rsa_verify_cert_cbappels RSA_verifyde la bibliothèque openssl. Mais je n'ai pas compris ce qui est alimenté, ni s'il est possible d'appeler cette fonction à l'aide des openssloutils de ligne de commande.

SauceCode
la source
Cela semble pertinent lists.freebsd.org/pipermail/freebsd-ports/2014-F February/… Cependant, la commande analogue à celle mentionnée ici openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse ne semble pas correspondre non plus.
SauceCode
... c'est-à-dire ne semble pas correspondre àsha256sum digests
SauceCode

Réponses:

1

Puisqu'il n'y a pas de "Comment faire" sur Internet pour la vérification manuelle des paquets FreeBSD, voici ce que j'ai découvert.

L'astuce est que la chaîne d'octets en openssl rsautlsortie est en fait le hachage de la chaîne qui est le hachage SHA256 d'un fichier.

Par exemple, téléchargez la version actuelle http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, extrayez-la et procédez comme suit:

Méthode 1 (un revêtement en utilisant openssl dgst)

Il est important ici de tr -d '\n'supprimer une nouvelle ligne de l'entrée standard, elle n'est donc pas incluse dans l'entrée de chaîne pour openssl dgst.

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

Cette commande devrait sortir Verified OK.

Méthode 2 (comparaison visuelle de la chaîne d'octets du fichier .sig avec le hachage généré manuellement)

  1. Utilisez l'utilitaire OpenSSL pour vider le contenu 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./..`"
    

    Ici, vous pouvez voir que l'objet incorporé est un hachage SHA256 et sa valeur est acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Maintenant, calculez SHA256 du fichier digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. Et enfin calculer SHA256 de cette chaîne à l'aide de la echocommande et comparer avec la valeur retournée par openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Remarquez comment la valeur de l'étape 3. correspond à la valeur de l'étape 1. Le fichier digestsest donc valide.

kalabic
la source
0

Ce message indique que la clé publique ne correspond pas au fichier que vous avez téléchargé. Selon la page de manuel de dgst -verify filename, vérifiez la signature en utilisant la clé publique dans "filename". La sortie est "Vérification OK" ou "Échec de vérification". La cause la plus probable est que le fichier a été corrompu pendant le téléchargement. J'essaierais de le télécharger à nouveau et s'il continue d'échouer la vérification, c'est le signe d'un lien de téléchargement compromis (mais comme il provient du site Web freebsd, je soupçonne qu'il s'agit simplement d'une erreur de téléchargement. Même dans ce cas, je vérifierais le nouveau télécharger juste pour être du bon côté). Si votre connexion Internet est lente / peu fiable, il peut falloir quelques essais pour que le téléchargement soit correct. Si vous avez besoin de vérifier les informations sur les commandes, c'est '

Ismael Monroig III
la source
C'était il y a un certain temps, mais je suis assez confiant que ce n'était pas une erreur de téléchargement (ou un téléchargement compromis) depuis que je l'ai essayé plusieurs fois.
SauceCode