Chuyển đến nội dung
Quay lại Nymchat

Cơ sở tri thức Dưới mui xe

Xác minh bản dựng

Nguồn mở chỉ hữu ích nếu mã bạn đang chạy là mã đã được được xuất bản. Nymchat được xây dựng một cách xác định để bạn có thể tự mình kiểm tra từ bên trong ứng dụng hoặc từ một thiết bị đầu cuối.

Bản dựng có thể tái tạo

Việc xây dựng ứng dụng sẽ phát ra một build-manifest.json chứa cam kết nguồn, một Hàm băm SHA-256 của mọi nội dung HTML, JavaScript và CSS được cung cấp và một bundleHash trên toàn bộ tập tài sản đó.

Đầu ra chỉ phụ thuộc vào nội dung nguồn - ngay cả thời gian xây dựng được ghi lại cũng là dấu thời gian của cam kết thay vì thời điểm bản dựng chạy - vì vậy bất kỳ ai xây dựng lại giống nhau cam kết nhận các tệp giống hệt byte và giống nhau bundleHash.

Sau đó, Hành động GitHub sẽ xây dựng lại từng cam kết một cách độc lập và ký tên nguồn gốc xây dựng chứng thực cho hàm băm và bảng kê khai, do đó có một bản ghi đã ký kết buộc một bundleHash tới một cam kết trong kho lưu trữ, được tạo ra bởi một cái gì đó không phải là triển khai.

Hộp thoại Giới thiệu kiểm tra nội dung gì

Về trong tiêu đề chạy kiểm tra trực tiếp, trong trình duyệt của bạn.

Hộp thoại Giới thiệu về Nymchat, hiển thị phiên bản, tính toàn vẹn của bản dựng và trạng thái bảo đảm chính xác.
Hộp thoại Giới thiệu: phiên bản, tính toàn vẹn của bản dựng, bảo hành canary và đường dây trực tiếp tới nhà phát triển.

Nó tìm nạp lại từng nội dung mà trang đang thực sự chạy, băm nó bằng API Web Crypto và so sánh với bảng kê khai. Sau đó - và đây là phần quan trọng - nó tính toán lại bundleHash từ băm vừa tính toán, không phải từ bất kỳ điều gì mà bản kê khai tuyên bố và tìm kiếm điều đó trong các chứng thực đã ký của kho lưu trữ thông qua API GitHub.

Đó là điều khiến quá trình triển khai không thể tự bảo đảm: cung cấp các tệp đã sửa đổi cùng với bảng kê khai phù hợp vẫn không thành công vì hàm băm được tính toán lại không có chứng thực.

Trạng tháiCó nghĩa
&kiểm tra; Ứng dụng chính thức đã được xác minh (n/n)Mọi nội dung đều khớp, hàm băm gói được tính toán lại được chứng thực bởi kho lưu trữ, trang được phục vụ từ tên miền chính thức.
⚠ Bản dựng đã được xác minh · không phải ứng dụng chính thứcMã này là chính hãng và đã được chứng thực, nhưng đây là bản sao của một miền khác. Một tấm gương không thể loại bỏ cảnh báo này nếu không xác minh được.
✗ Không phù hợpMột nội dung không băm theo nội dung của bảng kê khai.
✗ Bản dựng không chính thứcBăm gói được tính toán lại không có chứng thực từ kho lưu trữ - một bảng kê khai tự tạo.
⚠ Không thể truy cập được nguồn gốcKhông thể truy cập API GitHub nên không thể kiểm tra chứng thực theo cách nào đó.

Tự mình xác minh

Xây dựng lại cam kết tên hộp thoại Giới thiệu và so sánh:

git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build   # prints "Build hash: <bundleHash>"

Hàm băm được in phải khớp với cả hàm băm trong hộp thoại Giới thiệu và hàm băm trong cam kết đó bản tóm tắt quá trình xây dựng xuất xứ. Bạn cũng có thể kiểm tra chữ ký trực tiếp bằng GitHub CLI:

gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM

Các ứng dụng Android và iOS

Việc kiểm tra ở trên là kiểm tra ứng dụng web và lý do cần nêu rõ: một ứng dụng gốc không thể làm điều tương tự với chính nó. Những gì chạy trên điện thoại của bạn là mã máy được biên dịch chứ không phải nguồn trong kho lưu trữ và không có gì mà ứng dụng có thể tính toán trên thiết bị liên quan đến nguồn đó. khác.

Android có thể làm điều tốt nhất tiếp theo. Đã cài đặt .apk là một tập tin ứng dụng có thể đọc và hàm băm, và hàm băm của mọi bản phát hành được xuất bản đều đã được công khai: xuất bản lên Zapstore ký một sự kiện Nostr mang theo SHA-256 của APK và SHA-256 của chứng chỉ ký của nó. Vì vậy Android Về hộp thoại băm APK mà nó đang chạy từ đó, tìm nạp những APK đã ký các sự kiện, chỉ giữ lại những sự kiện được ký bởi khóa của nhà phát triển và so sánh. Nó cho thấy hai cũng băm, vì vậy bạn có thể lặp lại việc kiểm tra thiết bị: tải xuống APK đã xuất bản, chạy sha256sum trên đó và tự mình xem xét sự kiện đó.

Không thể kiểm tra ứng dụng được cài đặt từ Google Play theo cách này, và đó không phải là một dấu hiệu cho thấy bất cứ điều gì là sai. Google ký lại mỗi upload với khóa riêng của nó và xây dựng một APK riêng biệt cho mỗi thiết bị, vì vậy những gì hạ cánh trên điện thoại của bạn không phải là tệp mà nhà phát triển sản xuất và hash của nó không khớp với bất cứ điều gì có thể được phát hành. Ứng dụng nhận ra một Play cài đặt và nói như vậy thay vì báo cáo một sự thất bại. Để kiểm tra một build chính mình, cài đặt APK được phát hành trực tiếp.

iOS hoàn toàn không thể kiểm tra được. Apple mã hóa và ký lại mỗi lần tải xuống riêng lẻ, do đó hàm băm được tính trên iPhone của bạn là duy nhất cho iPhone của bạn và không khớp với gì được xuất bản ở bất cứ đâu. Hộp thoại Giới thiệu nói thẳng điều này thay vì thể hiện thái độ trấn an trạng thái đó không có ý nghĩa gì. Nếu bạn muốn có Nymchat, bạn có thể xác minh trên phần cứng của Apple, hãy sử dụng web app, ứng dụng này sẽ kiểm tra mọi tệp nó đang chạy.

Điều mà không điều nào trong số này chứng minh

Việc kiểm tra một ứng dụng tự chạy không thể chứng minh ứng dụng đó là trung thực - bất kể ai đã sửa đổi nó cũng có thể xóa séc. Điều nó chứng tỏ là trường hợp thông thường: rằng bản sao bạn đã cài đặt là bản sao đã được xuất bản. Điều đó đáng có vì những giá trị của nó so sánh là công khai, vì vậy ai đó không phải là bạn có thể kiểm tra chúng và không đồng ý.

Lệnh bắt chim hoàng yến

Lệnh bảo đảm là một tuyên bố được xuất bản theo một lịch trình cố định mà nhà phát triển có không nhận được một lệnh bí mật của chính phủ mà họ bị cấm tiết lộ - một Thư An ninh Quốc gia, lệnh FISA. Nhà phát triển có thể bị buộc phải giữ im lặng về mệnh lệnh như vậy, nhưng không thể bắt buộc phải nói dối, nên con chim hoàng yến bị ôi thiu hoặc biến mất là chính nó là tín hiệu.

Nó sống ở canary.json ở thư mục gốc của kho lưu trữ và được lấy trực tiếp từ GitHub, vì vậy lịch sử của nó có thể được kiểm tra độc lập với bất kỳ điều gì trang web được triển khai nói. Hộp thoại Giới thiệu mã màu cho nó:

Màu sắcCó nghĩa
Màu xanh lá - tất cả đều rõ ràngĐã ký, hiện tại và chữ ký khớp với khóa của nhà phát triển. Không có lệnh bí mật nào được nhận.
Màu vàng — quá hạn, hoặc không rõ ràngNó không được làm mới trước ngày đã nêu, hoặc allClear cờ là sai. Không thể loại trừ được lệnh im lặng.
Màu đỏ — chữ ký không hợp lệ hoặc đã biến mấtChữ ký không khớp với khóa của nhà phát triển hoặc tệp đã bị xóa hoàn toàn. Hãy coi đây là một cảnh báo nghiêm túc.

Mỏ neo tươi mát

Canary đã ký sẽ nhúng chiều cao và hàm băm khối Bitcoin mới nhất tại thời điểm ký. Hàm băm đó không thể được biết trước khi khối tồn tại, điều này chứng tỏ chim hoàng yến đã đã ký sau đó một thời điểm cụ thể thay vì được ký trước hàng loạt tháng trước đó. Hộp thoại Giới thiệu liên kết mỏ neo với trình khám phá khối để bạn có thể kiểm tra nó.