098. MD5 (Message Digest Algorithm 5)
⚠️ 이 문서는 1990년대 전 세계 IT 인프라의 무결성 검증을 책임지는 표준 해시 함수였으나, 해시 길이의 한계와 내부 설계의 치명적 결함으로 인해 충돌(Collision) 취약점이 발견되면서 암호학적 사망 선고를 받은 MD5를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: MD5(Message Digest 5)는 론 리베스트(Ron Rivest)가 개발한 해시 알고리즘으로, 임의의 길이의 평문을 512비트 블록으로 잘라 처리한 뒤 최종적으로 128비트의 짧고 고정된 해시값(지문)을 뱉어내는 단방향 함수다.
- 가치: 연산 속도가 극도로 빠르고 구현이 쉬워 과거 10여 년간 인터넷에서 파일이 깨졌는지 확인하는 체크섬(Checksum), 데이터베이스 패스워드 암호화, 인증서 서명 등 모든 곳에 쓰였던 1세대 해시 제왕이다.
- 한계: 128비트라는 너무 짧은 지문 길이로 인해 생일 공격(Birthday Attack)의 표적이 되었으며, 1996년 치명적 수학 결함이 증명되고 2004년엔 노트북 수준에서도 동일한 해시를 갖는 서로 다른 두 파일(충돌)을 수십 분 만에 만들어낼 수 있게 되면서 보안 용도로는 전면 사용 금지(Deprecated) 조치되었다.
Ⅰ. 개요 및 탄생 배경 (Context & Necessity)
1992년, 당시 전 세계 인터넷은 다운로드를 받을 때 데이터가 와장창 깨지는(패킷 유실) 일이 다반사였다. 개발자들은 "내가 올린 원본 파일 10MB"와 "고객이 다운로드한 파일 10MB"가 1비트의 오차도 없이 똑같은지 증명할 수 있는 빠르고 강력한 '지문(Digest) 채취기'가 절실했다.
RSA 암호의 창시자인 천재 수학자 론 리베스트는 이전 버전인 MD4의 구조를 개량하여, 32비트 컴퓨터 환경에서 엄청나게 빠르게 작동하는 MD5를 발표했다. 결과는 대성공이었다. 수만 줄의 코드를 MD5에 넣으면 눈 깜짝할 새 098f6bcd4621d373cade4e832627b4f6 (32자리 16진수 = 128비트)라는 지문이 튀어나왔다. 이 빠르고 매혹적인 마법에 홀린 전 세계 개발자들은 암호학적 안전성에 대한 의심 없이 MD5를 데이터베이스 패스워드 암호화와 SSL 인증서 서명에 마구잡이로 가져다 쓰기 시작했다.
📢 섹션 요약 비유: MD5는 당시 너무나도 빠르고 편한 128자리 숫자의 '자물쇠'였습니다. 가방이 열렸는지 확인하기 위해 편하게 달고 다녔지만, 너무 대중적으로 쓴 나머지 도둑들이 이 자물쇠의 내부 톱니바퀴 구조를 다 파악하고 만능 마스터키를 만들어버리는 비극의 시작이었습니다.
Ⅱ. MD5의 구조와 충돌 저항성의 붕괴
MD5는 들어온 데이터를 512비트 덩어리로 자르고, 4개의 버퍼(A, B, C, D)를 이용해 64번의 비선형 함수 믹서기 라운드를 돌린다.
하지만 아무리 복잡하게 섞어도 결과물(소시지)의 크기가 고작 128비트라는 점이 치명적인 아킬레스건이었다. 해시 함수가 암호학적으로 안전하려면 "서로 다른 두 데이터가 똑같은 해시 지문을 가질 확률(충돌 저항성)"이 우주의 나이만큼 길어야 한다.
생일 공격 (Birthday Attack)의 저주
수학의 '생일 문제'에 따르면, 1년이 365일이어도 방 안에 23명만 모이면 생일이 같은 사람이 있을 확률이 50%를 넘는다. 이 원리를 해시 함수에 대입하면, 128비트 길이의 MD5에서 똑같은 해시가 나오는 쌍(충돌)을 찾으려면 $2^{128}$ 번 다 해볼 필요 없이, 루트를 씌운 $2^{64}$ (약 1,800경) 번만 섞어보면 무조건 충돌 쌍이 하나 튀어나온다는 결론이 나온다. 1990년대엔 $2^{64}$ 도 엄청난 숫자였지만, 컴퓨터 발전 속도를 얕본 오판이었다.
┌─────────────────────────────────────────────────────────────────────────────┐
│ MD5의 강한 충돌 저항성(Collision) 완전 붕괴 시각화 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ [ 해커의 악의적 위조 작전 ] │
│ │
│ 문서 A (정상): "이 사람에게 100만 원을 주시오." │
│ └─ (MD5 해시) ──▶ [ Z9!P@... (128비트) ] ◀── 똑같음!! │
│ │ │
│ 문서 B (악성): "이 사람에게 100억 원을 주시오." │
│ └─ (MD5 해시) ──▶ [ Z9!P@... (128비트) ] ───┘ │
│ │
│ * 해커의 공격 방식 (2004년 왕샤오윈 교수의 증명): │
│ -> 문서 B의 내용 중에 눈에 안 보이는 공백(Space)과 쓰레기 문자를 교묘하게 │
│ 수억 번씩 섞어 넣다 보면, 기적처럼 문서 A와 MD5 해시값이 완벽하게 │
│ 일치하는 껍데기를 수 시간 안에 만들어 낼 수 있다! │
└─────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 이것이 바로 충돌(Collision) 공격이다. 해커가 은행에 "100만 원짜리 정상 송금서(A)"의 해시값을 보내 전자서명을 받는다. 은행은 안전한 문서인 줄 알고 서명해 준다. 하지만 해커는 해시값이 완벽하게 똑같은 "100억 원짜리 위조 송금서(B)"를 미리 만들어 놓았다. 해커가 서명된 해시값을 위조 문서 B에 찰싹 붙여서 제출하면, 은행 서버는 해시값이 일치하므로 문서가 위조된 줄 모르고 100억 원을 털리게 된다. MD5는 이 방패가 박살 난 것이다.
- 📢 섹션 요약 비유: 경찰이 범인을 잡을 때 '주민등록번호(13자리)' 전체를 확인하지 않고 끝의 '생일(4자리)'만 대충 보고 신원을 확인(MD5)하는 꼴입니다. 동명이인이 없다고 자만했지만, 도둑이 생일이 똑같은 가짜 사람(위조 문서)을 데려와 경찰을 완벽하게 속여버린 사건입니다.
Ⅲ. 실무 시나리오: 레인보우 테이블과 탈탈 털린 DB
충돌 취약점 외에도, 짧고 빠른 MD5의 특성은 비밀번호 저장에 최악이었다.
- 사고 사례: 유명 웹사이트가 해킹되어 유저 1,000만 명의
ID와MD5(비밀번호)가 털렸다. - 해커의 행동: 해커는 해시를 역으로 풀지 않는다. MD5는 암호화 속도가 너무 빨라서, 일반 노트북 그래픽카드(GPU) 한 장으로 1초에 100억 개의 단어(
123456,qwer,admin)를 MD5 믹서기에 돌려버릴 수 있다. - 레인보우 테이블(Rainbow Table): 해커는 전 세계 사람들이 쓰는 비밀번호 1조 개의 MD5 결과를 거대한 사전 엑셀 파일(레인보우 테이블)로 미리 다 만들어 놨다. DB에서 털어온 해시값을 사전에 검색(Ctrl+F)하면 10초 만에 평문 비밀번호가 수두룩하게 튀어나온다.
이 사태를 막기 위해 현대 DB는 패스워드를 1만 번씩 갈아 넣고 쓰레기 문자(Salt)를 붙이는 Bcrypt나 PBKDF2 로 갈아탔지만, 아직도 수많은 구형 사내 게시판 시스템이 MD5로 비번을 굽는 시한폭탄을 안고 돌고 있다.
Ⅳ. 결론 및 현재의 취급 (Deprecated)
미국 국토안보부(CISA)와 NIST는 2008년부터 **"어떤 보안 시스템에서도 MD5를 절대 사용하지 말 것"**을 강력히 경고하며 표준에서 완전히 삭제했다.
현재 MD5의 유일한 합법적 용도는 **"보안과 전혀 상관없는, 단순 파일 다운로드 손상 여부 확인(무결성 체크섬)"**뿐이다. 만약 보안 아키텍처 설계 문서에 인증서 서명이나 패스워드 암호화로 MD5(또는 SHA-1)를 적어내는 아키텍트가 있다면, 그 즉시 현업에서 퇴출당해도 할 말이 없을 만큼 명백한 금기(Anti-Pattern)다. 시대를 풍미했던 128비트의 마법은 이제 더 길고 단단한 SHA-256에게 보안의 왕좌를 완전히 넘겨주고 역사의 박물관으로 물러났다.
📌 관련 개념 맵
- 전신과 후계자: MD4 $\rightarrow$ MD5 $\rightarrow$ SHA-1 (마찬가지로 털림) $\rightarrow$ SHA-2 (현재 표준)
- 해시의 구조: 머클-담가드(Merkle-Damgård) 구조
- 치명적 취약점: 충돌 저항성(Collision Resistance) 붕괴, 생일 공격(Birthday Attack)
- 비밀번호 공격: 레인보우 테이블 (빠른 해시 연산 속도가 오히려 독이 됨)
👶 어린이를 위한 3줄 비유 설명
- MD5는 옛날 인터넷 아저씨들이 서류에 찍던 아주 빠르고 간편한 128자리 '마법의 도장'이었어요.
- 처음엔 다들 이 도장이 세상에서 유일하다고 믿었지만, 컴퓨터가 발전하자 나쁜 해커들이 "가짜 서류에도 똑같은 도장 모양이 나오게 찍는 꼼수(충돌)"를 발견해 냈어요!
- 도장이 가짜 서류와 진짜 서류를 구별 못 하게 박살 나버렸기 때문에, 오늘날에는 은행이나 중요한 비밀번호에는 절대 이 낡은 도장을 쓰지 않고 다 내다 버렸답니다.