보안/암호학 / / 2025. 1. 11. 04:26

해시 함수란? 원리, 특징, 활용 사례까지

1. 해시 함수란 무엇인가?

해시 함수(Hash Function)는 임의의 길이의 입력 데이터를 고정된 길이의 출력 값으로 변환하는 수학적 알고리즘이다. 특정 수학적 알고리즘을 사용하여 입력 데이터를 압축하고 변환한다. 이 과정은 단방향(입력값 → 출력값)으로 이루어지며, 출력값에서 원래 입력 데이터인 입력값을 복원할 수 없다는 대표적인 특징을 가지고 있다. 대표적인 해시 함수로는 SHA 시리즈와 MD5 등이 있다.

 

2. SHA-256 예시를 통한 해시 함수 설명

앞서 설명한 글로는 이해하기가 쉽지 않기 때문에, 자주 사용되는 'SHA-256'을 예시로 들어 설명하고자 한다. #링크에서 직접 실습해 볼 수 있다.

 

< 해시 함수 >

 

해시 함수에 입력값을 넣으면 다음과 같은 출력값을 획득할 수 있다.

 

입력값 (UTF-8) 출력값 (Hex)
안녕하세요 2c68318e352971113645cbc72861e1ec23f48d5baa5f9b405fed9dddca893eb4
안녕하세요. 8b118d6741f7cfa1a7ee246d0dda39f2f00bf9fd207b4e6c7fad87a15434a513
안녕하세요. 해시 함수는 뭘까요? f03a13d115c5640f0992cc36961a03fcc1d484e3e8ab1ff0a5233ef3cf418e98

 

세 가지 입력값에 대해 해시 함수를 적용한 결과는 위와 같다. 동일한 문장에 마침표만 추가해도 전혀 다른 결과가 나올 수 있으며, 출력값의 글자수가 항상 동일하다는 특이점을 확인할 수 있다.

 

3. 해시 함수의 주요 특징

  • ❗️ 어떤 입력값을 넣든지 관계없이 출력값은 항상 고정된 길이의 데이터가 나온다.
출력값이 항상 고정된 길이라는 말은 SHA-256 해시 함수의 출력이 항상 64자라는 뜻이다. SHA-256의 출력값이 64글자인 이유는 256bit를 4bit씩 나누어 16진수로 표현한 결과이기 때문이다. ( 4 × 64 = 256 )

 

  • ❗️ 같은 입력값을 넣으면 항상 동일한 출력값이 나온다.
누가 '안녕하세요'를 입력하든 해시 함수의 결과는 모두 '2c68318e352971...'로 동일하다는 의미이다.

 

  • ❗️ 출력값을 보고 입력값을 유추하기 어렵다.
해커가 출력값을 탈취하더라도 해시 함수를 취하기 전인 입력값을 찾아내기가 매우 어렵다. 이를 '일방향성' 혹은 '단방향성'을 지닌다고 표현한다.

 

  • ❗️ 같은 출력값을 가지는 입력값을 찾아내기 매우 어렵다.
동일한 출력값을 갖는 입력값이 존재할 수는 있지만 그 값을 찾아내기가 매우 어렵다. 지속적으로 입력값을 변경하여 넣어보며 같은 출력값을 찾아내야 하기 때문이다. 이를 '충돌 저항성'을 지닌다고 표현한다.

 

4. 해시 함수를 활용한 무결성 검증 과정

앞서 살펴보았듯이 해시 함수 그 특성이 명확하여 다양한 분야에서 활용된다. 아래는 CMS(Cryptographic Message Syntax)의 컨텐츠 유형 중 하나인 DigestedData를 통해 무결성을 확인하는 과정을 설명한 예시이다. 이를 통해 해시 함수가 어떤 방식으로 적용되는지 이해할 수 있다.

 

< 해시 함수를 활용한 무결성 확인 : DigestedData >

 

  • 1️⃣ 닝닝이는 메시지를 작성한다.
  • 2️⃣ 닝닝이는 메시지를 해시 함수에 입력하여 해시값 A를 생성한다.
  • 3️⃣ 닝닝이는 다음의 요소들을 하나로 묶어 DigestedData를 생성한다.
    • 메시지
    • 해시값 A
    • 사용된 해시 알고리즘 정보
  • 4️⃣ 닝닝이는 생성된 DigestedData를 지젤에게 전송한다.
  • 5️⃣ 지젤은 수신한 DigestedData에서 메시지를 추출한다.
  • 6️⃣ 지젤은 추출한 메시지를 동일한 해시 함수에 입력하여 해시값 B를 생성한다.
  • 7️⃣ 지젤은 전달받은 해시값 A 자신이 계산한 해시값 B 비교하여 일치여부를 확인한다.
    • A = B, 메시지가 변조되지 않았음을 확인할 수 있다.

 

※ 참고 : CMS의 SignedData

SignedData는 CMS의 컨텐츠 유형 중 하나로, 전자 서명을 포함한 데이터를 구조화하여 전달하기 위한 표준 형식이다. 이 역시 해시 함수의 주요 특성을 활용하므로 #링크를 통해 참고한다.

 

5. 마무리

이번 글을 정리하면 다음과 같다.

 

  • 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 해시 함수라고 한다.
  • 해시 함수는 일방향성, 충돌 저항성 등의 특징을 가지고 있다. 따라서 무결성 확인 등에 많이 활용된다.

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유