I'm using the sodium_crypto_secretbox
and sodium_crypto_secretbox_open
functions in PHP (currently PHP 5.6, using paragonie/sodium_compat
).
If a user has cypher text, nonce and decrypted plain text, can they determine the key that was used to encrypt the information?
The context: I'm encrypting the user's login token (a cookie, stored on the machine) and using this as a CSRF token. The CSRF token necessarily includes the nonce for decryption when submitted. The CSRF token is decrypted and verified on submission of form POSTs to protect against CSRF attacks.
My concern is not so much for CSRF attackers who won't have access to the cookies, but for the key itself. For simplicity, it would be useful to use the same key for other encryption functions in the software, but I can't if it can easily be exposed via this information. A legitimate user can see CSRF token and cookie: could they discover the key?