325Tools

MD5 vs SHA-256: MD5가 깨진 이유 (그리고 무엇을 써야 하나)

325Tools 팀 · 업데이트 2026-06-21

물려받은 코드베이스의 로그인 흐름에서 md5(password)를 발견하거나, MD5 체크섬을 게시하는 다운로드 페이지를 마주쳤다고 해 봅시다. 이게 실제로 문제일까요, 아니면 그냥 구식일 뿐일까요? 답은 전적으로 공격자가 해시를 속여서 이득을 보는지에 달려 있습니다 — 그 구분이 곧 MD5 vs SHA-256 문제의 전부입니다.

여기서 "깨졌다"는 말의 의미

MD5(1992)와 SHA-256(2001)은 둘 다 어떤 입력이든 고정된 지문으로 바꿉니다 — MD5는 16진수 32자, SHA-256은 64자입니다. 해시 생성기에서 나란히 비교해 볼 수 있습니다.

차이는 충돌 저항성입니다. 2004년, 연구자들이 서로 다른 두 입력이 같은 MD5 해시를 만들어 내는 것을 시연했고, 오늘날에는 평범한 하드웨어에서 몇 초면 충돌 쌍을 만들 수 있습니다. 이는 보안에 치명적입니다: 공격자가 무해한 파일과 악성 파일을 동일한 MD5 지문으로 미리 준비해, 무해한 쪽으로 승인을 받은 뒤 악성 파일로 바꿔치기해도 체크섬은 여전히 일치합니다. 이론에 그치는 이야기가 아닙니다. 2012년 Flame 악성코드는 MD5 충돌을 이용해 Microsoft 코드 서명 인증서를 위조했습니다.

SHA-256에서는 실용적인 충돌이 단 한 번도 발견되지 않았습니다. 256비트 공간(약 1.2 × 10^77개의 값)은 무차별 대입으로 충돌을 찾는 일을 예측 가능한 어떤 하드웨어의 능력 밖에 둡니다.

MD5가 아직 괜찮은 곳

보안에 깨졌다는 것이 쓸모없다는 뜻은 아닙니다. 나를 속이려는 적이 없는 상황이라면 MD5의 속도는 정당한 장점입니다:

  • 내 시스템 사이의 파일 전송에서 우발적 손상 감지.
  • 중복 제거와 캐시 키 — 동일 파일 찾기나 캐시 무효화.
  • 해시 버킷으로 데이터를 파티셔닝·샤딩하기.

판단 기준은 이렇습니다: 의도적으로 조작된 충돌이 나에게 피해를 줄 수 있다면 MD5는 탈락입니다. 무작위 손상만 문제라면 MD5도 괜찮습니다 — 다만 SHA-256은 비용이 거의 더 들지 않으면서 이런 고민 자체를 없애 줍니다.

비밀번호: 사실 둘 다 아닙니다

많은 사람이 놀라는 지점인데, SHA-256도 비밀번호 저장에는 잘못된 도구입니다. MD5와 SHA-256은 둘 다 빠르게 설계되었고, 그 빠름이 바로 공격자가 유출된 데이터베이스를 상대로 초당 수십억 번의 추측을 시도할 수 있게 해 줍니다. 비밀번호 저장에는 의도적으로 느리고 솔트를 적용하는 알고리즘 — bcrypt, scrypt, Argon2 — 이 필요합니다. 그리고 비밀번호 자체도 처음부터 강력해야 합니다; 비밀번호 생성기가 직접 고안할 어떤 방식보다 낫습니다.

흔한 실수

  • "두 번 해싱하면 되겠지." md5(md5(x))는 MD5의 모든 약점을 그대로 물려받습니다. 깨진 함수를 겹쳐 쌓는다고 고쳐지지 않습니다.
  • 해시를 암호화로 취급하기. 해시는 단방향이고 키가 없습니다; "잠긴" 것이 없으니 풀 수 있는 것도 없습니다. (그리고 Base64는 둘 다 아닙니다 — 비밀성이 전혀 없는, 되돌릴 수 있는 인코딩일 뿐입니다.)
  • 해시를 고유 ID로 쓰기. 식별자에 필요한 것은 무결성이 아니라 고유성입니다 — UUID가 바로 그 용도로 만들어졌습니다.
  • 해시를 눈으로 비교하기. a3f5...a3f5...는 40번째 문자에서 다를 수 있습니다. 둘 다 해시 생성기 출력란에 붙여 넣거나 정확한 문자열 비교를 쓰세요 — 대충 훑어보면 안 됩니다.

이 가이드에서 사용한 도구