ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Time Information Expressions(시간 정보 표현)
    $ 포렌식 $/$ 포렌식 기술적 이론 $ 2019. 12. 6. 22:25

    디지털 데이터에서 절때 빠질수 없는 시간 정보를 표현하는 방식에 대해서 이야기 해보려고 합니다.

    필자 같은 경우에는 공부하면서 시간 정보를 표시하는 HEX값이 나타난다면 dcode.exe 라는 시간 변환 툴을 이용해서 복호화만 하고 넘기기 일수 였습니다. 하지만 해당 HEX값이 어떻게 복호화가 되는지 알아보게 되었습니다.

    HEX 값이 어떤 구조를 가지는가도 중요하지만 어떤 종류의 시간 정보 표현이 존재 하는지 먼저 알아 보겠습니다.

     

    GMT( 그리니치 표준시 )

    GMT(Greenwich Mean Time )의 약자로 영국 런던 외각쪽에 위치한 그리니치 천문대를 기준으로 한 기준이 되는 태양 시 입니다.

    많은 천문대를 놔두고 굳이 그리니치 천문대를 태양시의 기준 으로 지정한 이유는 경도 0도에 위치해 있기 때문에 그리니치 천문대의 남중 자오선을 태양이 정확히 지나는 시점을 정오 라고 지정할 수 있기 때문입니다.

    모든 나라에서 고정으로 GMT 라는 태양 시를 사용하면 문제가 되지 않지만 나라마다 해당 나라가 존재하는 경도에 맞춰서 조금씩 변동 하여 사용하고 있기 때문입니다.

     

    우리 나라 같은 경우에는 동경 127도 표준 자오선을 가지고 있지만 시간은 동경135도인 일본 표준시인 JST를 사용하고 있습니다.

     

    전세계 시간을 확인할 수 있는 사이트 :  https://greenwichmeantime.com/time-gadgets/time-zone-converter/

     

    UTC(협정 세계시)

    UTC(Universal Time, Coordinated)는 1972년 1월 1일 세계 표준시로 규정되었다.

    GMT 시간은 그리니치 천문대를 지나는 태양을 기준으로 하기 때문에 지구의 자전 주기와 밀접한 관련이 있습니다.

    하지만 시간은 계속해서 흐르고 있고, 자전의 흐름이 늦어지고 있습니다.

    그래서 새로운 표준시를 제정해야한다는 이야기가 나왔고 GMT 시간 대신에 국제 원자시 라고 불리는 TAI(International Atomic Times) 를 기준으로 시간을 제정하였습니다.

    국제 원자시는 세슘 원자의 진동수를 기반으로 하여 측정한 시간입니다.

     

    UTC는 원자시를 사용하기 때문에 자전의 흐름의 속도에 영향을 끼치지 않기 때문에 시간이 흘러도 변할 가능성이 거의 없습니다.

    UTC가 GMT를 대신하기 위해서 재정이 되었지만 GMT에 익숙해서 아직까지 GMT로 알고 있으신분이 있습니다.

    우리나라 같은 경우에 서울은 UTC+9 시간을 사용합니다.

     

    Digital Data Time(디지털 데이터 시간)

    디지털 및 인터넷 환경에서의 국경의 거의 무의미 하기 때문에 사건이 일어난 지역의 표준시에 디지털 데이터 시간을 적용해야합니다.

    이러한 이유로 대부분의 파일시스템에서는 시간정보를 기준이 되어있는 UTC+0을 기반으로 시간 정보를 생성합니다.

    그렇기 때문에 UTC+0을 기준으로 지역의 표준시에 맞춰서 조정을해서 모든 시간정보에 적용을 하면 될것같습니다.

    참고로 FAT 파일 시스템의 경우에는 시간을 4바이트로 기록을 하지만, NTFS 는 8바이트로 기록을 합니다.

     

     

    시간 정보 표현 방식

    가장 널리 알려져 있는 DOS Date/Time , Unix Date/Time, Windows TimeStamp , MAC OS TimeStamp , Mobile Date/Time 을 다뤄보려고 합니다.

     

    1. DOS Date/Time

    시간 저장 방식으로는 현재 날짜와 시간을 각각 2바이트로 나타내고 있습니다.

    DOS Date/Time으로 표현할 수 있는 시간의 범위는 아래와 같습니다.

     

    1980년 01월 01일 00:00:00 (00 : 21 : 00 : 00) ~ 2107년 12월 31일 23:59:58 (FF : 9F : BF : 7D)

     

    시간 형식 구조는 아래와 같습니다. 참고로 초는 2초 간격으로 표시됩니다.

     

    위의 구조 형식으로 변환이 됩니다.

     

    Y : 1980년을 기점으로 한 연도

    M : 월(month) 1~12월

    D : 일(day) 1~31일

    h : 시(hour) 0~23시

    m : 분(minute) 0~59분

    s : 초(second) 2초 단위로 0~29의 값이 저장됨

     

    2. Unix Date/Time

    유닉스 운영체제 에서는 1970년 1월 1일 자정(UTC) 이후에 경과된 초를 저장합니다.

    time_t은 유닉스 운영체제에서 시간을 저장하는 표준 형식입니다.

    유닉스 타임으로 1234567890의 시간이 2009년 2월 13일 금요일 23시 31분 30초였고, UTC+9인 국내 시간으로는 2009년 2월 14일 08시 31분 30초로 발렌타인 데이여서 인터넷 커뮤니티 에서는 이날을 기념하려고 했다고도 합니다.

     

    timt_t는 부호있는 4바이트 정수 형을 사용했었는데, 2038년 이후로 시간을 재대로 표현하지 못하는 단점이 발생해서 부호를 없는 4바이트를 사용했었지만 현재는 부호 없는 8바이트인 time64_t를 이용하고 있습니다.

     

    1. time_t로 부호있는 4바이트를 사용할 때

    시작 : 1970년 01월 01일 00:00:00 ( 0 )

    종료 : 2038년 01월 19일 03:14:07 ( 2,147,483,647 ) 

     

    2. time_t로 부호없는 4바이트를 사용할 때

    시작 : 1970년 01월 01일 00:00:00 ( 0 )

    종료 : 2106년 02월 05일 21:28:15 ( 4,294,967,295 )

     

    3. time64_t로 부호없는 8바이트를 사용할 때

    시작 : 1970년 01월 01일 00:00:00 ( 0 )

    종료 : 292277026596년 12월 4일 ( 18,446,744,073,709,551,615 )

     

    3. Windows TimeStamp

    윈도우 에서는 시간 표현에 있어서 제약을 두지 않기 위해서 8바이트의 시간 표현 방식을 사용합니다.

    2^64는 18,446,744,073,709,500,000 으로 매우 큰 숫자 이기 때문에 제약이 거의 없다고 봐도 무관합니다.

    1601년 01월 01일 0시 (UTC)를 시작으로 100나노초 간격의 숫자를 저장합니다.

     

    시작 : 1601년 01월 01일 00:00:00.0000000 ( 00000000 : 00000000 )

    종료 : 30828년 09월 14일 02:48:05.4885807 ( 7FFFFFFF : FFFFFFFF )

     

    윈도우 프로그래밍을 할때 FILETIME 구조체를사용하는데 time_t로 변환하는 공식은 아래와 같습니다.

    time_t = (FILETIME - 0x19DB1DED53E8000) / 10000000

     

    4. MAC OS Time Stamp

    Mac OS는 1904년 01월 01일 자정부터 현재 까지의 시간을 초로 계산하는 HFS/HFS+ Date를 사용합니다.

    부호없는 4바이트로 저장하고, HFS/HFS+ Date는 최대 2040년 2월 6일 06시 28분 15초 까지만 표현이 가능합니다.

     

    시작 : 1904년 01월 01일 00시 00분 00초

    종료 : 2040년 02월 06일 06시 28분 15초

     

    5. Mobile Date/Time

    모바일의 시간은 각 장치나 통신사 별로 서로 다른 형식을 사용하고 있고, 통신사가 같더라도 모델에 따라 다른 방식을 사용하기도 합니다.

    아래의 표는 forensic-proof 블로그에서 퍼온 표입니다.

     

    댓글

Designed by Tistory.