해시 vs 암호화 차이 완벽 정리 - 비밀번호 저장에 뭘 써야 할까
해시 vs 암호화 차이를 5분 만에 이해합니다. 단방향과 양방향, 복호화 가능 여부, 실제 비밀번호 저장 방식까지 예시로 쉽게 풀어드립니다.
![]()
회원가입 화면에서 비밀번호를 입력할 때, 그 비밀번호가 서버에 어떻게 저장되는지 생각해 본 적 있으신가요. 많은 분이 비밀번호가 암호화되어 저장된다고 알고 계십니다. 하지만 제대로 만든 서비스라면 비밀번호는 암호화가 아니라 해시로 저장됩니다. 이 둘은 비슷해 보이지만 작동 방식이 완전히 다릅니다. 차이를 모르면 보안 설계에서 치명적인 실수를 하게 됩니다.
해시와 암호화가 헷갈리는 이유
두 기술 모두 원본 데이터를 사람이 알아볼 수 없는 형태로 바꾼다는 공통점이 있습니다. 화면에 출력되는 결과만 보면 둘 다 의미 없는 문자열입니다. 그래서 자주 같은 것으로 오해받습니다.
하지만 결정적인 차이가 하나 있습니다. 바로 원래 값으로 되돌릴 수 있느냐입니다. 암호화는 되돌릴 수 있고, 해시는 되돌릴 수 없습니다. 이 한 문장이 모든 차이의 출발점입니다.
해시란 무엇인가
해시는 임의의 길이의 데이터를 고정된 길이의 값으로 변환하는 단방향 함수입니다. 단방향이라는 말은 한쪽 방향으로만 갈 수 있다는 뜻입니다. 원본을 넣으면 해시값이 나오지만, 해시값을 가지고 원본을 계산해 낼 수는 없습니다.
해시의 핵심 특징
- 단방향성: 결과값에서 원본을 역산할 수 없습니다
- 고정 길이: 입력이 1글자든 100만 글자든 결과 길이는 동일합니다. SHA-256은 항상 256비트입니다
- 눈사태 효과: 입력을 단 한 글자만 바꿔도 결과 전체가 완전히 달라집니다
- 같은 입력은 항상 같은 결과: 같은 값을 넣으면 언제 어디서 돌려도 동일한 해시가 나옵니다
예를 들어 SHA-256으로 password를 해시하면 5e8848...로 시작하는 64자리 문자열이 나옵니다. 여기에 점 하나만 붙여 password.로 바꾸면 결과는 전혀 다른 문자열이 됩니다. 대표적인 해시 알고리즘으로는 SHA-256, SHA-3, bcrypt, Argon2 등이 있습니다.
비밀번호를 해시로 저장하면, 데이터베이스가 통째로 유출되어도 공격자는 원래 비밀번호를 바로 알아낼 수 없습니다. 이것이 비밀번호에 암호화가 아닌 해시를 쓰는 이유입니다.
암호화란 무엇인가
암호화는 데이터를 키를 이용해 잠그고, 키로 다시 푸는 양방향 기술입니다. 자물쇠와 열쇠를 떠올리면 됩니다. 올바른 키가 있으면 누구든 원본으로 되돌릴 수 있습니다.
암호화의 두 가지 방식
- 대칭키 암호화: 잠글 때와 풀 때 같은 키를 씁니다. 속도가 빠릅니다. AES가 대표적입니다
- 비대칭키 암호화: 공개키로 잠그고 개인키로 풉니다. 키 두 개를 사용합니다. RSA가 대표적이며 HTTPS의 기반입니다
암호화는 나중에 다시 읽어야 하는 데이터에 사용합니다. 예를 들어 주고받는 메시지, 저장된 주민등록번호, 카드번호처럼 서버가 원래 값을 알아야 하는 정보가 대상입니다. 그래서 복호화가 반드시 필요합니다.
해시 vs 암호화 핵심 차이
지금까지 설명한 내용을 한눈에 비교하면 다음과 같습니다.
| 구분 | 해시 | 암호화 |
|---|---|---|
| 방향 | 단방향 | 양방향 |
| 원본 복원 | 불가능 | 가능 (키 필요) |
| 키 사용 | 없음 | 있음 |
| 결과 길이 | 고정 | 입력에 따라 가변 |
| 주요 목적 | 무결성 검증, 비밀번호 저장 | 기밀 데이터 보호와 전송 |
| 대표 알고리즘 | SHA-256, bcrypt, Argon2 | AES, RSA |
| 예시 용도 | 로그인 비밀번호 대조 | HTTPS 통신, 카드번호 저장 |
표에서 보듯 가장 큰 갈림길은 복원 가능 여부입니다. 해시는 검증용이고, 암호화는 보관과 전달용입니다.
실제로 어디에 쓰일까
두 기술은 우리가 매일 쓰는 서비스 곳곳에 숨어 있습니다.
해시가 쓰이는 곳
로그인이 대표적입니다. 서버는 저장된 비밀번호 원본을 모릅니다. 사용자가 입력한 값을 해시한 뒤, 저장된 해시값과 같은지만 비교합니다. 같으면 통과입니다. 파일 다운로드 시 제공되는 체크섬도 해시입니다. 받은 파일이 중간에 변조되지 않았는지 확인하는 용도입니다.
암호화가 쓰이는 곳
주소창의 자물쇠 표시, 즉 HTTPS가 암호화입니다. 브라우저와 서버가 주고받는 데이터를 중간에서 가로채도 읽지 못하게 막습니다. 메신저의 종단간 암호화, 클라우드에 저장된 민감 문서도 암호화 대상입니다.
이런 보안 개념은 평소 무심코 쓰는 온라인 유틸리티 도구에도 적용됩니다. 가령 사진 용량을 줄여주는 이미지 리사이저처럼 브라우저 안에서만 처리되는 도구는 파일을 서버로 보내지 않아 그 자체로 안전합니다. 작업 시간을 재는 온라인 타이머도 마찬가지로 개인정보를 다루지 않습니다. 도구를 고를 때 내 데이터가 어디서 처리되는지 한 번쯤 살펴보면 좋습니다.
자주 하는 오해와 주의점
해시가 단방향이라고 해서 무조건 안전한 것은 아닙니다. 흔한 비밀번호는 미리 계산해 둔 해시 대조표, 이른바 레인보우 테이블로 뚫릴 수 있습니다.
- 솔트를 반드시 추가합니다: 비밀번호마다 무작위 값을 붙여 해시하면 같은 비밀번호라도 결과가 달라져 대조표 공격을 막습니다
- 일반 해시를 비밀번호에 그대로 쓰지 않습니다: SHA-256은 너무 빨라 무차별 대입에 취약합니다. bcrypt나 Argon2처럼 의도적으로 느린 알고리즘을 씁니다
- 암호화 키 관리가 핵심입니다: 암호화는 키가 유출되면 무용지물입니다. 키를 코드에 그대로 넣어두면 안 됩니다
정리하면 두 가지만 기억하시면 됩니다. 첫째, 원래 값을 다시 봐야 하는지로 해시와 암호화를 구분하세요. 둘째, 비밀번호는 솔트를 더한 bcrypt나 Argon2 해시로 저장하세요. 이 원칙만 지켜도 보안 설계의 절반은 성공입니다.