Key-Exchange
crypto_box() 版本,不允許發送者解密之前發送的消息
Libsodium 的
crypto_box()
函式係列允許發送者使用其公鑰/私鑰對發送消息,知道接收者的公鑰,並允許接收者驗證發送者的身份,知道其公鑰。但是,由於這些函式通過計算共享對稱密鑰來工作,因此對發送者私鑰的破壞將允許攻擊者解密先前使用發送者私鑰和接收者公鑰的相同組合發送的所有消息。
還有另一個函式 ,
crypto_box_seal()
它沒有這個弱點,因為它使用臨時密鑰對,但它不允許驗證發送者的身份。是否有一個功能可以同時滿足這兩種情況 - 驗證發送者的身份並確保在不知道接收者私鑰的情況下無法恢復先前發送的消息?
我正在考慮做什麼
crypto_box_seal()
,但不是Poly1305
用作身份驗證標籤,而是crypto_sign_detached()
在其餘輸出的雜湊上使用輸出(即在臨時公鑰和密文上)。也就是說,對於每條消息,我們生成一個臨時密鑰對,使用它加密明文,然後使用我們的長期私鑰對整個消息進行簽名,並將其用作身份驗證標籤。這有意義嗎?有沒有更好的方法?
為了驗證發送者的身份,消息需要一個簽名,接收者可以使用發送者的公鑰進行驗證。
用 加密消息後
crypto_box_seal()
,用 簽名crypto_sign()
。接收者可以驗證簽名並將其刪除,
crypto_sign_open()
然後解密其餘部分。你的建議也有效,但你必須自己實現所有的位。