为什么发件人私钥用于加密?

Why is senders private key used in encryption?

我正在查看 public-key-cryptography 的 libsodium-examples,似乎在加密明文时除了接收方 public 密钥外还使用了发送方私钥。

摘自相关example:

The crypto_box_easy() function encrypts a message m whose length is mlen bytes, with a recipient's public key pk, a sender's secret key sk and a nonce n.

这是什么意思?我的理解是发件人私钥仅在签署消息时使用?

数字签名用私钥加密,用public密钥解密。这允许任何人使用签名者的 public 密钥验证签名。

libsodium 文档引用了 "authentication tag",在以下部分的 different chapter 中进行了解释:

This operation: 

 * Encrypts a message with a key and a nonce to keep it confidential.
 * Computes an authentication tag. This tag is used to make sure that
   the message hasn't been tampered with before decrypting it.

那么libsodium所说的authentication tag就相当于更通俗的消息签名术语。因此,crypto_box_easy(...) 函数将发送方私钥作为输入是有意义的,因为加密实际上是加密和签名。