libsodium 密封盒是否洩漏密鑰 ID?
我正在使用 python 和libnacl(一個 libsodium 包裝器)來開發一個應用程序,使用者可以在其中存放加密數據。
Alice 用來
libnacl.sealed.SealedBox(keyBob)
加密她的消息並將其上傳到數據庫供 Bob 下載。Bob 和 Eve 可以讀取數據庫並在其中觀察到一個新條目。Eve 和 Bob 都無法判斷該消息是由 Alice 發送的。Bob 可以解密消息,因此知道他是接收者。Eve 也知道 Bob 的公鑰。Eve 能看出消息的收件人是 Bob 嗎?
編輯:
VincBreaker 向我指出了 libsodium 密封盒的文件,您可以在其中找到:
ephemeral_pk ‖ box(m, recipient_pk, ephemeral_sk, nonce=blake2b(ephemeral_pk ‖ recipient_pk))
這告訴密封盒中包含一些“臨時”公鑰。
“短暫”是什麼意思?
確切地說,有沒有辦法將 連結
ephemeral_pk
到 Bob 的實際公鑰?
來自libsodium網站的答案
只有接收者可以使用其私鑰解密這些消息。雖然收件人可以驗證消息的完整性,但它無法驗證發件人的身份。
雖然 Bob 可以解密消息並且無法使用他的公鑰和私鑰對驗證身份,但 Eve 無法使用唯一的公鑰來確定。
要了解密封盒,我們必須首先看到加密盒。
加密盒結構
Cryptobox 加密和驗證消息 $ m $ 使用發送者的密鑰和接收者的公鑰和一個隨機數 $ n $ .
$$ c = box(m,nonce,recipient_{pk},sender_{sk}) $$
接收方驗證並解密 $ c $ 通過使用他的密鑰和發件人的公鑰。
密封盒結構
僅使用接收者的公鑰建構的密封盒子。密封盒是;
$$ sealed_box = ephemeral_{pk} | box(m, recipient_{pk}, ephemeral_{sk}, nonce) $$ $$ nonce = blake2b(ephemeral_{pk} | recipient_{pk}) $$
生成一個臨時私鑰和公鑰對(生成和使用一次),然後銷毀臨時私鑰。
因此,密封的盒子不包含有關發件人的資訊。由於密封的盒子只能由 $ recipient_{sk} $ 夏娃也無法理解接受者。
但是,Eve 可以查找誰下載了該消息。沒有它,Bob 怎麼知道有消息給他?防止這種情況的最佳方法是;
- 鮑勃檢查自己
- Bob 使用私人資訊檢索來隱藏他訪問的數據。
另外,這個答案對於libsodium 中的密封盒和普通盒有什麼區別?可能會有所幫助。