Ứng dụng VPN mã nguồn mở: mã chứng minh được gì và không chứng minh được gì
Một kho công khai là bằng chứng về mã nguồn, không phải về bản dựng bạn đã cài hay về các máy chủ phía sau nó. Khớp bản phát hành, rồi mở rộng việc rà soát.
Mã nguồn đã công bố, giấy phép trong sạch, và kết nối vẫn chưa thể xác minh từ đầu đến cuối. Khoảng trống đó là bình thường, và nó không phải bê bối. Công bố mã giúp một thành phần được kiểm tra bởi những người không được mời, và đó là một thuộc tính có thật và khác thường. Điều đó không có nghĩa là tệp nhị phân bạn đã cài đến từ mã đó, cũng không có nghĩa là bất cứ thứ gì nhà cung cấp vận hành ở phía bên kia đã được rà soát.
Tách thành phần khỏi sản phẩm
Bốn thứ có thể mang nhãn mã nguồn mở, và hiếm khi tất cả đều mở. Ứng dụng khách là thứ mọi người muốn nói tới. Phần triển khai giao thức bên dưới là một tạo tác khác, đôi khi là thư viện và đôi khi là mã trong cây. Phần mềm máy chủ là thứ ba, còn hạ tầng của chính nhà cung cấp, cổng tài khoản và công cụ hỗ trợ là thứ tư. Mỗi thứ có thể mở hoặc đóng một cách độc lập.
Vì vậy những câu như "ứng dụng của chúng tôi là mã nguồn mở" mô tả mục đầu tiên và để phần còn lại không được trả lời, đó không phải là sự không trung thực mà đúng hơn là sự trượt phạm trù. Câu hỏi hữu ích là kho nào, ở thẻ nào, tương ứng với thành phần bạn dựa vào.
Sự phân biệt đó cũng giải thích vì sao hai sản phẩm có cùng ứng dụng khách mở lại có thể đưa ra những bảo đảm rất khác nhau. Ứng dụng khách là phần bạn có thể kiểm tra; hành vi của nhà vận hành là phần bạn phải đánh giá bằng cách khác.
Khớp bản dựng đã cài với thẻ đã công bố
Kho là một bản ghi ý định; tệp nhị phân trên đĩa của bạn mới là thứ chạy. Lấp khoảng trống đó là một bài tập cơ học, và nó bắt đầu bằng việc xác định chính xác cái gì đang được cài, chứ không phải cái mà trang tải xuống quảng cáo.
| Component | What inspection can show | What it leaves untouched |
|---|---|---|
| Client source | How profiles, packets and optional telemetry are handled | Whether the shipped binary matches that source |
| Build output | Whether a declared build reproduces a matching artefact | Whether the source is correct or the toolchain is clean |
| Server software | What the implementation is capable of logging | What the operator actually configures and retains |
| Account and support systems | Almost nothing, unless they are separately published | Everything about how those systems treat your data |
Siêu dữ liệu gói cho bạn biết phiên bản và nguồn gốc, điều này loại trừ trường hợp đơn giản là gói cũ hoặc bị thay thế. Nó không cho bạn biết gói đó được biên dịch thế nào, và chính câu hỏi đó là lý do tồn tại các bản dựng tái lập được. Bản dựng tái lập được cho phép một bên độc lập dựng lại từ cùng nguồn và so sánh đầu ra từng byte, để sự khác biệt trở thành bằng chứng thay vì nghi ngờ.
Ngay cả sự khớp hoàn hảo cũng chứng minh ít hơn người ta hy vọng. Nó cho thấy tạo tác tương ứng với nguồn và công thức dựng, không phải rằng nguồn không có khiếm khuyết và cũng không phải rằng chuỗi công cụ đã dùng là đáng tin. Cả hai đều đáng biết, nhưng đó là những khẳng định khác nhau.
dpkg -S /usr/bin/wg
apt-cache policy wireguard-tools
sha256sum /usr/bin/wgTriệu chứng thường bắt đầu từ đâu
Khiếu nại dẫn đến việc đọc này hiếm khi là "mã bị đóng". Thường đó là một quan sát cụ thể: một ứng dụng khách gọi đến nơi bất ngờ, một phiên bản khác với ghi chú phát hành, hoặc một quy trình hỗ trợ đòi hỏi nhiều hơn mức đường hầm cần. Mỗi điểm đó chỉ ra một thành phần khác nhau.
Lưu lượng mạng bất ngờ từ ứng dụng khách là câu hỏi về mã nguồn của ứng dụng khách, và có thể trả lời bằng cách đọc đường mã mở kết nối. Sự khác biệt phiên bản là câu hỏi về đóng gói. Quy trình hỗ trợ đòi giấy tờ tùy thân là câu hỏi về hệ thống tài khoản, và không cuộc kiểm toán ứng dụng khách nào giải quyết được.
Gọi tên thành phần biến sự ngờ vực mơ hồ thành một kiểm tra cụ thể. Một kiểm tra cụ thể có thể được trả lời, tranh luận hoặc khép lại. Còn cách khác là sự nghi ngờ vĩnh viễn mà không có bước tiếp theo.
Điều gì việc rà soát không chạm tới, và nên làm gì thay vào đó
Việc lưu giữ trên máy chủ của nhà cung cấp nằm ngoài tầm với của ứng dụng khách. Hành vi của cổng thanh toán, của nhà cung cấp dịch vụ kiểm tra gian lận hay của bộ phận hỗ trợ lưu tệp đính kèm cũng vậy. Một cuộc rà soát ứng dụng khách bị kéo dài thành "chúng tôi đã kiểm toán dịch vụ" đưa ra một khẳng định mà bằng chứng không ủng hộ.
Hãy đọc những gì nhà vận hành công bố về lưu giữ và yêu cầu, ghi lại ngày, và coi đó là tuyên bố của một bên có quyền lợi chứ không phải phép đo. Đó là dạng bằng chứng yếu hơn, và nói rõ sự khác biệt hữu ích hơn là nâng tầm nó khi kể lại.
Sau đó dùng những gì bạn có như một trong nhiều đầu vào: danh tính của bản phát hành đã cài, phần mềm có được bảo trì hay không, cách ứng dụng khách được cấu hình, và điều nhà vận hành nói về hệ thống của chính họ. Mã mở củng cố đánh giá đó ở một điểm. Nó không thay thế phần còn lại.
Một khẳng định kiểm toán nên luôn nêu tên các thành phần và phiên bản của nó. Nếu một báo cáo không thể nói kho nào và bản dựng nào nó đã xem xét, thì nó đang mô tả ý định chứ không phải sản phẩm.