web-dev-qa-db-ja.com

FreeBSDパッケージリポジトリ-手動の署名検証を行う方法は?

私は FreeBSDパッケージのウェブサイト でパッケージの署名を検証しようとしています。

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

これにより、次の3つのファイルが得られます:digestsdigests.pubdigests.sig
digests.sigは、公開鍵としてdigests.pubを使用したファイルdigestsの署名であると思います。しかし、私はそれを確認しようとしました:

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

メッセージを受け取りました

Verification Failure

私は何かが間違っていると思います-誰かが私が欠けているものを教えてもらえますか?

編集:ソースコードのハントに基づいて、私はthink重要な関数が見つかります ここrsa_verify_cert_cbと呼ばれますopensslライブラリからRSA_verifyを呼び出します。しかし、何がフィードされているのか、またはopensslコマンドラインツールを使用してその関数を呼び出すことができるかどうかはわかりません。

11
SauceCode

手動のFreeBSDパッケージ検証のための「ハウツー」がインターネット上にないので、これが私が理解したことです。

トリックは、openssl rsautl出力のオクテット文字列が実際にはSHA256ハッシュである文字列のハッシュファイルのことです。

たとえば、現在のhttp://pkg.freebsd.org/FreeBSD:12:AMD64/latest/digests.txzをダウンロードして抽出し、次の手順を実行します。

方法1(openssl dgstを使用したワンライナー)

ここでは、tr -d '\n'を実行して標準入力から改行を削除することが重要であるため、openssl dgstの文字列入力には含まれません。

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

このコマンドはVerified OKを出力するはずです。

方法2(.sigファイルのオクテット文字列と手動で生成されたハッシュの視覚的な比較)

  1. OpenSSLユーティリティを使用して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./..`"
    

    ここでは、埋め込みオブジェクトがSHA256ハッシュであり、その値がacc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022であることがわかります。

  2. 次に、ファイルdigestsのSHA256を計算します。

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. 最後に、echoコマンドを使用してこの文字列のSHA256を計算し、openssl rsautl:によって返される値と比較します。
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

手順3の値が手順1の値とどのように一致するかに注意してください。したがって、ファイルdigestsは有効です。

1
kalabic

そのメッセージは、公開鍵がダウンロードしたファイルと一致しないことを示しています。 dgstのマンページによると、ファイル名を確認し、「filename」の公開鍵を使用して署名を確認します。出力は「VerificationOK」または「VerificationFailure」最も可能性の高い原因は、ダウンロード中にファイルが破損したことです。もう一度ダウンロードしようとすると、チェックに失敗し続ける場合は、ダウンロードリンクが侵害されていることを示しています(ただし、freebsd Webサイトからのものであるため、単にダウンロードエラーであると思われます。それでも、新しいものを確認します。安全のためにダウンロードしてください)。インターネット接続が遅い/信頼性が低い場合は、正しくダウンロードするために数回の試行が必要になる場合があります。コマンドに関する情報を確認する必要がある場合は、マンページ(man)を確認することをお勧めします。

0