В сегодняшней цифровой среде шифрование данных является важной частью каждого веб-приложения. В этой статье рассказывается, почему я разработал пакет, который использует возможности шифрования XChaCha20-Poly1305 от Libsodium и как он может повысить безопасность вашего приложения Laravel, минимизируя при этом накладные расходы.
Фреймворк Crypt Facade от Laravel предоставляет удобный интерфейс для шифрования и дешифрования конфиденциальных данных, таких как токены аутентификации без сохранения состояния или кадры межсервисной связи.
Реализация шифрования платформы по умолчанию, основанная на AES-256-CBC через OpenSSL, в целом представляет собой надежную надежную основу, но всегда есть возможности для улучшения, особенно когда производительность и удобство использования имеют решающее значение.
Хотя AES-256-CBC через OpenSSL по-прежнему считается безопасным, он становится устаревшим. Более того, его зависимость от OpenSSL может привести к потенциальным уязвимостям в зависимости от конкретной версии и конфигурации.
Начиная с PHP 7.2, расширение Sodium входит в состав PHP Core. Libsodium отдает предпочтение современным, хорошо проверенным криптографическим примитивам, таким как XChaCha20-Poly1305 и Ed25519. В то время как AES может быть быстрым с аппаратным ускорением, XChaCha20-Poly1305, как программная реализация, превосходит его без специальных аппаратных инструкций.
// Default AES-256-CBC Encrypter $encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc'); $start = microtime(true); $results = []; for ($i = 0; $i encrypt(['user_id' => $i]); } $elapsed = microtime(true) - $start; // 4.08 seconds
// Custom XChaCha20-Poly1305 Encrypter $encrypter = new Blu3blaze\Encrypter\Encrypter($key); $start = microtime(true); $results = []; for ($i = 0; $i encrypt(['user_id' => $i]); } $elapsed = microtime(true) - $start; // 1.79 seconds
Встроенное шифрование кодирует зашифрованный текст, вектор инициализации и значение тега как представление объекта JSON в формате Base64, что значительно увеличивает длину токена.
Переход на алгоритм XChaCha20 устраняет необходимость кодирования JSON, nonce можно добавлять в зашифрованный текст в виде двоичной строки.
// Default AES-256-CBC Encrypter $encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc'); $token = $encrypter->encrypt([ 'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc' ]); // 312 characters
// Custom XChaCha20-Poly1305 Encrypter $encrypter = new Blu3blaze\Encrypter\Encrypter($key); $token = $encrypter->encrypt([ 'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc' ]); // 139 characters
Встроенная библиотека использует исходный вариант Base64. По этой причине использование токена как части URL-адреса или в качестве одного из параметров GET требует дополнительного преобразования из Base64 в Base64URLSafe.
Непосредственное кодирование зашифрованного текста в Base64URLSafe не имеет недостатков и позволяет безопасно передавать токены в любой среде.
1) Установить пакет через композитор
composer require blu3blaze/laravel-xchacha20-encrypter
2) Изменить список поставщиков услуг в bootstrap/providers.php
3) Наслаждайтесь фасадом Crypt с алгоритмом XChaCha20-Poly1305
use Illuminate\Support\Facades\Crypt; $token = Crypt::encrypt([ 'user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11' ]); /* TAl1Sz4DTspE8ZzTOC6Q.....Ug5t4XcWqoiB6CWRak9Y */ $tokenData = Crypt::decrypt($token); /* ['user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11'] */Заключение
Приняв пакет blu3code/laravel-xchacha20-encrypter, вы сможете воспользоваться преимуществами современного алгоритма шифрования и значительно повысить производительность своих приложений Laravel. Это означает более быстрое время отклика, снижение нагрузки на сервер и более безопасную среду для данных ваших пользователей. Попробуйте и сами увидите разницу!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3