PHP 개발에서 MD5_FILE () 함수는 종종 파일 컨텐츠의 MD5 해시 값을 생성하는 데 사용됩니다. 이 접근법은 파일 무결성 확인 및 캐시 식별자 생성과 같은 시나리오에서 매우 일반적입니다. 그러나 정보 보안 기술의 개발로 인해 MD5 해시 알고리즘의 약점이 점차 노출되었습니다. 우리는 지금 하나의 질문에 대해 생각해야합니다.
MD5 (Message-Figest 알고리즘 5)는 원래 1991 년 Ronald Rivest가 128 비트 해시 값을 생성하기 위해 제안했습니다. 디자인이 시작될 때 디지털 서명, 체크섬 및 기타 목적에 사용되었습니다. 그러나 수년간의 연구 및 실무 후 MD5는 더 이상 안전한 암호화 해싱 알고리즘으로 간주되지 않습니다.
2004 년부터 연구원들은 충돌 공격을 구성 할 수있었습니다. 즉, 두 가지 다른 입력이 동일한 MD5 해시를 생성 할 수 있습니다. 이 공격은 더 이상 MD5 해시에 의존하여 파일이나 데이터의 독창성을 확인할 수 없음을 의미합니다.
PHP의 md5_file () 함수는 파일 경로를 수신하고 파일 내용의 MD5 해시를 반환합니다.
<?php
$hash = md5_file('https://m66.net/files/sample.pdf');
echo $hash;
?>
위의 코드는 간단하고 사용하기 쉽지만 두 가지 주요 문제에 직면 해 있습니다.
불충분 한 보안 : 앞에서 언급했듯이 MD5는 충돌 공격에 취약하며 공격자는 콘텐츠가 다른 파일을 위조 할 수 있지만 검증 메커니즘을 우회하는 해시 값이 동일합니다.
방지 방지 공격 기능 부족 : 공격자는 다운로드, 검증 및 기타 작업을 속이는 MD5 값이 동일한 "대체 파일"을 찾을 수도 있습니다.
이러한 위험은 MD5_File ()을 사용하여 원격 리소스, 사용자 업로드 파일 또는 권한 부여 확인을 확인할 때 심각한 보안 취약점으로 이어질 수 있습니다.
MD5의 보안 문제를 해결하기 위해 PHP는보다 강력한 해싱 알고리즘 지원을 제공합니다. 가장 일반적인 대안은 다음과 같습니다.
<?php
$hash = hash_file('sha256', 'https://m66.net/files/sample.pdf');
echo $hash;
?>
HASH_FILE () 함수는 SHA-1, SHA-256, SHA-512 등과 같은 다양한 해시 알고리즘을 지원합니다. SHA-256은 현재 널리 허용되는 보안 해싱 표준이며 충돌 저항 및 사전 이량 공격 저항은 MD5보다 훨씬 우수합니다.
파일에 서명하고 확인 해야하는 경우 키와 함께 해시를 사용할 수 있습니다.
<?php
$key = 'secret_key';
$hash = hash_hmac_file('sha256', 'https://m66.net/files/sample.pdf', $key);
echo $hash;
?>
이는 파일 컨텐츠가 변조되었는지 여부를 확인할뿐만 아니라 요청이 신뢰할 수있는 소스에서 오는지 여부를 확인합니다.
MD5는 캐시에 대한 간단한 식별자를 생성하는 것과 같은 비 안전한 시나리오에서도 여전히 사용할 수 있지만주의해서 사용할 수 있습니다. 다음 목적으로 사용하지 마십시오.
파일 무결성 확인
디지털 서명 또는 검증
사용자 비밀번호 저장
보안 토큰 생성
일부 시나리오에서는 MD5_File ()이 편리하고 빠르게 보이지만 보안 문제는 무시할 수 없습니다. 최신 PHP 응용 프로그램을 설계하고 구현할 때 특히 민감한 데이터 또는 중요한 비즈니스 로직을 다룰 때 Hash_file () 과 같은 안전한 대안으로 전환해야합니다.
보안은 "괜찮아 보인다"고 의존 할 수는 없지만 탄탄한 알고리즘 기초를 기반으로해야합니다. 이제 md5_file ()을 포기하고 더 안전한 해싱 연습으로 이동해야합니다.