1

Laravel文档

Laravel 的所有加密值都使用消息验证码 (MAC) 进行签名,因此它们的基础值一旦加密就不能被修改。

在实践中,这意味着有效载荷伴随着一点哈希值。这个值是如何产生的并不是什么秘密,因为 Laravel 是一个开源产品。源代码是这样说的:

    // Once we get the encrypted value we'll go ahead and base64_encode the input
    // vector and create the MAC for the encrypted value so we can then verify
    // its authenticity. Then, we'll JSON the data into the "payload" array.
    $mac = $this->hash($iv  = base64_encode($iv), $value);

我个人不认为这个 MAC 对 Laravel 有什么好处。为什么会在那里?

我的意思是,如果我们已经拥有与消息一起使用的公钥,而私钥则隐藏在某处并openssl_encrypt作为处理器。MAC 如何为安全做出贡献?或者它是否有助于其他事情?

4

2 回答 2

1

Laravel 3 中存在一个安全问题,您可以作为经过身份验证的用户获得访问权限。尽管这似乎与 cookie 相关(您可以以某种方式伪造它们),但 MAC 被添加到 cookie 中。

http://joncave.co.uk/2012/10/lying-to-laravel/

TLDR 将来,很高兴看到 Laravel 的 Crypter 类内置了 MAC,以便在解密之前验证所有加密的消息。在 Zend Framework 2 和 Ruby on Rails 中可以看到此类行为的示例。

https://laravel3.veliovgroup.com/docs/changes#3.2.8

这是因为,解密可以通过蛮力完成,添加 MAC 意味着如果它与应有的不匹配,您将什么也不做。Laravel 的确切实现,我不知道可以增加多少安全性,但至少让攻击者的事情变得更加困难。

于 2018-08-30T08:14:04.563 回答
1

正如詹姆斯·K·波尔克所说

MAC 使用密钥,因此攻击者无法生成正确的密钥,除非他拥有密钥。

需要 MAC 来防止故意修改密文。

于 2018-09-20T02:00:11.110 回答