해시란 무엇인가 — 그리고 SHA-1은 왜 퇴역했나
파일 다운로드 페이지의 «SHA-256 체크섬», 비밀번호를 «해시로 저장한다»는 말, 깃 커밋의 40자리 식별자 — 전부 같은 기술, 해시 함수입니다. 무엇이길래 이렇게 여기저기 쓰이는지, 그리고 한 시대를 지배한 SHA-1이 왜 밀려났는지 정리합니다.
한 방향으로만 가는 요약기
해시 함수는 어떤 길이의 입력이든 정해진 길이의 짧은 값으로 바꿉니다. SHA-256이면 결과가 항상 256비트(16진수 64자리)입니다. 핵심 성질은 세 가지 — ①같은 입력은 언제나 같은 결과가 나오고, ②결과에서 입력을 되짚을 수 없으며(단방향), ③입력이 한 글자만 달라져도 결과 전체가 완전히 달라집니다. 그래서 해시값은 «내용의 지문» 역할을 합니다. 두 파일의 해시가 같으면 내용이 같다고 봐도 되고, 전송 후 해시가 바뀌었다면 파일이 변조·손상된 것입니다.
충돌 — 해시의 아킬레스건
입력은 무한한데 결과는 유한하므로, 서로 다른 두 입력이 같은 해시를 갖는 «충돌»은 원리적으로 반드시 존재합니다. 관건은 그걸 «일부러 만들어낼 수 있느냐»입니다. 충돌을 마음대로 만들 수 있으면, 정상 문서와 같은 해시를 갖는 위조 문서를 만들어 서명·검증 체계를 통째로 속일 수 있습니다. 해시 알고리즘의 수명은 이 공격이 실현 가능해지는 순간 끝납니다.
SHA-1의 퇴역 일지
1995년에 표준이 된 SHA-1은 20년 넘게 인증서·서명·버전 관리의 기본이었습니다. 그러나 2005년부터 이론적 약점이 보고됐고, 2017년 구글과 네덜란드 CWI 연구소가 실제 충돌을 만들어냈습니다(SHAttered — 내용이 다른데 SHA-1 해시가 같은 PDF 두 개를 공개). 2020년에는 더 실용적인 공격까지 나왔습니다. 미국 표준기관 NIST는 이미 2011년부터 서명 용도 사용을 제한해 왔고, 2022년 말에는 2030년까지 SHA-1을 모든 용도에서 완전히 퇴출한다고 발표했습니다. 새로 만드는 시스템이라면 SHA-1을 보안 용도로 쓸 이유가 없습니다 — 일반 용도의 표준은 SHA-256입니다. 그보다 먼저 무너진 MD5(2004년 충돌 실증)도 마찬가지입니다. 깃이 커밋 식별에 아직 SHA-1을 쓰는 것은 «보안 서명»이 아니라 «내용 식별» 용도이기 때문이고, 그마저도 SHA-256 전환이 진행 중입니다.
비밀번호는 그냥 해시하면 안 됩니다
«단방향이니 비밀번호를 SHA-256으로 저장하면 되겠다»는 생각은 함정입니다. 해시는 빠르라고 만든 함수라서, 유출된 해시를 놓고 초당 수십억 번씩 후보를 대입하는 공격이 가능합니다. 비밀번호 저장에는 일부러 느리게 설계된 전용 알고리즘 (bcrypt·Argon2 등)에 계정마다 다른 무작위 값(솔트)을 섞어 쓰는 것이 표준입니다. 일반 해시와 비밀번호 해시는 목적이 다른 별개의 도구입니다.
직접 계산해 보기
SHA 해시 생성기에서 텍스트를 SHA-1·256·384·512로 바꿔 보세요. 한 글자만 고쳐도 결과 전체가 뒤집히는 것을 바로 확인할 수 있습니다. 계산은 브라우저의 Web Crypto로 기기 안에서만 이루어집니다.
참고·출처
- NIST — NIST Retires SHA-1 Cryptographic Algorithm (2022-12)
- SHAttered — SHA-1 충돌 실증 (Google·CWI, 2017)
- FIPS 180-4 — Secure Hash Standard (SHA 계열 정의)
최종 검토: 2026-09-01