암호학적 해싱의 이해: 왜 되돌릴 수 없으며 어떻게 비밀번호를 보호하는가
사이버 보안의 세계에서 **해싱(Hashing)**은 가장 기본적이면서도 종종 오해받는 개념 중 하나입니다. 해싱은 비밀번호를 보호하고, 다운로드한 파일의 무결성을 검증하며, 블록체인을 구동하는 보이지 않는 방패입니다.
그렇다면 해시란 정확히 무엇일까요? 왜 ‘복호화’할 수 없을까요? 그리고 가장 중요한 것은, 되돌릴 수 없다면 웹사이트는 사용자가 올바른 비밀번호를 입력했는지 어떻게 알 수 있을까요?
1. 해시 함수란 무엇인가요?
암호학적 해시 함수는 임의의 크기의 입력값(메시지)을 받아 고정된 크기의 문자열(다이제스트)로 변환하는 수학적 알고리즘입니다. 이 문자열은 보통 무작위로 나열된 알파벳과 숫자의 조합처럼 보입니다.
해싱의 황금 규칙:
- 결정론적(Deterministic): 동일한 입력에 대해서는 항상 정확히 동일한 해시가 생성됩니다.
- 빠른 계산: 실용적인 사용을 위해 충분히 빨라야 합니다.
- 고정된 출력 크기: 단어 하나를 해싱하든 도서관 전체 데이터를 해싱하든 출력 길이는 항상 동일합니다 (예: SHA-256의 경우 256비트).
- 눈사태 효과(Avalanche Effect): 입력값이 아주 조금만 바뀌어도(예: 글자 하나 변경) 완전히 다른 해시 결과가 나타납니다.
2. 왜 해싱은 되돌릴 수 없나요?
키를 사용하여 암호화하고 복호화할 수 있는 양방향 통로인 **암호화(Encryption)**와 달리, 해싱은 일방통행입니다. 일단 해시값이 생성되면, 이를 ‘역전’시켜 원래의 데이터를 얻는 것은 불가능합니다.
‘물감 섞기’의 비유
파란색 물감 한 버킷과 노란색 물감 한 버킷이 있다고 가정해 봅시다. 이 둘을 섞으면 초록색이 됩니다. 파란색과 노란색으로 초록색을 만드는 것은 쉽지만, 그 초록색 물감을 다시 원래의 파란색과 노란색 버킷으로 완벽하게 분리해내는 것은 물리적으로 불가능합니다.
수학적 이유: 정보의 손실
해싱 알고리즘은 의도적으로 정보를 누락시키도록 설계되었습니다. 예를 들어, “숫자들을 모두 더한 뒤 마지막 자릿수만 취한다"라는 간단한 해시 규칙이 있다면:
- 입력
15->1+5 = 6 - 입력
24->2+4 = 6
결과값 6만 보고는 원래 입력이 15였는지, 24였는지, 혹은 33이었는지 알 방법이 없습니다. SHA-256과 같은 실제 알고리즘은 이보다 훨씬 복잡하지만, 원리는 동일합니다. 정보가 압축되고 일부가 버려지는 것입니다.
3. 되돌릴 수 없다면 비밀번호 일치 여부는 어떻게 확인하나요?
가장 많이 궁금해하는 질문입니다. 웹사이트가 내 비밀번호를 해시로 저장하고 이를 되돌릴 수 없다면, 내가 제대로 로그인했는지 어떻게 알 수 있나요?
답은 간단합니다. 비밀번호 자체를 검증하는 것이 아니라, 해시값을 검증하는 것입니다.
검증 워크플로우:
- 회원가입: 계정을 생성할 때 서버는 비밀번호(예:
MySecret123)를 받아 해싱한 뒤, 데이터베이스에 해시값만 저장합니다. - 로그인 시도: 로그인할 때 비밀번호를 다시 입력합니다.
- 비교: 서버는 방금 입력된 비밀번호를 받아 동일한 해싱 알고리즘에 통과시킵니다.
- 일치 여부 확인: 서버는 ‘새로 생성된 해시’와 ‘저장된 해시’를 비교합니다.
Hash(입력값)==저장된 해시라면 비밀번호는 반드시 일치합니다.- 서로 다르다면 비밀번호가 틀린 것입니다.
서버는 사용자의 실제 비밀번호가 무엇인지 절대로 알 수 없습니다. 단지 입력된 데이터가 기대되는 수학적 지문을 생성하는지만 확인할 뿐입니다.
4. 현대의 보안: ‘솔트(Salt)’ 추가하기
해싱은 결정론적이기 때문에 password123과 같은 흔한 비밀번호는 항상 동일한 해시를 생성합니다. 해커들은 흔한 비밀번호의 해시 목록인 ‘레인보우 테이블(Rainbow Tables)‘을 사용하여 이를 즉시 풀어낼 수 있습니다.
이를 방지하기 위해 현대 시스템은 **솔트(Salt)**를 사용합니다. 해싱하기 전에 비밀번호에 추가되는 임의의 문자열입니다.
해시(비밀번호 + 솔트) = 안전한 해시
이렇게 하면 두 사용자가 동일한 비밀번호를 사용하더라도 저장되는 해시값은 완전히 달라지게 됩니다.
요약
| 개념 | 목적 | 가역성 |
|---|---|---|
| 암호화 | 비밀 통신 | 가역적 (키 필요) |
| 해싱 | 데이터 무결성 및 비밀번호 보안 | 불가역적 |
해싱은 현대 디지털 신뢰의 초석입니다. 민감한 데이터를 되돌릴 수 없는 지문으로 변환함으로써, 원래의 비밀을 노출하지 않고도 신원을 확인하고 시스템을 보호할 수 있습니다.