ASP.NET 身份会话 cookie 的安全性如何?

Posted

技术标签:

【中文标题】ASP.NET 身份会话 cookie 的安全性如何?【英文标题】:How secure is ASP.NET Identity session cookie? 【发布时间】:2014-03-22 22:34:10 【问题描述】:

当然 cookie 可以被窃取和会话被劫持,但是会话 cookie 的加密本身(在 ASP.NET 身份中)有多安全?可以用现代硬件和一点时间来操作吗?

我之所以问,是因为我想添加一个标识组的声明,但这只有在 cookie 确实安全的情况下才是安全的。否则,攻击者可以注册一个合法帐户,然后闯入其他组,甚至无需窃取密码。

【问题讨论】:

看看这个question。有一条评论“FormsAuth 令牌的全部内容都经过加密和签名,包括用户名/用户 ID,因此无法篡改。”我认为这可能会回答您的问题 有点,但也有人批评微软的标准密码散列,现在许多人认为它低于标准。所以仍然想知道cookies是否以强大的方式签名和加密。如果攻击者可以在一周内破解它,那还不够好。 【参考方案1】:

已针对 .NET Framework 4 及更高版本更新答案:

machineKey 元素用于:

表单身份验证数据的加密、解密和验证 和视图状态数据

使用 AES 作为默认解密算法,最小密钥长度为 128 位。

它还使用HMACSHA256 作为验证的默认值,即HMAC over SHA-256。 HMAC 可防止length extension attack,这是攻击者将数据附加到具有哈希值的值的一种方式,哈希值仍然有效。

没有已知的针对 AES-128 的实际攻击(与可能遭受 related key attack 的 192 和 256 不同),并且 SHA-256 远未被破坏,尽管有一个 academic attack against its sister SHA-1 质疑它的 @987654326 @。在验证令牌值时,碰撞阻力并不重要,但理论上它是朝着打破preimage resistance 迈出的一步。因此,您可以放心,您可以免受 AES-128 和 HMAC SHA-256 的攻击。

但是,与任何加密或哈希算法一样,这一切都归结为您的密钥的安全性。 AutoGenerate 和 IsolateApps 设置会很好,但是如果您设置自己的设置,请确保它们由加密安全的伪随机数生成器 (CSPRNG) 生成并且长度为 128 位。任何低于这意味着你可能会受到暴力攻击(理论上)的危害。 128 位意味着即使使用世界上的每一台计算机对您的密钥进行分布式暴力攻击,在您的一生中也永远不会完成。当然,攻击者可能会尝试通过其他方式获取您的密钥来绕过这个问题。保持安全。

【讨论】:

我相信 ASP.NET Identity 使用比 ASP.NET 以前的情况更现代的算法和哈希周期数 - 所以这个答案可能不再完全准确。

以上是关于ASP.NET 身份会话 cookie 的安全性如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何同步表单身份验证 cookie 和 Asp.Net 会话的生命周期?

ASP.NET Core MVC:设置身份 cookie 过期

使用 WIF 和 jquery ajax 请求时 ASP.NET MVC 3 中的会话 Cookie 过期处理

Asp.net 核心中的会话和应用程序变量,以防我们使用 JWT 令牌(因此没有基于 cookie 的会话)

.NET 使用身份验证模式的“安全”cookie = 无

从会话 Cookie 实例化 ASP.NET 会话