파일 체크섬 무결성 확인의 경우 MD5_File ()은 PHP에서 일반적으로 사용되는 기능 중 하나입니다. 파일 내용을 직접 읽고 MD5 해시 값을 계산하여 파일이 변조되었는지 또는 손상되었는지 여부를 빠르게 감지 할 수 있습니다. 그러나 MD5_File () 에 단순히 의존하여 얻은 MD5 값은 충돌 공격과 같은 보안 위험이 있습니다. 따라서 많은 개발자들은 "소금 추가"로 파일 검증의 강도를 향상 시키려고 노력할 것입니다. 그렇다면 파일 확인을 향상시키기 위해 소금 값으로 md5_file () 함수를 사용하는 것이 가능합니까? 이 기사는 이것에 대해 논의 할 것입니다.
md5_file () 함수는 지정된 파일의 내용에 대한 MD5 해시 값을 직접 계산합니다. 샘플 코드는 다음과 같습니다.
$hash = md5_file('path/to/file.txt');
echo $hash;
파일의 고유 한 "지문"을 나타내는 32 비트 16 진수 문자열을 반환합니다. 파일을 조작하지 않은 경우 계산 결과가 일관성이 있어야합니다.
"소금 추가"는 암호화에서 일반적인 방법입니다. 일반적으로 추가 임의 문자열 ( "Salt"라고 함)을 원래 데이터에 첨부 한 다음 해시 계산을 수행하는 것입니다. 주요 기능은 사전 컴퓨팅 레인보우 테이블 공격을 방지하여 동일한 컨텐츠의 해시 값이 다를 수 있습니다.
파일 확인 시나리오에서 일부 개발자는 파일 컨텐츠의 해시에 소금을 추가하여 보안을 개선하고 간단한 해시 충돌 또는 변조를 피하기를 원합니다.
일반적인 관행은 먼저 md5_file ()을 사용하여 파일의 해시 값을 계산 한 다음이 해시 값을 소금으로 스플릿 한 다음 다시 MD5를 수행하는 것입니다.
$fileHash = md5_file('path/to/file.txt');
$salt = 'random_salt_string';
$enhancedHash = md5($fileHash . $salt);
echo $enhancedHash;
이러한 방식으로 생성 된 $ EnhancedHash는 SALT가있는 파일 해시 값입니다.
간단한 해시 충돌을 피하십시오 : 파일을 교체하면 공격자가 파일의 내용을 알고있는 경우 파일을 교체하면 동일한 MD5 값이 발생할 수 있습니다. 그러나 소금 값이 기밀로 유지되면 공격자가 소금 해시와 일치하는 새 파일을 구성하기가 어려울 것입니다.
사전 컴퓨팅 공격 방지 : 공격자는 사전 컴퓨팅 해시 라이브러리를 통해 파일 복원을 쉽게 되돌릴 수 없습니다.
소금 가치 관리 : 소금은 기밀로 고정되어 있어야합니다. 그렇지 않으면 그 의미를 잃게됩니다. 소금이 손실되면 파일을 확인할 수 없습니다.
파일 컨텐츠를 위조 할 수 없다는 보장은 없습니다 . 공격자가 파일 내용과 소금 값을 모두 알고 있다면 여전히 충돌 파일을 구성 할 수 있습니다.
MD5 자체에는 보안이 부족합니다 . MD5는 특히 안전하지 않은 공격자가 적극적으로 구성하는 충돌 파일의 경우 심각한 충돌 문제가있는 것으로 입증되었습니다. MD5 대신 더 안전한 해싱 알고리즘 (예 : SHA-256)을 사용하는 것이 좋습니다.
성능 오버 헤드 : 성능에 약간의 영향을 미치는 추가 해시를 계산하지만 일반적으로 무시할 수 있습니다.
더 안전한 해시 알고리즘을 사용하십시오 : PHP 7 이상은 md5_file ()를 대체 할 수있는 hash_file ( 'SHA256', $ filename)을 사용하는 것이 좋습니다.
소금과 키 (HMAC)를 결합 : HMAC 알고리즘 ( hash_hmac () )와 함께 파일 해시를 암호화하면 무결성과 변조 방지를보다 안전하게 확인할 수 있습니다.
디지털 서명 메커니즘 : 파일의 진위를 보장하기 위해 공개 키 및 개인 키 디지털 서명과 결합합니다.
예를 들어, SHA-256과 소금을 사용하십시오.
$fileHash = hash_file('sha256', 'path/to/file.txt');
$salt = 'random_salt_string';
$enhancedHash = hash('sha256', $fileHash . $salt);
echo $enhancedHash;
또는 HMAC 사용 :
$salt = 'secret_key';
$hash = hash_hmac('sha256', file_get_contents('path/to/file.txt'), $salt);
echo $hash;
2 차 해싱에 소금 값이있는 md5_file ()을 사용하면 파일 검증의 어려움이 어느 정도 증가 할 수 있지만 이는 가장 안전한 솔루션과는 거리가 멀다. 보다 안전한 해싱 알고리즘과 HMAC 또는 디지털 서명 기술의 조합을 사용하여 파일 무결성 및 보안을 보장하는 것이 좋습니다. MD5가 프로젝트에서 여전히 사용되는 경우 위험 및 응용 시나리오를 신중하게 고려해야합니다.