Vì không có "Cách thực hiện" trên Internet để xác minh gói FreeBSD thủ công, đây là những gì tôi đã tìm ra.
Thủ thuật là chuỗi octet trong openssl rsautlđầu ra trên thực tế là hàm băm của chuỗi đó là hàm băm SHA256 của một tệp.
Ví dụ: tải xuống hiện tại http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, giải nén nó và làm như sau:
Phương pháp 1 (sử dụng một lớp lót openssl dgst)
Điều quan trọng ở đây là tr -d '\n'phải bỏ dòng mới từ đầu vào tiêu chuẩn, vì vậy nó không được bao gồm trong đầu vào chuỗi cho openssl dgst.
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
Lệnh này sẽ xuất ra Verified OK.
Phương pháp 2 (so sánh trực quan chuỗi octet từ tệp .sig với hàm băm được tạo thủ công)
Sử dụng tiện ích OpenSSL để kết xuất nội dung từ 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./..`"
Ở đây bạn có thể thấy đối tượng nhúng là hàm băm SHA256 và giá trị của nó là acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.
Bây giờ hãy tính SHA256 của tệp digests:
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- Và cuối cùng tính SHA256 của chuỗi này bằng
echolệnh và so sánh với giá trị được trả về bởi openssl rsautl:
echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
Lưu ý cách giá trị từ bước 3. khớp với giá trị từ bước 1., vì vậy tệp digestscó giá trị.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parsedường như không khớp.