Forensic/Forensic 이론

해쉬 함수 (Hash Function)

Ron Weasley 2022. 1. 20. 20:27

저번 시간에는 데이터 인코딩에 대해서 배웠습니다.

데이터 인코딩을 간략하게 설명하자면 "숫자, 문자, 시간 등 데이터는 원본 그대로 형태의 모습으로 저장될 수도 있는 반면, 다양한 인코딩 알고리즘(Base58, Base64)에 따라 특수한 형태의 데이터로 변환" 되는것을 말합니다.

 

이번에는 해쉬 함수에 대해서 배워 보겠습니다. 다뤄볼 내용은 MD5, SHA256, SHA512입니다.

해쉬 함수(Hash Function)
  해쉬 함수란, 임의의 길이의 데이터를 고정된 길이의 데이터로 계산해 주는 함수입니다. 해쉬 함수의 특징으로는 일방향성을 띄고있고, 변환된 해쉬 값으로 원래의 입력값을 알아내는 것은 거의 불가능합니다.
주로 일방향 해시함수는 "데이터의 무결성" 을 확인하는 방법으로 사용합니다.
일반적으로 알려진 해시 함수로는 MD5, SHA1, SHA2, .....SHA256, SHA384, SHA512가 있습니다.

 

* 일방향성과 양방향성의 차이점

  먼저, 양방향성을 띄고 있는 Base64를 알아봅시다. 이해하기 쉽게 그림으로 표현 하겠습니다.

Base64 Encoding

입력값인 Forensic을 Base64로 인코딩을 하면 그림과 같이 특수한 형태의 데이터로 변환됩니다.

다시, Base64에 나온 값을 Base64로 디코딩을 하면 Forensic이 나옵니다.

Base64 Decoding

이처럼 입력된 값을 다시 같은 인코딩 알고리즘을 이용해서 디코딩을 한다면, 원래 입력했던 값이 나오는것을 "양방향성" 을 띄고 있다고 설명할 수 있습니다.

 

하지만 해쉬 함수는 일방향성을 띄고 있다고 했습니다.

즉, 위 Base64 알고리즘과는 달리 변환된 값으로 다시 동일한 해쉬 함수를 사용해서 변환을 했을 경우 원래 입력값을 나타내지 않는다는 것입니다. 그림으로 표현을 하겠습니다.

MD5 hash

입력값인 Forensic을 MD5 해쉬 함수로 변환하면 다음과 같이 고정된 길이의 데이터 값이 나옵니다.

하지만 변환된 값을 다시 MD5 해쉬 함수로 한다면 어떻게 되는지 봅시다.

MD5 hash

처음에 입력했던 Forensic이라는 값을 찾아 볼 수 없습니다. 이처럼 해쉬함수는 일방향성을 띄고 한번 변환된 데이터 값으로 원래 입력값을 찾기는 어렵습니다.

 

양방향성이랑 일방향성이랑 차이점을 알아 보았는데, 이제는 해쉬 함수의 종류에 대해서 알아 보겠습니다.

 

* MD5 해쉬 함수

  MD5 해쉬 함수는 128비트 암호화 해시 함수입니다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지 확인하는 무결성 검사에 이용됩니다. 1991년 로널드 라이베스트가 쓰던 MD4를 대체하기 위해 고안을 했고, 1996년 MD5의 설계상 결함이 발견 되었습니다. 결함은 치명적이진 않지만, 암호학자들은 SHA 알고리즘을 사용할 것을 권장했고, 시간이 지나면서 점차 치명적인 결함이 발견되어 최종적으론 SSL 인증서를 변조하는 것이 가능하다는 것을 발표했습니다.

 

* SSL 인증서

  SSL 인증서는 Secure Sockets Layer의 약자로써 인터넷을 할 때 이동되는 내용들을 암호화 해주는 프로토콜입니다. 언급되는 SSL인증서는 보안 통신을 하기 위한 전자 파일이며, SSL인증 서버에 설치함으로써 SSL 프로토콜을 사용하여 보안 통신을 할 수 있게 되는 것입니다. 

 

  본론으로 돌아가서 MD5는 고정적인 길이의 데이터로 변환 됩니다. 예를 보겠습니다.

MD5 Hash Value

입력값이 비슷한 Apple과 Apples를 MD5 해쉬 함수로 변환을 시켜보니 완전히 다른값으로 변환이 되었으나, 공통적인 부분이 입력값의 길이가 32개의 문자(16진수)로 길이가 같습니다. 이처럼 MD5가 동일한 값을 가진다면, 두 파일은 완전히 똑같은 파일임을 알 수 있습니다. 결과값을 확인하기 위해 파이썬 코드로 짠 프로그램으로 간단하게 확인 해봅시다.

 

예제코드는 다음과 같습니다.

MD5 source code

코드 설명은 주석으로 대체합니다.

<실행값>

Apple MD5 변환
Apples MD5 변환

하지만 암호학자들은 MD5를 사용을 권하지 않는 이유가 있습니다.

그 이유는 MD5가 아무리 안전한 알고리즘으로 되어 있다한들, 암호학자들이 복호화를 할 수 있게 구현을 했기 때문에 쉽게 복호화가 가능하기 때문입니다. 다음은 SHA256에 대해서 배워 보겠습니다.

 

* SHA-256 해쉬 함수

  SHA-256해쉬 함수는 SHA알고리즘의 한 종류로써, 256비트로 구성되며 64자리 문자열을 반환합니다. 반환된 문자열은 고정된 값을 출력하며, 위 MD5처럼 입력값이 살짝만 변동 되어도 출력값이 많이 다르기 때문에 입력값을 유추하는 것은 거의 불가능하지만, 아주 작은 확률로 입력값이 다름에도 불구하고 출력값이 같은 경우가 발생하는데 "충돌" 이라고 얘기를 하며, 모든 해쉬 함수에는 충돌이 존재하지만 MD5보다 충돌 확률이 헌저히 낮다. SHA-256은 (n = 256, 2ⁿ ) 만큼 경우의 수를 만들 수 있습니다.

 

SHA-256의 예를 보겠습니다.

입력값이 비슷한 Apple과 Apples를 SHA-256 해쉬 함수로 변환 시켜보니 완전히 다른값으로 변환이 되었으나, 공통적인 부분으로는 고정된 64개의 문자입니다. 이처럼 SHA-256도 동일한 결과값을 가진다면, 두 파일은 완전히 동일하다고 할 수 있습니다. 결과값을 보기 위해서 간단하게 짠 파이썬 코드를 보겠습니다.

 

예제코드는 다음과 같습니다.

SHA256 source code

코드 설명은 주석으로 대체합니다.

<실행값>

Apple SHA256 변환
Apples SHA256 변환

SHA-256은 현재 큰 단점이 발견되지 않았습니다. 안정성이 뛰어나며, 그래서 주로 블록체인에서 가장 많이 채택하여 사용되고 있는 암호 방식이며, 출력 속도가 빠르다는 장점이 있습니다. 마지막으로 SHA-512에 대해서 배워보겠습니다.

 

* SHA-512 해쉬 함수

  SHA-512해쉬 함수는 SHA알고리즘의 한 종류로써, 이름에 적혀 있듯이 512비트로 구성되며 128자리인 16진수로 고정된 문자열이 변환됩니다. 미국 국가안보국인 NSA가 설계한 암호 해쉬함수이며, 이 또한 다른 해쉬 함수처럼 단방향성을 띄고 있습니다. 이름에 내포 되어 있듯이 SHA-512는 (2ⁿ, n = 512)의 경우의 수를 표현합니다.

 

SHA-512의 예를 보겠습니다.

입력값이 비슷한 Apple과 Apples를 SHA-512 해쉬 함수로 변환 시켜보니 완전히 다른값으로 변환이 되었으나, 공통적인 부분으로는 고정된 128개의 문자입니다. 이처럼 SHA-512도 동일한 결과값을 가진다면, 두 파일은 완전히 동일하다고 할 수 있습니다. 특히 SHA512는 전체적인 진행과정 중 처음 발생하는 것이 패딩(Padding)과정이며, 해쉬 함수의 연산을 진행하기 전 파싱(Parsing)이라는 과정을 거치고 진행됩니다.

 

* 패딩(Padding)

  패딩과정이란, SHA-512의 전체적인 진행과정 중 가장 처음으로 발생하는 것인데, 패딩은 100개의 공간에 문자 1개가 들어오면 나머지 99개의 공간을 숫자 0 등으로 메우는 작업입니다. SHA-512는 1024비트를 1개의 패딩 메시지로 형성하는데, 1개의 패딩 메시지는 입력으로 준 메시지, 메시지의 끝, 0으로 된 패딩 값, 메시지의 길이와 같은 다양한 정보가 포함됩니다.

 

* 파싱(Parsing)

  해쉬 함수의 연산을 진행하기 전 파싱이라는 과정이 선행됩니다. 파싱은 컴퓨터에서 컴파일러 또는 번역기가 원시 부호를 기계어로 변역하는 과정의 한 단계로, 문장의 문법적인 구성 또는 구문을 분석하는 과정이며, SHA-512에서 패딩된 메시지의 파싱은 N개의 1024비트 덩어리의 패딩 메시지가 존재합니다.

 

본론으로 간단하게 파이썬 코드으로 SHA-512 코드를 보겠습니다. 예제코드는 다음과 같습니다.

SHA512 source code

코드 설명은 주석으로 대체하겠습니다.

<실행값>

Apple SHA512 변환
Apples SHA512 변환

SHA-512는 SHA-256에 비해 단점이 있습니다.

SHA-512로 서명 된 인증서는 Windows TLS 1.2에서는 작동하지 않은 점이 있었고, 길이 확장 공격에 대해 취약하며, SHA-256이 SHA-512보다 훨씬 데이터 처리 속도가 빨랐던 것입니다. 그리고 SHA-256에 비해 별 차이는 없지만 상대적으로 기술 비용이 많이 들어가 채택할 필요는 없습니다. 그리고 고유한 128개의 문자를 변환하는 특성을 가져 용량을 많이 차지한다는 단점이 있습니다.

 

그렇게 해쉬 함수에 대해서 간략하게 알아보았는데요, 사실 어느 하나 안중요한게 없이 다 과거와 현재에도 쓰이고 있는 해쉬 알고리즘입니다. 현재는 주로 SHA-256을 사용하지만 시대가 변하면 SHA-512도 쓰이는 날이 오지않을까 싶습니다.

다음 시간에는 컴퓨터의 구성요소에 대해서 포스팅 하겠습니다.

 

- reference -

http://wiki.hash.kr/index.php/SHA512

http://wiki.hash.kr/index.php/SHA256

'Forensic > Forensic 이론' 카테고리의 다른 글

반도체를 이용한 저장매체  (0) 2022.03.31
파일 카빙(Carving)  (0) 2022.01.27
데이터 인코딩(Data Encoding)  (0) 2022.01.18
문자(Characters) 인코딩  (0) 2021.12.24
디지털 데이터의 수 체계  (0) 2021.07.24