본문 바로가기

드림핵

[드림핵] 디지털 증거-3 (해시 함수)

해시 함수 | 강의 | Dreamhack

 

Dreamhack | 강의 | Dreamhack

 

dreamhack.io

 

 

해시 함수(Hash Function) 

– 실습과 함께 배우는 데이터 무결성의 핵심 개념 –

안녕하세요! 이번 포스팅에서는 **디지털 포렌식과 보안 분야에서 아주 중요한 ‘해시 함수(Hash Function)’**에 대해 알아보겠습니다. HashCalc 프로그램을 통해 직접 실습하면서 배워보고, PowerShell을 이용한 고급 활용법까지 소개할게요 :)


해시 함수란?

해시 함수(Hash Function)는 입력된 데이터의 길이와 상관없이, 항상 고정된 길이의 값(해시 값)을 출력해주는 함수입니다.

예를 들어, “Hello”나 “안녕하세요”처럼 짧은 문장을 넣든, 아주 긴 텍스트 파일을 넣든, 항상 같은 길이의 해시 값이 나와요. 이 출력 값을 보통 **해시(Hash) 또는 다이제스트(Digest)**라고 부릅니다.


실습 도구 – HashCalc 프로그램 설치 및 실행

HashCalc는 다양한 해시 함수를 간편하게 테스트해볼 수 있는 유틸리티입니다.
[HashCalc 다운로드 링크] (※링크는 본문에 삽입)
설치 후 실행하면 아래와 같은 화면을 볼 수 있습니다.

  • Data Format: 입력 방식 선택 (Text, File, Hex)
  • Hash Function 체크박스: MD5, SHA1, SHA256 등 다양한 해시 알고리즘 선택 가능
  • Calculate 버튼: 해시 계산 실행

눈사태 효과(Avalanche Effect) 실험

입력 데이터에 단 한 글자(!)만 추가해도, 해시 값은 전혀 다른 값으로 바뀌게 됩니다.
이런 현상을 눈사태 효과라고 부르며, 해시 함수의 핵심 특성 중 하나입니다.

알고리즘 데이터 변경 전 해시 데이터 변경 후 해시

MD5 eecdeb...d12 bb5b96...100
SHA1 f582b6...bf1 e47efd...6bd
SHA256 48bc02...6df 78df38...27b

→ 단 하나의 느낌표만 추가했을 뿐인데, 결과는 완전히 달라졌죠?
이런 특성 덕분에 해시 값은 데이터 위변조 여부를 확인하는 데 유용합니다.


해시 계산 실습 (Text vs File 비교)

같은 데이터를 텍스트 입력과 파일 입력으로 넣어도 해시 값이 다를 수 있습니다.
예를 들어 HxD 에디터로 입력한 내용을 파일로 저장한 뒤, HashCalc에서 각각 비교해보세요.

  • Text 입력: 순수 문자열 데이터
  • File 입력: 파일 내부에 포함된 줄바꿈 문자, EOF 등의 정보까지 포함됨
    → 완전히 같은 문자라도, 저장 방식이 다르면 해시 값도 달라질 수 있습니다.

 PowerShell로 해시 계산하기 (고급 활용법)

복잡한 데이터나 여러 파일을 동시에 해시해야 할 때는 PowerShell을 사용하는 게 더 효율적입니다.

Get-FileHash <파일경로> -Algorithm <해시알고리즘> | Format-List

예시:

Get-FileHash report.docx -Algorithm SHA256 | Format-List

여러 파일의 해시값을 한 번에 계산하고 싶다면 와일드카드(*)를 사용하세요:

Get-FileHash *.txt -Algorithm SHA256

해시 함수의 종류와 특징 요약

해시 함수 출력 길이 특징

MD5 128비트 (16바이트) 취약. 사용 지양
SHA1 160비트 (20바이트) 취약. 사용 지양
SHA256 256비트 (32바이트) 안전. 권장
SHA512 512비트 (64바이트) 매우 안전. 권장

MD5, SHA1은 이미 충돌이 발견된 바 있어, 보안이나 법적 증거에는 SHA256 이상을 사용하는 것이 좋습니다.