비트코인은 블록체인을 기반으로 작동한다는 사실은 대부분 알고 있을 것이다. 그럼 좀 구체적으로 비트코인은 블록체인 체제 하에서 어떻게 채굴이되고 전송이 되는 것인가? 이 쪽 분야에 지식이 없는 사람은 몇번 돌려 보고 생각도 좀 해봐야 이해가 될 수도 있다. 하나씩 하나씩 나누어 알아보자. 이번 포스트에서는 Hash Function(해쉬함수)이 무엇인지 정리해 보겠다.

Hash Function (해쉬함수)

해쉬함수는 비트코인이나 블록체인에 국한된 개념은 아니다. 즉 정보보안 분야에 널리 쓰이는 개념이다. 가장 흔한 예를 한번 들어보겠다. 여러분들이 어떤 웹페이지에 회원가입을 할 때 패스워드를 타이핑 해 본 적이 있을 것이다. 이 패스워드가 여러분들이 기입한 그대로 상대 웹서버로 전달되어 웹호스트의 데이터베이스에 저장된다고 가정해보자. 이 경우 어떤 해커가 그 웹서버와 그 데이터베이스를 공격한다면 고스란히 당신의 패스워드는 해커의 손에 들어갈 것이다.

이 문제를 해결하기 위해 보통 여러분들의 비밀번호는 암호화 해서 저장된다. 이 때 암호화에 사용되는 것이 Hash Function이다. Hash Function은 보통 y=h(x)로 표현한다. 여러분이 입력한 비밀번호가 x이고 그 비밀번호가 Hash Function을 통해 변형된 후 웹호스트 데이터 베이스에 저장되는 값이 y이다. y는 고도로 암호화 되어 산출된 값이기 때문에 해커가 데이터베이스에 저장된 y의 값을 알아내더라도 당신의 패스워드를 알아내기란 사실상 불가능하다. 그리고 해커는 y만 가지고는 당신의 계정에 로그인할 수 없다. 이렇게 여러분의 비밀번호가 보호되는 것이다.

암호화에 사용되는 Hash Function의 특징은 다음과 같다.

1. 입력한 비밀번호의 길이에 관계 없이 일정한 길이의 y가 산출된다.

2. 같은 x 값에 대해서는 동일한 y가 출력되지만 약간이라도 변형된 x가 입력되면 완전히 다른 y가 산출된다.

파이썬이라는 프로그램을 통해 Hash Function에 대한 예를 들어보겠다.


위의 프로그램 결과를 보면 Smith, John 그리고 Jack의 좌측 비밀번호(x)의 길이는 서로 다르지만 Hash Function을 통해 산출된 우측 해쉬값(y)의 길이는 동일하다. 그리고 Smith와 John의 비밀번호(x)의 아주 약간의 차이에도 불구하고 해쉬값(y)는 완전히 다른 값이 산출되었다. 반면 동일한 비밀번호(x)에 대해서는 같은 해쉬값(y)가 산출된다. 단순 Random Generator는 아니라는 것이다.

데이터베이스에는 좌측 비밀번호(x)가 저장되는 것이 아닌 우측 해쉬값(y)가 저장되는 것이다. 해커가 데이터베이스에서 해쉬값(y)를 찾아낸다 하더라도 해쉬값(y)를 비밀번호(x)로 되돌리는 건 사실상 불가능하다. 이런 원리로 여러분들의 비밀번호가 보호되는 것이다.

이게 일반적인 정보보안, 그리고 비트코인 프로토콜에서 사용되는 해쉬함수의 기본적 개념이다. 이것이 비트코인 프로토콜에 어떻게 적용되는지는 다음 포스트에서 다루도록 하겠다.

+ Recent posts