No cenário digital atual, a criptografia de dados é uma parte importante de cada aplicativo da web. Este artigo explora por que desenvolvi um pacote que aproveita o poder da criptografia XChaCha20-Poly1305 do Libsodium e como ele pode sobrecarregar a segurança do seu aplicativo Laravel enquanto minimiza a sobrecarga.
Motivação e requisitosA implementação de criptografia da estrutura padrão, baseada em AES-256-CBC via OpenSSL, é uma base sólida geralmente segura, mas sempre há espaço para melhorias, especialmente quando o desempenho e a usabilidade são críticos.
Algoritmo e Cifra Modernos
A partir do PHP 7.2, a extensão Sodium vem junto com o PHP Core. Libsodium prioriza primitivos criptográficos modernos e bem avaliados, como XChaCha20-Poly1305 e Ed25519. Embora o AES possa ser rápido com aceleração de hardware, o XChaCha20-Poly1305, como implementação de software, supera-o sem instruções especiais de hardware.
// 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// Criptografador XChaCha20-Poly1305 personalizado $encrypter = new Blu3blaze\Encrypter\Encrypter($key); $start = microtempo(true); $resultados = []; para ($i = 0; $i encrypt(['user_id' => $i]); } $decorrido = microtempo(true) - $start; // 1,79 segundos
// 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 secondsOtimização significativa do comprimento do token
Mudar para o algoritmo XChaCha20 elimina a necessidade de codificar JSON, nonce pode ser adicionado ao texto cifrado como uma string binária.
// 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// Criptografador XChaCha20-Poly1305 personalizado $encrypter = new Blu3blaze\Encrypter\Encrypter($key); $token = $encrypter->encrypt([ 'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc' ]); // 139 caracteres
// 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 secondsBase64 em problema de URL
A codificação imediata do texto cifrado em Base64URLSafe não tem desvantagens e permite a transferência segura de tokens em qualquer ambiente.
// 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 seconds2) Modifique a lista de provedores de serviços em bootstrap/providers.php
// 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 secondsConclusão
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3