Khả năng tái lập là một thuộc tính của chuỗi cung ứng: cùng đầu vào đã công bố phải tạo ra cùng một sản phẩm. Với một ứng dụng khách VPN, tuyên bố đó gắn trình cài đặt bạn đã tải xuống với mã nguồn và chuỗi công cụ mà bất kỳ ai cũng có thể dựng lại. Nó không nói gì về dịch vụ mà ứng dụng khách kết nối tới.

Vì vậy câu hỏi hữu ích là hẹp và có thể trả lời. Dự án có công bố một quy trình không, và sản phẩm cụ thể của bạn có khớp với quy trình đó không?

Nơi một bản dựng thôi mang tính tất định

Trình biên dịch nhúng dấu thời gian, đường dẫn tuyệt đối và tên máy chủ dựng, trừ khi bị cấm làm vậy. Lưu trữ ghi lại thứ tự tệp và thời điểm sửa đổi, trình liên kết thay đổi đầu ra theo phiên bản chuỗi công cụ, và nén song song có thể sắp xếp lại các khối. Bất kỳ điều nào trong đó khiến hai bản dựng từ cùng một mã nguồn khác nhau ở mức byte mà không có gì đáng ngại xảy ra. Tính tất định được đưa vào bản dựng bằng kỹ thuật, không bao giờ được thừa hưởng mặc định.

Dự án tuyên bố khả năng tái lập phải nêu rõ cách chuẩn hóa mà nó áp dụng: dấu thời gian cố định, đường dẫn được ánh xạ, mục lưu trữ đã sắp xếp, phiên bản trình biên dịch và phụ thuộc được ghim. Không có danh sách đó, không thể diễn giải sự không khớp, vì không gian biến thiên hợp lệ chưa được xác định.

Đầu vào đã công bố cũng phải đầy đủ. URL kho mã không có thẻ không phải là bản sửa đổi, tệp khóa không có hash không phải là tập phụ thuộc, và tập lệnh dựng tải công cụ xuống khi chạy có một đầu vào mà không ai có thể ghim. Mỗi khoảng trống về sau trở thành một khác biệt. Hoàn tất danh sách trước khi so sánh bất cứ điều gì, vì một danh sách không đầy đủ không thể thất bại theo cách có ý nghĩa.

InputHow it driftsWhat pins it
SourceBranch moves after releaseCommit hash in the build metadata
ToolchainCompiler patch level differsContainer image digest
PackagingArchive order and mtimes varyNormalised archive settings

So sánh thực sự kiểm tra điều gì

Một bên độc lập dựng lại trong môi trường đã công bố và so sánh đầu ra với sản phẩm đã công bố. Giống hệt từng bit là dạng mạnh; một bước chuẩn hóa được ghi chép, trong đó khác biệt đã ghi được đảo ngược và kết quả sau đó khớp, là dạng yếu hơn nhưng vẫn hữu ích.

Việc so sánh liên quan đến tệp nhị phân. Chữ ký trả lời một câu hỏi khác: nó gắn một bản phát hành với một khóa và một khóa với một danh tính, và một dự án có thể có chữ ký hợp lệ trên những sản phẩm mà chưa ai dựng lại. Hai bước kiểm tra chồng lên nhau thay vì thay thế nhau.

sha256sum wireguard-installer.msi
gpg --verify wireguard-installer.msi.sig wireguard-installer.msi

Chạy cả hai trước khi cài đặt, và so sánh hash với giá trị đã công bố cho cùng bản phát hành và nền tảng. Một hash khớp với trang của nhà cung cấp chứng minh bản tải về đến nguyên vẹn; một tệp nhị phân dựng lại khớp với hash đã công bố của nhà cung cấp chứng minh điều mạnh hơn về cách nó được tạo ra.

Vì sao không khớp không phải bằng chứng bị can thiệp

Phần lớn sự không khớp đến từ một đầu vào mà không ai kiểm soát. Một bản vá trình biên dịch khác, một đường dẫn dựng lọt vào ký hiệu gỡ lỗi, một ngôn ngữ làm thay đổi thứ tự sắp xếp, hay một bước đóng gói được áp dụng sau khi so sánh đều tạo ra hash khác với công việc trung thực.

Vì thế phải đọc sự không khớp dựa trên quy trình đã ghi chép trước khi nó thành một câu chuyện. Nếu quy trình ghim mọi thứ mà khác biệt vẫn không giải thích được, đó là phát hiện thật đáng nêu với dự án. Nếu quy trình im lặng về đóng gói, khác biệt có thể hoàn toàn nằm trong dự kiến.

Tính đối xứng cũng quan trọng ở đây: sự khớp không chứng minh mã nguồn không có khiếm khuyết, chỉ chứng minh tệp nhị phân tương ứng với nó. Mã được kiểm toán tốt và mã tái lập được là hai thuộc tính khác nhau, và một dự án có thể có cái này mà không có cái kia.

Tuyên bố nói gì về dịch vụ phía sau ứng dụng

Ứng dụng khách là một chương trình trên thiết bị của bạn; dịch vụ là máy chủ, hệ thống tài khoản và chính sách lưu giữ ở nơi khác. Khả năng tái lập ràng buộc cái thứ nhất và không nói gì về cái thứ hai, dù trình cài đặt được xác minh kỹ đến đâu.

Cấu hình điểm cuối cũng có thể thay đổi sau khi cài đặt, qua cài đặt từ xa hoặc một hồ sơ do nhà cung cấp kiểm soát. Những thay đổi đó đến qua mạng và không được bất kỳ hash nào bạn tính trước khi kết nối bao phủ.

Hãy đọc tuyên bố trong phạm vi thật của nó, rồi kiểm tra riêng câu hỏi bên cạnh: nhà cung cấp ghi lại gì và dưới thẩm quyền tài phán nào họ trả lời yêu cầu. Một tệp nhị phân đã xác minh và một dịch vụ chưa xác minh có thể cùng tồn tại, và đó chính là trường hợp mà kiểm tra chuỗi cung ứng được thiết kế để làm rõ, không phải để sửa.

Bài viết liên quan