해시 함수란 무엇인가요?
이 해시 함수는 모든 콘텐츠 — 문장 하나, 소프트웨어, 수기가바이트짜리 백업 — 를 고정 길이의 문자열로 바꿉니다. 이 문자열을 해시값 또는 다이제스트라고 부릅니다. 이를 규정하는 세 가지 성질이 있습니다: 입력과 관계없이 출력 크기는 항상 같고, 같은 내용은 항상 같은 해시값을 만들며, 실무에서 해시값을 입력으로 되돌리는 것은 불가능해야 합니다. CRC32 같은 체크섬과 암호 해시를 가르는 것이 바로 세 번째 항목입니다.
실질적으로 두 가지 용도가 대부분을 차지합니다. 무결성 확인 : 배포자가 파일의 해시값을 공개하고, 여러분이 다시 계산해 비교합니다. 일치하면 다운로드가 변조되지 않았다는 증거가 됩니다. 콘텐츠 비교 : 문서 대신 해시값을 보관합니다 — 같으면 내용도 같다는 뜻이며, 내용이 무엇인지는 아무것도 드러내지 않습니다.
오늘날 어떤 알고리즘을 선택해야 하나요?
SHA-256 이 기본적인 답입니다: NSA가 표준화했고 전 세계가 채택했으며 모든 언어에 구현되어 있고, 알려진 충돌도 없습니다. SHA-512 는 64비트 CPU에서 대용량에 적합하며, 이런 아키텍처에서는 형제 알고리즘보다 자주 더 빠릅니다. SHA-384 는 긴 변형 외에 특별한 이점을 주지 않습니다. 키를 쓰는 메시지 서명이라면 HMAC-SHA-256 이 기준입니다: 비밀 키와 해시를 결합하므로 키를 가진 사람만 같은 값을 만들어낼 수 있습니다.
한편 MD5 및 SHA-1 는 민감하지 않은 검증 — 인덱스, 캐시, 중복 탐지 — 에서 속도가 내구성보다 중요하기에 여전히 유용합니다. 반면 CRC32는 암호 해시가 아닙니다: 우발적 손상은 탐지하지만, 의도적 변조는 몇 초 만에 만들어집니다.
왜 MD5와 SHA-1은 깨진 것으로 여겨지나요?
연구자들이 각 알고리즘에 대해 같은 해시값을 공유하는 서로 다른 두 문서를 만들어냈기 때문입니다. MD5는 그 실증이 2004년까지 거슬러 올라가고, SHA-1은 2017년에 SHAttered라는 이름의 실제 충돌이 만들어졌습니다. 충돌 하나로 서명은 무너집니다: 공격자가 문서를 고르고 배포자가 단순히 해시하기만 하면, 다른 내용에 서명된 문서를 내밀 수 있습니다. 그래서 TLS 인증서, 소프트웨어 업데이트, 패키지 서명은 이들 알고리즘을 버렸습니다.
해시가 하지 않는 것
해시는 암호화가 아닙니다: 해시값은 설계상 비가역이지만, 내용을 읽을 수 없게 만들어 보호하지는 않습니다. 해시는 아무것도 암호화하지 않고, TLS나 암호 키를 대체하지 않으며, 비밀번호 하나를 단독으로 지키지도 않습니다 — 그것은 의도적으로 느리게 설계된 bcrypt, scrypt, Argon2의 몫입니다. 게다가 두 번 해시해도 강도는 올라가지 않습니다: 깨지지 않은 함수 하나로 충분한 자리에 알고리즘을 이어 붙인 취약한 층을 더할 뿐입니다.
이런 분들에게 추천
배포판의 체크섬을 확인하는 시스템 관리자와 CISO, 산출물을 봉인하거나 웹훅을 인증하는 개발자, 백업의 무결성을 점검하는 감사·컴플라이언스 담당자, 문서를 퍼뜨리지 않고 비교하는 기자와 분석가, 해시값·충돌·솔트 개념을 다루는 암호학도 — 그리고 콘텐츠를 해시 빠르게, 흔적 없이 해시하고 싶은 모든 분에게. 보조 도구로는 비밀번호 생성기, Base64 인코더/디코더, JWT 디코더, 정규식 테스터 및 문자 수 세기.