Encryption

使用經過身份驗證的加密和簽名

  • January 25, 2021

我知道一個使用認證加密公鑰簽名實現 e2e 加密的項目。因此,為消息生成的密文將是:

ciphertext = signature_Ed25519 + nonce + mac_Poly1305 + XSalsa20(plaintext)

我很難理解兩者都做的好處是什麼,因為 MAC 已經可以對發件人進行身份驗證了。有任何想法嗎?


完整流程如下:

Alice and Bob each have an X25519 encryption key pair for talking to each other.
Alice has an Ed25519 signing key pair that is used for everybody.

Alice 向 Bob 發送一條消息:

1. encrypted = crypto_box(plaintext, nonce, bob_publickey, alice_secretkey)

這是由crypto_box()提供的。

加密現在 = nonce + mac_Poly1305 + XSalsa20(plaintext)

2. ciphertext = crypto_sign(encryted, alice_signing_secretkey)

這是由crypto_sign()提供的。

密文現在 = signature_Ed25519 + 加密

簽名提供了 MAC 不具備的一項屬性:不可否認性。僅使用 MAC(或 AEAD),任何擁有密鑰的一方都可以發送消息。所以 Bob 可以偽造一條消息並聲稱是 Alice 發送的。有了簽名,只有持有相應私鑰的一方才能創建簽名。MAC 驗證消息,而不是發送者

當需要此屬性時,必須接受添加簽名的性能下降。如果不需要此屬性,則無需簽名。

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