Зачем Laravel для шифрования нужен код аутентификации сообщения (MAC)?
Документация 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 может способствовать безопасности? Или это способствует чему-то еще?
2 ответа
Как сказал Джеймс К Полк
MAC использует ключ, поэтому злоумышленник не может сгенерировать правильный, если у него нет ключа.
MAC необходим для защиты от преднамеренной модификации зашифрованного текста.
В Laravel 3 возникла проблема безопасности, когда вы могли получить доступ как аутентифицированный пользователь. Хотя это, похоже, связано с файлами cookie (их можно каким-то образом подделать), но MAC был добавлен в файлы cookie.
http://joncave.co.uk/2012/10/lying-to-laravel/
TLDR В будущем было бы хорошо видеть, что в классе Crypter компании Laravel встроены MAC-адреса, так что все зашифрованные сообщения проверяются перед расшифровкой. Примеры такого типа поведения можно увидеть в Zend Framework 2 и Ruby on Rails.
https://laravel3.veliovgroup.com/docs/changes
Это потому, что дешифрование может быть выполнено с помощью грубой силы, добавление MAC означает, что вы ничего не сделаете, если он не соответствует тому, что должен. Точная реализация Laravel, я не знаю, сколько безопасности может добавить, но, по крайней мере, усложняет задачу для злоумышленника.