1

我只是想知道加密和签署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 时,您会进行所有验证等等。我正确地接近这个吗?此外,加密和签名的所有密钥都应该是随机数(一次性使用的密钥)还是足以让它们中的每一个成为所有人共享的单个全局密钥?我很抱歉这正在成为一个三方问题。希望没有人介意。非常感谢。

4

1 回答 1

2

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

除非您使用较新的 AEAD 接口,否则加密无法防止选择密文攻击

根据我的基本理解,您正在对数据进行 hmac 哈希处理,并使用分隔符将其附加到加密数据中?然后,当您检查 cookie 时,您会进行所有验证等等。我正确地接近这个吗?

你在这里写的是一个加密和 MAC结构。你想加密然后 MAC代替。

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

更好的是,如果不需要,不要自己写。随意使用sodium_crypto_secretbox()sodium_crypto_secretbox_open()而不是。请参阅此处的示例

于 2018-10-02T13:22:39.020 回答