你怎麼能在不透露你是誰的情況下透露你喜歡什麼並讓某人回應你想要的東西?
Bob 喜歡蘋果和橙子(虛擬的,而不是物理的)。愛麗絲和夏娃是水果賣家(同樣是虛擬的,而不是實體的)。Bob 想在不透露他是誰的情況下表明他想買一個蘋果和一個橙子。愛麗絲和夏娃想賣給鮑勃,但他們不知道鮑勃的身份。Bob 如何在 Alice 和 Eve 不知道他是誰且不使用中央權威的情況下傳達他購買的偏好,然後收取收據?
Bob 所需要的只是生成一個臨時密鑰:只需製作(比如說)一個 RSA 密鑰,使用它來啟動並繼續與 Alice 通信,然後在完成後將其刪除,注意不要使用它來處理任何個人身份資訊.
事實上,這就是網路瀏覽器每次連接到網站時所做的事情:預設情況下,只有伺服器具有錨定其身份的證書;客戶端是匿名的*,直到或除非*他們提供身份驗證。您對 Searx 的查詢是機密的,只有主機和啟動該 TLS 會話的匿名客戶端知道。
(關於“沒有中央機構證明 Alice”是一個巨大的、獨立的問題——這是 X.509、DANE 和一大堆去中心化原型解決方案至今仍在努力解決的難題;但我’ 還將包括一個原型解決方案。)
對於任何公鑰密碼系統,通過簡單地不將身份證明附加到新生成的公鑰然後將其丟棄,來實現臨時或“匿名”密鑰是微不足道的;如果您只關心一方的真實性(Alice 是公認的水果銷售商或 Bob 知道其公鑰的人;Bob 是匿名客戶,在單個討論會話的範圍之外沒有持久的身份),它是很容易——例如(列出的所有消息都由發送密鑰簽名並由接收密鑰加密):
Bob: (Acquires Alice's putative pk_A) Bob: (Generates a keypair sk_B, pk_B) Bob -> Alice (sk_B -> pk_A): "Buying oranges for 3 bitcoin, reply-to [pk_B]" Alice -> Bob (sk_A -> pk_B): [initiate zero-knowledge proof of orange possession] Bob -> Alice (sk_B -> pk_A): [challenge proof] Alice -> Bob (sk_A -> pk_B): [complete proof] Alice -> Bob (sk_A -> pk_B): "send 3 bitcoins to [btc_A] if you want them" Bob -> Alice (sk_B -> pk_A): [transaction] Alice -> Bob (sk_A -> pk_B): [oranges] Bob: (deletes sk_B and all trace of pk_B off his computer)
在現實世界中,如果您使用刻錄機電子郵件(或不使用電子郵件)從線上商家購買商品,並且通過相同的 TLS 連接提供普通傳遞或固有的數字數據,但沒有“證明”線上商家的合法性(這又是一個完全獨立的範圍,與僅允許與匿名參與者進行雙向安全通信)。
[請注意,鮑勃和愛麗絲在您的問題中從他們的規範角色轉換;我寫了我的答案來反映這一點,但是,在未來,你應該使用“Alice”來代表通信的發起者/發送者,而 Bob 作為接收者或次要參與者。此外,“Eve”用於表示惡意方——黑客或“ E a ve sdropper”——他們可能只是在竊聽,或者可能正在發起互動式或侵入性 MitM 攻擊;通常假定她的能力包括對網路的控制。]