
[처음 배우는 블록체인] 이라는 책을 참고하여 개인공부와 복습의 용도로 게시글을 작성했습니다.
타임스탬프는 '2017-10-17 12:00:00' 같은 형식으로 날짜와 시간을 표시하는 문자열이다. 어떤 일이 일어난 날짜와 시간을 저장해 해당 사실을 증명하거나 앞뒤 관계를 알린다. 화폐거래에서는 계좌의 거래 내역이나 영수증에 적힌 시각이 타임스탬프이다. 거래 사실을 증명하는 데 중요한 역할을 한다.
타임스탬프에는 두 가지 특성이 있다.
최근의 애플리케이션이나 시스템 대부분은 서비스를 동작시키는 서버 시간을 확인해 정상적으로 이벤트가 발생했는지 판단한다. 이는 타임스탬프 서버로 발전한다.
불특정 다수가 이용하는 인터넷 서비스 구축 방법은 여러 가지가 있다. 그중 '중심이 되는 시스템'으로 모든 작업을 처리하는 방식을 '중앙 집중형 시스템'이라고 한다. 중앙 집중형 시스템은 서비스의 데이터 무결성을 유지하기 쉽다. 또한 '중심이 되는 시스템'만 잘 관리하면 신경 쓸 일이 별로 없다. 반면 '중심이 되는 시스템'의 작업 처리량이 많으면 시스템이 느려지거나, 정지하거나 에러가 발생하는 등 서비스 전체 상태에 영향을 준다. 시스템 관리자가 나쁜 의도로 데이터를 조작하거나 서비스를 중단시키는 것을 막을 수 없기도 한다.
중앙 집중형 시스템의 특징은 타임스탬프에도 그대로 적용된다. 중앙 서버에 큰 문제가 없으면 타임스탬프 기록을 신뢰할 수 있다.
하지만 중앙 서버에 문제가 발생하거나 부정행위 등이 있으면 타임스탬프의 기록을 신뢰할 수 없다. 비트코인을 만든 이유는 "관리자 없이 신뢰할 수 있는 화폐 거래 구조를 만들고 싶다"이다.
중앙 집중형과 반대 방식으로 시스템을 구축한다면 P2P 시스템을 고려해볼 만하다. P2P 시스템의 장.단점은 다음과 같다.
P2P 파일 공유 서비스라면 꼭 타임스탬프 기록의 신뢰성을 보장할 필요는 없다. 하지만 계좌 내역이나 장부 등을 관리하는 P2P 서비스는 타임스탬프의 신뢰성을 보장하는 데이터 처리 방법이 필요하다. 모든 노드가 특정 시간 흐름을 공유한 후, 앞뒤 순서를 암호확에 기초한 자료구조로 판단하는 타임스탬프 구조를 고안했다.
블록체인은 기존 P2P 시스템과 다른 타임스탬프 구조를 포함한 '탈중앙화 시스템'을 구축한 것이다. 어떤 중앙에 집중된 구조가 아니라는 분산 시스템의 특징과, 특정 기업이나 관리 조직이 시스템을 통제하지 않는다는 개념을 조합해 다양한 사람이 시스템을 운영하는 기반을 마련한 것이다.
분산 시스템이나 P2P 시스템에 연결된 노드는 '절대 시각' 대신 시각 2개의 앞뒤 순서를 구분할 수 있는 '상대 시각'으로 시간 흐름을 정의한다.
블록체인은 암호화 해시 함수로 논리 데이터 저장 순서를 정의한다. 대표적인 예는 비트코인에서 사용하는 SHA-256 등이 있다.
데이터 a를 암호화 해시 함수로 계산한 값은 h(a)이다. 해시 함수는 계산하기는 쉽지만 반대로 입력값을 구하는 것은 어려운 일방향 함수이므로 h(a)의 값으로 a를 계산(데이터 조작)하기는 어렵다. 따라서 해시값 h(a)는 데이터 a가 안전한 데이터라는 것을 논리적으로 보장한다. 또한 입력값인 a가 조금만 변해도 h(a)는 전혀 다른 값이 된다. 이는 데이터 검증을 쉽게 만들고, 작업 증명 알고리즘을 '확률 게임'으로 생각할 수 있게 하므로 매우 중요하다.
한편 h(a)를 b라고 정의해 h(b)를 계산하면 h(b)는 h(a)가 안전한 데이터임을 보장하면서 데이터의 앞뒤 순서도 알 수 있다. 데이터 하나에 재귀적으로 암호화 해시 함수를 적용한 기술을 '해시 체인'이라고 한다. 일회성 비밀번호 인증 시스템 구현 등에 사용한다.
유닉스의 타임스탬프와 해시 체인의 타임스탬프 모두 정수로 표시한다. 유닉스의 타임스탬프는 1970년 1월 1일 0시 0분 0초에서 1초씩 흐르는 시각을 정수로 표시하며, 해시 체인 타임스탬프는 새로운 데이터를 추가할 때마다 1씩 증가시킨다는 차이가 있다.