1) 일방향 해시함수(One-way Hash Function)란?
"입력값(메시지)"을 넣으면, 길이가 고정된 "해시값(Hash / Digest)"을 만들어내는 함수예요.
-
예:
"hello"→2cf24d...(고정 길이의 문자열) -
“일방향(one-way)”이라는 말은 해시값만 보고 원래 입력을 되돌려 찾기(역연산)가 사실상 불가능하다는 뜻이에요.
즉,
-
암호화(복호화 가능) ↔ 해시(복호화 개념 없음)
이게 가장 중요한 차이!
2) 특징(왜 쓰는가?)
일방향 해시함수는 주로 아래에 사용돼요.
(1) 무결성(Integrity) 검증
파일을 내려받았을 때,
-
원본 파일의 해시값 = 내가 받은 파일의 해시값
이면 중간에 변조되지 않았다고 볼 수 있어요.
(2) 비밀번호 저장
비밀번호를 그대로 저장하면 위험하니까,
-
비밀번호 자체가 아니라 해시값을 저장해요.
로그인할 때도 입력한 비밀번호를 해시해서 DB의 해시값과 비교하죠.
실무에서는 Salt(솔트) 를 섞어서 같은 비밀번호라도 해시가 다르게 만들고, 느리게 만드는 PBKDF2/bcrypt/scrypt/Argon2 같은 방식도 많이 써요.
(3) 전자서명/인증의 기반
전자서명은 보통 “원문 전체”에 서명하는 대신,
-
원문 → 해시 → 해시값에 서명
방식으로 효율과 안정성을 챙겨요.
3) 기본 성질(시험에 자주 나오는 핵심 3가지)
일방향 해시함수의 대표적인 기본 성질은 아래 3개로 정리돼요.
① 역상 저항성(Preimage Resistance)=프리이미지 저항성
해시값 h가 주어졌을 때,
-
H(m) = h가 되는 원문m을 찾기 어려워야 함
👉 해시만 보고 원문을 “복원”할 수 없어야 한다는 뜻!
② 제2역상 저항성(Second Preimage Resistance)=제2프리이미지 저항성
어떤 원문 m1이 주어졌을 때,
-
H(m1) = H(m2)를 만족하는 다른m2(≠m1)를 찾기 어려워야 함
👉 “이 파일이랑 해시가 같은 다른 파일”을 만들기 어려워야 해요.
③ 충돌 저항성(Collision Resistance)=강한 충돌 내성
서로 다른 두 입력 m1 ≠ m2에 대해,
-
H(m1) = H(m2)인 쌍을 찾기 어려워야 함
👉 아예 “충돌 쌍”을 찾아내기 어렵게 만드는 성질!
참고: 충돌은 이론적으로는 반드시 존재해요(입력은 무한, 출력 길이는 고정).
그래서 목표는 “충돌이 없게”가 아니라 “찾기 어렵게” 입니다.
4) 추가로 알아두면 좋은 성질(특징으로 자주 묶여 나옴)
✅ 출력 길이 고정
입력이 아무리 길어도 해시값 길이는 고정.
✅ 작은 변화에도 결과가 크게 바뀜 (Avalanche Effect)
입력 한 글자만 바꿔도 해시값이 완전히 달라져요.
(변조 탐지에 매우 유리)
✅ 빠른 연산(일반 해시) / 의도적으로 느린 연산(비번용)
-
무결성용 해시(SHA-256 등)는 보통 빠름
-
비밀번호용 해시(PBKDF2/bcrypt/Argon2)는 공격 어렵게 일부러 느림
5) 한 줄 요약(암기용)
-
정의: 입력을 고정 길이 해시값으로 바꾸는 “복원 불가” 함수
-
기본성질 3대장: 역상 저항성 / 제2역상 저항성 / 충돌 저항성
-
핵심 특징: 고정 길이, avalanche effect, 무결성/비번저장/서명에 사용