블록체인, 암호화폐 기술에 대한 내용에 항상 등장하는 것 중 하나가 해시함수(Hash Function)죠.
해시함수는 무엇일까요?
정말 쉽고 간략하게 설명해 보겠습니다.
해시함수를 아주 간단히 말하면,
어떤 길이의 데이터를 입력해도 정해진 길이의 결과를 주는 함수
라고 할 수 있습니다.
말은 정말, 정말 간단하죠? 단지 확~~ 마음에 와 닫지 않을 뿐.
아래 그림은 SHA256 해시 함수를 그림으로 간략히 표시한 겁니다.
말로는 잘 이해가 안될 수도 있으니 실제 SHA256 해시의 결과를 확인해 보겠습니다.
SHA 256은 256bits의 결과를 주는 해시함수인데요. 파이썬 hashlib에서 제공하는 함수를 사용했습니다.
>>> t1 = b'Hello, SHA 256'
>>> sha256(t1).hexdigest()
결과는
'a110c0e99329666d8ed6aa919a6875e79106b6b8c3e906a6145b44d8240d988c'
입니다.
결과가 8진수로 표시되었기때문에 각 글자당 4bits이라서 4 X 64 글자 = 256 bits 입니다.
>>> t2 = b'This is a sha 256 test. The input length can be random'
>>> sha256(t2).hexdigest()
'37ea99e0274c2d1f72c35dc291578717b43d31a76b17e260977a6c6ac9fb5755'
다른 길이의 입력을 넣어도 결과는 항상 256bits입니다. SHA256 이니까요.
해시함수는 아래와 같은 특성을 가지고 있습니다.
- 어떤 길이의 데이터도 입력으로 사용될 수 있습니다.
- 결과는 정해진 길이로 나옵니다. SHA256은 입력되는 데이터의 길이와 상관없이 항상 256bits를 결과로 줍니다.
- 계산 시간이 합리적으로 추정 가능해야합니다. 입력 길이에 제한이 없기때문에 최소한 입력 길이에 선형적으로 비례하는 특성은 있어야합니다.
정말 간단하죠?
입력 길이에 상관없이 정해진 길이의 결과를 내어주는 함수 == 해시함수
하지만 정말 재미있는 해시함수의 특징이 있습니다.
특별히 블록체인에서 관심있어하고 실제로 사용되는 특성은 아래와 같은데요.
- 결과값이 중복될 가능성이 거의 없다.
- 입력값을 알수 없다.
- 결과값을 알려주고 입력값을 찾을 수 있는 특별한 공식이 없다.
위의 특성을 하나하나 보다보면 왜 블록체인에서 해시함수를 자주 언급하는지 알게됩니다.
다음 포스트에는 위 3가지 특성에 대해서 좀 더 자세히 알아보도록 하겠습니다.
포스트 순서입니다.
[블록체인] 해시함수 이해 2 - 특성 1 - 충돌이 거의 발생하지 않는다.
'블록체인' 카테고리의 다른 글
비트코인 코어(Bitcoin Core) 소스 분석에 도움이 되는 자료 모음 (0) | 2018.04.15 |
---|---|
[블록체인] 해시함수 이해 4 - 특성 3 - 퍼즐 게임을 만들 수 있다==코인 마이닝 문제 출제 (0) | 2018.03.31 |
[블록체인] 해시함수 이해 3 - 특성 2 - 원본 내용을 알 수 없다 (0) | 2018.03.31 |
[블록체인] 해시함수 이해 2 - 특성 1 - 충돌이 거의 발생하지 않는다. (0) | 2018.03.28 |