"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Além do AES – criptografia moderna para Laravel com XChaCha20

Além do AES – criptografia moderna para Laravel com XChaCha20

Publicado em 2024-11-08
Navegar:298

Beyond AES — Modern Encryption for Laravel with XChaCha20

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 requisitos

A estrutura Crypt Facade do Laravel fornece uma interface conveniente para a criptografia e descriptografia de dados confidenciais, como tokens de autenticação sem estado ou quadros de comunicação entre serviços.

A 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

Embora o AES-256-CBC via OpenSSL ainda seja considerado seguro, está ficando desatualizado. Além disso, sua dependência do OpenSSL pode introduzir vulnerabilidades potenciais dependendo da versão e configuração específicas.

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.


// Criptografador AES-256-CBC padrão $encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc'); $start = microtempo(true); $resultados = []; para ($i = 0; $i encrypt(['user_id' => $i]); } $decorrido = microtempo(true) - $start; // 4,08 segundos
// 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 seconds
Otimização significativa do comprimento do token

A criptografia integrada codifica o texto cifrado, o vetor de inicialização e o valor da tag como representação Base64 do objeto JSON, o que aumenta significativamente o 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.

// Criptografador AES-256-CBC padrão $encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc'); $token = $encrypter->encrypt([ 'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc' ]); //312 caracteres
// 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 seconds
Base64 em problema de URL

A biblioteca incorporada usa a variante Base64 original. Por causa disso, usar um token como parte da URL ou como um dos parâmetros GET requer transformação adicional de Base64 para Base64URLSafe.

A codificação imediata do texto cifrado em Base64URLSafe não tem desvantagens e permite a transferência segura de tokens em qualquer ambiente.

Começando

1) Instale o pacote via compositor


compositor requer blu3blaze/laravel-xchacha20-encrypter
// 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
2) 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 seconds 3) Aproveite a fachada Crypt com o algoritmo XChaCha20-Poly1305


use Illuminate\Support\Facades\Crypt; $token = Cripta::encriptar([ 'user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11' ]); /* TAl1Sz4DTspE8ZzTOC6Q.....Ug5t4XcWqoiB6CWRak9Y */ $tokenData = Crypt::decrypt($token); /* ['user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11'] */
// 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
Conclusão

Ao adotar o pacote blu3code/laravel-xchacha20-encrypter, você pode aproveitar os benefícios do algoritmo de criptografia moderno e desbloquear melhorias significativas de desempenho em seus aplicativos Laravel. Isso se traduz em tempos de resposta mais rápidos, carga reduzida do servidor e um ambiente mais seguro para os dados dos seus usuários. Experimente e veja a diferença por si mesmo!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/blu3blaze/beyond-aes-modern-encryption-for-laravel-with-xchacha20-2d4g?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

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