【问题标题】:Is Forms Authentication Ticket safe enough?Forms Authentication Ticket 是否足够安全?
【发布时间】:2012-03-26 08:38:33
【问题描述】:

当用户基于默认的Forms Authentication方法登录时,服务器会创建一个包含加密数据的cookie(使用机器密钥作为加密密钥)。

这意味着如果有人找到/猜测/访问服务器的机器密钥,他将登录到 Web 应用程序。

我开发了一些在 4 台服务器上的应用程序。因此,我在 machine.config 中为所有服务器硬编码了相同的机器密钥,我无法使用自动生成模式。

  1. 是否可以暴力破解机器密钥?
  2. 还有其他方法吗? (我不想使用 Windows 和 Passport)
  3. Forms Authentication Ticket 是否足够安全? (即电子银行应用程序可接受)

【问题讨论】:

  • 记得标记最有帮助的答案:-)

标签: asp.net forms-authentication machinekey formsauthenticationticket machine.config


【解决方案1】:

ASP.NET 表单身份验证票证使用 Rijndael 算法进行加密。 Rijndael 是作为 DES(数据加密标准)的替代品而创建的,它提供了无限的数据加密方式,并且也容易受到暴力攻击。 RSA Security 在 90 年代后期组织了许多 DES 挑战赛,以挑战团队破解 DES 以突出其固有漏洞:http://en.wikipedia.org/wiki/DES_Challenges

相比之下,Rijndael(也称为高级加密标准 AES)使用更长的密钥 - 256 位和双重加密算法。要破解 256 位 Rijndael 密钥(例如 ASP.NET 机器密钥)需要 2^200 次操作(大约 10^60 - 10 个 60 个零),几乎不可能暴力破解。再加上 ASP.NET 票证定期更改的事实,并且在解密时基本上看起来像一个随机的字母和数字字符串(因此无法确定您暴力解密的内容是否正确),您可以放心没有人很快就会破解您的表单身份验证 cookie。

更多关于 Rijndael 及其可能的攻击的信息在这里:

http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Known_attacks

【讨论】:

    【解决方案2】:

    加密的第一条规则是消息仅与密钥一样安全。如果有人可以访问您的密钥,则没有足够安全的方法。

    1. 我怀疑是否有可能在任何合理的时间内暴力破解机器密钥。
    2. 我相信Fomrs Authentication 是ASP.NET 中开箱即用的唯一真正的Web 解决方案。您可以实现自己的,但我怀疑它会更安全。
    3. 对什么来说足够安全?如果您关闭事件验证(在 Web 表单中)或不使用安全令牌 (MVC),它可以被中间人在非加密连接中劫持,并且容易受到 XSRF 攻击。否则,对于在所有技术中一直被发现和修复的漏洞利用是安全的。

    【讨论】:

    • 为什么暴力破解机器密钥需要关闭服务器?蛮力基本上是检查所有可能的组合以尝试猜测机器密钥。
    • 我相信这需要将 cookie 发送到服务器?或不?无论如何,机器密钥真的很长,不能轻易被暴力破解。
    • Rijndael 只是一种算法,它可以在任何机器上运行。如果您可以通过检查机器密钥的每个可能组合来猜测机器密钥,那么您可以在任何计算机上破解票证。服务器已经知道机器密钥,因此在返回票证时无需猜测它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2012-07-02
    • 2012-02-05
    • 2015-01-18
    相关资源
    最近更新 更多