프로그래밍 강의/게임메이커 스튜디오

GMS, 해시 함수로 파일의 무결성을 검증해보자

wnsrn3436 2013. 9. 14. 14:58

 

해시(Hash)란 무엇이고 왜 써야 할까요?

대부분의 게임은 소스 프로젝트 안에 유닛들의 능력치가 저장되어 있을 것입니다.

하지만, 대형 게임의 경우 패치를 통해 능력치 파일을 게임 폴더 등에 전송하게 되는데, 이때 누군가가 능력치 파일을 마음대로 수정한다면 골치가 아파지겠지요?

 

이럴 때 사용하는 게 암호화와 해시 기능이며, 이번 강좌에서는 해시에 관한 내용을 다룰 것입니다.

해시란, 어떤 문자열이나 파일에서 특정한 연산을 하여 특정한 문자열을 뽑아낸 것입니다.

이 문자열은 이론상으론 해시를 뽑아낸 데이터와만 일치해집니다.

 

그러므로 어떤 데이터가 단 1바이트라도 수정이 되면, 해시값이 크게 바뀌어서 파일이 수정된 것을 감지할 수가 있습니다.

(해시는 암호화가 아닙니다. 단지 특정한 값을 뽑아낼 뿐입니다.)

 

 

게임메이커: 스튜디오(GameMaker: Studio)에서는 현재 위 사진과 같은 MD5와 SHA-1 해시 함수를 지원합니다.

여러분들은 두 함수 중 하나를 선택하여 해시를 검사할 수도 있고, 둘 다 사용하여 더 안전하게 해시를 검사할 수도 있습니다.

 

왜 두 함수를 병용하여 사용하는 게 더 안전하냐면, 해시 충돌이라는 이외의 결과가 생길 수도 있기 때문입니다.

해시 충돌이란, 서로 다른 두 데이터에서 같은 해시값이 나오는 경우를 이야기합니다.

해시값은 이론상으론 데이터와 1:1 대응이지만, 실제로 MD5 에서는 해시 충돌이 발생한 일이 있었습니다.

 

 

이제 위와 같은 파일에서 해시값을 뽑아내어 봅시다.

먼저 해시값을 뽑아낸 뒤, 파일을 수정하면 오류가 뜨게 할 것입니다.

해시를 추출하는 프로그램을 만드는 게 귀찮다면, 파일의 해시값을 뽑는 프로그램을 사용해도 상관이 없습니다.

 

 

파일에서 해시값을 뽑은 결과는 아래와 같습니다.

 

MD5: 7027d1064c52e4a362cc758a439f7d5e

SHA-1: 8cd2f63888c1931b1945b81f10281547210cddab

 

 

이제 얻은 해시값으로 파일의 무결성 코드를 작성한 뒤, 이 파일을 수정한다면,

 

 

이렇게 해시 오류가 뜨게 됩니다.

 

http://cafe.naver.com/playgm

Comments