FreeBSDパッケージストア - 手動署名検証を実行するには?

FreeBSDパッケージストア - 手動署名検証を実行するには?

小包の署名を確認しようとしています。FreeBSDパッケージウェブサイト

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

これは3つのファイルを提供します:digestsdigests.pub digests.sig
私はdigests.sig公開鍵としてファイルの署名であると仮定します。しかし、確認しようとしています。digestsdigests.pub

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

そしてメッセージを受け取った

Verification Failure

私に何か問題があると思います。私が何を見逃しているのか教えてくれる人はいますか?

編集:ソースコード検索に基づいて考える重要な機能を見つけることができますここrsa_verify_cert_cbopensslライブラリから呼び出されます。RSA_verifyしかし、ここに何を入れるのか、opensslコマンドラインツールを使用して関数を呼び出せるかどうかはわかりません。

答え1

FreeBSDパッケージを手動で検証する「方法」がインターネットにないので、これが私が知っているものです。

秘密は、出力のオクテット文字列がopenssl rsautl実際には文字列のハッシュ値、つまりSHA256ハッシュ値ファイルの。

たとえば、current をダウンロードして解凍http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txzし、次のようにします。

方法1(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. これでファイルのSHA256を計算しますdigests

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

手順3の値が手順1の値とどのように一致するかを確認することで、ファイルがdigests有効になります。

答え2

このメッセージは、公開鍵がダウンロードしたファイルと一致しないことを示します。 dgst マンページによると-verify filename "filename"の公開鍵を使用して署名を確認します。 出力は「確認成功」または「確認失敗」です。最も可能性の高い原因は、ダウンロード処理中にファイルが破損しているためです。もう一度ダウンロードしてみましたが、まだスキャンに失敗した場合は、ダウンロードリンクが壊れています(ただし、freebsdサイトから取得したものなので、ダウンロードエラーにすぎません。または不安定な場合は、正しくダウンロードするためにいくつかの試みが必要な場合があります。コマンドに関する情報を確認する必要がある場合は、マンページを確認することをお勧めします。

関連情報