프로그래밍/블록체인

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 3. 타임스탬프 서버

산을좋아한라쯔 2018. 3. 24. 23:02
반응형

여기서부터 거래의 이중거래를 막을 수 있는 블록체인 기법이 소개됩니다.

먼저, 타임스탬프에 대한 얘기입니다.

 

3. 타임스탬프 서버

우리가 제안하는 해결책은 타임스탬프 서버로부터 시작된다. 타임스탬프 서버는, 거래 항목들로 이루어진 블록들에 대한 해시를 취함으로써 타임스탬핑을 하고, 신문이나 유즈넷 포스트처럼[2-5] 그 해시들을 널리 배포하는 작업을 수행한다. 타임스탬프는 그 데이터들이 그 시점에 분명히 해시값들의 입력값으로 존재했었다는 것을 보증해준다. 각 타임스탬프는 그 해시값 안에 이전 타임스탬프를 포함하고, 각각 추가되는 타임스탬프에 의해 강화되는 구조를 가지는 체인을 형성한다.

   

 

여기서 얘기하는 타임스탬프는, 실제 시간을 가지고 기록하는 것을 얘기하는 것이아니고, 어떤 작업에 대한 시간적인 일련의 순서를 결정하는 것을 말합니다. 예를 들어 A라는 작업 후에 B라는 작업이 일어났다는 것을 보증하게하는겁니다.

 

이러한 것이 가능하도록하는 기법으로 이 논문에서는 해시(hash)를 사용합니다.

해시는 이 글의 앞 부분에서도 얘기했지만 '일방향 함수'입니다. 일방향이라는 것은, 한쪽 방향 즉, A->B로의 변환은 쉽지만 B->A로의 변환은 어려운 함수를 말합니다.

 

'일방향함수'의 의미를 수학이 아닌 자연계의 '일방향성'으로 생각해보면 쉽게 이해가됩니다. 대표적인 일방향성을 가진 자연현상은 '시간'입니다. 과거->현재로 시간은 흐릅니다. 현재->과거로의 방향은 불가능합니다. 

시간의 경우는 역방향으로의 변환이 '불가능'하지만, 해시함수에서는 역방향으로의 변환이 이론적으로 '불가능'하지는 않습니다. 매우 어려울 뿐이지요. 일상생활에서 이처럼 불가능은 안하지만 매우 어려운 일방향성을 예로 들어보면, 작은 돌들로 이루어진 돌탑을 허물기는 쉽지만, 다시 쌓기는 힘든 것을 예로들 수 있겠습니다.

인간간의 신뢰를 쌓는 것과 잃는 것도 비슷한 일방향성일 듯 싶습니다.

 

해시를 이용해서 타임스탬프 효과를 나타낼 수 있다는 것은 다음과 같은 이유에서입니다.

 

- 앞 장에서 얘기했던 '거래'들이 계속해서 일어날텐데, 약10분씩마다 그 '거래'들을 모아서 하나의 블록으로 만듭니다. 즉, 앞에 10분전에 블록화 되지 않은 여러개의 거래데이터들을 모아서 블록으로 만드는 겁니다. 이제, 이 블록을 블록1이라고 가정하고, 10분전에 이미 만들어진 블록을 블록0라고 하겠습니다.

- 이제 블록1에 대해서 해시를 뜹니다. (해시함수를 이용해서 해시값을 얻어낸다는 표현)

  해시를 뜨는 방법은, 이전 블록인 블록0의 해시값과 현재 블록1의 데이터를 합쳐서 해시를 뜹니다.

  블록1의 해시값 = Hash (블록0의 해시값 || 블록1 데이터)

- 이렇게 각 블록의 해시값을, 그 이전 블록의 해시값이 가미되어 계산되게 하면, 각 블록은 시리얼하게 '순서'를 가지게 됩니다. 그리고 그 순서는 암호학적으로 보증이 됩니다. 즉, 블록의 순서가 "블록0 -> 블록1 -> 블록2 -> 블록3 -> 블록4..." 처럼 되어 있고, 각 블록들의 해시값이 위와 같은 방법에 의해 생성되어 보관되어 있다면, 누군가 마음만 먹으면 각 블록의 순서에 대한 증명을 할 수 있는 겁니다. 각 블록의 순서에 맞게, 그 전 블록의 해시값을 가미시키면서 해시값을 비교해보면 되는 겁니다. 만약, 불순한 의도를 가진 이가 "블록1 -> 블록3 -> 블록2"라고 주장하려해도 안되는 것입니다. 해시값이 틀리기 때문이죠.

 

진짜 "블록1 -> 블록3 -> 블록2 -> 블록4"로 순서를 바꾸는 것이 '불가능' 할까요? 

불가능하진 않습니다. 블록3에 대한 해시값을 새로 계산하고(블록1의 해시값을 가미해서), 또한 블록2의 해시값도 새로 계산해서 기록하고(원래 블록2의 해시값은 블록1의 해시값이 가미되어 계산되었는데, 이번에는 블록3의 해시값이 가미되어 계산되야 함), 역시 블록4의 해시값도 새로 블록2의 해시값을 가미해서 기록하면 됩니다.

 

즉, 불순한 의도를 가진이가 모든 블록에 대해서 새로 해시값을 계산해서 기록할 수 있는 '권리'를 획득한다면, 타임스탬프에 의한 거래의 순서를 바꿀 수 있습니다. 이처럼 어떤 이가 맘대로 거래의 순서를 바꾸는, '기록할 수 있는 권리' 혹은 '블록을 생성할 수 있는 권리'를 획득하지 못하게하려면 어떻게 해야할까요? 그 부분에 대한 답을 다음 장에서 설명하고 있습니다. 미리 답을 '추상적'으로 얘기하면, '권력'이 독점되지 않고 참여자 모두에게 '공평하게' 분배되게 하는 것입니다. 

 

-계속-

 

[전체 목차]

1. 서론  
2. 거래(1/2)  
2. 거래 (2/2)
3. 타임스탬프 서버 
4. 작업 증명 
5. 네트워크 
6. 인센티브 
7. 디스크공간 회수 
8. 지불 입증 간소화 
9. 금액의 결합과 분할 

 

반응형