Hash 메시지 다이제스트 프레임워크
Hash 메시지 다이제스트 프레임워크
Hash 확장은 다양한 해싱 알고리즘을 이용해 임의의 길이를 가진 메시지를 직접 또는 점진적으로 처리할 수 있는 함수들을 제공해요. HMAC 값 생성과 HKDF·PBKDF2 같은 키 파생까지 포함해요.
본문
이 확장은 임의의 길이를 가진 메시지를 다양한 해싱 알고리즘으로 직접 또는 점진적으로 처리할 수 있는 함수를 제공해요. 여기에는 HMAC 값 생성과 HKDF, PBKDF2 같은 키 파생도 포함돼요.
해싱 알고리즘은 크게 세 범주로 나뉘며, 전체 목록은 hash_algos() 문서에서 확인할 수 있어요.
- 체크섬 알고리즘(예:
"crc32b","adler32") — 전송 오류를 감지하는 상황에서 유용한 체크섬 계산용이에요. 보통 매우 빠르지만, 값이 쉽게 "추측 가능"하거나 충돌을 만들도록 조작될 수 있어서 암호화 용도로는 전혀 부적합해요. - 비암호화 알고리즘(예: xxHash 계열) — 해시 테이블용 해시 값을 계산하는 데 자주 쓰여요. 임의의 문자열 입력에 대해 고른 분포를 내도록 설계됐고, 일반적으로 빠르지만 역시 암호화 용도로는 부적합해요.
- 암호화 알고리즘(예: SHA-2 계열) — 입력을 대표하면서도 추측할 수 없고 충돌에 취약하지 않은 해시 값을 만들도록 설계됐어요. 성능은 부차적인 고려인 경우가 많지만, 현대 하드웨어는 이런 알고리즘을 특별히 처리하는 경우가 많고 PHP는 가능할 때 이를 활용하려 해요.
⚠️ 주의:
"md4","md5","sha1"같은 초기 암호화 알고리즘 중 일부는 충돌 공격에 취약하다는 것이 입증됐어요. 암호화 용도로는 더 이상 쓰지 않는 것을 일반적으로 권장해요.
비밀번호 처리에서 해시 함수를 사용하는 모범 사례는 안전한 패스워드 해싱 FAQ에서 확인할 수 있어요.
HashContext 클래스
점진적 해싱을 위한 컨텍스트 클래스예요. __construct는 직접 인스턴스화를 막기 위해 private이며, __debugInfo, __serialize, __unserialize를 제공해요.
주요 함수
hash— 해시 값(메시지 다이제스트) 생성hash_algos— 등록된 해싱 알고리즘 목록 반환hash_copy— 해싱 컨텍스트 복사hash_equals— 타이밍 공격에 안전한 문자열 비교hash_file— 파일 내용으로 해시 값 생성hash_init,hash_update,hash_update_file,hash_update_stream,hash_final— 점진적 해싱 흐름hash_hmac,hash_hmac_algos,hash_hmac_file— HMAC 방식의 키 해시 값 생성hash_hkdf— 제공된 키 입력의 HKDF 키 파생hash_pbkdf2— 제공된 비밀번호의 PBKDF2 키 파생
더 알아보기
- PHP: Hash 함수 - Manual — 전체 레퍼런스
- PHP: 안전한 패스워드 해싱 FAQ — 비밀번호 처리 모범 사례