"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > AES 너머 — XChaCha20을 사용한 Laravel의 최신 암호화

AES 너머 — XChaCha20을 사용한 Laravel의 최신 암호화

2024-11-08에 게시됨
검색:718

Beyond AES — Modern Encryption for Laravel with XChaCha20

오늘날의 디지털 환경에서 데이터 암호화는 모든 웹 애플리케이션의 중요한 부분입니다. 이 기사에서는 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는 소프트웨어 구현으로서 특별한 하드웨어 지침 없이도 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을 인코딩할 필요가 없으며 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 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에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3