Repo gói FreeBSD - làm thế nào để xác minh chữ ký thủ công?


11

Tôi đang cố gắng xác minh chữ ký của một gói trên trang web của gói FreeBSD

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

Điều này cung cấp cho ba tệp : digests, digests.pub digests.sig
tôi lấy đó digests.siglà chữ ký cho tệp digestsvới digests.pubtư cách là khóa chung. Nhưng tôi đã cố gắng xác nhận rằng:

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

và nhận được tin nhắn

Verification Failure

Tôi cho rằng tôi đã có điều gì đó sai - ai đó có thể cho tôi biết tôi đang thiếu gì không?

EDIT: Dựa trên việc tìm kiếm thông qua mã nguồn, tôi nghĩ rằng chức năng quan trọng được tìm thấy ở đây , được gọi là rsa_verify_cert_cbcác cuộc gọi RSA_verifytừ thư viện openssl. Nhưng tôi đã không tìm ra cái gì đang được cung cấp cho nó, hoặc liệu có thể gọi hàm đó bằng các opensslcông cụ dòng lệnh hay không.


Điều này có vẻ như danh sách có liên quan.freebsd.org / pipermail / freebsd -ports / 2014 / F / 2 Tuy nhiên, lệnh tương tự như lệnh được đề cập ở đó openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse dường như không khớp.
SauceCode

... có nghĩa là, dường như không khớp vớisha256sum digests
SauceCode

Câu trả lời:


1

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)

  1. 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.

  2. Bây giờ hãy tính SHA256 của tệp digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. 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ị.


0

Thông báo đó nói rằng khóa công khai không khớp với tệp bạn đã tải xuống. Theo trang hướng dẫn cho dgst - xác minh tên tệp xác minh chữ ký bằng khóa chung trong "tên tệp". Đầu ra là "Xác minh OK" hoặc "Lỗi xác minh" Nguyên nhân rất có thể là do tệp bị hỏng trong quá trình tải xuống. Tôi sẽ cố tải xuống lần nữa và nếu nó tiếp tục không kiểm tra thì đó là dấu hiệu của liên kết tải xuống bị xâm phạm (nhưng vì nó từ trang web freebsd tôi nghi ngờ đó chỉ là lỗi tải xuống. tải về chỉ để ở bên an toàn). Nếu bạn có kết nối internet chậm / không đáng tin cậy, có thể mất vài lần thử để tải xuống ngay. Nếu bạn cần kiểm tra thông tin về các lệnh đó '


Cách đây một thời gian, nhưng tôi khá tự tin rằng đó không phải là lỗi tải xuống (hoặc tải xuống bị xâm phạm) vì tôi đã thử nó nhiều lần.
SauceCode
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.