잘난 척을 위한 한 줄 요약
해시함수는 복잡한 데이터를 짧고 일정한 형태로 바꿔서, 컴퓨터가 “찾기·비교하기·검증하기”를 훨씬 빠르게 하도록 만드는 압축형 번역기 같은 함수다.
해시함수, 왜 컴퓨터는 긴 데이터를 짧은 값으로 바꿔서 다루려 할까
해시함수란 무엇일까?
해시함수(Hash function)는 길이가 제각각인 입력값을 받아서, 고정된 길이의 결과값으로 바꾸는 함수다. 이렇게 나온 결과를 해시값, 해시 코드, 다이제스트라고 부른다. MDN은 해시함수를 “가변 길이 입력을 고정 길이 출력으로 바꾸는 함수”라고 설명하고 있고, 일반적인 컴퓨터과학 맥락에서도 임의 크기의 데이터를 고정 크기 값으로 매핑하는 함수로 정의된다.
처음 들으면 “굳이 왜 그렇게 바꾸지?” 싶다.
그 이유는 컴퓨터가 원본 데이터를 매번 통째로 들고 비교하는 것보다, 짧은 대표값으로 다루는 쪽이 훨씬 빠를 때가 많기 때문이다. 특히 데이터 검색, 중복 확인, 무결성 검증 같은 작업에서는 이 짧은 값이 엄청 유용하다. NIST는 hashing을 “데이터를 대표하는 수치값을 생성하는 과정”으로 설명한다.
해시함수는 어디에 쓰일까?
해시함수는 생각보다 훨씬 넓게 쓰인다.
다만 초보자가 많이 헷갈리는 건, 모든 해시함수가 같은 용도는 아니라는 점이다.
자료구조에서의 해시함수
자료구조에서는 해시함수를 주로 빠른 검색을 위해 쓴다. 예를 들어 해시 테이블은 키를 해시값으로 바꿔 배열의 특정 위치에 연결함으로써, 데이터를 아주 빠르게 찾게 해준다. 해시 테이블은 평균적으로 매우 빠른 조회 성능을 목표로 하고, 충돌이 나면 체이닝이나 개방 주소법 같은 방식으로 처리한다.
보안에서의 해시함수
보안 쪽에서는 암호학적 해시함수(cryptographic hash function) 라는 더 강한 성질을 가진 버전을 쓴다. NIST는 이를 파일이나 메시지 전체 내용에 의존하는 값을 계산해 해당 데이터를 대표하도록 만드는 알고리즘으로 설명한다. 쉽게 말해, 문서나 파일의 “지문” 같은 역할을 하는 것이다.
즉, 해시함수는 하나의 단일 개념이라기보다, “짧은 대표값을 만드는 함수”라는 큰 공통점 아래에서 검색용과 보안용으로 자주 나뉘어 이해하는 편이 훨씬 쉽다.
어떻게 작동한다고 보면 쉬울까?
가장 쉬운 이미지는 이렇다.
긴 문장, 파일, 숫자열 같은 원본 데이터를 넣으면 해시함수가 그걸 계산해서 짧고 일정한 길이의 값으로 바꿔준다.
그리고 컴퓨터는 그 짧은 값을 기준으로 위치를 찾거나, 내용이 바뀌었는지 비교하거나, 같은 데이터인지 빠르게 확인한다.
예를 들어 이름, 학번, 주소 같은 긴 키를 직접 비교하며 저장 위치를 찾는 대신, 해시함수로 숫자 형태의 해시값을 만든 뒤 그 값을 이용해 저장 위치를 정하면 훨씬 효율적이다. 위키백과의 해시 함수 설명도 해시 함수의 대표적 용도를 해시 테이블 인덱싱과 빠른 검색으로 설명한다.
해시함수의 핵심 특징은 뭘까?
1. 입력은 길어도 출력은 보통 짧고 일정하다
해시함수의 가장 기본적인 특징은 입력 크기와 상관없이 출력이 정해진 길이로 나온다는 점이다. 예를 들어 짧은 문자열이든 긴 파일이든, 같은 해시함수를 통과하면 일정한 길이의 결과가 나온다. MDN과 NIST 모두 이 점을 핵심 정의로 잡고 있다.
2. 계산이 빨라야 한다
자료구조에서든 보안에서든, 해시함수는 보통 자주 호출된다.
그래서 너무 느리면 쓸모가 떨어진다. 일반적인 해시 함수 설명에서도 효율성과 낮은 지연 시간이 중요한 성질로 다뤄진다.
3. 서로 다른 입력이 가능한 한 고르게 퍼져야 한다
좋은 해시함수는 결과값이 한쪽에 몰리지 않고 넓게 퍼져야 한다. 그래야 특정 위치에 데이터가 몰려 성능이 떨어지는 일을 줄일 수 있다. MDN도 서로 다른 입력은 가능한 한 서로 다른 결과를 내야 한다고 설명한다.
해시충돌은 왜 생길까?
여기서 가장 중요한 개념이 하나 나온다.
바로 충돌(collision) 이다.
해시함수는 입력 공간은 엄청 크고, 출력 공간은 상대적으로 작다. 그러다 보니 서로 다른 두 입력이 같은 해시값으로 매핑될 수 있다. 이게 해시충돌이다. 일반 해시 함수에서는 충돌 자체를 완전히 없앨 수 없고, 얼마나 잘 분산시키고 잘 처리하느냐가 중요하다. 해시 테이블과 해시 함수 설명에서는 충돌을 전제로 체이닝, 선형 탐사, 이차 탐사, 이중 해싱 같은 해결 방식을 사용한다고 설명한다.
쉽게 말하면 우편함 번호를 정하는데, 서로 다른 사람이 우연히 같은 번호를 받은 상황과 비슷하다.
번호 체계가 아무리 좋아도 완벽하게 안 겹치게 하긴 어렵다.
그래서 중요한 건 “안 겹치게 노력하는 것”과 “겹쳤을 때 처리하는 것”이다.
해시함수와 암호화는 뭐가 다를까?
이 부분은 진짜 많이 헷갈린다.
해시함수는 기본적으로 되돌리기 위한 게 아니다
암호화는 원래 데이터를 숨긴 뒤, 적절한 키가 있으면 다시 복원하는 것이 목적이다.
반면 해시함수는 원본을 짧은 값으로 바꾸되, 보통 그 결과만 보고 원본을 되찾는 것을 목적으로 하지 않는다. 특히 암호학적 해시함수는 이런 역추적이 매우 어렵도록 설계된다. NIST의 암호학적 해시함수 정의도 파일이나 메시지의 “지문” 역할을 강조한다.
그래서 용도도 다르다
암호화는 비밀 유지에 가깝고, 해시함수는 무결성 확인, 빠른 조회, 중복 판정, 서명 보조 등에 더 가깝다.
예를 들어 파일 해시를 비교해 파일이 바뀌었는지 확인하는 건 해시의 대표적 활용이고, HMAC처럼 해시함수를 바탕으로 인증 구조를 만드는 방식도 있다. MDN의 HMAC 설명은 해시 기반 메시지 인증 코드가 무결성과 인증을 제공한다고 말한다.
자료구조용 해시함수와 보안용 해시함수는 어떻게 다를까?
자료구조용 해시함수
자료구조에서는 속도와 분산이 중요하다.
즉, 빨리 계산되고 테이블에 고르게 퍼뜨리면 좋은 경우가 많다. 해시 테이블 맥락에서는 이 특성이 핵심이다.
보안용 해시함수
보안에서는 여기에 더해 충돌 저항성, 역상 저항성, 2차 역상 저항성 같은 성질이 요구된다. 쉽게 말해, 같은 해시값을 만드는 다른 입력을 찾기 어렵고, 해시값만 보고 원본을 알아내기 어렵고, 특정 원본과 같은 해시값을 갖는 다른 값을 찾기도 어려워야 한다. NIST가 정의하는 cryptographic hash function은 이런 보안적 요구를 전제로 한다.
겉으로 보기엔 둘 다 “입력을 짧은 값으로 바꾼다”는 점에서 비슷하다.
하지만 실무에서는 검색용 해시와 보안용 해시를 구분해서 보는 습관이 중요하다.
어디서 자주 보게 될까?
해시함수는 컴퓨터공학에서 정말 자주 튀어나온다.
해시 테이블, 딕셔너리, 맵
파이썬의 dict, 자바의 HashMap 같은 구조를 이해하려면 해시함수를 알아야 한다. 키를 어디에 저장할지 정하는 핵심 도구가 해시이기 때문이다.
파일 무결성 확인
소프트웨어 설치 파일을 내려받을 때 SHA-256 같은 해시값을 같이 공개하는 경우가 있다.
이건 파일이 중간에 변조되지 않았는지 확인하라는 뜻이다. NIST glossary도 해시를 파일이나 메시지의 fingerprint처럼 설명한다.
비밀번호 저장, 전자서명, 인증 구조
현대 보안 시스템에서는 해시함수가 비밀번호 저장, 전자서명, HMAC 같은 구조에서 핵심 구성 요소로 쓰인다. 다만 비밀번호 저장은 단순 해시만으로 충분하지 않고, 보통은 salt와 전용 알고리즘이 같이 필요하다. HMAC은 해시 기반 메시지 인증 코드의 대표 예다.
이 개념을 볼 때 같이 체크하면 좋은 것
어떤 맥락의 해시함수인가?
자료구조 수업에서 말하는 해시인지, 보안 수업에서 말하는 해시인지 먼저 구분하는 게 중요하다.
같은 단어지만 기대하는 성질이 다르다.
충돌을 어떻게 다루는가?
좋은 해시함수도 충돌은 피할 수 없다.
그래서 실전에서는 충돌 자체보다, 충돌이 났을 때 구조가 어떻게 처리하느냐가 성능과 안정성을 크게 좌우한다.
해시값은 원본 그 자체가 아니다
해시값은 원본을 대표하는 짧은 값이지, 원본 자체가 아니다.
특히 일반 자료구조 맥락에서는 해시값만으로 데이터를 완전히 식별한다고 생각하면 오해가 생긴다. 충돌이 있기 때문이다.
결국 핵심은 이것이다
해시함수는 긴 데이터를 짧고 일정한 형태의 값으로 바꿔,
컴퓨터가 더 빨리 찾고, 더 쉽게 비교하고, 더 효율적으로 검증하도록 돕는 함수다. 자료구조에서는 빠른 검색의 핵심이고, 보안에서는 데이터 무결성과 인증 구조의 핵심 도구다.
아주 짧게 다시 정리하면 이렇게 기억하면 된다.
- 자료구조에서는: 빨리 찾기 위해 쓴다
- 보안에서는: 변조 여부를 확인하고 인증을 돕기 위해 쓴다
그래서 해시함수는 결국, “원본을 통째로 다루지 말고, 다루기 쉬운 대표값으로 바꿔서 일하자”는 컴퓨터의 아주 실용적인 아이디어라고 보면 된다.
참고 자료
- MDN Web Docs, Hash function
https://developer.mozilla.org/en-US/docs/Glossary/Hash_function - NIST CSRC, Cryptographic hash function
https://csrc.nist.gov/glossary/term/cryptographic_hash_function - NIST CSRC, Hashing
https://csrc.nist.gov/glossary/term/hashing - NIST CSRC, Hash
https://csrc.nist.gov/glossary/term/hash - Wikipedia, Hash function
https://en.wikipedia.org/wiki/Hash_function - Wikipedia, Hash table
https://en.wikipedia.org/wiki/Hash_table
Hash function - Glossary | MDN
developer.mozilla.org
Cryptographic hash function - Glossary | CSRC
A function that maps a bit string of arbitrary length to a fixed-length bit string. Depending upon the relying application, the security strength that can be supported by a hash function is typically measured by the extent to which it possesses one or more
csrc.nist.gov
hashing - Glossary | CSRC
The process of using a mathematical algorithm against data to produce a numeric value that is representative of that data. Sources: CNSSI 4009-2015 from NIST SP 800-72 NIST SP 800-101 Rev. 1 under Hashing NIST SP 800-72 under Hashing A method of ca
csrc.nist.gov
hash - Glossary | CSRC
A cryptographic hash function, such as SHA-1. Sources: NIST SP 800-135 Rev. 1 under HASH The output of a hash function (e.g., hash(data) = digest). Also known as a message digest, digest, hash digest, or hash value. Sources: NISTIR 8301 under Hash
csrc.nist.gov
참고 영상
- What is a hash function?
https://www.youtube.com/watch?v=gJvGk9_5hEI - Hash Tables and Hash Functions
https://www.youtube.com/watch?v=KyUTuwz_b7Q - What is a Cryptographic Hashing Function?
https://www.youtube.com/watch?v=gTfNtop9vzM - Cryptographic Hash Function Explained
https://www.youtube.com/watch?v=YI87vMnZCkQ
'개념 잡동사니' 카테고리의 다른 글
| 에이전트 하네스(agent harness) (0) | 2026.03.25 |
|---|---|
| 블룸 필터(Bloom filter) (0) | 2026.03.23 |
| 칩렛(Chiplet) (0) | 2026.03.22 |
| 먼로주의(Monroe Doctrine)와 돈로주의(Donroe Doctrine) (0) | 2026.03.21 |
| 자사주 소각 (0) | 2026.03.20 |