What is Hash function?

블록체인이나 암호화폐의 기술적 측면을 얘기하려면 가장 먼저 해시값과 해시함수라는 것을 알아야 한다.

해시함수란 암호학에서 유래한 개념으로 어떠한 길이의 데이터를 입력하여도 정해진 길이의 결과값(해시값)을 주는 함수로 정의할 수 있다. 즉, 어떤 데이터를 넣어도 256bits의 코드로 바꿔주는 알고리즘(SHA256)을 말하는 것이다.

예를들어, ‘가’라는 1글자의 데이터를 넣던, 책 한권의 데이터를 넣던 해시함수를 통과하면 0~9까지의 숫자와 a~f까지의 문자의 조합으로 이루어진 64글자(256bits)의 hash값으로 출력되게 하는 함수이다. 여기서 해시값은 8진수로 표시되기 때문에 각 글자당 4bits이고 64글자이므로 4×64=256bits 인 것이다.

다음은 해시 생성기와 해시함수를 쉽게 설명한 그림이다.
http://www.convertstring.com/ko/Hash/SHA256 (해시생성기)

그러나, 해시알고리즘의 핵심은 256bits의 해시값을 알고 있다고 하더라도 입력된 데이터 내용을 전혀 알 수 없다는 것이다. 동일한 데이터를 넣어야 동일한 hash값을 알 수 있을 뿐이다.

이 해시알고리즘은 서로가 갖고 있는 데이터의 무결성을 증명하는데 요긴하게 쓰인다. 예를들어, A가 중요한 데이터가 담긴 파일을 USB메모리에 담아 아프리카 오지에 있는 B에게 DHL을 통해 전달한다고 하자. 며칠후 B는 메모리를 받았지만, 중간에 누군가가 그 내용을 변경했을 가능성이 있지 않을까? 그런데 이를 확인하려면 A와 B는 전화통을 붙들고 일일이 그 내용을 확인해야 할 것이다. 그러나 그 데이터의 양이 만약 100기가라면? 생각만 해도 끔찍하다. 
이때 해시알고리즘을 활용하면 간편해진다. 즉, A는 데이터파일을 메모리에 담아 보내면서 그 파일의 해시값을 B에게 문자로 전송한다. B는 받은 데이터파일을 해시 생성기에 넣어 A가 보내준 해시값과 일치하는 지만 확인하면 누군가 변조를 했는지 아닌지 확인할 수가 있을 것이다. 
또 다른 예로, A가 중요한 데이터가 담긴 파일을 상사인 B를 거쳐 사장 C에게 보내는데 중간에 B가 데이터를 살짝 고쳐서 C에게 보고할 가능성이 있지 않을까? 이때도 A가 파일을 결재올리면서 그 파일의 해시값을 B와 C에게 보낸다면 C는 자신이 받은 파일을 해시생성기로 돌려 나온 해시값과 A가 보내온 해시값이 일치하는 지만 확인하면 된다.

블록체인에서 얘기하는 ‘마이닝(mining)’이라는 것이 바로 문제를 풀어서 해시값을 찾아내는 과정을 말한다. 엄밀히 말하면 랜덤하게 값을 입력해서 해당 해시값이 나오는지 확인하는 작업을 반복하는 것이다. 
예를들어, 
‘SHA256 해시의 결과가 다음과 같은 입력값을 찾으시오.

125fed6953ab43dbff05983daab34cc65a659a0ad53d59dd90c754ab44ed54ff0a’

라는 문제가 주지면, 컴퓨터는 해시함수에 랜덤하게 값을 입력하여 위 해시값이 나오게 되는 입력값을 찾아내는 작업을 마이닝이라고 하는 것이다. 
문제의 난이도는 채굴에 참여하는 노드수에 따라 변경이 되는데,, 64개의 글자중 일정수의 ‘X’를 포함시켜 조정을 한다. 
즉,

‘XXXXXXXXXXXb43dbff05983daab34cc65a659a0ad53d59dd90c754ab44ed54ff0a’

같은 방식으로..