1. BIT, BYTE, 파일 그리고 Hash

기초중에 기초! bit와 데이터의 표현을 알아봅시다. 실습의 경우 굳이 하지 않으셔도 됩니다.

실습 도구

1. BIT

  • 0 과 1 을 표현하는 단위

3bit를 이용하여 표현 할 수 있는 경우

  • 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 로 실습해보기

  1. HxD를 이용하여 파일을 생성하여 봅시다. HxD에서 파일 - 새로 만들기 또는 새로 만들기 아이콘 선택 후 "00 00" 값을 넣고 저장하여 봅시다. (파일명은 아무거나 상관 없습니다.)

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

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

  4. 만약 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자리)

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

  • 다만 해시값만 가지고는 원본이 무엇인지 정확히 알 방법이 없습니다. 이러한 특성을 이용하여 bit의 묶음(파일 등등..)이 변경되지 않았음 입증하는데 활용하고 있습니다.

  • 포렌식 도구에서는 이런 해시값 계산 기능이 기본으로 있으니 시험에 있어서 powershell 의 get-filehash 명령어는 굳이 외외서 사용할 필요는 없습니다.

3줄 요약

  1. 대부분의 Hex, 포렌식 도구는 bit를 8개를 묶어서 16진수 값(Hex)으로 표현합니다. byte로 저장된 데이터에 규칙을 정해서 글자를 표현합니다.

  2. 파일은 bit의 나열이며 여러 프로그램들이 파일의 구조를 기반으로 읽고 쓰고 저장합니다. 다만 메모장의 경우 다른 구조가 없이 데이터를 hex로 저장하고, 열어볼 수 있습니다. (용량이 큰 파일은 메모장으로 열리지 않습니다.)

  3. Hash 값은 1bit만 바뀌어도 다른 값을 표시합니다! 같은 알고리즘만 쓴다면 어떤 프로그램 등을 사용하여도 동일한 값이 나오게 됩니다.

+ @(시험 외 공부용)

  • 만약 보다 상세한 내용을 알아보고 싶거나 Python을 이용하여 실제로 HexViewer, md5 계산 분석 도구를 만들어 보고 싶다면 아래 내용을 참고하여 공부해보시는 것도 추천 드립니다. - bit, 해시관련 추가 내용 > 1) BIT, BYTES와 파일 그리고 Hash - Hex viewer + md5 만들기 > 1-1) Hex Viewer 만들기

Last updated