私は FreeBSDパッケージのウェブサイト でパッケージの署名を検証しようとしています。
wget http://pkg.freebsd.org/FreeBSD:11:AMD64/latest/digests.txz
tar xf digests.txz
これにより、次の3つのファイルが得られます:digests
、digests.pub
digests.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
コマンドラインツールを使用してその関数を呼び出すことができるかどうかはわかりません。
手動のFreeBSDパッケージ検証のための「ハウツー」がインターネット上にないので、これが私が理解したことです。
トリックは、openssl rsautl
出力のオクテット文字列が実際にはSHA256ハッシュである文字列のハッシュファイルのことです。
たとえば、現在のhttp://pkg.freebsd.org/FreeBSD:12:AMD64/latest/digests.txz
をダウンロードして抽出し、次の手順を実行します。
openssl dgst
を使用したワンライナー)ここでは、tr -d '\n'
を実行して標準入力から改行を削除することが重要であるため、openssl dgst
の文字列入力には含まれません。
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
このコマンドはVerified OK
を出力するはずです。
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
であることがわかります。
次に、ファイルdigests
のSHA256を計算します。
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
echo
コマンドを使用してこの文字列のSHA256を計算し、openssl rsautl
:によって返される値と比較します。echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
手順3の値が手順1の値とどのように一致するかに注意してください。したがって、ファイルdigests
は有効です。
そのメッセージは、公開鍵がダウンロードしたファイルと一致しないことを示しています。 dgstのマンページによると、ファイル名を確認し、「filename」の公開鍵を使用して署名を確認します。出力は「VerificationOK」または「VerificationFailure」最も可能性の高い原因は、ダウンロード中にファイルが破損したことです。もう一度ダウンロードしようとすると、チェックに失敗し続ける場合は、ダウンロードリンクが侵害されていることを示しています(ただし、freebsd Webサイトからのものであるため、単にダウンロードエラーであると思われます。それでも、新しいものを確認します。安全のためにダウンロードしてください)。インターネット接続が遅い/信頼性が低い場合は、正しくダウンロードするために数回の試行が必要になる場合があります。コマンドに関する情報を確認する必要がある場合は、マンページ(man)を確認することをお勧めします。