블록체인에 사용되는 해시함수는 무엇이고 어떤 특성을 가지고 있는지 알아보고 있습니다.
그 네번째 마지막 글로 해시 함수의 특성 3 - 퍼즐 게임을 만들 수 있다입니다.
이전 글은 아래 링크에서 보실 수 있습니다.
[블록체인] 해시함수 이해 2 - 특성 1 - 충돌이 거의 발생하지 않는다.
[블록체인] 해시함수 이해 3 - 특성 2 - 원본 내용을 알 수 없다
이글에서 말하는 해시 퍼즐 게임이 비트코인 채굴자(마이너)들이 푸는 문제와 같은 종류입니다.
흔히 암호를 푼다고 하는데요.
알고보면 암호를 푼다기 보다는 랜덤하게 값을 입력해서 원하는 해시가 나오는지 확인하는 작업을 반복하는 겁니다.
모래밭에서 금조각 찾기라고 할 수 있는데요.
금속 탐지기나 심지어는 사금 채취하듯 물에 흘려보내면서 찾는 등 어떤 기술 도입을 전혀 할 수 없다는거죠.
문제는 이런식입니다.
256 bits 결과를 내는 SHA256 해시의 결과가 아래와 같은 입력값을 찾으시오.
해시 : '38744961f4eda323853183a6f6bc135434347285158efaaba7b9280fdb569a95'
해답을 찾는 지름길이 없다
해시의 특성중 충돌이 일어나지 않는다와 해시 결과로 입력을 원본을 알 수 없다는 것이 있습니다.
예를들어 숫자 256으로 나누어서 나머지 값을 해시 결과로 갖는 해시함수가 있다고 하죠.
해시 결과 10일 입력을 찾으라는 문제를 내면 어떻게 하시겠어요?
256 + 10
256 X 2 + 10
256 X 3 + 10
....
아주 간단한 공식으로 바로 해결이 됩니다.
이런 해시는 사용불가입니다.
여기서 예로들고 있는 SHA256은 아직까지는 이런 지름길이 없는 것으로 알려져 있습니다.
무조건 어떤 값을 넣어서 해시를 계산해 보고 해답과 일치하는 지를 봐야하는 거죠.
그래도 뭔가 꼼수를 부릴 수 있지 않을까?
가능합니다.
해시 결과를 미리 계산해서 저장해 두는 데이터 베이스를 만드는 거죠.
일단 최대한 많이 만들고, 계속 만들어 둡니다.
그리고 문제로 출제되는 해시와 이미 저장된 것과 일치되는 것이 나오면 계산할 필요도 없이 바로 답을 알게되는 거죠.
이를 방지하기 위해서 실제 어플리케이션에는 좀 더 다른 방법으로 문제를 출제합니다.
랜덤하게 생성된 키값을 주고요.
이 키와 어떤 값(X)를 붙여서 해시 입력으로 넣었을 때 해시 결과가 아래와 같이 나오는 X를 찾으시오.
예를들면
SHA256 해시의 입력으로 아래 주어진 키에 X를 붙여서 넣었을 때 아래 주어진 해시를 출력하는 X를 찾으시오.
키 : '0c62f876ef1dea830de9f32c2f4b46dd6d74d50d15896e09ef5a2fcd4ac7e1d7'
해시 : '38744961f4eda323853183a6f6bc135434347285158efaaba7b9280fdb569a95'
라고 문제를 출제합니다.
해시의 충돌은 발생할 수 밖에 없습니다.
즉 같은 해시를 만들어 낼 수 있는 입력은 아주 많이 존재한다는 거죠.
하지만 랜덤으로 선택된 키를 제공함으로서 내가 미리 계산해둔 해시 입력값은 의미가 없어집니다.
정답이 미리 계산해 둔 데이터베이스에 있을 수도 있지만, 역시 하늘에 별따기죠.
문제의 난이도 조정은 어떻게 하지?
그런데, 위에 예를 든 것처럼 문제를 출제하면 어떤 경우에는 평생 아무도 못 푸는 문제가 되고 맙니다.
해시의 특성 2에서 40조의 8 제곱에 관한 설명을 보셨죠?
문제의 난이도를 조정하는 법은 의외로 쉽습니다.
아래와 같이 하는 거죠.
256 bits 결과를 내는 SHA256 해시의 결과가 아래와 같은 입력값을 찾으시오.
단, X는 아무 값이나 들어가 일치하지 않아도 됩니다.
해시 : 'XXXXXXXXXXeda323853183a6f6bc135434347285158efaaba7b9280fdb569a95'
해시 결과를 하나의 값으로 고정하는 것이 아니라 특정 그룹으로 묶어 문제를 출제하는 것입니다.
제일 쉬운 문제는 마지막 한 bit만 일치하면 되는 문제겠죠.
확율적으로 2번만 시도하면 1번은 정답을 맞출 수 있습니다.
제일 어려운 문제는 당연히 256 bits가 모두 일치하는 문제고요.
지금까지 블록체인에서 사용되는 해시함수의 특징에 대해서 간단히, 가능하면 쉽게 알아봤습니다.
포스트 순서입니다.
[블록체인] 해시함수 이해 2 - 특성 1 - 충돌이 거의 발생하지 않는다.
'블록체인' 카테고리의 다른 글
비트코인 코어(Bitcoin Core) 소스 분석에 도움이 되는 자료 모음 (0) | 2018.04.15 |
---|---|
[블록체인] 해시함수 이해 3 - 특성 2 - 원본 내용을 알 수 없다 (0) | 2018.03.31 |
[블록체인] 해시함수 이해 2 - 특성 1 - 충돌이 거의 발생하지 않는다. (0) | 2018.03.28 |
[블록체인] 해시함수 이해 1 - 해시함수란? (0) | 2018.03.27 |