Public-Key

libsodium 密封盒是否洩漏密鑰 ID?

  • January 31, 2019

我正在使用 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 怎麼知道有消息給他?防止這種情況的最佳方法是;

  1. 鮑勃檢查自己
  2. Bob 使用私人資訊檢索來隱藏他訪問的數據。

另外,這個答案對於libsodium 中的密封盒和普通盒有什麼區別?可能會有所幫助。

引用自:https://crypto.stackexchange.com/questions/66853