도
도구상자FREE ONLINE TOOLS
← 가이드 목록

해시(SHA-256)란? — 암호화와의 차이와 쓰임새

다운로드 페이지의 "SHA-256 체크섬", 유출 사고 기사의 "비밀번호는 해시로 저장되어 있었다" — 해시는 보안 이야기마다 등장하지만 암호화와 자주 혼동됩니다. 둘은 목적이 다른 별개의 기술입니다. 해시의 성질과 실제 쓰임새를 정리합니다.

해시 함수란 — 디지털 지문

해시 함수는 어떤 길이의 입력이든 고정 길이의 값(해시값)으로 바꾸는 함수입니다. 예를 들어 SHA-256은 무엇을 넣든 64자리 16진수를 내놓습니다.

  • hello → 2cf24dba5fb0a30e... (64자)
  • 10GB 동영상 → 역시 64자

같은 입력은 항상 같은 해시값이 나오므로, 해시값은 데이터의 지문 역할을 합니다. 지문만 비교하면 내용 전체를 비교한 것과 같습니다.

해시의 세 가지 성질

  • 일방향: 해시값에서 원문을 역산할 수 없습니다. 이 점이 인코딩(Base64)·암호화와 결정적으로 다릅니다.
  • 눈사태 효과: 입력이 한 글자만 달라져도 해시값 전체가 완전히 달라집니다. hello와 Hello의 해시는 전혀 닮지 않았습니다.
  • 충돌 회피: 서로 다른 입력이 같은 해시값을 갖는 일(충돌)이 사실상 일어나지 않도록 설계됩니다.
인코딩(Base64)암호화(AES)해시(SHA-256)
되돌리기누구나 가능키가 있으면 가능불가능
목적표현 변환내용 숨기기지문·검증
키 필요없음있음없음

어디에 쓰이나 — 무결성·비밀번호

  • 파일 무결성(체크섬): 배포처가 공개한 SHA-256 값과 내가 받은 파일의 해시값이 일치하면, 다운로드 중 손상되거나 변조되지 않았다는 뜻입니다.
  • 비밀번호 저장: 서비스는 비밀번호 원문 대신 해시값을 저장합니다. 로그인 때 입력값을 해시해 비교하면 되고, 유출돼도 원문이 드러나지 않습니다. 실제로는 솔트(salt)를 더하고 bcrypt처럼 일부러 느린 전용 해시를 씁니다.
  • 중복 탐지·전자서명: 같은 파일인지 빠르게 비교하거나, 문서가 서명 후 변경되지 않았음을 증명하는 데도 해시가 들어갑니다.
Hash 생성텍스트·파일의 SHA-256 등 해시값을 즉시 계산 생성하기 →

MD5는 그만 — 알고리즘 선택

한때 표준이던 MD5와 SHA-1은 충돌 공격이 실제로 가능해져 보안 용도로는 폐기됐습니다. 서로 다른 두 파일이 같은 해시값을 갖도록 만들 수 있다는 뜻이라, 위조 검증에 쓸 수 없습니다.

권장: 무결성 검증·서명 등 보안이 걸린 곳에는 SHA-256 이상(SHA-2·SHA-3 계열)을 쓰세요. MD5는 보안과 무관한 간단한 중복 확인 정도에만 제한적으로 사용합니다. 비밀번호 저장에는 SHA-256 단독이 아니라 bcrypt·Argon2 같은 전용 알고리즘이 표준입니다.

한 글자, 공백 하나가 만드는 차이

Hash 생성기로 구한 SHA-256 값의 앞 16자리입니다(전체는 64자리).

입력SHA-256 (앞 16자리)
abcba7816bf8f01cfea…
Abc06d90109c8cce34e…
abc + 끝에 공백 한 칸5488613c42b0d34d…
abc + 끝에 줄바꿈edeaaff3f1774ad2…
(빈 입력)e3b0c44298fc1c14…
a를 1,000번 반복41edece42d63e8d9…

abc와 Abc의 해시 전체를 비교하면 64자리 가운데 63자리가 다르고, 비트로는 256비트 중 131비트가 다릅니다. 입력의 한 글자가 바뀌면 출력의 절반가량이 뒤집히는 이 성질 덕분에, 파일이 1바이트만 달라져도 해시로 알아챌 수 있습니다. 입력이 3글자든 1,000글자든 결과 길이는 같습니다.

실무에서 해시값이 서로 안 맞을 때는 대개 눈에 보이지 않는 차이가 원인입니다. 끝에 붙은 공백이나 줄바꿈 하나로 완전히 다른 값이 나옵니다. 같은 입력을 다른 알고리즘에 넣으면 길이가 달라집니다. hello는 MD5로 5d41402abc4b2a76b9719d911017c592(32자리), SHA-1로는 40자리, SHA-256으로는 64자리입니다.

자주 묻는 질문
Q. 해시와 암호화는 뭐가 다른가요?

암호화는 키가 있으면 원문으로 되돌릴 수 있는 양방향 변환이고, 해시는 원문으로 되돌릴 수 없는 일방향 변환입니다. 그래서 다시 읽어야 하는 데이터(메시지·파일)는 암호화하고, 원문을 알 필요 없이 일치 여부만 확인하면 되는 것(비밀번호)은 해시를 사용합니다.

Q. 사이트는 왜 비밀번호를 해시로 저장하나요?

서버가 해킹당해도 원래 비밀번호를 알 수 없게 하기 위해서입니다. 가입 시 비밀번호의 해시값만 저장해 두고, 로그인할 때 입력값을 같은 방식으로 해시해 저장된 값과 비교합니다. 해시는 역산이 불가능해 유출되어도 원문 복원이 어렵습니다. 실제 서비스는 SHA-256 단독보다 bcrypt처럼 일부러 느리게 설계된 비밀번호 전용 해시에 솔트(salt)를 더해 사용합니다.

Q. MD5나 SHA-1은 왜 쓰지 말라고 하나요?

서로 다른 두 입력이 같은 해시값을 갖게 만드는 충돌 공격이 실제로 가능해졌기 때문입니다. 위조 파일을 정상 파일처럼 꾸밀 수 있어 보안 용도로는 폐기됐습니다. 현재는 SHA-256 이상(SHA-2·SHA-3 계열)을 쓰는 것이 표준이며, MD5는 보안과 무관한 단순 중복 확인 정도에만 제한적으로 쓰입니다.

함께 보면 좋은 가이드