1. BIT, BYTE, 파일 그리고 Hash
실습 도구
실습도구(HxD) : https://mh-nexus.de/downloads/HxDSetup.zip 도구 사이트 : https://mh-nexus.de/en/programs.php
1. BIT
0 과 1 을 표현하는 단위

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. 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 명령어는 굳이 외외서 사용할 필요는 없습니다.
+ @(시험 외 공부용)
만약 보다 상세한 내용을 알아보고 싶거나 Python을 이용하여 실제로 HexViewer, md5 계산 분석 도구를 만들어 보고 싶다면 아래 내용을 참고하여 공부해보시는 것도 추천 드립니다. - bit, 해시관련 추가 내용 > 1) BIT, BYTES와 파일 그리고 Hash - Hex viewer + md5 만들기 > 1-1) Hex Viewer 만들기
Last updated