Trả tiền cho một đường hầm không nhất thiết có nghĩa là phải trình danh tính thanh toán ở mỗi kết nối. Một thiết kế có thể kiểm tra điều kiện một lần, trao cho khách hàng các token mật mã, và để cổng chấp nhận token sau đó mà không thấy tài khoản phía sau. Việc điều đó có thực sự che giấu gì hay không phụ thuộc vào lựa chọn phát hành và đổi thưởng, nên hãy coi đây là một bài tập đặc tả gồm bốn phần thay vì một tính năng bạn bật lên.

Tách bước mua khỏi bước phiên

Kiến trúc Privacy Pass trong RFC 9576 cung cấp bộ từ vựng: một máy khách, một bên chứng thực, một bên phát hành và một nguồn gốc. Máy khách chứng minh một thuộc tính nào đó với bên phát hành và nhận token; sau đó trình một token cho nguồn gốc, nơi quyết định có phục vụ hay không. Khi áp dụng cho VPN, thuộc tính được chứng thực có thể là một đơn vị truy cập duy nhất.

Việc thanh toán vẫn thấy những gì quy trình của nó cần, và không ai nói khác. Mục tiêu hẹp hơn là việc đổi thưởng sau đó không thể bị gắn ngược lại với giao dịch mua đã tạo ra token. Đó là một thuộc tính cụ thể, có thể kiểm chứng, và là thứ đáng để viết ra.

Một chuỗi bearer trông ngẫu nhiên không mang lại điều đó. Nếu bên phát hành lưu giá trị bên cạnh hồ sơ khách hàng và cổng có thể hỏi ánh xạ đó, hai tương tác được liên kết bằng cơ sở dữ liệu chứ không phải bằng mật mã. Cấu trúc phải khiến bên phát hành không thể trả lời câu hỏi đó, và việc triển khai phải ngăn bên phát hành và cổng hợp nhất góc nhìn của họ.

Quyết định một token cấp quyền cho điều gì

«Một token mua quyền truy cập» hầu như không nói gì về mặt vận hành. Đơn vị là một kết nối, một hạn mức thời gian hay một khối lượng? Một máy khách mất phản hồi có thể tiếp tục cùng một khoản cấp không? Điều gì xảy ra khi thiết bị kết nối lại trong lúc mạng thay đổi? Những câu trả lời đó quyết định thiết kế có dùng được hay không, và mỗi câu đều có hệ quả về quyền riêng tư.

Reuse ruleWhat it buysWhat it leaks
Single use per connectionStrongest unlinkability between sessionsFrequent reissuance, more purchase-to-use timing pairs
Bounded time windowFewer tokens, reconnects workActivity inside the window is linkable
Long-lived grantOperationally simpleBehaves like an account reference with extra steps

Hãy chọn một cách có chủ đích và viết hành vi khi thất bại bên cạnh. Một máy khách thử lại với quyền mới sau khi hết thời gian sẽ tiêu thêm một đơn vị, vừa là bất ngờ về hóa đơn vừa là tín hiệu về quyền riêng tư.

Viết chính sách tái sử dụng và thu hồi

Thu hồi là nơi các thiết kế ẩn danh thường phá vỡ lời hứa của chính mình. Hủy đăng ký và vô hiệu hóa các token đã phát hành là hai thao tác khác nhau, và một cổng lặng lẽ tra cứu tài khoản để quyết định thì không còn ẩn danh tại thời điểm đó.

Chọn thời hạn, giới hạn phát hành và câu chuyện thu hồi khớp với nhau. Sau đó kiểm tra chính hồ sơ của cổng để tìm các trường đưa liên kết bạn đã gỡ trở lại.

sudo grep -rIl --include='*.log' -e 'Bearer ' -e 'account_id' /var/log/vpn/

Tìm kiếm đó liệt kê các tệp nhật ký chứa trường token hoặc tài khoản, đây là nơi đầu tiên một thiết kế cẩn thận bị rò rỉ trên thực tế. Một bản ghi phiên lưu giá trị token bên cạnh mã định danh tài khoản sẽ đánh bại toàn bộ cấu trúc, và nó thường đến qua một thay đổi gỡ lỗi mà không ai quay lại xem.

Cũng hãy định nghĩa cổng giữ lại gì sau khi phiên kết thúc. Thời lượng, byte và điểm cuối hữu ích cho vận hành, và mỗi thứ là một mảnh ghép mà người quan sát muốn có. Giữ thời gian lưu trữ ngắn và danh sách trường ngắn, rồi xem lại cả hai khi một thay đổi gỡ lỗi thêm một cột. Không ai để ý một trường nhật ký mới cho đến khi nó ở đó được một năm.

Nêu tuyên bố, rồi đến những quan sát còn lại

Viết tuyên bố về quyền riêng tư trong một câu kèm các giả định: bên nào phải không thể liên kết những bối cảnh nào, và điều gì xảy ra nếu bên phát hành và cổng so ghi chú. Một thiết kế vượt qua câu đó thì có thể đánh giá được; một thiết kế chỉ được mô tả là «không tri thức» thì không.

Sau đó liệt kê những gì vẫn hiển thị bất kể thế nào. Địa chỉ nguồn, thời điểm kết nối, kích thước gói và sự thật đơn giản rằng một giao dịch mua xảy ra ngay trước khi kết nối mới duy nhất xuất hiện đều nằm ngoài mật mã. Một khách hàng duy nhất mua một đơn vị và kết nối một lần có thể bị liên kết chỉ bằng thời điểm, và không thiết kế token nào thay đổi điều đó.

Kết quả trung thực là một liên kết hẹp hơn giữa tài khoản và việc sử dụng, không phải một phiên vô hình. Vẫn đáng để xây, miễn là tài liệu nói như vậy và hồ sơ vận hành khớp với tuyên bố.

Bài viết liên quan