PHP에서 암호화 기능은 종종 암호 암호화에 사용됩니다. "소금"(소금)을 통해 암호화 강도를 증가시켜 동일한 암호 암호화 결과가 다르므로 무지개 테이블 공격을 방지합니다. 그러나 Crypt 기능을 사용할 때 소금이 재사용되면 비밀번호 보안을 심각하게 약화시키고 금이 갈 위험이 높아집니다. 이 기사는 소금 재사용으로 인한 보안 위험을 심층적으로 탐색하고 PHP에서 소금을 합리적으로 생성하고 사용하여 보안 수준의 암호 보호 수준을 개선하는 방법을 공유합니다.
소금은 암호화 될 때 암호에 첨부 된 임의의 데이터입니다. 두 사용자가 동일한 비밀번호를 가지고 있더라도 암호화 결과가 다릅니다. 소금의 주요 기능은 다음과 같습니다.
동일한 암호가 동일한 해시를 생성하는 것을 방지하십시오.
무지개 테이블 공격을 피하십시오.
비밀번호 스토리지의 보안을 향상시킵니다.
특히 다른 암호 사이에서 SALT가 재사용되면 공격자는이를 사용하여 암호를 배치로 분해 할 수있어 보안이 크게 줄어 듭니다.
동일한 암호는 동일한 해시를 생성합니다
SALT가 동일하면 동일한 암호의 암호화 결과가 동일하며 공격자는 동일한 암호로 계정을 쉽게 식별 할 수 있습니다.
속도 업 비밀번호 크래킹 <br> 동일한 소금 비밀번호를 사용하여 공격자는 여러 암호 해시를 동시에 깨뜨려 갈 때 시간을 절약 할 수 있습니다.
공격 임계 값을 낮추십시오 <br> 소금을 재사용하면 암호 데이터베이스가 유출 된 후 공격자가 소금에 대한 크래킹 테이블을 쉽게 만들 수있어 암호 균열의 성공률이 높아집니다.
PHP에서는 random_bytes 또는 openssl_random_pseudo_bytes를 사용하여 고강도 랜덤 숫자를 소금으로 생성 할 수 있습니다.
function generateSalt($length = 22) {
$bytes = random_bytes($length);
// base64적합한 것으로 교체하십시오crypt캐릭터 세트
return substr(str_replace(['+', '/', '='], ['.', '.', ''], base64_encode($bytes)), 0, $length);
}
PHP 5.5 이상에 Password_hash 함수를 사용하는 것이 좋습니다. 이는 고유 한 소금을 자동으로 생성하고 개발자 운영을 단순화하며보다 안전합니다.
$password = 'your_password';
$hash = password_hash($password, PASSWORD_BCRYPT);
일부 개발자는 예를 들어 소금을 수동으로 지정하는 것을 좋아합니다.
$hash = crypt($password, '$2y$10$fixed_salt_value_here');
이로 인해 모든 암호가 동일한 소금을 사용하게됩니다. 이는 매우 안전하지 않습니다. 이 관행은 피해야합니다.
동적으로 생성 된 소금을 사용하고 형식은 알고리즘 요구 사항을 충족합니다. 예를 들어, Bcrypt 알고리즘의 길이는 22 길이이며 특정 문자 만 포함해야합니다.
$salt = '$2y$10$' . generateSalt(22);
$hash = crypt($password, $salt);
소금을 수동으로 관리 해야하는 경우 암호 해시와 함께 소금을 저장하여 확인할 때 올바른 소금을 사용하는지 확인하십시오.
function generateSalt($length = 22) {
$bytes = random_bytes($length);
return substr(str_replace(['+', '/', '='], ['.', '.', ''], base64_encode($bytes)), 0, $length);
}
$password = 'user_password';
// Bcrypt체재Salt,10~을 위한cost값
$salt = '$2y$10$' . generateSalt(22);
$hash = crypt($password, $salt);
echo "Hashed password: " . $hash;
소금 재사용 방지는 암호 보안을 보장하는 데 중요한 부분입니다. PHP의 내장 암호 _hash 기능을 사용하여 편리하고 안전한 암호 암호화를 완료하는 것이 좋습니다. Crypt 기능을 사용하는 경우 소금을 반복적으로 사용하여 암호 암호화 무효화를 피하기 위해 독특하고 임의의 소금을 생성하십시오. 소금을 올바르게 처리하면 시스템 보안을 크게 향상시키고 암호 유출로 인한 위험을 줄일 수 있습니다.