일방향 해시함수 - 이해하기


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, 무결성/비번저장/서명에 사용


댓글 쓰기

새 댓글을 작성할 수 없습니다.*

다음 이전