为什么Laravel的加密需要消息验证码(MAC)?

时间:2018-08-30 07:46:05

标签: laravel security encryption message-authentication-code

Laravel documentation

  

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如何为安全做出贡献?还是有助于其他事情?

2 个答案:

答案 0 :(得分: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的确切实现方式,我不知道可以增加多少安全性,但至少会使攻击者更难。

答案 1 :(得分:0)

如詹姆士·K·波尔克所说

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

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