Khám phá nút và chuyển tiếp đa chặng mã hóa
Cách các nút AeroNyx khám phá lẫn nhau bằng các bộ mô tả có chữ ký, giữ một Directory Chain được sao chép, và chuyển tiếp dữ liệu mã hóa nhiều lớp qua từng chặng. Tin nhắn trò chuyện thực mặc định dùng trạm chuyển tiếp trung tâm; tuyến onion hai chặng là tùy chọn.
Các nút AeroNyx tìm thấy nhau thông qua các bộ mô tả có chữ ký và có thời hạn, và có thể chuyển tiếp dữ liệu được mã hóa đầu cuối qua từng chặng, trong đó mỗi trạm chuyển tiếp chỉ gỡ lớp mã hóa của chính mình. Hiện nay, tin nhắn trò chuyện thực của người dùng mặc định đi qua trạm chuyển tiếp trung tâm của AeroNyx (RelayWS). Việc định tuyến tin nhắn trò chuyện qua các nút là một thiết lập tùy chọn trong ứng dụng.
Những gì đang chạy hiện nay
| Khả năng | Trạng thái |
|---|---|
| Khám phá nút có chữ ký và lan truyền thông tin giữa các nút ngang hàng | Đang chạy trên các nút sản xuất |
| Directory Chain (lịch sử bộ mô tả có chữ ký theo từng nút, được sao chép giữa các nút) | Đang chạy trên các nút sản xuất |
| Chuyển tiếp onion hai chặng giữa các nút | Đang chạy trên các nút sản xuất. Trong ứng dụng, đây là tùy chọn và được tắt theo mặc định |
| Hộp thư ẩn danh được truy cập qua chuyển tiếp onion | Đang hoạt động trên các nút sản xuất. Trò chuyện thông thường không sử dụng chúng. Ứng dụng có một điểm thả hộp thư beta riêng |
| Tuyến có ba chặng chuyển tiếp | Chính sách và cơ chế thăm dò có trong mã nguồn nút. Ứng dụng không sử dụng chúng |
Điểm cuối tên máy chủ https:// cho các nút đứng sau cổng | Có trong các bản phát hành nút hiện tại |
| TLS ràng buộc danh tính trên cổng API công khai, không cần tên miền hay tổ chức phát hành chứng chỉ | Đang chạy trên các nút sản xuất. Các nút dùng nó với nhau khi nút ngang hàng công bố hỗ trợ. Hỗ trợ trong ứng dụng đang được phát triển |
| Bàn giao onion ở nút cuối tới hộp thư đến của trạm chuyển tiếp phía người nhận | Đang chạy trên các nút sản xuất |
Hạt giống được nhà vận hành ghim cố định (discovery.pinned_seeds) | Có trong các bản phát hành nút hiện tại |
| Phương thức truyền tải trò chuyện mặc định | Dịch vụ RelayWS trung tâm do AeroNyx vận hành |
Các tuyến tập trung và phi tập trung chạy song song với nhau.
Cách khám phá hoạt động
Mỗi nút công bố một bộ mô tả được ký bằng khóa danh tính Ed25519 của nó. Một bộ mô tả bao gồm ID nút, thời điểm phát hành và hết hạn, một điểm cuối công khai tùy chọn, các cờ khả năng (chẳng hạn trạm chuyển tiếp onion trung gian hoặc trạm chuyển tiếp trò chuyện), các gợi ý dung lượng ở mức thô và khóa dùng cho mã hóa onion. Các nút từ chối những bộ mô tả đã hết hạn hoặc mang chữ ký không hợp lệ.
- Việc lan truyền có giới hạn. Việc trao đổi giữa các nút ngang hàng bị giới hạn tốc độ và được kiểm soát bằng chính sách, và các thông điệp có giới hạn kích thước.
- Phục hồi sau khởi động lại. Một nút giữ bộ nhớ đệm cục bộ về các nút ngang hàng và chuyển sang dùng các điểm cuối hạt giống đã cấu hình sau khi khởi động lại. Nhà vận hành cũng có thể ghim cố định hạt giống.
- Lựa chọn tuyến. Chỉ những bộ mô tả còn mới, có điểm cuối khả dụng và khóa onion mới được xem xét làm ứng viên chuyển tiếp.
Một bộ mô tả có thể nêu những điểm cuối nào
Chữ ký chứng minh ai đã công bố một bộ mô tả, chứ không chứng minh rằng điểm cuối của nó an toàn để liên hệ. Do đó, một nút chỉ chấp nhận hai dạng điểm cuối:
- một địa chỉ IP công khai qua
httphoặchttps; các dải loopback, riêng tư, link-local, CGNAT, dành cho tài liệu, multicast và dành riêng đều bị từ chối; - một URL
https://có tên DNS công khai. Các tên một nhãn,localhostvà các hậu tố riêng tư như.local,.internalvà.home.arpađều bị từ chối.
Tên máy chủ được phân giải tại thời điểm kết nối thông qua một trình phân giải loại bỏ mọi địa chỉ không công khai, vì vậy một tên không thể được trỏ tới chính nút đó, một mạng riêng hay một dịch vụ siêu dữ liệu đám mây. Máy khách phía nút ngang hàng cũng bỏ qua các thiết lập proxy và không bao giờ đi theo chuyển hướng.
Dạng tên máy chủ tồn tại để các nút không có địa chỉ IP riêng, chẳng hạn một nút TEE đứng sau cổng đám mây, có thể tham gia.
Hạt giống được ghim cố định
Một nút khởi động mà không có bản chụp do nhà vận hành cung cấp chỉ tin cậy những danh tính nó đã có, nên rốt cuộc có thể chỉ tin chính mình. Trong trường hợp đó, nhà vận hành có thể chỉ định danh tính được kỳ vọng tại một địa chỉ:
[discovery]
pinned_seeds = ["<64-hex node id>@<public ip>:<port>"]
- Một danh tính được ghim chỉ được chấp nhận lần đầu sau khi có một lần trao đổi qua TLS ràng buộc danh tính được ghim vào chính danh tính đó.
- Mọi bộ mô tả về sau của một danh tính được ghim, từ bất kỳ nguồn nào, phải giữ nguyên địa chỉ đã ghim và công bố TLS ràng buộc danh tính.
- Sự tin cậy không lan truyền: các bộ mô tả khác trong câu trả lời của một hạt giống vẫn là ứng viên chưa được tin cậy.
- Một mục ghim đã bị gỡ không thể quay lại từ bộ nhớ đệm hay bản sao lưu cũ.
Directory Chain
Mỗi nút cũng giữ một lịch sử có chữ ký, liên kết bằng giá trị băm, về các sự kiện bộ mô tả của chính nó, gọi là Directory Chain của nút đó. Các nút khác có thể sao chép lịch sử đó, lấy các đối tượng bộ mô tả và yêu cầu bằng chứng bao hàm cho một bộ mô tả cụ thể. Các nút ngang hàng do nhà vận hành chỉ định cố định có thể ký các điểm kiểm tra quan sát trên các lịch sử mà chúng đã thấy.
Không có sổ cái toàn cục và không có nút điều phối duy nhất: mỗi nút ký lịch sử của chính mình, và các nút khác sao chép và kiểm tra nó.
TLS ràng buộc danh tính
Truy cập một nút qua HTTPS thông thường cần một tên miền và một chứng chỉ từ tổ chức phát hành chứng chỉ, trong khi hầu hết các nút AeroNyx chỉ truy cập được bằng địa chỉ IP. Thay vào đó, một nút tự chứng minh điểm cuối HTTPS của mình bằng danh tính Ed25519 của nó.
- Cách hoạt động. Nút tạo một khóa TLS ECDSA P-256 thông thường và một chứng chỉ tự ký. Một tên thay thế của chủ thể mang một ràng buộc,
aeronyx-tls-binding:v1:<node id>:<expiry>:<signature>, trong đó chữ ký do khóa danh tính của nút tạo ra trên một bản tóm lược được tách miền của khóa công khai của chính chứng chỉ, ID nút và thời điểm hết hạn. Bắt tay TLS 1.3 chứng minh nút nắm giữ khóa của chứng chỉ. Khóa danh tính không bao giờ ký một lần bắt tay. - Máy khách kiểm tra gì. Bên xác minh chỉ chấp nhận một chứng chỉ cho đúng nút mà nó định liên hệ: có đúng một ràng buộc, đúng ID nút kỳ vọng, chưa hết hạn, còn hiệu lực tối đa 31 ngày, và có chữ ký hợp lệ trên khóa của chính chứng chỉ này. Chứng chỉ do một tổ chức phát hành chứng chỉ cấp không đáp ứng kiểm tra này.
- Cùng một cổng. Cổng API công khai (
8422/TCP) phục vụ cả hai: kết nối bắt đầu bằng một lần bắt tay TLS sẽ nhận TLS, còn mọi kết nối khác nhận HTTP thuần như trước. Tính năng này được bật theo mặc định (discovery.public_api_identity_tls). - Giữa các nút. Một nút có bộ mô tả có chữ ký công bố tính năng giao thức
anpf1-ibt1sẽ phục vụ TLS ràng buộc danh tính. Một nút ngang hàng thấy tính năng đó phải liên hệ nút kia qua TLS được ghim vào danh tính của nó và không bao giờ quay về HTTP thuần. Tính năng này nằm trong phạm vi chữ ký của bộ mô tả, nên kẻ tấn công trên mạng không thể gỡ nó để ép hạ cấp. Nếu nhiều danh tính cùng nhận một điểm cuối, sẽ không có địa chỉ TLS nào được tạo ra và yêu cầu thất bại theo hướng đóng an toàn. Các nút cũ không có tính năng này, và các điểm cuối cổng dùng tên DNS, giữ nguyên hành vi trước đây. - Tham chiếu. Mã nguồn và các vector kiểm thử cố định: aeronyx-node-tls.
Kết quả là thông tin tuyến của các chặng onion, lan truyền thông tin, đồng bộ thư mục và lưu lượng nhân chứng giữa các nút không còn đọc được trên đường truyền. Hỗ trợ trong ứng dụng để kết nối tới các nút theo cách này đang được phát triển.
Cách chuyển tiếp đa chặng hoạt động
- Bên gửi bọc dữ liệu trong một lớp mã hóa cho mỗi chặng, sử dụng khóa onion đã công bố của từng trạm chuyển tiếp.
- Mỗi trạm chuyển tiếp kiểm tra chữ ký, dấu thời gian và trạng thái chống phát lại của chặng trước, gỡ lớp của chính mình và chuyển tiếp khối dữ liệu không minh bạch còn lại. Trạm chuyển tiếp không bao giờ thấy các lớp bên trong.
- Nút cuối cùng (nút đích) bàn giao tin nhắn cho hộp thư đến của trạm chuyển tiếp phía người nhận (mặc định là trạm chuyển tiếp trung tâm) và chỉ sau khi trạm chuyển tiếp chấp nhận mới trả về một biên nhận có chữ ký. Biên nhận ràng buộc ID tuyến, một cam kết đối với dữ liệu, danh tính của nút đích và thời điểm phân phối. Nó chứng minh tin nhắn đã được nhận vào sự lưu giữ của trạm chuyển tiếp, chứ không phải người nhận đã đọc nó. Một nút đã tắt tính năng bàn giao sẽ giữ tin nhắn trong kho của chính mình và ký cùng loại biên nhận, nên chỉ riêng biên nhận không phân biệt được hai trường hợp.
Mỗi bên nhìn thấy gì
| Bên | Nhìn thấy | Không nhìn thấy |
|---|---|---|
| Nút vào | Địa chỉ mạng của bên gửi, một lớp được niêm phong và chặng kế tiếp | Tin nhắn gửi cho ai, và nội dung của nó |
| Nút đích | Khóa của bên gửi và bên nhận, và bản mã | Địa chỉ mạng của bên gửi, và nội dung |
| Trạm chuyển tiếp trung tâm (nhận bàn giao) | Những gì bất kỳ lần gửi nào cũng cho nó thấy: khóa của bên gửi và bên nhận, dấu thời gian và kích thước | Địa chỉ mạng của bên gửi, và nội dung |
Không có nút đơn lẻ nào liên kết địa chỉ mạng của bạn với người bạn đang nhắn. Nút đích và trạm chuyển tiếp trung tâm đều thấy ai đã nhắn cho ai.
Giao thức chấp nhận tối đa ba chặng chuyển tiếp đã xác minh. Tuyến quyền riêng tư của ứng dụng dùng hai chặng. Các giới hạn chống lạm dụng trên trạm chuyển tiếp được mô tả trong Cơ chế chống lạm dụng cho trạm chuyển tiếp mù.
Trò chuyện trong ứng dụng
- Mặc định: tin nhắn đi qua dịch vụ RelayWS trung tâm. Nội dung tin nhắn được mã hóa đầu cuối, nhưng dịch vụ xử lý siêu dữ liệu phân phối. Xem Tích hợp máy khách với trạm chuyển tiếp trò chuyện.
- Tuyến quyền riêng tư (tùy chọn, tắt theo mặc định): khi thiết lập này được bật và có tuyến sẵn sàng, ứng dụng gửi tin nhắn một-một qua tuyến onion hai chặng trước. Nếu không có tuyến onion nào chấp nhận tin nhắn, ứng dụng giữ tin nhắn trên thiết bị và không dùng trạm chuyển tiếp tiêu chuẩn trừ khi bạn chấp thuận điều đó cho tin nhắn này.
- Hộp thư ẩn danh (beta): một điểm thả riêng chỉ hoạt động khi đang kết nối với mạng quyền riêng tư. Các cuộc hội thoại thông thường không sử dụng nó.
Kích thước khi rút hộp thư ẩn danh
Trước đây kết quả một lần rút hộp thư là một ảnh cố định duy nhất dài 163.130 byte bất kể mục nào, nên một tin nhắn ngắn tốn một phản hồi khoảng 160 KiB. Phiên bản rút 2, được thương lượng qua tính năng giao thức có chữ ký anpf1-ampc1, đệm mục đã niêm phong lên lớp nhỏ nhất trong năm lớp kích thước (4.204, 16.492, 65.644 hoặc 131.180 byte, hoặc mức tối đa của bộ mã hóa). Một mục 4.096 byte nay được truyền với 4.518 byte.
Nút TEE
Một nút sản xuất chạy bên trong môi trường thực thi tin cậy của Phala Cloud (dstack trên Intel TDX). Nút này chỉ đóng vai trò hộp thư ẩn danh và trạm chuyển tiếp onion: VPN của nó bị tắt, MemChain bị tắt, và khóa danh tính của nó đến từ dịch vụ khóa dstack. Nút chỉ có thể được truy cập thông qua một tên máy chủ TLS trên cổng, đó là lý do các điểm cuối tên máy chủ được bổ sung. Ứng dụng hiện chưa xác minh chứng thực TEE của nút.
Trạng thái trực tiếp
Trạng thái mạng tổng hợp được công bố tại:
GET https://api.aeronyx.network/api/privacy_network/vpn/public/network-stats/
Các số liệu tổng hợp về chuyển tiếp và khám phá xuất hiện dưới data.protocol_status, ví dụ peer_store.blind_relay và peer_store.peer_quorum. Lưu ý hai điểm khi đọc chúng:
- Các số liệu tổng hợp cấp nút chỉ đếm những nút có nhịp tim trong 120 giây gần nhất, nên một nút ngoại tuyến sẽ biến mất khỏi các số đếm như
protocol_status.reported_nodes.network.total_nodesvànetwork.vpn_nodesvẫn đếm các nút đã đăng ký đang hoạt động, dù trực tuyến hay không. - Các bộ đếm thăm dò tổng hợp (
probe_*,two_hop_probe_*) đo tình trạng của tuyến. Chúng không phải là lưu lượng người dùng.
Phản hồi công khai chỉ chứa số đếm, nhóm trạng thái và dấu thời gian. Phản hồi không bao giờ bao gồm ID nút, điểm cuối, ID tuyến, dữ liệu, người nhận, địa chỉ IP máy khách, dữ liệu DNS hay các cạnh của đồ thị xã hội. Xem Thống kê mạng và ranh giới quyền riêng tư.
<!-- faq:start -->Câu hỏi thường gặp
Tin nhắn trò chuyện AeroNyx của tôi có đi qua các nút phi tập trung không?
Không phải theo mặc định. Tin nhắn đi qua dịch vụ RelayWS trung tâm. Bạn có thể bật tuyến quyền riêng tư trong ứng dụng, thiết lập này gửi tin nhắn một-một qua tuyến onion hai chặng qua các nút khi có tuyến sẵn sàng. Nếu không có tuyến nào chấp nhận một tin nhắn, ứng dụng giữ tin nhắn đó cho đến khi có tuyến khả dụng hoặc bạn chấp thuận gửi tin nhắn đó qua trạm chuyển tiếp tiêu chuẩn.
Một nút chuyển tiếp có thể đọc các tin nhắn mà nó chuyển tiếp không?
Không. Một trạm chuyển tiếp chỉ gỡ lớp mã hóa của chính mình và chuyển tiếp một khối dữ liệu không minh bạch. Nội dung tin nhắn cũng được mã hóa đầu cuối giữa những người tham gia cuộc hội thoại.
Directory Chain là gì?
Directory Chain là lịch sử có chữ ký, liên kết bằng giá trị băm, về các bộ mô tả của chính mỗi nút. Các nút khác sao chép nó và có thể yêu cầu bằng chứng bao hàm. Directory Chain không có nút điều phối toàn cục.
Làm thế nào để một nút đứng sau cổng tham gia mạng lưới?
Nút có thể công bố một tên máy chủ https:// làm điểm cuối của mình. Các nút khác phân giải tên đó tại thời điểm kết nối và chỉ sử dụng địa chỉ công khai, vì vậy tên đó không thể bị chuyển hướng tới các đích riêng tư hoặc nội bộ.
Vì sao trang thống kê công khai hiển thị nhiều nút đã đăng ký hơn số nút đang trực tuyến?
network.total_nodes và network.vpn_nodes đếm các nút đã đăng ký đang hoạt động dù trực tuyến hay không. Hãy so sánh chúng với network.online_vpn_nodes. Các số đếm giao thức và chuyển tiếp chỉ bao gồm những nút có nhịp tim còn mới.
Các nút có cần tên miền hay tổ chức phát hành chứng chỉ để dùng HTTPS không?
Không. Một nút có thể chứng minh điểm cuối HTTPS của mình bằng chính khóa danh tính của nó: chứng chỉ TLS của nút mang một chữ ký của danh tính nút trên khóa của chứng chỉ, và máy khách hoặc nút ngang hàng biết ID nút có thể xác minh nó. Các nút đứng sau cổng vẫn có thể dùng tên máy chủ https:// thay thế.
Biên nhận phân phối có chữ ký chứng minh điều gì?
Nó chứng minh rằng nút đích đã nhận tin nhắn vào sự lưu giữ của trạm chuyển tiếp, trên thực tế là hộp thư đến của trạm chuyển tiếp phía người nhận. Nó không chứng minh rằng người nhận đã thấy hay đọc tin nhắn. Hãy dùng biên nhận đã phân phối và đã đọc của giao thức trò chuyện cho việc đó.
<!-- faq:end -->