PHP에서 Hash_equals 함수는 두 문자열을 안전하게 비교하는 데 널리 사용됩니다. 특히 해시 값이 일관성이 있는지 확인하여 기존 문자열 비교 (타이밍 공격)로 인한 시간 누설 취약성을 피합니다. 시간 공격은 비교 프로세스 중에 다른 문자 일치로 인한 시차를 사용하여 민감한 정보를 추측합니다. Hash_equals는 고정 시간 비교를 통해 이러한 공격을 효과적으로 방지합니다.
그러나 hash_equals를 올바르게 사용하면 보안이 실제로 보장 될 수 있습니다. 이 기사는 실제 응용 프로그램에서 HASH_Equals를 사용하고 잠재적 인 시간 공격 취약점을 피하는 방법을 소개합니다.
== 또는 == 와 같은 일반 문자열 비교는 첫 번째 다른 문자가 발생할 때 즉시 결과를 반환합니다. 이는 공격자가 응답 시간을 측정하여 문자열의 올바른 내용을 점차적으로 추측 할 수있게합니다.
Hash_equals는 문자열 내용에 관계없이 비교 프로세스가 거의 동시에 시간을 보장하고 시간 차이로 인한 정보 누출을 제거합니다.
<?php
$known_hash = hash('sha256', 'secret_password');
$user_hash = $_POST['password_hash'];
if (hash_equals($known_hash, $user_hash)) {
echo '확인이 성공적입니다';
} else {
echo '확인이 실패했습니다';
}
?>
이 예에서 Hash_equals는 == 와 직접 비교로 인한 시간 누출을 피하기 위해 두 개의 해시 값을 안전하게 비교합니다.
참고 : Hash_equals는 두 줄의 길이가 같은 길이를 가지겠다고 요구합니다. 그렇지 않으면 False가 직접 반환됩니다.
두 문자열의 길이가 다른 경우 Hash_equals는 즉시 False를 반환하여 길이 정보를 노출시킬 수 있습니다. 길이 정보는 일반적으로 심각한 보안 문제를 일으키지 않지만 극한 환경에서는 길이 누출도 악용 될 수 있습니다.
해결책:
고정 길이 해시 값을 사용하는 것과 같은 통합 길이 출력.
일반 텍스트 비밀번호를 직접 비교하지 않으면 항상 암호가 있고 해싱 후 비교해야합니다.
SHA256 및 SHA512 와 같은 해시 값을 생성하려면 강력한 해시 알고리즘을 선택하고 구식 또는 안전하지 않은 알고리즘을 사용하지 마십시오.
해시 함수를 통해 항상 민감한 정보를 먼저 처리 한 다음 해시 _equals 와 비교하십시오. 일반 텍스트 암호를 직접 비교하면 어쨌든 시간 공격을 방지 할 수 없습니다.
<?php
// 사전 저장된 비밀번호 해시,보안 알고리즘 사용
$stored_hash = hash('sha256', 'user_password_secret');
// 사용자로부터 입력
$user_input = $_POST['password'] ?? '';
// 먼저 사용자의 해시 입력을 계산합니다
$user_hash = hash('sha256', $user_input);
// 사용 hash_equals 시간 안전 비교를하십시오
if (hash_equals($stored_hash, $user_hash)) {
echo '성공적으로 로그인하십시오';
} else {
echo '로그인이 실패했습니다';
}
?>
이 예제는 시간 공격을 피하기 위해 Hash_equals의 보안 기능을 최대한 활용합니다. 공격자가 비밀번호를 여러 번 추측하려고하더라도 응답 시간에서 올바른 비밀번호를 추론 할 수 없습니다.
암호 _hash () 및 password_verify () 와 같은 특수 비밀번호 해시 함수를 사용하여 비밀번호 확인 프로세스에 내부적으로 더 안전하고 복잡한 검증 로직을 구현하십시오.
네트워크 전송에서 HTTPS를 사용하여 중개자가 도청하는 것을 방지하십시오.
내장 기능의 보안 및 성능을 보장하기 위해 PHP 버전을 정기적으로 업데이트하고 업그레이드하십시오.
Hash_equals를 올바르게 사용하고 안전한 해시 정책을 결합함으로써 잠재적 인 시간 공격 취약점을 효과적으로 방지하고 응용 프로그램의 보안을 보장 할 수 있습니다.
안전은 작지 않습니다. 세부 사항은 성공 또는 실패를 결정합니다. 이 기사가 PHP의 시간 안전을 더 잘 이해하고 비교할 수 있기를 바랍니다.