1. BIT, BYTE, 파일 그리고 Hash
실습 도구
실습도구(HxD) : https://mh-nexus.de/downloads/HxDSetup.zip 도구 사이트 : https://mh-nexus.de/en/programs.php
1. BIT
디지털 정보(0 과 1) 을 표현하는 단위 1 bit는 오직 0 또는 1만 저장 2bit의 경우 00, 01, 10, 11 4가지를 표현할 수 있습니다.

4비트로 표현 할 수 있는 범위(0~9,A~F) 하단의 Binary 의 경우 1자리에 0 또는 1만 표시할 수 있을 경우 4비트를 하나의 문자로 표현이 가능합니다.

또한 1바이트로 표현하는 것이 16진수를 활용하여 표기에도 용이 합니다.

2. BYTE와 글자의 표현
8bit = 1byte 왜 하필 8 비트인가? 0000 0000 ~ 1111 1111 ( 256 가지 표현 가능)
숫자 10개(0~10), 영어 대문자 26개, 영어 소문자 26개 = 62개 글자 표현을 위해선 최소 64개를 표현할 수 있는 6비트 이상이 필요
그렇다면 6비트만 써도 되겠지만.. 특수기호(!, “, ‘, @, #, $) 를 포함하려면 더 필요 -> 7비트를 사용한다면 총 128개 표현 가능.
그리고 오류검출용 코드를 1비트를 포함하여 총 8비트를 사용 ⇒ 아스키 코드

한글의 표현 - 1bytes 만으로는 한글의 모든 글자를 표현하기 어렵기 때문에 최소 2 bytes 이상으로 만듬 2bytes = 16 bit = 2의 16승 (65,536 가지 표현 가능 0000 0000 0000 0000 ~ 1111 1111 1111 1111) CP949 한국어판 윈도우 기본 코드 페이지. https://charset.fandom.com/ko/wiki/CP949 - 문자집합 위키 cp949 엑셀표 - 출처(https://anow.tistory.com/240)
글자의 표현 실습
메모장을 실행 한 뒤 원하는 글자를 작성 후 파일을 저장하여 봅시다. 저장할 때 인코딩을 ANSI (CP949)로 설정하여 저장하여 봅시다.

HxD를 이용하여 해당 파일을 열어보면 bit의 나열이 16진수로 표현되어 있습니다. 2바이트씩 묶어서 CP949 코드표를 찾아보면 해당하는 한글을 확인할 수 있습니다.

3. 파일
파일의 개념은 다양하게 해석할 수 있지만 간단히 저장 공간에 bit가 모여있는 것을 하나의 파일로 생각하면 됩니다.
단순히 아무 것도 없이 "00" 이라는 1바이트를 저장한 것도 하나의 파일이고, 엄청난 용량의 동영상도 하나의 파일입니다.
문서 파일, 그림 파일 등 다양하게 있지만, bit가 모여 있는 것을 어떻게 보여주냐에 따라서 문서 파일이 될 수 있고, 그림 파일이 될 수 있습니다.
4. 리틀엔디안과 빅엔디안
엔디안은 메모리에 여러 바이트 데이터를 어떤 순서로 저장할지를 정한 CPU·메모리 구조상의 규칙입니다. 즉, “데이터의 본질”이 아니라 “저장 방식”의 차이로 생긴 개념입니다.
컴퓨터는 데이터를 바이트 단위(8비트) 로 저장하지만, 정수나 실수 같은 값은 여러 바이트(예: 4바이트, 8바이트) 로 구성되는데 “그 여러 바이트를 메모리에 어떤 순서로 저장할까?” 이걸 정한 게 엔디안(Endian) 규칙입니다.
먼저 결과부터 보겠습니다. HxD로 봤을 때 4바이트 정수
12 34 56 78을 저장한다고 하였을 때 빅엔디안 : 12 34 56 78 (16진수) -> 305,419,896 (10진수) 리틀엔디안 : 78 56 34 12 (16진수) -> 2,018,915,346 (10진수)
[계산기 사용법] 계산기를 실행한 뒤 메뉴바에서 프로그래머를 선택 후 Hex 선택 한 다음 16진수를 입력하면 HEX(16진수-4bit), DEC(10진수), OCT(8진수-3bit), BIN(2진수-1 bit) 선택하면 진수 변환이 가능합니다.

정리하면 빅엔디안은 평소 우리가 숫자를 읽는 순서와 같은 방식으로 데이터를 저장하는 구조입니다. 리틀엔디안은 저장된 바이트(8비트) 기준으로 역순으로 저장하는 구조입니다.

앞으로 실습 등에서 이러한 bit의 나열을 8bit 기준으로 2개의 hex값을 많이 해석하게 되는데 이때 리틀 엔디안을 빅엔디안, 10진수로 변환 후에 우리가 이해하기 쉬운 숫자로 확인하는 것이 반복될 것이고 포렌식 많은 도구 등이 이러한 작업을 쉽게 해주고 있습니다.
5. 메타데이터와 데이터 영역
파일이 저장된 공간은 저장매체에서 데이터 영역에 포함됩니다. 그렇다면 메타데이터 영역과 데이터 영역은 무엇일까요?
메타데이터
파일의 이름·크기·저장 위치 같은 정보를 보관하는 부분입니다. 이 영역 또한 데이터로 0101 ~~ 비트의 나열로 저장하게 됩니다. (우리가 쉽게 생각하는 속성 정보)

메타데이터 구성 방식은 파일시스템마다 달라지게 되는데 추후에 알아보도록 하겠습니다.
데이터
실제로 데이터가 저장된 공간입니다. HxD에서 확인한 부분이 바로 이 데이터 공간에 있는 데이터를 확인한 것입니다.

그래서 데이터를 복사한다는 것은 데이터 영역의 bit의 나열을 복사한 뒤 새로운 메타데이터로 구성되고 메타데이터가 가리키는 새로운 데이터 영역에 bit의 나열을 동일하게 덮어쓴 것인 것입니다.

6. HASH
입력 데이터(bit)가 어떤 값이든 간에 출력 결과는 고정된 길이의 bit를 출력하는 값 다만, 입력 데이터의 1bit 만 달라져도 출력 데이터는 완전 다른 값이 출력 됩니다. (해시, 해시값, 체크썸 등등.. 으로도 불린다.)
알고리즘 종류 : md5, sha, sha-256, sha-512 등등.. - md5(128 bit의 출력) → 128bit → 16진수로 32자리 128 / 4 = 32자리
Windows Power Shell get-filehash 로 실습해보기
HxD를 이용하여 파일을 생성하여 봅시다. HxD에서 파일 - 새로 만들기 또는 새로 만들기 아이콘 선택 후 "00 00" 값을 넣고 저장하여 봅시다. (파일명은 아무거나 상관 없습니다.)

MD5로 “00 00”의 데이터를 가진 파일을 MD5 알고리즘으로 계산하였을 때 나오는 결과값을 알아봅시다. 테스트할 파일이 있는 폴더에서 shift 누른 상태에서 우클릭 - [여기에 PowerShell 창 열기] 선택합니다.

아래 명령어를 입력하여 봅시다. get-filehash “파일명” -algorithm md5 해시값이 아래와 같은 값을 확인할 수 있을 것입니다. C4103F122D27677C9DB144CAE1394A66 (128비트 = 4비트 32자리) 값을 확인할 수 있습니다.

만약 1이라도 바뀐다면 어떻게 되는지 살펴봅시다. 마지막 비트를 1로 변경하여 봅시다. 00 00 (16진수 Hex) => 0000 0000 0000 0000 (bit) 00 01 (16진수 Hex) => 0000 0000 0000 0001 (bit) 이후 다시 같은 명령어를 입력하여 Hash 값을 비교하여 봅시다. > 441077CC9E57554DD476BDFB8B8B8102 (128비트 = 4비트 32자리)

다시 원래대로 수정하여 해시값을 비교하여 봅시다. > C4103F122D27677C9DB144CAE1394A66 다시 처음과 같은 값

다만 해시값만 가지고는 원본이 무엇인지 정확히 알 방법이 없습니다. 이러한 특성을 이용하여 bit의 묶음(파일 등등..)이 변경되지 않았음 입증하는데 활용하고 있습니다.
포렌식 도구에서는 이런 해시값 계산 기능이 기본으로 있으니 시험에 있어서 powershell 의 get-filehash 명령어는 굳이 외외서 사용할 필요는 없습니다.
+ @(시험 외 공부용)
Last updated






