」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 超越 AES — 使用 XChaCha20 對 Laravel 進行現代加密

超越 AES — 使用 XChaCha20 對 Laravel 進行現代加密

發佈於2024-11-08
瀏覽:259

Beyond AES — Modern Encryption for Laravel with XChaCha20

在當今的數位環境中,資料加密是每個 Web 應用程式的重要組成部分。本文探討了我為什麼開發一個利用 Libsodium 的 XChaCha20-Poly1305 加密功能的包,以及它如何增強 Laravel 應用程式的安全性,同時最大限度地減少開銷。

動機和要求

Laravel 的框架 Crypt Facade 為敏感資料的加密和解密提供了方便的接口,例如無狀態身份驗證令牌或服務間通訊框架。

預設框架的加密實作是基於透過 OpenSSL 的 AES-256-CBC,通常是安全的堅實基礎,但總有改進的空間,特別是在效能和可用性至關重要的情況下。

現代演算法和密碼

雖然透過 OpenSSL 的 AES-256-CBC 仍然被認為是安全的,但已經過時了。此外,它對 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

URL 中的 Base64 問題

嵌入式庫使用原始的 Base64 變體。因此,使用令牌作為 URL 的一部分或作為 GET 參數之一需要從 Base64 到 Base64URLSafe 的額外轉換。
立即在 Base64URLSafe 中對密文進行編碼沒有任何缺點,並且允許在任何環境中進行安全的令牌傳輸。

入門

1) 透過composer安裝套件

composer require blu3blaze/laravel-xchacha20-encrypter

2) 修改bootstrap/providers.php中的服務提供者清單





3) 使用 XChaCha20-Poly1305 演算法享受 Crypt 外觀

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 應用程式中實現顯著的效能改進。這意味著更快的回應時間、更少的伺服器負載以及更安全的用戶資料環境。試試一下,親自看看有何不同!

版本聲明 本文轉載於:https://dev.to/blu3blaze/beyond-aes-modern-encryption-for-laravel-with-xchacha20-2d4g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3