지능이라는 이름의 게임(14): 집단지능과 블록체인(6)

블록체인의 핵심 요소 기술은 해시 함수(hash function)이다. 해시 함수는 문자 그대로 하나의 함수(function)이다.

함수란 두 변수(독립변수와 종속변수) 사이의 관계를 규정한다. 독립변수의 값이 입력되면, 규정된 규칙에 따라 종속변수의 값이 산출된다. 고등학교에서 배운 간단한 함수  혹은  를 떠올려 보라.

해시 함수는 어떤 길이의 메시지가 입력되어도 동일한 길이의 숫자[해시값(hash value)]을 산출하는 함수 이다. 실제 다양한 해시 함수가 존재할 뿐 아니라 그것의 수학적 전개는 상당히 복잡하기 때문에 그에 대한 설명은 생략하고 바로 해시함수를 실행한다. 비트코인에서 사용되는 해시함수는 SHA-256(Secure Hash Algorithm-256: 샤 256이라고 읽음)인데 아래 그림을 눌러서 열리는 사이트(MIT가 운영하는 블록체인 사이트)에서 시뮬레이션을 해보자. (주석 1)

위 그림에서 Data 칸에 필자가 ‘윤영민’이라고 입력하니 Hash 칸에 복잡한 숫자와 문자가 나타났다. 그것이 ‘윤영민’에 대한 해시값(hash value)[그냥 해시(hash), 다이제스트(digest), 혹은 데이터의 지문(fingerprint)이라고 부름]이다.

(1) Data 칸에 자신의 이름을 넣어보라. 길이는 동일하지만 전혀 다른 숫자와 문자의 배열이 나타날 것이다. 이름을 지우고 아무 파워포인트나 워드 문서를 복사해서 넣어 보라. 아무리 긴 문서를 복사해 넣어도 동일한 길이의 해시가 나타날 것이다. 이것이 해시함수의 첫번째 특성이다. 해시함수는 입력값에 관계없이 항상 동일한 길이의 해시값을 산출한다.   

(2) 이번에는 다시 자신의 이름을 넣어보라. 앞에서 이름을 넣었을 때와 정확히 동일한 해시가 나타날 것이다. 아무리 반복해서 이름을 넣어도 항상 동일한 해시가 나올 것이다. 이것이 해시함수의 두번째 특성이다. 해시함수는 동일한 입력값에 대해 항상 동일한 해시값을 산출한다. 

(3) 이번에는 자신의 이름 뒤에 마침표를 찍고 해시값을 보라. 자신의 이름과 전혀 다른 해시값이 나타났을 것이다. 입력값이 아주 조금만 달라져도 해시의 숫자와 문자의 배열은 완전히 달라진다. 이것이 해시함수의 세번째 특성이다. 입력값이 조금만 변해도 해시값만 보아서는 입력값이 어떻게 변했는가를 전혀 추측할 수 없도록 완전히 다른 해시값이 산출된다.

(4) 이론적으로 해시함수는 소위 해시충돌(hash collision)의 가능성을 안고 있다. 해시함수는 제한된 길이(SHA256은 256 비트)로 된 해시값을 산출하기 때문에 입력값이 무한대로 변화하면 서로 다른 입력값이 동일한 해시값을 가질 수 있는 것이다. 새장의 숫자보다 많은 수의 비둘기를 새장에 넣으면 두 마리 이상의 비둘기가 같은 새장에 들어갈 수밖에 없는 원리이다. 그래서 해시충돌이 없는 해시함수 알고리즘이 계속 새롭게 나오게 된다.    

블록체인은 해시함수를 이용해서 블록과 블록체인을 구성한다. 그렇게 해서 블록과 블록체인에 작은 변화만 생겨도 그것을 탐지할 수 있고 위조와 변조를 예방할 수 있다. (윤영민, 2018-05-13)

(주석 1)

해시 함수를 다양하게 시뮬레이션해보고 싶은 독자에게는 Quick Hash를 추천한다. Quick Hash는 실전용 해싱 소프트웨어이다. 자신의 컴퓨터 환경에 맞는 버전을 다운로드해서 설치하면, 실제로 책 한권의 분량에 해당되는 파일을 해싱해 볼 수 있으며,  MD5, SHA-1, SHA256, SHA512 등 다양한 알고리즘을 적용해서 해싱을 할 수도 있고, 해시함수를 이용해서 두 파일의 동일성을 검사해 볼 수도 있다. 안드로이드용 QuickHash 앱도 있다. 구글 스토어에서 다운로드 받아 스마트폰에서도 시뮬레이션할 수 있다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다