哪种加密算法最适合加密 Cookie?
由于这个问题相当流行,我认为对其进行更新很有用。
让我强调一下AviD对这个问题的正确答案:
您不应在 Cookie 中存储任何需要加密的数据。相反,在 Cookie 中存储一个大小适中(128 位/16 字节)的随机密钥,并将您希望在服务器上保持安全的信息(由 Cookie 的密钥标识)存储。
我正在寻找有关用于加密cookie的“最佳”加密算法的信息。
我满足以下要求:
-
它必须快速
加密和解密数据将(几乎)每个请求完成 -
它将对小型数据集进行操作,通常是大约100个字符或更少的字符串
-
它必须是安全的,但它并不像我们在保护银行交易
-
我们需要能够解密信息,以便SHA1等被淘汰。
现在我已经读到河豚是快速和安全的,我已经读到AES是快速和安全的。河豚具有较小的块大小。
我认为这两种算法都提供了足够的安全性?因此,速度将成为决定性因素。但我真的不知道这些算法是否适合小字符串,以及是否有更适合加密cookie的算法。
所以我的问题是:
哪种加密算法最适合加密cookie数据?
更新
更准确地说,我们希望加密2个cookie:一个包含会话信息,另一个包含“记住我”信息。
该平台是PHP作为VPS上Linux上的apache模块。
更新2
我同意cletus的观点,即在cookie中存储任何信息都是不安全的。
但是,我们需要实现“记住我”功能。实现此目的的公认方法是设置一个cookie。如果客户端提供此cookie,则允许他或她以(几乎)相等的权限访问系统,就好像他/她提供了有效的用户名密码组合一样。
因此,我们至少要加密cookie中的所有数据,以便它:
a)恶意用户无法读取其内容,
b)恶意用户无法伪造自己的cookie或篡改它。
(在我们做任何事情之前,来自cookie的所有数据都经过清理并检查其有效性,但这是另一回事)
会话 Cookie 仅包含会话 Id/时间戳。它可能可以在没有加密的情况下使用,但我认为加密它没有害处吗?(计算时间除外)。
因此,鉴于我们必须在cookie中存储一些数据,加密它的最佳方法是什么?
更新3
对这个问题的回答使我重新考虑了所选择的方法。我确实可以在不需要加密的情况下做同样的事情。与其加密数据,我应该只发送没有上下文且无法猜测的无意义数据。
但是,我也不知所措:
我认为加密使我们能够将数据发送到BigBadWorld™,并且仍然(公平地)确定没有人可以读取或篡改它......
这不就是加密的全部意义吗?
但下面的反应是:不要相信加密来实现安全性。
我错过了什么??