디지털 포렌식의 개념
디지털 포렌식이란 범죄수사나 기업감사의 대상이 되는 데이터가 디지털 매체(컴퓨터, 서버, 휴대폰, CCTV 등)에 저장되어 있거나 네트워크를 통해 전송되어지고 있을 때, 해당 데이터를 수집ㆍ분석하여 사용자의 위법행위를 증명하는 일련의 과정
디지털 포렌식의 5대원칙
정당성의 원칙(Principle of Authenticity):모든 증거는 적법한 절차와 영장을 통해 수집되어야 합니다. 위법하게 수집된 정보는 증거 능력을 상실합니다.
무결성의 원칙(Principle of Integrity):수집된 증거가 원본과 동일하며, 수집·분석 과정에서 훼손·위조·변조되지 않았음을 입증해야 합니다. 해시값(Hash) 등을 통해 증명합니다.
신속성의 원칙(Principle of Timeliness):디지털 데이터는 휘발성이 강하므로, 지체 없이 신속하게 수집 및 분석을 진행해야 합니다.
재현의 원칙(Principle of Replicability):동일한 조건과 방법으로 분석했을 때, 누구라도 항상 같은 결과가 나와야 합니다.
연계보관성의 원칙(Chain of Custody):증거의 획득, 이송, 보관, 분석 등 모든 과정에서 증거를 누가, 언제, 어떻게 다루었는지 명확하게 기록하고 추적할 수 있어야 합니다.
해시란 무엇인가?
해시(Hash)는 임의의 길이를 가진 데이터를 고정된 길이의 고유한 문자열(값)로 변환해 주는 알고리즘 또는 그 결과물(해시값)을 의미
해시의 3대 핵심 특징
고유성 :데이터가 단 1글자, 1비트만 바뀌어도 완전히 다른 해시값이 생성됩니다.
단방향성 :해시값만 보고 원본 데이터가 무엇이었는지 절대 역추적할 수 없습니다.
고정된 길이 :원본 파일의 크기가 1KB이든 100GB이든 항상 똑같은 길이의 해시값을 출력합니다.
해시 알고리즘
MD5:과거에 많이 쓰였으나 현재는 보안 취약점(충돌 가능성)으로 인해 포렌식에서 단독 사용을 지양
SHA-256:현재 디지털 포렌식과 암호학계에서 가장 널리 쓰이는 표준적인 안전한 알고리즘
충동 가능성
무한한 데이터를 유한한 방에 나누어 넣다 보면, 확률적으로 언젠가는 서로 다른 데이터가 같은 방(해시값)에 들어가는 상황이 발생
해시 실습
import hashlib
import os
def calculate_sha256(data, is_file=False):
sha256 = hashlib.sha256()
if is_file:
if not os.path.exists(data):
return "파일을 찾을 수 없습니다."
with open(data, 'rb') as f:
while chunk := f.read(65536):
sha256.update(chunk)
else:
sha256.update(data.encode('utf-8'))
return sha256.hexdigest()
if __name__ == "__main__":
print("=== SHA-256 해시값 추출 프로그램 ===")
choice = input("1: 텍스트 입력, 2: 파일 경로 입력 -> ")
if choice == '1':
text = input("해시를 구할 텍스트를 입력하세요: ")
print(f"▶ SHA-256 해시값: {calculate_sha256(text, is_file=False)}")
elif choice == '2':
path = input("파일의 절대 경로 또는 상대 경로를 입력하세요: ").strip('"\'')
print(f"▶ SHA-256 해시값: {calculate_sha256(path, is_file=True)}")
else:
print("잘못된 선택입니다.")