PHP - cookie加密和hmac签名

时间:2012-06-17 07:54:21

标签: php cookies encryption signature

我只是想知道加密和签名cookie是多余的吗?加密不够吗?为什么或为什么不呢?

如果它不是多余的,我想知道我是否正朝着正确的方向前进。为简单起见,我所做的就是:

$data = 'some data';
$encrypted_data = mcrypt_encrypt($cipher, $key, $data, $mode, $iv);
$signature = hash_hmac($algorithm, $data, $key);
$package = $encrypted_data . '|' . $signature;
setcookie('somecookie', $package, time()+60*60*24);

从我基本上理解的是,你是hmac散列数据并使用分隔符将它附加到加密数据上?然后,当您检查cookie时,您将进行所有验证等。我接近这个吗?此外,加密和签名的所有密钥是否应该是nonce(单次使用密钥),还是足以让每个密钥成为所有人共享的单个全局密钥?我很抱歉这成了一个三问题。希望没有人介意。非常感谢。

1 个答案:

答案 0 :(得分:2)

  

我只是想知道加密和签名Cookie是否多余?加密还不够吗?为什么或为什么不呢?

除非您使用的是更新的AEAD界面encryption doesn't protect against chosen-ciphertext attacks

  

据我基本了解,您是hmac哈希数据,并使用定界符将其附加到加密数据上吗?然后,在检查Cookie时,您将进行所有验证,依此类推。我能正确处理吗?

您在此处编写的是加密和MAC 结构。您需要先先加密然后再MAC

- $signature = hash_hmac($algorithm, $data, $key);
+ $signature = hash_hmac($algorithm, $encrypted_data, $key);

更好的是,不必自己写。随时使用sodium_crypto_secretbox()sodium_crypto_secretbox_open()See the examples here