Dans le paysage numérique actuel, le cryptage des données est un élément important de chaque application Web. Cet article explique pourquoi j'ai développé un package qui exploite la puissance du cryptage XChaCha20-Poly1305 de Libsodium et comment il peut renforcer la sécurité de votre application Laravel tout en minimisant les frais généraux.
Le framework Crypt Facade de Laravel fournit une interface pratique pour le cryptage et le déchiffrement des données sensibles, telles que les jetons d'authentification sans état ou les trames de communication interservices.
La mise en œuvre du chiffrement du framework par défaut, basée sur AES-256-CBC via OpenSSL, constitue une base solide et généralement sécurisée, mais il y a toujours place à l'amélioration, en particulier lorsque les performances et la convivialité sont critiques.
Bien qu'AES-256-CBC via OpenSSL soit toujours considéré comme sécurisé, il devient obsolète. De plus, sa dépendance à OpenSSL peut introduire des vulnérabilités potentielles en fonction de la version et de la configuration spécifiques.
Depuis PHP 7.2, l'extension Sodium est fournie avec PHP Core. Libsodium donne la priorité aux primitives cryptographiques modernes et bien vérifiées comme XChaCha20-Poly1305 et Ed25519. Alors qu'AES peut être rapide avec l'accélération matérielle, XChaCha20-Poly1305, en tant qu'implémentation logicielle, le surpasse sans instructions matérielles spéciales.
// 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
Le cryptage intégré code le texte chiffré, le vecteur d'initialisation et la valeur de la balise sous forme de représentation Base64 de l'objet JSON, ce qui augmente considérablement la longueur du jeton.
Le passage à l'algorithme XChaCha20 élimine le besoin d'encoder JSON, et peut être ajouté au texte chiffré sous forme de chaîne binaire.
// 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
La bibliothèque intégrée utilise la variante Base64 d'origine. Pour cette raison, l'utilisation d'un jeton dans le cadre de l'URL ou comme l'un des paramètres GET nécessite une transformation supplémentaire de Base64 vers Base64URLSafe.
Le codage immédiat du texte chiffré dans Base64URLSafe ne présente aucun inconvénient et permet un transfert sécurisé de jetons dans n'importe quel environnement.
1) Installer le package via composer
composer require blu3blaze/laravel-xchacha20-encrypter
2) Modifier la liste des fournisseurs de services dans bootstrap/providers.php
3) Profitez de la façade Crypt avec l'algorithme 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'] */Conclusion
En adoptant le package blu3code/laravel-xchacha20-encrypter, vous pouvez tirer parti des avantages de l'algorithme de chiffrement moderne et débloquer des améliorations significatives des performances de vos applications Laravel. Cela se traduit par des temps de réponse plus rapides, une charge de serveur réduite et un environnement plus sécurisé pour les données de vos utilisateurs. Essayez-le et voyez la différence par vous-même !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3