Repo paket FreeBSD - bagaimana cara melakukan verifikasi tanda tangan manual?

11

Saya mencoba memverifikasi tanda tangan sebuah paket di situs web paket FreeBSD

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

Hal ini memberikan tiga file: digests, digests.pub digests.sig
saya menganggap bahwa digests.sigadalah tanda tangan untuk file digestsdengan digests.pubsebagai kunci publik. Tetapi saya mencoba mengkonfirmasi bahwa:

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

dan menerima pesannya

Verification Failure

Saya berasumsi saya memiliki sesuatu yang salah - adakah yang bisa memberi tahu saya apa yang saya lewatkan?

EDIT: Berdasarkan perburuan melalui kode sumber, saya pikir fungsi penting dapat ditemukan di sini , yang disebut rsa_verify_cert_cbpanggilan RSA_verifydari perpustakaan openssl. Tapi saya belum menemukan apa yang dimasukkan ke dalamnya, atau apakah mungkin untuk memanggil fungsi itu menggunakan opensslalat baris perintah.

Kode Saus
sumber
Penampilan ini relevan lists.freebsd.org/pipermail/freebsd-ports/2014-February/... Namun, perintah analog dengan salah satu yang disebutkan ada openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse tampaknya tidak cocok dengan.
SauceCode
... artinya, sepertinya tidak cocok dengansha256sum digests
SauceCode

Jawaban:

1

Karena tidak ada "Cara Melakukan" di Internet untuk verifikasi paket FreeBSD manual, inilah yang saya ketahui.

Triknya adalah string oktet dalam openssl rsautloutput sebenarnya adalah hash dari string yang merupakan hash SHA256 dari sebuah file.

Misalnya, unduh saat ini http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, ekstrak dan lakukan yang berikut:

Metode 1 (menggunakan one-liner openssl dgst)

Penting di sini untuk melakukan tr -d '\n'drop baris baru dari input standar, sehingga tidak termasuk dalam input string untuk openssl dgst.

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

Perintah ini akan ditampilkan Verified OK.

Metode 2 (perbandingan visual string oktet dari file .sig dengan hash yang dihasilkan secara manual)

  1. Gunakan utilitas OpenSSL untuk membuang konten dari 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./..`"
    

    Di sini Anda dapat melihat bahwa objek yang disematkan adalah hash SHA256 dan nilainya acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Sekarang hitung SHA256 file digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. Dan akhirnya menghitung SHA256 dari string ini menggunakan echoperintah dan bandingkan dengan nilai yang dikembalikan oleh openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Perhatikan bagaimana nilai dari langkah 3. cocok dengan nilai dari langkah 1., jadi file digeststersebut valid.

kalabik
sumber
0

Pesan itu mengatakan bahwa kunci publik tidak cocok dengan file yang Anda unduh. Menurut halaman manual untuk dgst -verifikasi nama file verifikasi tanda tangan menggunakan kunci publik di "nama file". Outputnya adalah "Verifikasi OK" atau "Kegagalan Verifikasi" Penyebab yang paling mungkin adalah file rusak selama unduhan. Saya akan mencoba untuk mengunduhnya lagi dan jika terus gagal memeriksa maka itu pertanda tautan unduhan yang dikompromikan (tetapi karena itu dari situs freebsd saya menduga itu hanyalah kesalahan pengunduhan. Bahkan kemudian saya akan memverifikasi yang baru unduh hanya untuk berada di sisi aman). Jika Anda memiliki koneksi internet yang lambat / tidak dapat diandalkan, mungkin perlu beberapa kali mencoba untuk mengunduhnya dengan benar. Jika Anda perlu memeriksa info tentang perintah itu '

Ismael Monroig III
sumber
Ini beberapa waktu yang lalu, tetapi saya cukup yakin bahwa itu bukan kesalahan unduhan (atau unduhan yang dikompromikan) sejak saya mencobanya beberapa kali.
SauceCode