代码之家  ›  专栏  ›  技术社区  ›  Yevgeniy Afanasyev

为什么Laravel需要一个消息验证码(MAC)来进行加密?

  •  1
  • Yevgeniy Afanasyev  · 技术社区  · 7 年前

    拉拉维尔 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);
    

    我的意思是,如果我们已经有了与消息一起使用的公钥和隐藏在某处的私钥 openssl_encrypt 作为处理器。MAC如何提高安全性?或者它有助于其他什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Erubiel    7 年前

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

    TLDR在将来,最好看到Laravels Crypter类内置mac,以便在解密之前验证所有加密的消息。这种行为的例子可以在zendframework2和rubyonrails中看到。

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

    这是因为,解密可以用蛮力来完成,添加一个MAC意味着如果它不符合它应该做的,你什么也不会做。对于Laravel的具体实现,我不知道能增加多少安全性,但至少会让攻击者更难。

        2
  •  0
  •   Yevgeniy Afanasyev    7 年前

    正如詹姆斯K波尔克所说

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

    推荐文章