LumoMate
LumoMate/용어집/BoundarySecurity

해싱

해싱(Hashing)은 임의의 데이터를 고정 길이의 짧은 값으로 일방향으로 변환하는 일입니다. 같은 입력은 같은 해시를 내고, 해시로부터 원본을 복원할 수 없습니다.
해싱의 개념을 표현한 편집형 일러스트.

쉬운 설명

해싱은 두 가지 다른 맥락에서 자주 등장합니다. 첫째, 비밀번호 저장. DB에 비밀번호 원문을 저장하면 유출 시 즉시 노출되니, 대신 그 비밀번호의 해시만 저장합니다. 로그인할 때 들어온 비밀번호를 같은 방식으로 해싱해 저장된 해시와 같은지만 비교합니다.

둘째, 무결성 확인. 파일·메시지가 중간에 바뀌지 않았는지 확인할 때, 원본의 해시를 함께 보내거나 보관해 두고 받는 쪽에서 다시 해시해 비교합니다. 한 글자라도 다르면 해시가 완전히 달라지기 때문입니다. 소프트웨어 다운로드의 SHA-256 체크섬, 깃의 커밋 해시, 블록체인의 모든 블록 — 모두 같은 발상입니다.

암호화와 해싱의 차이를 한 번 더 강조하면: 암호화는 키로 풀 수 있고, 해싱은 원본을 복원할 수 없습니다. 그래서 비밀번호 저장에는 반드시 해싱을 써야 합니다. 암호화로 저장하면 키 유출 시 비밀번호 전부가 노출됩니다.

주의: 비밀번호 해싱은 일반 해시 함수(SHA-256 등) 하나만으론 부족합니다. 빠른 해시 함수는 공격자에게도 빠르기 때문입니다. 공격자가 가능한 비밀번호 후보를 초당 수십억 개 시도할 수 있다면 보호가 무의미해집니다. 그래서 bcrypt·scrypt·Argon2 같이 일부러 느리게 만든 — 한 번 해시에 0.1초 정도 — 알고리즘을 씁니다. 또 솔트(salt — 사용자마다 다른 무작위 값)를 함께 써서 같은 비밀번호도 다른 해시가 되게 합니다.

최근 권장 사항은 Argon2id입니다. 메모리·시간·병렬화를 모두 비싸게 만들어 GPU를 동원한 무차별 대입 공격에도 강합니다. bcrypt는 여전히 안전하고 잘 알려져 있지만, 새 프로젝트에는 Argon2id가 우선 선택지입니다. '비밀번호는 그냥 SHA-256으로 저장'은 흔하지만 매우 위험한 잘못입니다.

해싱의 개념을 본문 안에서 다른 각도로 비춰 보는 편집형 일러스트.
FIG. 1해싱을 다른 각도에서 다시 봅니다.

비유로 보면

해싱은 종이를 잘게 쪼개 잘 섞은 뒤 그 모양을 사진으로 찍어 두는 일과 비슷합니다. 사진(해시)으로는 원본 종이의 내용을 복원할 수 없지만, 누군가 같은 종이를 가지고 와서 같은 방식으로 처리하면 같은 사진이 나옵니다. 작은 글자 하나만 달라도 사진이 완전히 달라집니다.

어디에서 만나나

비밀번호 저장, 파일·소프트웨어 무결성 검증, 깃의 커밋·블롭 ID, 블록체인의 블록 연결, 캐시 키 생성, 데이터 중복 제거, 패스워드 매니저, 디지털 서명의 기반. 사실상 모든 보안 시스템 어딘가에 해시 함수가 깔려 있습니다.

작은 예시

사이트가 해킹돼 DB가 유출됐을 때, 비밀번호가 평문이면 모든 사용자가 즉시 위험합니다. bcrypt로 해시돼 있으면 공격자가 각 해시를 깨려고 비밀번호 후보를 하나씩 대입해야 해서, 시간이 매우 오래 걸립니다. 그 사이 사용자에게 알리고 비밀번호를 바꾸게 할 시간이 생깁니다.

자주 하는 오해

오해
흔한 오해 셋. ① 'SHA-256으로 비밀번호 저장하면 안전' — 너무 빠르므로 무차별 대입에 약합니다. bcrypt·Argon2 같은 느린 해시가 필요합니다. ② '같은 비밀번호는 같은 해시' — 솔트를 쓰면 사용자마다 다릅니다. ③ '해시는 풀 수 없으니 안전' — 약한 비밀번호는 가능한 후보들을 미리 해싱해 둔 레인보우 테이블로 빠르게 풀립니다. 솔트 + 느린 해시 둘 다 필요합니다.

한 줄 정리

비밀번호 해싱의 표준은 'Argon2id 또는 bcrypt + 솔트'입니다. 그 외의 빠른 해시(SHA-256·MD5·SHA-1)는 비밀번호 저장에 절대 쓰면 안 됩니다.
매주 월요일 오전 8시

한 주에 한 통,
오래 남는 이해를 보냅니다.

흘려보내지 않는 글만 골라 보내드립니다. 광고와 추적, 외부로 빠지는 미끼 링크 없이 메일 안에서 끝나는 한 통입니다.

언제든 한 번의 클릭으로 해지할 수 있습니다. 스팸은 보내지 않습니다.