해시(SHA-256)란? — 암호화와의 차이와 쓰임새
다운로드 페이지의 "SHA-256 체크섬", 유출 사고 기사의 "비밀번호는 해시로 저장되어 있었다" — 해시는 보안 이야기마다 등장하지만 암호화와 자주 혼동됩니다. 둘은 목적이 다른 별개의 기술입니다. 해시의 성질과 실제 쓰임새를 정리합니다.
해시 함수란 — 디지털 지문
해시 함수는 어떤 길이의 입력이든 고정 길이의 값(해시값)으로 바꾸는 함수입니다. 예를 들어 SHA-256은 무엇을 넣든 64자리 16진수를 내놓습니다.
hello→2cf24dba5fb0a30e...(64자)- 10GB 동영상 → 역시 64자
같은 입력은 항상 같은 해시값이 나오므로, 해시값은 데이터의 지문 역할을 합니다. 지문만 비교하면 내용 전체를 비교한 것과 같습니다.
해시의 세 가지 성질
- 일방향: 해시값에서 원문을 역산할 수 없습니다. 이 점이 인코딩(Base64)·암호화와 결정적으로 다릅니다.
- 눈사태 효과: 입력이 한 글자만 달라져도 해시값 전체가 완전히 달라집니다.
hello와Hello의 해시는 전혀 닮지 않았습니다. - 충돌 회피: 서로 다른 입력이 같은 해시값을 갖는 일(충돌)이 사실상 일어나지 않도록 설계됩니다.
| 인코딩(Base64) | 암호화(AES) | 해시(SHA-256) | |
|---|---|---|---|
| 되돌리기 | 누구나 가능 | 키가 있으면 가능 | 불가능 |
| 목적 | 표현 변환 | 내용 숨기기 | 지문·검증 |
| 키 필요 | 없음 | 있음 | 없음 |
어디에 쓰이나 — 무결성·비밀번호
- 파일 무결성(체크섬): 배포처가 공개한 SHA-256 값과 내가 받은 파일의 해시값이 일치하면, 다운로드 중 손상되거나 변조되지 않았다는 뜻입니다.
- 비밀번호 저장: 서비스는 비밀번호 원문 대신 해시값을 저장합니다. 로그인 때 입력값을 해시해 비교하면 되고, 유출돼도 원문이 드러나지 않습니다. 실제로는 솔트(salt)를 더하고 bcrypt처럼 일부러 느린 전용 해시를 씁니다.
- 중복 탐지·전자서명: 같은 파일인지 빠르게 비교하거나, 문서가 서명 후 변경되지 않았음을 증명하는 데도 해시가 들어갑니다.
MD5는 그만 — 알고리즘 선택
한때 표준이던 MD5와 SHA-1은 충돌 공격이 실제로 가능해져 보안 용도로는 폐기됐습니다. 서로 다른 두 파일이 같은 해시값을 갖도록 만들 수 있다는 뜻이라, 위조 검증에 쓸 수 없습니다.
암호화는 키가 있으면 원문으로 되돌릴 수 있는 양방향 변환이고, 해시는 원문으로 되돌릴 수 없는 일방향 변환입니다. 그래서 다시 읽어야 하는 데이터(메시지·파일)는 암호화하고, 원문을 알 필요 없이 일치 여부만 확인하면 되는 것(비밀번호)은 해시를 사용합니다.
서버가 해킹당해도 원래 비밀번호를 알 수 없게 하기 위해서입니다. 가입 시 비밀번호의 해시값만 저장해 두고, 로그인할 때 입력값을 같은 방식으로 해시해 저장된 값과 비교합니다. 해시는 역산이 불가능해 유출되어도 원문 복원이 어렵습니다. 실제 서비스는 SHA-256 단독보다 bcrypt처럼 일부러 느리게 설계된 비밀번호 전용 해시에 솔트(salt)를 더해 사용합니다.
서로 다른 두 입력이 같은 해시값을 갖게 만드는 충돌 공격이 실제로 가능해졌기 때문입니다. 위조 파일을 정상 파일처럼 꾸밀 수 있어 보안 용도로는 폐기됐습니다. 현재는 SHA-256 이상(SHA-2·SHA-3 계열)을 쓰는 것이 표준이며, MD5는 보안과 무관한 단순 중복 확인 정도에만 제한적으로 쓰입니다.