Libsodium
為什麼 NaCL 不提供匿名公鑰加密?
同時,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
.