쉬운 설명
해싱은 두 가지 다른 맥락에서 자주 등장합니다. 첫째, 비밀번호 저장. DB에 비밀번호 원문을 저장하면 유출 시 즉시 노출되니, 대신 그 비밀번호의 해시만 저장합니다. 로그인할 때 들어온 비밀번호를 같은 방식으로 해싱해 저장된 해시와 같은지만 비교합니다.
둘째, 무결성 확인. 파일·메시지가 중간에 바뀌지 않았는지 확인할 때, 원본의 해시를 함께 보내거나 보관해 두고 받는 쪽에서 다시 해시해 비교합니다. 한 글자라도 다르면 해시가 완전히 달라지기 때문입니다. 소프트웨어 다운로드의 SHA-256 체크섬, 깃의 커밋 해시, 블록체인의 모든 블록 — 모두 같은 발상입니다.
암호화와 해싱의 차이를 한 번 더 강조하면: 암호화는 키로 풀 수 있고, 해싱은 원본을 복원할 수 없습니다. 그래서 비밀번호 저장에는 반드시 해싱을 써야 합니다. 암호화로 저장하면 키 유출 시 비밀번호 전부가 노출됩니다.
주의: 비밀번호 해싱은 일반 해시 함수(SHA-256 등) 하나만으론 부족합니다. 빠른 해시 함수는 공격자에게도 빠르기 때문입니다. 공격자가 가능한 비밀번호 후보를 초당 수십억 개 시도할 수 있다면 보호가 무의미해집니다. 그래서 bcrypt·scrypt·Argon2 같이 일부러 느리게 만든 — 한 번 해시에 0.1초 정도 — 알고리즘을 씁니다. 또 솔트(salt — 사용자마다 다른 무작위 값)를 함께 써서 같은 비밀번호도 다른 해시가 되게 합니다.
최근 권장 사항은 Argon2id입니다. 메모리·시간·병렬화를 모두 비싸게 만들어 GPU를 동원한 무차별 대입 공격에도 강합니다. bcrypt는 여전히 안전하고 잘 알려져 있지만, 새 프로젝트에는 Argon2id가 우선 선택지입니다. '비밀번호는 그냥 SHA-256으로 저장'은 흔하지만 매우 위험한 잘못입니다.

비유로 보면
해싱은 종이를 잘게 쪼개 잘 섞은 뒤 그 모양을 사진으로 찍어 두는 일과 비슷합니다. 사진(해시)으로는 원본 종이의 내용을 복원할 수 없지만, 누군가 같은 종이를 가지고 와서 같은 방식으로 처리하면 같은 사진이 나옵니다. 작은 글자 하나만 달라도 사진이 완전히 달라집니다.
어디에서 만나나
비밀번호 저장, 파일·소프트웨어 무결성 검증, 깃의 커밋·블롭 ID, 블록체인의 블록 연결, 캐시 키 생성, 데이터 중복 제거, 패스워드 매니저, 디지털 서명의 기반. 사실상 모든 보안 시스템 어딘가에 해시 함수가 깔려 있습니다.
작은 예시
사이트가 해킹돼 DB가 유출됐을 때, 비밀번호가 평문이면 모든 사용자가 즉시 위험합니다. bcrypt로 해시돼 있으면 공격자가 각 해시를 깨려고 비밀번호 후보를 하나씩 대입해야 해서, 시간이 매우 오래 걸립니다. 그 사이 사용자에게 알리고 비밀번호를 바꾸게 할 시간이 생깁니다.
자주 하는 오해
한 줄 정리
비밀번호 해싱의 표준은 'Argon2id 또는 bcrypt + 솔트'입니다. 그 외의 빠른 해시(SHA-256·MD5·SHA-1)는 비밀번호 저장에 절대 쓰면 안 됩니다.
