Libsodium

為什麼 NaCL 不提供匿名公鑰加密?

  • June 5, 2017

同時,Sodium 提供了匿名加密 API,無需使用臨時密鑰。僅使用其他使用者公鑰加密消息是一種不好的做法嗎?

正如我現在理解的問題:為什麼 NaCL 不為未經身份驗證的加密提供原語,使密文 blob 只能由由其公鑰標識的接收者解密?注意 libsodium 提供crypto_box_seal的正是這樣做的,而 NaCL 聲稱(嘗試)提供所有必要的加密原語。

作為回答,crypto_box_seal可以使用其他原語來建構通知。鈉 說crypto_box_seal

ephemeral_pk ‖ box( m, recipient_pk, ephemeral_sk
                 , nonce=blake2b(ephemeral_pk ‖ recipient_pk))

所以我們在 NaCL prims 方面擁有的是(虛擬碼):

sk = random();
ephemeral_pk = crypto_box_keypair(sk);
nonce = sha512(ephemeral_pk || recipient_pk); // NaCL uses SHA512 not Blake2b.
ct = ephemeral_pk || crypto_box(m, recipient_pk, sk, nonce);

這可以被認為是匿名的,因為使用的臨時密鑰對不與任何身份相關聯 - 密鑰應該在計算密文消息後立即銷毀,ct.

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