"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Más allá de AES: cifrado moderno para Laravel con XChaCha20

Más allá de AES: cifrado moderno para Laravel con XChaCha20

Publicado el 2024-11-08
Navegar:837

Beyond AES — Modern Encryption for Laravel with XChaCha20

En el panorama digital actual, el cifrado de datos es una parte importante de cada aplicación web. Este artículo explora por qué desarrollé un paquete que aprovecha el poder del cifrado XChaCha20-Poly1305 de Libsodium y cómo puede potenciar la seguridad de su aplicación Laravel mientras minimiza los gastos generales.

Motivación y requisitos.

El marco Crypt Facade de Laravel proporciona una interfaz conveniente para el cifrado y descifrado de datos confidenciales, como tokens de autenticación sin estado o marcos de comunicación entre servicios.

La implementación de cifrado del marco predeterminado, basada en AES-256-CBC a través de OpenSSL, es una base sólida generalmente segura, pero siempre hay margen de mejora, especialmente cuando el rendimiento y la usabilidad son críticos.

Algoritmo y cifrado modernos

Si bien AES-256-CBC a través de OpenSSL todavía se considera seguro, se está volviendo obsoleto. Además, su dependencia de OpenSSL puede introducir vulnerabilidades potenciales dependiendo de la versión y configuración específicas.

A partir de PHP 7.2, la extensión Sodium se incluye con PHP Core. Libsodium prioriza primitivas criptográficas modernas y bien examinadas como XChaCha20-Poly1305 y Ed25519. Si bien AES puede ser rápido con la aceleración de hardware, XChaCha20-Poly1305, como implementación de software, lo supera sin instrucciones especiales 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
// 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

Optimización significativa de la longitud del token

El cifrado integrado codifica el texto cifrado, el vector de inicialización y el valor de la etiqueta como representación Base64 del objeto JSON, lo que aumenta significativamente la longitud del token.
Cambiar al algoritmo XChaCha20 elimina la necesidad de codificar JSON; nonce se puede agregar al texto cifrado como una cadena binaria.

// 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 en problema de URL

La biblioteca integrada utiliza la variante Base64 original. Debido a esto, usar un token como parte de la URL o como uno de los parámetros GET requiere una transformación adicional de Base64 a Base64URLSafe.
Codificar texto cifrado inmediatamente en Base64URLSafe no tiene desventajas y permite la transferencia segura de tokens en cualquier entorno.

Empezando

1) Instalar el paquete a través del compositor

composer require blu3blaze/laravel-xchacha20-encrypter

2) Modificar la lista de proveedores de servicios en bootstrap/providers.php





3) Disfruta de la fachada de la Cripta con el algoritmo 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'] */

Conclusión

Al adoptar el paquete blu3code/laravel-xchacha20-encrypter, puede aprovechar los beneficios del algoritmo de cifrado moderno y desbloquear importantes mejoras de rendimiento en sus aplicaciones Laravel. Esto se traduce en tiempos de respuesta más rápidos, carga reducida del servidor y un entorno más seguro para los datos de sus usuarios. ¡Pruébalo y comprueba la diferencia por ti mismo!

Declaración de liberación Este artículo se reproduce en: https://dev.to/blu3blaze/beyond-aes-modern-encryption-for-laravel-with-xchacha20-2d4g?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3