「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > AES を超えて — XChaCha20 を使用した Laravel の最新の暗号化

AES を超えて — XChaCha20 を使用した Laravel の最新の暗号化

2024 年 11 月 8 日に公開
ブラウズ:118

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 コアにバンドルされています。 Libsodium は、XChaCha20-Poly1305 や Ed25519 のような、十分に精査された最新の暗号化プリミティブを優先します。 AES はハードウェア アクセラレーションを使用すると高速になりますが、XChaCha20-Poly1305 はソフトウェア実装として、特別なハードウェア命令なしで AES よりも優れたパフォーマンスを発揮します。

// 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 をエンコードする必要がなくなり、ノンスをバイナリ文字列として暗号文に追加できます。

// 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 パラメーターの 1 つとして使用するには、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