Tools mentioned in this article
Open the browser-based tool while you read and try the workflow immediately.
‘원래 데이터로 돌아갈 수 없다’는 것의 대단함
비밀번호를 저장할 때, 그것을 그대로 데이터베이스에 넣는 것은 매우 위험한 일입니다. 이때 사용되는 것이 바로 **해싱(Hashing)**입니다.

해싱은 ‘입력된 데이터를 다시는 원래대로 되돌릴 수 없는 복잡한 문자열로 변환하는 것’을 의미합니다. 얼핏 불편하게 들릴 수도 있지만, 이러한 ‘편도 승차권’과 같은 성질이야말로 우리의 디지털 생활을 지켜주는 든든한 방패가 됩니다.
해싱과 HMAC: 비슷해 보이지만 다른 것
보안 관련 논의에서 자주 등장하는 이 두 가지 개념을 간단히 정리해 보겠습니다.
1. 해싱(Hashing): 데이터의 ‘지문’ 채취
- 역할: 데이터가 ‘올바른지’ 확인합니다.
- 특징: 동일한 데이터는 항상 동일한 해시값을 출력하지만, 해시값만으로는 원래 데이터를 유추할 수 없습니다.
- 용도: 비밀번호 저장(DB에는 해시값만 저장), 파일 변조 여부 확인.
2. HMAC: 데이터의 ‘봉인’ 확인
- 역할: 데이터가 ‘권한이 있는 사람으로부터 왔는지’ 확인합니다.
- 특징: 해싱 과정에 ‘비밀 키(Secret Key)‘를 조합합니다.
- 용도: API 요청 검증, 웹훅(Webhook) 서명. 키를 알고 있는 사람만이 올바른 계산을 할 수 있으므로 위장 공격을 방지할 수 있습니다.
‘안전’을 유지하기 위한 지혜
기술은 나날이 발전하며, 과거의 ‘안전’이 현재에는 ‘불충분’해질 수도 있습니다. 현대적인 보안 표준을 기억해 두세요.
- 알고리즘 선택: 현재는
SHA-256이나SHA-512가 표준입니다. 과거에 주로 쓰였던 MD5나 SHA-1은 계산을 통해 뚫릴 위험이 있으므로 새로운 시스템에서는 사용을 피해야 합니다. - 솔트(Salt)의 마법: 비밀번호를 그대로 해싱하는 대신, 사용자마다 제각기 다른 ‘향신료(랜덤 문자열)‘를 섞어서 계산합니다. 이렇게 하면 동일한 비밀번호를 쓰는 사용자가 있더라도 해시값은 서로 다르게 나타나 공격자를 더욱 곤란하게 만들 수 있습니다.
실제로 움직여 보며 원리를 ‘체감’하기
“해시값은 실제로 어떻게 생겼을까?”, “키를 바꾸면 HMAC은 어떻게 변할까?”
이런 궁금증을 저희 사이트의 **해시/HMAC 생성기**를 통해 해결해 보세요.
데이터를 입력하고 SHA-256의 긴 문자열이 즉시 나타나는 순간, 키를 입력하여 HMAC이 완전히 바뀌는 순간을 직접 확인해 보세요. 이러한 변화를 눈앞에서 목격함으로써 추상적이었던 ‘보안’ 개념이 여러분의 확실한 지식으로 바뀔 것입니다.
마치며
보안은 보이지 않는 곳에서 우리를 지켜주는 조용한 수호신입니다.
해싱과 HMAC의 원리를 아는 것은 그 수호신과 친해지는 첫걸음입니다. 너무 어렵게 생각하지 말고, 우선 도구를 통해 ‘실습’해 보는 것부터 시작해 보는 건 어떨까요?
자주 묻는 질문
해시와 암호화는 무엇이 다른가요?
되돌릴 수 있는지가 다릅니다. 암호화는 키가 있으면 원래 데이터로 복원할 수 있지만, 해시는 단방향이라 복원할 수 없습니다. 비밀번호 저장에 해시를 쓰는 이유가 이것입니다. 다만 ‘복원할 수 없다’가 ‘안전하다’를 뜻하지는 않습니다. 짧은 비밀번호는 총당 대입으로 후보를 해시해 비교하면 맞출 수 있으므로, 솔트와 느린 해시 함수가 필요합니다.
bcrypt의 코스트 팩터는 어떻게 정하나요?
사용하는 서버에서 한 번의 해시에 100~250밀리초 정도 걸리는 값이 기준입니다. 값을 1 올리면 계산량이 두 배가 되므로, 실제 환경에서 측정해 결정하세요. 하드웨어가 빨라질수록 적정값도 올라가기 때문에, 한 번 정하고 방치하지 말고 몇 년에 한 번은 재검토하는 것이 좋습니다.
SHA-256과 SHA-3 중 무엇을 써야 하나요?
일반적인 무결성 확인이라면 SHA-256으로 충분하며, 현재 실용적인 공격은 알려져 있지 않습니다. SHA-3는 내부 구조가 다른 대안으로 준비된 것이지 SHA-256이 위험해서 나온 것이 아닙니다. 다만 어느 쪽이든 비밀번호 저장에는 쓰면 안 됩니다. 둘 다 빠르게 설계되어 있어 총당 대입에 유리하기 때문입니다.
비밀번호 외의 기밀 데이터에도 해시를 쓸 수 있나요?
용도에 따라 다릅니다. ‘값을 감추면서 일치 여부만 확인하고 싶은’ 경우에는 유효합니다. 다만 이메일 주소처럼 후보가 한정된 값은 해시해도 대조로 특정될 수 있습니다. 그런 경우에는 솔트를 더하거나, 애초에 암호화를 선택하는 편이 맞습니다.