我使用以下代码生成加密令牌:

var ticket = new System.Web.Security.FormsAuthenticationTicket(
    2, 
    "", 
    DateTime.Now, 
    DateTime.Now.AddMinutes(10), 
    false, 
    "user id here");
var cipherText = System.Web.Security.FormsAuthentication.Encrypt(ticket);

此代码使用 app/web.config 中指定的密钥和算法:

<system.web>
    <machineKey validationKey="SOME KEY" 
                decryptionKey="SOME OTHER KEY" 
                validation="SHA1" />
</system.web>

现在假设我将由此生成的密文提供给合作伙伴。他是否有能力进行暴力破解:

  1. 存储在密码中的值(不代表敏感信息的用户 ID,它不会让我太烦恼)
  2. 用于创建密码的validationKey和decryptionKey的值(这将是灾难性的,因为他将能够生成令牌并冒充任何用户)

我想这两个问题的答案都是肯定的,但是他的机会有多现实?您认为给他密码会对我的系统构成安全威胁吗?预先感谢您的回复。

有帮助吗?

解决方案

您在这里描述的是一种已知的明文攻击。攻击者学习明文和相应的密文,他的目标是找到密钥。现代密码旨在抵御此类攻击。

事实上,任何现代密码都被设计为能够抵御更强大的攻击,例如选择明文攻击和选择密文攻击。即使允许攻击者选择明文和相应的密文,或者选择任意数量的密文并学习其解密,那么他/她仍然无法学习密钥。

这使得设计新密码变得非常困难。但幸运的是,我们已经有了 AES 等好的密码。

我还应该补充一点,上述所有攻击都假设攻击者知道所使用的密码的所有细节。他唯一不知道的是使用的钥匙。这就是著名的克霍夫原理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top