What does "cryptobox" mean in Libsodium and NaCl? In general, and in specific case, what does "box" do?
cryptobox or correctly
crypto_box is just
secretbox with the shared key between the sender and receiver, unique per direction.
box_easy with a random sender secret key and prepends the ciphertext with its corresponding public key.
secretbox does the symmetric authenticated encryption.
crypto_box_easy(ciphertext, MESSAGE, MESSAGE_LEN, nonce,
crypto_box_seal(ciphertext, MESSAGE, MESSAGE_LEN, recipient_pk);
crypto_secretbox_easy(ciphertext, MESSAGE, MESSAGE_LEN, nonce, key);
I know that libsodium is authenticated encryption, but gpg is not. "Box" makes me think the encryption and signing are somehow sealed and protected.
secretbox and GPG/PGP use authenticated encryption.
box (deniably) authenticates the sender without a signature.
box uses Diffie-Hellman to derive a key which requires either of the sender or receiver's secret key to compute. Consequently, if an adversary steals Alice' key, they may impersonate Bob to Alice; this attack is known as Key Compromise Impersonation.
PGP is vulnerable to a related attack by using sign-then-encrypt. I.e. If Alice signs a message and encrypts it for Bob, Bob may decrypt it and encrypt it for Carol. When Carol decrypts the message, she may believe Alice sent her the message, because Alice did, in fact, sign it.
box is better than PGP's sign-then-encrypt but we can do even better when both parties can send messages to the other. I.e Triple-DH used in Signal (ignore the prekey extension). Edit: Although I'd rather avoid signatures, I should have included this. Signatures may be combined appropriately by signing the
(message, recipient public key) tuple; such that signature validation with the incorrect recipient fails to verify.