최신 MD5 정보를 찾을 때 가장 궁금한 점은 새 버전이 나왔는지 여부일 것입니다. 결론부터 말하면 MD5는 1992년 RFC 1321로 확정된 뒤 알고리즘이 개정된 적이 한 번도 없습니다. 바뀐 것은 알고리즘이 아니라 이를 둘러싼 보안 권고와 실무 사용 기준입니다.
최신 MD5 표준 현황: 알고리즘은 그대로입니다
MD5(Message-Digest Algorithm 5)는 임의 길이의 입력을 128비트, 즉 32자리 16진수 문자열로 압축하는 함수입니다. 로널드 리베스트가 설계했고 RFC 1321이 사실상 유일한 규격 문서입니다. 지금 실행하는 md5sum과 30년 전 md5sum은 같은 파일에 대해 같은 값을 출력합니다.
대신 표준화 기구의 태도는 계속 바뀌어 왔습니다.
- RFC 6151(2011): MD5의 충돌 저항성이 무너졌음을 공식 문서화하고, 충돌 저항성이 필요한 모든 용도에서 사용 중단을 권고했습니다.
- NIST: 전자서명 등 보안 용도의 MD5 사용을 금지했으며, MD5는 FIPS 승인 해시 목록에 포함되어 있지 않습니다.
- 브라우저와 인증기관: MD5로 서명된 인증서는 2010년대 초에 이미 신뢰 목록에서 제외되었습니다.
- 언어 표준 라이브러리: 하위 호환을 위해 함수 자체는 여전히 제공되지만, 보안 모드에서 호출을 차단하는 런타임이 늘고 있습니다.
MD5가 깨졌다는 말의 정확한 범위
깨졌다는 표현이 곧 해시값에서 원본을 되돌릴 수 있다는 뜻은 아닙니다. 해시 함수의 안전성은 크게 세 가지로 나뉘는데, MD5는 그중 하나만 완전히 무너진 상태입니다.
- 충돌 저항성: 같은 해시값을 갖는 서로 다른 두 입력을 찾기 어려워야 합니다. 2004년 왕샤오윈 연구팀의 공격 이후 완전히 무너졌고, 지금은 일반 노트북에서 수 초 만에 충돌 쌍을 만들 수 있습니다.
- 제2 역상 저항성: 주어진 특정 파일과 같은 해시를 갖는 다른 파일을 찾는 것으로, 아직 실용적인 공격은 공개되지 않았습니다.
- 역상 저항성: 해시값만 보고 원본을 복원하는 것으로, 알려진 최선의 공격도 2의 123제곱 수준이라 현실적으로 불가능합니다.
문제는 실제 사고가 대부분 첫 번째 항목에서 터졌다는 점입니다. 2008년에는 MD5 충돌을 이용해 위조된 중간 인증기관 인증서가 만들어졌고, 2012년 Flame 악성코드는 선택 접두어 충돌 기법으로 마이크로소프트 업데이트 서명을 위조했습니다.
지금도 써도 되는 경우와 절대 안 되는 경우
MD5를 무조건 지우는 것이 정답은 아닙니다. 공격자가 개입할 수 없는 자리에서는 짧고 빠른 지문으로서 여전히 쓸모가 있습니다.
써도 무방한 용도
- 네트워크 전송이나 디스크 오류로 생긴 비악의적 손상 검출
- 중복 파일이나 중복 이미지 탐지
- 캐시 키, ETag, 샤딩 버킷 계산처럼 내부에서만 쓰이는 식별자
- 대용량 데이터를 1차로 그룹핑한 뒤 정밀 비교로 넘기는 전처리 단계
사용을 멈춰야 하는 용도
- 전자서명, 코드 서명, 인증서, 라이선스 검증
- 배포 파일의 보안 목적 무결성 검증
- 비밀번호 저장, 레인보우 테이블과 GPU 대입 공격에 무력합니다
- 인증 토큰, 세션 식별자, API 요청 서명 생성
MD5 대체 해시 3가지 비교
현실적인 대체 후보는 SHA-256, SHA3-256, BLAKE3 세 가지입니다. 기준점을 잡기 위해 아래 표에 MD5와 SHA-1을 함께 넣었습니다.
| 알고리즘 | 출력 길이 | 충돌 안전성 | 상대 속도 | 권장 용도 |
|---|---|---|---|---|
| MD5 | 128비트 | 붕괴 | 빠름 | 비보안 체크섬, 중복 탐지 |
| SHA-1 | 160비트 | 붕괴(2017년 SHAttered) | 보통 | 레거시 호환 목적만 |
| SHA-256 | 256비트 | 안전 | 보통 | 범용 표준, 서명과 인증서 |
| SHA3-256 | 256비트 | 안전 | 보통 | 길이 확장 공격 내성이 필요한 설계 |
| BLAKE3 | 256비트 이상 가변 | 안전 | 매우 빠름 | 대용량 파일 검증, 병렬 처리 |
비밀번호는 이 표의 어떤 해시로도 저장하면 안 됩니다. 빠른 해시는 공격자에게도 빠르기 때문에, 의도적으로 느리게 설계된 Argon2id, bcrypt, scrypt 같은 키 유도 함수를 써야 합니다.
해시값을 직접 확인하는 방법
- Windows 명령 프롬프트:
certutil -hashfile 파일명 MD5 - PowerShell:
Get-FileHash 파일명 -Algorithm SHA256 - macOS:
md5 파일명또는shasum -a 256 파일명 - Linux:
md5sum 파일명,sha256sum 파일명 - OpenSSL:
openssl dgst -sha256 파일명
출력값을 비교할 때 대소문자는 구분하지 않아도 되지만, 앞뒤 공백이나 줄바꿈이 섞이면 눈으로는 같아 보여도 다르게 판정될 수 있습니다. 파일이 아니라 짧은 문자열의 해시를 즉석에서 확인하거나 여러 알고리즘 결과를 나란히 놓고 비교하고 싶을 때는 해시 생성기를 쓰면 명령어 없이 결과를 바로 볼 수 있습니다.
정리하면 최신 MD5라는 검색어에 해당하는 새 버전은 없고, 최신인 것은 사용 기준 쪽입니다. 보안 목적의 무결성 확인이라면 SHA-256으로 옮기고, MD5는 손상 검출이나 내부 식별자처럼 공격 표면이 없는 자리에만 남겨 두는 방식이 현재의 일반적인 운영 방침입니다.