블록체인 이야기 - 해시함수, 작업증명, 해시캐시, 비트코인
해시함수
정방향 계산은 쉬우나 역방향 계산은 매우 어려움
특징
- SHA1 → 160 bits
- SHA2 → 256 bits
- 입력 값이 조금만 달라져도 완전히 다른 값이 나온다.
- 가능성은 낮지만, 입력값이 다른데 같은 결과가 나오는 경우도 있음 : 해시충돌
- 입력값의 범위는 무한하지만 출력값은 항상 160비트가 나온다면 당연한 결과
- 데이터 진품 보증에 활용
- 다운로드 시그니쳐 - KEYS, ASC, MD5, SHA256
작업증명(Proof-of-work)
- 해시 함수에서 결과로 부터 입력을 알아내는 것은 현실적으로 불가능
- 하지만, 대입법으로 찾을 수 있음 (가능한 입력 값을 모두 대입해 출력을 산출)
- 하지만, 찾아야 하는 값의 범위를 넓혀준다면?
- 총 160비트의 수에서 10진수 127(01111111) 이하의 수를 찾는다고 가정해보자.
- 0~127 -> 128배로 쉬워짐
- X->Y = 100 (1 / 2^160 )
- X->Y = 99 or 100 ( 2 / 2 ^ 160) -> 2배 쉬워짐
- X->Y = 0000….0000 1111111 -> 2^153
간단한 예
- 전체 비트수가 8일 때, 앞 다섯 자리가 0인 예
- 앞의 다섯 자리가 0으로 고정되고 나머지 자리가 모두 1인 경우 나올 수 있는 가장 큰 값은 1이다.
- 00000111 = 7
- 앞의 다섯 자리가 0 이면 항상 00000111 보다 같거나 작다.
- 즉, Hash(X) ≤ 00000111인 X는 항상 앞의 다섯 자리가 0이다.
작업증명의 아이디어 - 해시캐시(Hashcash)
- 10년 전 스팸메일 거르기
- 스팸메일 보내는 비용은 매우 싸고 대량 발송 가능, 누구든 걸려들면 이득
- 하지만 이메일을 보낼 때 한 사람당 1초 정도 걸린다면?
- 보내는 사람이 메일을 보내기 위해 노력을 했다는 증거 - 작업의 증명 -을 함께 보냄
- 메일 헤더 X-Hashcash
- 버전:비트수:날짜:수신자주소:랜덤값:카운터값
- 발송자 카운터 값을 바꿔 가며 해시함수로 계산해서 앞의 20자리가 0으로 시작할 때 까지…
- 수신자는 간단히 앞의 20자리가 0으로 시작하는지만 확인
- 97년도에는 이작업을 하는데 컴퓨팅 파워가 1초 정도 걸렸다고 함
- 메일을 보내기 위한 노력!
비트코인과 블록체인
화폐란 무엇인가?
- 신뢰
- 시간이 지날 수록 발행하면 할 수록 가치가 떨어지는 것
- 은행 = 국가가 보증하는 기관
- 고객의 믿음이 생명
- 거래원장(ledger)의 정확성
- 누구나 믿을 수 있는 하나의 거래원장이 있으면 은행 대체 가능
- 금, 부동산, 이력, 근무기록, 게임머니, 작업기록 등등
- 국가를 믿지 못하면 화폐가치가 폭락
- 국가가 마구 찍어서 발행한 화폐는 빵 보다 못함
- 아프리카 짐바브웨 2000년대 후반 물가가 일년에 백만 배 이상 오르는 하이퍼 인플레이션
- 빵하나에 수십억
- 로마가 멸망한 이유? - 금화, 은화 -> 불순물 섞으면서 유통량 늘림
- 일본 에도시대 종말 - 위에서 한 발 더 나아가서 금 은 비율 조정
비트코인
- 최초의 실물 거래 사례 : 1만 BTC for 피자 두판 (2010년)
- 현재 가치 : 약 8000달러(18년 2월)
- 여러 사람에게 보급 되어 신뢰를 얻으면 무형의 재산도 실물의 가치를 가지게 된다
- 결국 국가가 보증하기 때문에 신뢰하는 화폐와 비슷한 개념
- 신뢰를 얻게 된 핵심 -> 블록체인 기술
해시캐시 구조
블록체인 블록 구조
SHA256
- 1990년 말 해시캐시는 SHA-160 사용
- 이제는 어려운게 아님
- SHA-256
- 앞자리가 40비트! (40비트는 만고불변은 아님)
블록헤더만 해시
- 블록 내용 전체를 포함해서 Nonce를 찾아내면 계산량이 많아지니 실 사용에 적합하지 않음.
- 블록 헤더에 블록의 내용을 해시한 값을 이용
실제 블록체인 구조