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
echo
lệ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 digests
có giá trị.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
dường như không khớp.