FreeBSD-Paket-Repo - Wie führt man die manuelle Überprüfung der Signatur durch?


11

Ich versuche, eine Signatur eines Pakets auf der FreeBSD-Paketwebsite zu überprüfen

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

Dies gibt drei Dateien: digests, digests.pub digests.sig
Ich nehme an, dass digests.sigeine Signatur für die Datei ist digestsmit digests.pubals der öffentlichen Schlüssel. Aber ich habe versucht, das zu bestätigen:

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

und bekam die Nachricht

Verification Failure

Ich nehme an, ich habe etwas falsch gemacht - kann mir jemand sagen, was ich vermisse?

EDIT: Basierend auf einer Jagd durch den Quellcode, ich denke , die wichtige Funktion zu finden ist hier , genannt , rsa_verify_cert_cbwelche Anrufe RSA_verifyvon der OpenSSL - Bibliothek. Aber ich habe nicht herausgefunden, was eingespeist wird oder ob es möglich ist, diese Funktion mit den opensslBefehlszeilentools aufzurufen .


Dies scheint relevant zu sein. Lists.freebsd.org/pipermail/freebsd-ports/2014-February/… Der Befehl analog zu dem dort erwähnten openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse scheint jedoch auch nicht übereinzustimmen .
SauceCode

... das heißt, scheint nicht zu passensha256sum digests
SauceCode

Antworten:


1

Da es im Internet kein "How To" für die manuelle Überprüfung von FreeBSD-Paketen gibt, habe ich Folgendes herausgefunden.

Der Trick ist, dass die Oktettzeichenfolge in der openssl rsautlAusgabe tatsächlich ein Hash der Zeichenfolge ist, die SHA256-Hash einer Datei ist.

Laden Sie beispielsweise current herunter http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, extrahieren Sie es und gehen Sie wie folgt vor:

Methode 1 (Einzeiler mit openssl dgst)

Hier ist es wichtig, tr -d '\n'eine neue Zeile aus der Standardeingabe zu entfernen, damit sie nicht in der Zeichenfolgeneingabe für enthalten ist openssl dgst.

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

Dieser Befehl sollte ausgegeben werden Verified OK.

Methode 2 (visueller Vergleich der Oktettzeichenfolge aus der .sig-Datei mit manuell generiertem Hash)

  1. Verwenden Sie das OpenSSL-Dienstprogramm, um Inhalte aus digests.sig zu sichern

    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./..`"
    

    Hier können Sie sehen, dass das eingebettete Objekt ein SHA256-Hash ist und sein Wert ist acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Berechnen Sie nun SHA256 der Datei digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. Und schließlich berechnen Sie SHA256 dieser Zeichenfolge mit dem echoBefehl und vergleichen Sie sie mit dem von openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Beachten Sie, wie der Wert aus Schritt 3 mit dem Wert aus Schritt 1 übereinstimmt, sodass die Datei digestsgültig ist.


0

Diese Nachricht besagt, dass der öffentliche Schlüssel nicht mit der heruntergeladenen Datei übereinstimmt. Laut der Manpage für dgst -verify Dateiname überprüfen Sie die Signatur mit dem öffentlichen Schlüssel in "Dateiname". Die Ausgabe ist entweder "Verification OK" oder "Verification Failure". Die wahrscheinlichste Ursache ist, dass die Datei während des Downloads beschädigt wurde. Ich würde versuchen, es erneut herunterzuladen, und wenn die Prüfung weiterhin fehlschlägt, ist dies ein Zeichen für einen kompromittierten Download-Link (aber da es von der freebsd-Website stammt, würde ich vermuten, dass es sich lediglich um einen Download-Fehler handelt. Selbst dann würde ich das neue überprüfen nur um auf der sicheren Seite zu sein). Wenn Sie eine langsame / unzuverlässige Internetverbindung haben, kann es einige Versuche dauern, bis sie richtig heruntergeladen ist. Wenn Sie jemals nach Informationen zu Befehlen suchen müssen,


Dies ist eine Weile her, aber ich bin ziemlich sicher, dass es kein Download-Fehler (oder ein kompromittierter Download) war, da ich es mehrmals versucht habe.
SauceCode
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.