Study/Forensics

WebKit 타임스탬프와 Unix 타임스탬프

imaginefuture-1 2025. 2. 23. 12:58

1. WebKit 타임스탬프와 Unix 타임스탬프란?

📌 WebKit Timestamp

  • WebKit(Chrome, Safari 등)에서 사용하는 타임스탬프 형식.
  • 기준 시간: 1601년 1월 1일 00:00:00 UTC
  • 단위: 마이크로초(1,000,000분의 1초, 10⁻⁶초)
  • 사용 예시:
    • Chrome의 History DB (start_time, last_visit_time 등)
    • WebKit 기반 브라우저의 쿠키, 캐시, 방문 기록 저장

📌 Unix Timestamp (Epoch Time)

  • Unix 시스템에서 널리 사용하는 시간 형식.
  • 기준 시간: 1970년 1월 1일 00:00:00 UTC
  • 단위: 초 (seconds)
  • 사용 예시:
    • 대부분의 운영체제 (Linux, MacOS, Windows 일부)
    • 프로그래밍 언어 (Python, JavaScript 등)
    • 네트워크 프로토콜, 파일 시스템, 데이터베이스

2. WebKit 타임스탬프와 Unix 타임스탬프의 차이

WebKit Timestamp Unix Timestamp

기준 (Epoch Time) 1601년 1월 1일 1970년 1월 1일
단위 마이크로초 (1,000,000분의 1초) 초 (1초 단위)
사용처 Chrome, Safari, WebKit 기반 앱 Unix/Linux 시스템, 대부분의 프로그래밍 환경
형식 예시 13223576418000000 (마이크로초) 1712416601 (초)

변환 공식
WebKit → Unix 변환:

Unix Timestamp = (WebKit Timestamp / 1,000,000) - 11644473600
  • 11644473600 = 1970년 1월 1일 00:00:00 UTC까지의 초 단위 차이
  • 1,000,000으로 나누는 이유: WebKit은 마이크로초 단위지만 Unix는 초 단위라서 변환 필요

Unix → WebKit 변환:

WebKit Timestamp = (Unix Timestamp + 11644473600) * 1,000,000

3. 왜 WebKit과 Unix가 서로 다른 기준을 사용하나? (역사적 이유)

🔹 Unix Timestamp의 역사

  • 1970년 1월 1일을 기준으로 삼은 이유:
    • Unix 시스템이 1969~1970년에 개발됨.
    • 당시 컴퓨터 메모리가 제한적이었기 때문에 최소한의 데이터 크기로 시간을 저장하는 방식이 필요함.
    • 초 단위의 정수값만 저장하는 것이 효율적이었고, 32비트 정수형으로 표현 가능했음.
    • 32비트 정수형으로는 2038년 1월 19일까지 표현 가능 (Year 2038 Problem 존재).

🔹 WebKit Timestamp의 역사

  • 1601년 1월 1일을 기준으로 삼은 이유:
    • Windows NT 파일 시스템 (NTFS) 및 Microsoft FILETIME과의 호환성을 위해.
    • NTFS 파일 시스템과 Windows API는 1601년 1월 1일 기준 마이크로초 단위 타임스탬프를 사용함.
    • WebKit(Apple, Google, Microsoft)이 이 방식을 차용하여 Chrome/Safari의 방문 기록, 쿠키 저장 방식을 Windows 시스템과 쉽게 연동할 수 있도록 만듦.
    • 마이크로초(µs) 단위로 저장하면 보다 정밀한 시간 기록이 가능하다는 장점이 있음.

4. 왜 WebKit Timestamp를 Unix Timestamp로 변환해야 할까?

  • 대부분의 시스템(서버, 로그 분석, 데이터베이스)은 Unix Timestamp를 사용함.
  • 파일 다운로드 시작 시간 같은 특정 정보를 찾을 때, WebKit 타임스탬프를 Unix 형식으로 변환해야 제대로 분석할 수 있음.
  • 예를 들어, 1712416601 같은 Unix Timestamp는 GMT 2024년 4월 6일 15:16:41을 의미하지만, WebKit의 start_time 값은 마이크로초 단위이므로 변환 없이는 사용할 수 없음.

📌 정리

WebKit Timestamp Unix Timestamp

기준(Epoch Time) 1601년 1월 1일 UTC 1970년 1월 1일 UTC
단위 마이크로초 (10⁻⁶ 초) 초 (10⁰ 초)
사용 환경 Chrome, Safari, WebKit 기반 DB (History, 쿠키, 다운로드 기록) Unix/Linux 시스템, 서버, 프로그래밍 언어
왜 다를까? Windows NTFS 호환성 및 높은 정밀도 단순하고 효율적인 저장 방식 (초 단위)

🚀 즉, WebKit은 Microsoft/Windows NTFS 호환성을 유지하기 위해, Unix는 단순하고 가벼운 초 단위 포맷을 사용하기 위해 서로 다른 기준을 채택한 것!

 


 

WebKit Timestamp의 기준이 1601년인 이유 (역사적 배경)

🔹 1601년 1월 1일을 기준으로 삼은 이유:

WebKit의 타임스탬프가 1601년 1월 1일을 기준으로 하는 이유는 Microsoft Windows와 NTFS 파일 시스템의 역사와 깊은 관련이 있음.

  1. Windows NT & NTFS에서 FILETIME의 시작점이 1601년
    • Microsoft Windows는 **NTFS (New Technology File System)**라는 파일 시스템을 사용함.
    • NTFS는 파일의 생성 시간, 수정 시간, 접근 시간 등을 기록하기 위해 "Windows FILETIME" 형식을 사용함.
    • FILETIME은 1601년 1월 1일 00:00:00 UTC부터 시작하여 100나노초(10⁻⁷초) 단위로 시간을 저장함.
  2. FILETIME의 1601년 기준은 Windows NT의 선택
    • 1993년, Microsoft는 새로운 운영체제인 Windows NT를 개발하면서 파일 시스템의 시간 관리를 위한 새로운 포맷을 정의함.
    • 당시 Microsoft는 과거의 레거시 DOS 및 FAT 파일 시스템과 호환성을 유지하면서도, 더 정밀한 타임스탬프가 필요했음.
    • Unix가 1970년을 기준으로 삼았던 것처럼, Microsoft는 1601년 1월 1일을 기준으로 삼기로 결정함.
  3. 1601년이 선택된 이유:
    • 1582년, **그레고리력(Gregorian Calendar)**이 도입되면서, 기존의 율리우스력(Julian Calendar)을 대체하게 됨.
    • Microsoft는 날짜 계산 시 그레고리력을 사용하는 최초의 완전한 세기가 1601년부터 시작된다고 판단했음.
    • 즉, 1601년 이전은 율리우스력과의 충돌이 있어 계산이 복잡해질 수 있었기 때문에 1601년을 기준으로 설정한 것.
  4. WebKit이 1601년을 따른 이유
    • WebKit 기반의 Chrome, Safari 등은 쿠키, 방문 기록, 다운로드 시간을 저장할 때 Windows의 NTFS 및 FILETIME 형식을 그대로 차용함.
    • NTFS의 FILETIME과 호환되도록 하기 위해 WebKit은 동일한 1601년 1월 1일을 기준으로 함.
    • WebKit Timestamp는 마이크로초(µs) 단위로 저장되지만, 기본적인 기준점(Epoch Time)은 Windows NTFS와 동일하게 설정된 것.

📌 정리

시스템 기준 (Epoch Time) 단위

Unix Timestamp 1970년 1월 1일 초 (1초 단위)
Windows NT FILETIME 1601년 1월 1일 100나노초 (10⁻⁷초) 단위
WebKit Timestamp 1601년 1월 1일 마이크로초 (10⁻⁶초) 단위

🔹 결론: 왜 1601년?

  1. Microsoft Windows NT & NTFS의 파일 시간 관리 시스템(FILETIME)과 호환하기 위해.
  2. 1601년이 그레고리력이 완전하게 적용된 최초의 세기이기 때문.
  3. WebKit은 Windows와의 호환성을 위해 1601년 기준을 유지함.

즉, WebKit이 1601년을 기준으로 한 이유는 단순히 NTFS와 Windows의 FILETIME을 그대로 따라갔기 때문!