【问题标题】:What encryption should I use to encrypt cookie content? [closed]我应该使用什么加密来加密 cookie 内容? [关闭]
【发布时间】:2013-09-28 04:44:55
【问题描述】:

除了您不应该将重要信息存储在 cookie 中之外,您建议我使用什么加密方法来加密 cookie 的内容?

关键是 cookie 只能保存这么多数据(我认为是 4k?),因此加密算法不应将内容的大小增加到成为问题的程度。

当前存储的cookie:

WebsiteId (integer value
Name      varchar(50)
Country   varchar(50)

【问题讨论】:

  • 为什么要加密这个?是秘密吗?
  • 如果数据太重要,请不要将其保存在 cookie 中,将其保存在 session 中并将 session id 保存到 cookie。
  • @DavidSchwartz 通过默默无闻的安全性。
  • 我还是不明白。为什么用户的姓名和国家/地区会成为同一用户的秘密?如果您想获得有关如何加密某些内容的好建议,您必须非常清楚地解释您要阻止的内容。
  • @DavidSchwartz 我不希望更改 WebsiteId,名称/国家并不重要,但我把它放在那里是为了了解加密之前存储在 cookie 中的数据的潜在大小。

标签: c# asp.net-mvc-4 cookies encryption


【解决方案1】:

听起来您实际上是想防止数据被篡改,而不是对其进行加密。一种简单的方法是使用HMAC。基本上,您有一个服务器密码,您使用服务器密码对数据进行哈希处理,然后将哈希后的输出放入 cookie 中。要验证它,您从 cookie 中删除哈希,使用服务器密码计算其余数据的哈希,然后将其与 cookie 中的哈希进行检查。数据无法被篡改,因为攻击者无法计算正确的哈希,因为他们不知道服务器机密。

因此,例如,如果数据是“foo=bar&baz=qux”,您将计算“foo=bar&baz=qux”的安全哈希,假设它是“EN0RmBxNGyo”并将 cookie 设置为“foo=bar&baz= qux&hash=EN0RmBxNGyo"。然后,当您取回 cookie 时,您删除散列以获取“foo=bar&baz=qux”并计算它的散列。您再次得到“EN0RmBxNGyo”,它与 cookie 中的哈希匹配,因此您接受 cookie。

如果攻击者更改“foo=bar&baz=qux”,哈希将不匹配,cookie 将被拒绝。他们无法计算与更改的数据对应的哈希,因为他们不知道用于计算哈希的服务器秘密。

请注意,您应该让称职的密码学家审查您的实施。实施不善的 HMAC 可能容易受到 length-extension attacks 的攻击,这是 Flickr 发现的事实 the hard way

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 2015-06-29
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多