哪种加密算法最适合加密Cookie?

由于这个问题很受欢迎,因此我认为对其进行更新很有用。

让我强调AviD对这个问题给出

而是在cookie中存储一个大小合适的(128位/

16字节)随机密钥,并在cookie的密钥中标识要在服务器上保持安全的信息。


我正在寻找有关“最佳”加密cookie加密算法的信息。

我有以下要求:

  • 它必须快速

    加密和解密(几乎)每个请求的数据

  • 它将在小型数据集上运行,通常是大约100个字符或更少的字符串

  • 它必须是安全的,但这并不意味着我们正在保护银行交易

  • 我们需要能够解密信息,以便SHA1之类的东西不存在。

现在,我已经了解到Blowfish是快速而安全的,并且我已经了解到AES是快速且安全的。河豚的块体较小。

我认为这两种算法都提供了足够的安全性?因此速度将成为决定性因素。但是我真的不知道这些算法是否适合于小字符串,或者是否有更好的算法来加密cookie。

哪种加密算法最适合加密Cookie数据?

更确切地说,我们要加密2个cookie:一个带有会话信息,另一个带有“记住我”信息。

该平台是PHP,是VPS上Linux上的apache模块。

我同意cletus的观点,即在cookie中存储任何信息都是不安全的。

但是,我们需要实施“记住我”功能。可接受的解决方法是设置cookie。如果客户出示此cookie,则允许他(或她)以(几乎)相等的权限访问系统,就像他/她出示了有效的用户名密码组合一样。

因此,我们至少希望对cookie中的所有数据进行加密,以便:

恶意用户无法读取其内容,

恶意用户无法伪造或篡改cookie。

(在执行任何操作之前,cookie中的所有数据都经过了清理和检查有效性,但这是另一回事了)

会话Cookie仅包含sessionId /时间戳。它可能无需加密就可以使用,但是我认为加密没有危害吗?(计算时间除外)。

因此,鉴于我们必须将一些数据存储在cookie中,加密它的最佳方法是什么?

对这个问题的回答使我重新考虑了所选择的方法。我确实可以做到这一点而无需加密。除了加密数据之外,我应该只发送没有上下文 且无法猜测的 毫无意义的数据。

但是,我也很茫然:

我认为加密使我们能够将数据发送到BigBadWorld™,并且仍然(相当)确保没有人可以阅读或篡改它……

这不是全部吗?加密点?

但是下面的反应趋向于:不要信任加密来实现安全性。

我想念什么?

回答:

没有真正的理由不采用256位AES。确保在CBC模式和PKCS#7填充中使用它。如您所说,快速又安全。

我已经读过(未经测试),河豚的速度可能会稍快…但是,河豚的主要缺点是设置时间长,这对您的情况不利。另外,AES更加“证明”。

假设确实

必要对Cookie数据进行对称加密。正如其他人指出的那样,这确实是没有必要的,只有极少数情况下别无选择。通常,它更适合您更改设计,并返回到随机会话标识符,或者在必要时返回单向哈希(使用SHA-256)。

在您的情况下,除了“常规”随机会话标识符外,您的问题是“记住我”功能-这也应实现为:

  • 一个长的随机数,存储在数据库中并映射到用户帐户;
  • 或包含例如用户名,时间戳,标签盐和机密服务器密钥的密钥哈希(例如HMAC)。当然,所有这些都可以在服务器端进行验证。

似乎我们已经解决了您原来的特定问题的主题,并通过更改设计来更改了问题的基础…。

只要我们这样做,我也强烈建议您 反对 此功能永久“记住我”的原因有几个,其中最大的原因是:

  • 使某人更有可能窃取该用户的记住密钥,从而使他们能够欺骗用户的身份(然后可能更改其密码);
  • CSRF跨站请求伪造。您的功能将有效地允许匿名攻击者导致未知用户向您的应用程序提交“经过身份验证的”请求,即使没有实际登录也是如此。

以上是 哪种加密算法最适合加密Cookie? 的全部内容, 来源链接: utcz.com/qa/433749.html

回到顶部