Máy chuyển tiếp SSP thấy được gì và không thấy được gì

·6 phút đọc·Bởi SSP Editorial Team
Ảnh bìa SSP Academy: máy chủ chuyển tiếp SSP thấy được gì

Máy chuyển tiếp SSP thấy được gì và không thấy được gì

SSP là ví hai thiết bị. Tiện ích trình duyệt giữ một khóa, điện thoại giữ khóa kia, và không thiết bị nào tự mình chuyển được tiền. Nhưng hai thiết bị ấy phải nói chuyện với nhau, và chúng làm vậy qua một máy chủ do chúng tôi vận hành, gọi là máy chuyển tiếp.

Máy chủ đó là nơi hiển nhiên để đặt một câu hỏi khó chịu: nếu mọi thứ đều đi qua hạ tầng do chính công ty làm ví vận hành, thì công ty ấy thấy được đúng những gì?

Đó là câu hỏi chính đáng và xứng đáng nhận một câu trả lời cụ thể thay vì một lời trấn an. Vậy đây là những gì thực sự nằm trong mã nguồn.

Máy chuyển tiếp không ký được bất cứ thứ gì

Hãy bắt đầu từ phần quan trọng nhất.

Máy chuyển tiếp không bao giờ nhận khóa riêng. Không mã hóa, không chia nhỏ, không dưới bất kỳ hình thức nào. Khóa ví của bạn ở lại trong tiện ích trình duyệt, khóa của ứng dụng ở lại trên điện thoại, và thứ duy nhất băng qua mạng là khóa công khai, dữ liệu chưa ký, và những chữ ký vốn đã được tạo ra trên thiết bị của bạn.

Đây không phải cam kết chính sách mà là cam kết về cấu trúc. Đa chữ ký hai-trên-hai đòi cả hai chữ ký mới chuyển được tiền, còn máy chuyển tiếp không nắm khóa nào. Một máy chuyển tiếp hoàn toàn độc hại — của chúng tôi, bị xâm nhập, hay bị kẻ tấn công thay thế — vẫn không thể tạo ra một giao dịch hợp lệ, bởi tạo ra nó đòi những bí mật chưa từng được gửi tới nó.

Đó là bảo đảm. Mọi điều bên dưới nói về những gì máy chuyển tiếp thực sự cầm nắm: một tập hẹp hơn nhưng quả thật không rỗng.

Cái gì đi qua, và trong bao lâu

Máy chuyển tiếp giữ bốn loại bản ghi. Hai trong số đó tự xóa.

Dữ liệu đồng bộ, khi bạn ghép cặp hai thiết bị. Nó mang theo chuỗi, danh tính ví của bạn, khóa công khai mở rộng của ứng dụng, danh tính WK sinh ra, các nonce công khai, địa chỉ đã tạo, và xpub khôi phục cùng chữ ký của nó.

Dữ liệu hành động, khi bạn đang ký một thứ gì đó. Nó mang theo chuỗi, đường dẫn dẫn xuất, danh tính WK của bạn, loại hành động, chính phần tải, và các UTXO liên quan.

Cả hai bộ sưu tập ấy đều có một chỉ mục TTL trong MongoDB đặt ở expireAfterSeconds: 900. Mười lăm phút. Cơ sở dữ liệu xóa bản ghi bất kể điều gì khác xảy ra — nó không phải một tác vụ dọn dẹp mà ai đó phải nhớ chạy, cũng không phải một lời hứa trong chính sách riêng tư. Nó là một chỉ mục, do chính cơ sở dữ liệu cưỡng hành.

Token thông báo đẩy, để điện thoại bạn có thể được đánh thức khi có gì cần phê duyệt. Những cái này ở lại, vì một token hết hạn mỗi mười lăm phút thì vô dụng.

Xpub khôi phục, mỗi danh tính một cái, hoàn toàn không hết hạn. Điều này là cố ý và mã nguồn nói rõ: nó tồn tại để ví lấy được bất cứ khi nào cần, chứ không chỉ trong những quãng ngắn ngủi mà cả hai ứng dụng tình cờ cùng thức.

Phần chúng tôi nên nói thẳng

Hãy nhìn lại phần tải đồng bộ ấy. Nó chứa một khóa công khai mở rộng.

Xpub không phải khóa chi tiêu và không thể cho phép một giao dịch. Nhưng nó không phải chẳng là gì. Từ xpub của một tài khoản, người ta dẫn xuất được mọi địa chỉ mà tài khoản đó sẽ dùng, nghĩa là ai nắm nó đều có thể theo dõi toàn bộ số dư và lịch sử giao dịch trên chuỗi ấy. Đó là quyền đọc đời sống tài chính của bạn trên tài khoản đó — đúng mối liên kết mà sự riêng tư trên chuỗi dựa vào việc tránh né.

Phần tải hành động cũng thật không kém. Trong lúc bạn ký, máy chuyển tiếp cầm giao dịch chưa ký: tiền đi đâu, bao nhiêu, và từ những đầu ra nào.

Vậy nên bản tóm tắt trung thực không phải «máy chuyển tiếp chẳng thấy gì». Mà là:

Máy chuyển tiếp không tiêu được tiền của bạn, và mỗi lần mười lăm phút, nó thấy được bạn đang làm gì với số tiền ấy.

Cửa sổ mười lăm phút là biện pháp giảm nhẹ, và là một biện pháp đáng kể — nó giới hạn lượng lịch sử có thể tích tụ ở một chỗ. Nhưng trong cửa sổ ấy dữ liệu vẫn ở đó, và chúng tôi thà nói thẳng còn hơn để chữ «không giữ hộ» gánh một công việc tu từ mà nó chưa xứng.

Nguyên tắc thiết kế đáng mượn

Có một dòng chú thích trong dịch vụ khôi phục nắm bắt kiến trúc tốt hơn mọi sơ đồ:

ví thẩm định chữ ký ấy đối chiếu với khóa công khai danh tính mà chính nó dẫn xuất, nên kho này không được tin.

Xpub khôi phục được lưu kèm một chữ ký tách rời mà SSP Key đã tạo trên nó. Khi ví lấy về, ví tự dẫn xuất khóa công khai danh tính và tự kiểm chữ ký. Nếu máy chuyển tiếp trả về một xpub khác — do bị xâm nhập, do lỗi, hay do cố ý tráo — chữ ký sẽ không khớp và ví sẽ từ chối.

Máy chuyển tiếp bị phần mềm phụ thuộc vào nó đối xử như một đường ống không đáng tin. Đó là cách đúng để xây trên hạ tầng do chính mình vận hành, bởi nó nghĩa là việc máy chủ của bạn sai không trở thành vấn đề của người dùng. Đó cũng là khuôn mẫu cần tìm khi đánh giá bất kỳ ví nào: không phải «họ có hứa cư xử tử tế không?», mà «chuyện gì xảy ra nếu máy chủ của họ cư xử tệ?».

Một máy chuyển tiếp thù địch thực sự có thể làm gì

Đáng để nói cụ thể về mô hình mối đe dọa thật.

Nó có thể quan sát. Trong cửa sổ TTL, xpub của bạn và giao dịch đang chờ của bạn. Đó là phơi bày quyền riêng tư, không phải rủi ro trộm cắp.

Nó có thể kiểm duyệt. Từ chối chuyển tin giữa các thiết bị của bạn, khiến bạn không ký được giao dịch mới theo lối thông thường. Phiền toái và gây gián đoạn — và không giống với việc mất mát gì. Khóa vẫn là của bạn, tiền vẫn nằm trên chuỗi, và các lối khôi phục tồn tại chính vì máy chuyển tiếp có thể không còn đó.

Nó có thể nói dối, và hầu như sẽ thất bại. Việc tráo một xpub khôi phục bị phép kiểm chữ ký nói trên đánh bại. Đó là lý do phép thẩm định ấy quan trọng.

Nó không thể ký. Không khóa, không chữ ký, không giao dịch.

Trường hợp xấu nhất thực tế là bị theo dõi và bị gián đoạn, chứ không phải mất tiền. Đó là vị thế tốt hơn hẳn so với một dịch vụ giữ hộ, nơi trường hợp xấu nhất tương ứng là tiền đã biến mất. Nó không giống «không ai thấy được gì», và lẫn lộn hai điều ấy chính là cách người ta có một bức tranh sai về quyền riêng tư của chính mình.

Bạn làm được gì với những phần lộ ra

Hiểu việc ghép cặp phơi bày điều gì. Đồng bộ một chuỗi nghĩa là một xpub của chuỗi đó đi qua máy chuyển tiếp. Đó là cái giá để thiết kế hai thiết bị vận hành được.

Nhớ rằng cửa sổ ngắn chứ không phải bằng không. Mười lăm phút cho mỗi hành động là một giới hạn, không phải một sự vắng mặt.

Coi xpub khôi phục là vĩnh viễn. Theo thiết kế, nó được lưu không hết hạn, và nó là vật liệu khóa công khai kèm một chữ ký kiểm chứng được — nhưng nó bền lâu, và bạn nên biết điều đó thay vì phát hiện ra.

Hãy đánh giá kiến trúc, chứ đừng đánh giá lời bảo đảm. Câu hỏi hữu ích về máy chủ của bất kỳ ví nào không phải là công ty có hứa kín đáo hay không. Mà là phần mềm có nhận ra được nếu máy chủ nói dối hay không. Ví của chúng tôi kiểm chữ ký thay vì tin vào câu trả lời, và bạn đọc được điều đó trong mã nguồn thay vì phải tin lời chúng tôi.

Điều chúng tôi mong được hiểu nhất là hình dạng của sự đánh đổi. Một ví hai thiết bị cần một kênh điều phối, mà kênh điều phối là nơi siêu dữ liệu tụ lại. Chúng tôi đã chặn điều đó bằng thời hạn do cơ sở dữ liệu cưỡng hành và thiết kế phía máy khách để không tin máy chủ — nhưng phiên bản trung thực là máy chuyển tiếp có thấy những thứ có thật, trong chốc lát, và không kiến trúc cẩn thận nào đưa con số ấy về không.

Chia sẻ bài viết này

Bài viết liên quan