当前位置: 首页 > 面试题库 >

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

许正平
2023-03-14
问题内容

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

让我强调AviD对这个问题给出
的正确答案

您不应在Cookie中存储任何需要加密的数据。 而是在cookie中存储一个大小合适的(128位/
16字节)随机密钥,并在cookie的密钥中标识要在服务器上保持安全的信息。

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

我有以下要求:

  • 它必须快速
    加密和解密(几乎)每个请求的数据

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

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

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

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

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

所以我的问题是:
哪种加密算法最适合加密Cookie数据?

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

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

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

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

因此,我们至少希望对cookie中的所有数据进行加密,以便:
a) 恶意用户无法读取其内容,
b) 恶意用户无法伪造或篡改cookie。

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

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

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

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

但是,我也很茫然:
我认为加密使我们能够将数据发送到BigBadWorld™,并且仍然(相当)确保没有人可以阅读或篡改它……
这不是全部吗?加密点?

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

我想念什么?


问题答案:

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

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

假设确实
必要对Cookie数据进行对称加密。正如其他人指出的那样,这确实是没有必要的,只有极少数情况下别无选择。通常,它更适合您更改设计,并返回到随机会话标识符,或者在必要时返回单向哈希(使用SHA-256)。
在您的情况下,除了“常规”随机会话标识符外,您的问题是“记住我”功能-这也应实现为:

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

似乎我们已经解决了您原来的特定问题的主题,并通过更改设计来更改了问题的基础…。
只要我们这样做,我也强烈建议您 反对 此功能永久“记住我”的原因有几个,其中最大的原因是:

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


 类似资料:
  • 本文向大家介绍项目中有没有用过加密,哪种加密算法?相关面试题,主要包含被问及项目中有没有用过加密,哪种加密算法?时的应答技巧和注意事项,需要的朋友参考一下 项目中没有用过,但我了解几个加密算法: (1) RSA加密 (2) MD5加密 (3) SHA256加密

  • MD5 加密算法 类型:MD5 可配置属性:无 AES 加密算法 类型:AES 可配置属性: 名称 数据类型 说明 aes-key-value String AES 使用的 KEY RC4 加密算法 类型:RC4 可配置属性: 名称 数据类型 说明 rc4-key-value String RC4 使用的 KEY

  • 英特尔证实HDCP(高频宽数字内容保护)主密钥已经泄漏,现在研究人员在BSD许可证下发布了HDCP加密/解密算法的开源实现。他们表示公布软件的目的是帮助其他人研究或实现HDCP协议。 主密钥: 6692d179032205 b4116a96425a7f ecc2ef51af1740 959d3b6d07bce4 fa9f2af29814d9 82592e77a204a8 146a6970e3c4a

  • 本文向大家介绍php用户密码加密算法分析【Discuz加密算法】,包括了php用户密码加密算法分析【Discuz加密算法】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php用户密码加密算法。分享给大家供大家参考,具体如下: 今天在拿Discuz进行二次开发时需要在代码里验证Discuz的用户名密码,结果不小心掉进了坑里,因为Discuz的论坛有两张表来存储用户数据,一张在Discuz的

  • 加解密算法 算法类型 特点 优势 缺陷 代表算法 对称加密 加解密密钥相同或可推算 计算效率高,加密强度高 需提前共享密钥;易泄露 DES、3DES、AES、IDEA 非对称加密 加解密密钥不相关 无需提前共享密钥 计算效率低,仍存在中间人攻击可能 RSA、ElGamal、椭圆曲线系列算法 算法体系 现代加密算法的典型组件包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般

  • 说明:DES加密/解密类仅供参考思路,需要接入方具体实现细节及调通 php版DES加密/解密类: <?php /** * Created by PhpStorm. * User: didi * Date: 2017/9/27 * Time: 16:11 */ namespace Library; class DESHelper { //私钥,固定字节长度为8位 priv