cv.cm

지식 · 텍스트, 데이터, 보안

MD5와 SHA-256은 무엇이 다른가요?

7분 분량

핵심 답변

MD5와 SHA-256은 어떤 입력이든 고정 길이의 지문으로 바꾸는 해시 함수입니다. MD5는 128비트, SHA-256은 256비트를 만듭니다. MD5는 공격자가 해시가 같은 서로 다른 파일을 만들 수 있어 보안 용도로는 깨졌습니다. SHA-256은 알려진 실용적 공격이 없어 서명과 무결성 검사의 기본값입니다. MD5는 우발적인 손상을 감지하는 용도로는 여전히 쓸 만하지만, 둘 다 비밀번호를 그대로 저장하는 데 써서는 안 됩니다.

해시 생성 열기

해시 함수가 하는 일

암호학적 해시는 어떤 크기의 입력이든 받아 고정 크기의 다이제스트를 돌려줍니다. 같은 입력은 항상 같은 다이제스트를 내고, 한 글자만 바뀌어도 완전히 다른 다이제스트가 나오며, 다이제스트를 입력으로 되돌릴 수 없습니다.

입력MD5SHA-256
abc900150983cd24fb0d6963f7d28e17f72ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
빈 문자열d41d8cd98f00b204e9800998ecf8427ee3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

안전한 해시는 세 가지 공격에 견뎌야 합니다. 주어진 다이제스트에 대한 입력 찾기(역상), 주어진 입력과 다이제스트가 같은 두 번째 입력 찾기(제2 역상), 다이제스트가 같은 아무 입력 두 개 찾기(충돌)입니다. 충돌이 가장 쉬우며, 생일 역설 때문에 이상적인 n비트 해시라도 약 2^(n/2)번 시도하면 찾을 수 있습니다.

MD5, SHA-1, SHA-256, SHA-3 비교

알고리즘다이제스트 크기16진수 길이현황
MD5 (1992)128비트322004년부터 실제 충돌 가능, 보안 용도로는 깨짐
SHA-1 (1995)160비트402017년 첫 공개 충돌, NIST는 2030년까지 폐기 예정
SHA-256 (SHA-2, 2001)256비트64안전, FIPS 180-4로 표준화
SHA-512 (SHA-2)512비트128안전, 64비트 CPU에서는 SHA-256보다 빠른 경우가 많음
SHA3-256 (2015)256비트64안전, 내부 설계가 다르며 FIPS 202로 표준화

SHA-256은 SHA-2 계열의 한 구성원입니다. "SHA-2"와 "SHA-256"은 흔히 같은 뜻으로 쓰이지만, SHA-224, SHA-384, SHA-512도 SHA-2 함수입니다.

MD5와 SHA-1은 어떻게 깨졌나

2004년 왕샤오윈(Xiaoyun Wang) 연구팀이 몇 시간 만에 찾은 MD5 충돌을 발표했습니다. 이후 연구로 선택 접두사 충돌이 가능해졌는데, 공격자가 의미 있는 서로 다른 파일 두 개에서 시작해 해시가 같아질 때까지 데이터를 덧붙이는 방식입니다. 2008년 연구자들은 이를 이용해 위조 인증 기관 인증서를 만들었고, 2012년 발견된 Flame 악성코드는 MD5 충돌로 Microsoft 코드 서명 인증서를 위조했습니다. RFC 6151은 디지털 서명처럼 충돌 저항성이 필요한 곳에 MD5를 써서는 안 된다고 명시합니다.

SHA-1도 뒤를 이었습니다. 2017년 Google과 암스테르담 CWI의 SHAttered 프로젝트가 SHA-1 해시가 같은 서로 다른 PDF 파일 두 개를 공개했고, 2020년에는 SHA-1 선택 접두사 충돌이 시연되었습니다. 이후 Git, TLS 인증서, 코드 서명은 SHA-256으로 옮겨 갔거나 옮겨 가는 중입니다.

MD5에 대한 역상 공격은 여전히 비현실적입니다. 여기서 깨졌다는 말은 공격자가 충돌하는 파일 쌍을 만들 수 있다는 뜻이지, 기존의 MD5를 되돌릴 수 있다는 뜻이 아닙니다.

MD5를 써도 되는 경우와 안 되는 경우

용도MD5 사용 가능?이유
다운로드나 복사 중 우발적 손상 감지예무작위 비트 오류로는 충돌이 생기지 않음
자체 시스템 내 중복 제거나 캐시 키대체로 가능공격자가 입력을 통제하지 않는 한 괜찮음
악의적인 미러에서 받은 다운로드 검증아니요공격자가 충돌 파일을 준비할 수 있음, SHA-256 사용
디지털 서명과 인증서아니요충돌 공격으로 서명 위조 가능
비밀번호 저장아니요계산이 너무 빠름, SHA-256도 마찬가지

선택할 수 있다면 SHA-256을 고르세요. 어디서나 지원되고, 최신 CPU에서 하드웨어 가속되며, 특정 용도가 충돌에 민감한지 따질 필요가 없어집니다.

비밀번호에는 느리고 솔트를 친 해시가 필요

범용 해시는 빠르게 설계되어 있습니다. 최신 GPU 한 대가 초당 수십억 개의 MD5나 SHA-256 해시를 계산할 수 있으므로, 솔트 없는 SHA-256 비밀번호 해시 테이블이 유출되면 거대한 단어 목록으로 공격받을 수 있고, 같은 비밀번호는 같은 해시로 드러납니다.

비밀번호 해싱 함수는 두 문제를 모두 해결합니다. 사용자마다 고유한 무작위 솔트를 더해 같은 비밀번호도 다르게 해시되게 하고, 일부러 느리게, 그리고 최신 설계에서는 메모리를 많이 쓰게 만들어 GPU의 이점을 줄입니다.

  • Argon2id: 2015년 Password Hashing Competition 우승작으로, 새 시스템의 일반적인 첫 선택입니다.
  • scrypt: 메모리 하드(memory-hard) 방식이며 널리 쓸 수 있습니다.
  • bcrypt: 수십 년간 쓰였습니다. 비밀번호의 처음 72바이트만 읽는다는 점에 유의하세요.
  • 반복 횟수를 높인 PBKDF2: FIPS 검증 알고리즘이 필요한 환경에서 허용됩니다.

자주 묻는 질문

MD5 해시를 복호화할 수 있나요?

아니요. 해시는 암호화가 아니며 되돌릴 키도 없습니다. 온라인 "MD5 복호화" 사이트는 흔한 문자열을 미리 해시해 둔 테이블에서 해시를 찾아볼 뿐이며, 그래서 짧거나 흔한 입력은 금방 찾아집니다.

2026년에도 SHA-256은 안전한가요?

네. SHA-256에 대한 실용적인 충돌·역상 공격은 알려진 것이 없고 NIST도 계속 승인하고 있습니다. 2^128 수준의 충돌 저항성은 현재 컴퓨팅 능력을 훨씬 넘어섭니다.

웹사이트는 왜 아직도 MD5 체크섬을 공개하나요?

흔한 문제인 불완전하거나 손상된 다운로드를 잡아내기 때문입니다. 변조된 파일에 대해서는 체크섬이 신뢰할 수 있는 출처에서 왔고 SHA-256 이상을 쓸 때만 도움이 됩니다.

비밀번호 해싱에 SHA-256을 써도 되나요?

단독으로는 안 됩니다. 빠르고 기본적으로 솔트가 없어서, 유출된 해시를 초당 수십억 번의 추측으로 깰 수 있습니다. 대신 Argon2id, scrypt, bcrypt를 쓰세요.

전체 지식 문서