[블록체인 스터디 노트 #4] Bitcoin은 어떻게 신뢰를 얻게 되었나 1

in #dclick6 years ago

암호자산 성투 가즈아! 안녕하세요. 이글아이(@eaglekeeneye) 입니다.

이번 글은 지난 글에 이어진 이야기입니다. 아래의 링크부터 차례로 먼저 읽고 오시길 권장 드립니다.

0) 이야기 순서


우선 "1) 신뢰할 수 없는 P2P 환경" 에서 탈 중앙화된 P2P 환경은 기본적으로 어떤 취약점이 존재하는지 설명해 드리며 시작하겠습니다.

그다음은 P2P 환경에 고질적인 문제인 "2) Byzantine 장군 문제" 를 소개하겠습니다.

마지막으로 암호학자들은 위의 비잔틴 장군 문제를 는 어떤 방식으로 해결하였는지 "3) POW (Proof of Work)" 에 대해 설명하겠습니다.

1) 신뢰할 수 없는 P2P 환경


( a ) P2P 환경은 어떤 환경인가


‘신뢰’라는 것은 어떻게 형성되는 것일까요? 여러분은 어떤 사람들을 ‘신뢰’하시고 어떤 사람에게 ‘신뢰’가 안 가시나요?
‘신뢰’가 형성되는 것은 보통 3가지에 의해 형성이 된다고 합니다.

위력에 의해 형성된 신뢰
평판에 의해 형성된 신뢰
신용에 의해 형성된 신뢰

( i ) 위력에 의해 형성된 신뢰


소작농과 영주의 관계를 생각하시면 편합니다. 영주는 일정 부분의 세금을 잉여생산물에서 거두어 자신의 재산을 증식하는 데에 쓰거나 생활 유지를 하는 데에 사용합니다. 그런데도 소작농들이 자신이 일해서 얻은 농산물에서 세금을 꼬박꼬박 내는 것은 영주의 힘이 무섭기도 하고, 다른 침략자들이나 약탈자들에게 농산물을 뺏기지 않기 위한 목적도 있습니다. 토지를 관리하는 영주 역시 소작농들이 약탈당하면 손해이기 때문입니다.

( ii ) 평판에 의해 형성된 신뢰


신뢰는 평판에 의해서도 얻어 질 수 있습니다. 우리가 맛집을 고를때 여러 맛집을 섭렵하는 친구에게 어떤 식당이 맛이 있었는지 물어볼 수도 있고, 맛집 블로그 글을 찾아서 정보를 얻을 수 있습니다. 그 식당에 대한 여러 사람들의 좋은 평판이 누적되어 신뢰가 되며, 좋지 않은 평판만 쌓이면 신뢰를 잃게 되는 것입니다.

( iii ) 신용에 의해 형성된 신뢰


사람 A에게는 친구 B와 C가 있다고 가정해봅시다. 친구 B와 C는 급한 일에 쓸 돈이 있다며 이자까지 쳐주며 갚겠다고 합니다. 친구 B는 평소에 습관처럼 친구들의 돈을 빌리고 갚지 않으며, 친구 C는 이자는 물론 감사의 의미로 술도 사주는 친구입니다. 어떤 친구에게 돈을 빌려줘야 합리적일까요? 당연히 친구 C에게 돈을 빌려주는 것이 합리적입니다. 친구 C는 여태까지 친구 A에게 신용을 보여줌으로써 신뢰를 형성했기 때문입니다.

( b ) 시스템의 공격 유형 정리


( i ) 이중지불 (Double Spending)


신뢰할 수 없는 환경에서 이중지불 (Double Spending) 은 어떤 의미를 갖는지 생각해보겠습니다.
이중지불 이란, 한번의 화폐단위의 거래로 두 번의 결제가 진행된 것을 의미합니다.

이 문제는 물리적인 현금으로 거래하는 경우거나, 중앙집권적 금융체계에서는 일어날 수 없는 일입니다. 왜냐하면 중앙서버에서 한 사람이 다른 사람에게 송금을 하여 한 번의 거래가 일어나면, 거래를 빠르게 검증하고 바로 잔고를 비워버립니다. 그래서 화폐를 지불하고 곧바로 다른 사람에게 같은 양의 화폐를 지불한 다음에 이전 거래를 무효화할 수 없습니다.

탈중앙화된 P2P 환경에서는 이러한 거래를 검증해줄 신뢰성 있는 기관이 없기 때문에 이중지불의 문제가 발생합니다. 위의 이미지에서 A 만이 유일하게 거래장부를 쓸 수 있는 권한이 있다고 가정해봅시다. 비트코인의 경우 51% 이상의 해시 파워를 갖는 주체가 될 것입니다.

A가 B에게 화폐를 지불하고, B가 A에게 상품을 건네줍니다.거래내역은 검증되지 않았습니다.

② 재화를 받은 A는 이중지불을 시도하기 위해 곧바로 자신의 계정인 C에게 화폐를 똑같이 지불합니다. 이 거래내역은 역시 검증되지 않았습니다.

A는 B에게 지불한 화폐거래내역을 무효화시킵니다. 그리고 A는 C에게 화폐를 지불한 거래내역만이 올바른 것이라고 조작합니다.

④ 결과적으로 A의 화폐는 C 계정으로 옮겨서 갔고, B는 정당한 지불을 못 받고 상품만 A에게 건네준 꼴입니다. 이것이 이중지불의 문제입니다.

( ii ) 시빌 공격 (Sybil Attack)


신뢰할 수 없는 P2P 환경에서는 시빌 공격 (Sybil Attack)[1] 역시 해결해야 하는 과제 중 하나입니다. 만약 계정 생성을 중앙서버가 관리하고 있다면, 각 계정을 소유하고 있는 주인이 누구인지 추적이 가능하기 때문에 상대적으로 시빌 공격에서 안전합니다. 하지만 P2P 환경에서는 계정을 주 하는 신뢰할 수 있는 제 3자가 존재하지 않기 때문에 이 문제가 존재합니다.

위의 그림을 참고하시면 시빌 공격이 어떤 유형의 공격인지 이해하기 쉬울 것입니다. 예를 들어, 특정 제품의 후기를 올리고 좋은지 나쁜지 판단하는 평판시스템이 존재한다고 가정해봅시다. 물건을 써보고 좋지 않은 경험을 한 많은 이용자는 낮은 평판 점수를 줄 것이며, 아직 물건을 사용하지 않은 이용자들은 구매하기 전에 후기를 보고 구매 결정을 내릴 것입니다.

제품 판매자가 매출을 극대화하기 위해 제품의 이미지를 좋게 하기 위해 좋은 제품을 만들어야 합니다. 또 다른 방법은 제품에 대한 평판을 조작하는 방법이 있습니다. 댓글 아르바이트를 고용해서 써보지도 않은 제품에 대한 좋은 후기를 남기거나 높은 점수를 매기는 행위 역시 시빌 공격의 예시라고 할 수 있습니다.

2)비잔틴 장군 문제 (비잔티움 장애 허용)


( a ) 용어의 정리


분산화 컴퓨터 시스템을 구성하는데에 중요한 난제 중에 하나입니다. 비잔틴 장군문제두 장군 문제[2]를 일반화 한 문제이며, 비잔티움 장애 허용[3]은 위의 비잔틴 장군 문제로부터 장애 허용 분야 연구의 한 갈래입니다.

( b ) 문제의 정의: 두 장군 문제


  • 목적:

불확실한 통신 상황에서 상호 동기화를 시도할 때 발생하는 문제입니다. 계곡 사이에 적의 본진이 있으며, 장군 A와 B는 동시에 공격해야만 성을 함락시킬 수 있습니다.

  • 조건 및 가정:

동등한 위치의 2명의 장군이 서로 배신할지 말지 모릅니다. 서로 공격 시간을 맞춰야 하는데, 메신저를 통해서만 메시지를 보낼 수 있고 메신저는 중간에 잡혀서 죽을 수도 있습니다

  • 시나리오:

① 위의 그림에서 보이듯이 장군 A는 장군 B에게 새벽 3시에 공격을 개시하자는 메시지를 전달합니다. 그렇다면 장군 A는 장군 B에게 메시지를 전달했으니 마음 놓고 새벽 3시에 공격할 수 있을까요? 그렇지 않습니다.

장군 A는 장군 B가 메시지를 제대로 받았는지 모르기 때문입니다. 그래서 장군 A는 장군 B가 메시지를 제대로 받지 못했을까 봐 시간에 맞게 공격하기를 주저할 것입니다.

② 장군 B가 성공적으로 메시지를 받았다고 칩시다. 그럼 장군 B는 장군 A에게 메시지를 확인했다고 메시지를 보냅니다. 이 경우도 장군 B가 섣불리 공격을 가지 못할 것입니다. 왜냐하면 장군 A가 '장군 B가 메시지를 확인했다'라는 메시지를 확인했을지 모르기 때문입니다.

③ 장군 A가 '장군 B가 메시지를 확인했다'라는 메시지를 성공적으로 확인했다고 칩시다. 그래도 장군 A는 섣불리 공격을 개시할 수 없습니다. 장군 B가 최근에 보낸 메시지를 장군 A가 확인하지 못했으리라 생각하고 공격 개시를 하지 않을 가능성이 있기 때문입니다.

  • 결론:

현재까지 두 장군 문제는, 위에 설명해 드린 시나리오와 같은 이유로 해답이 없는 것으로 증명되었습니다.

( c ) 문제의 정의: 비잔틴 장군 문제


  • 목적:

중앙에 적의 본진이 있으며, 장군 A, B, C, D, E 중 3명 이상이 공격해야만 성을 함락시킬 수 있습니다.

  • 조건 및 가정:

5명의 장군 중 누가 배신할지 모릅니다. 선의의 장군이면 성을 함락시키기 위해 공격에 가담할 것이며, 배신자는 최대한 메시지를 교란해 병력을 분산시킬 것입니다.

서로 공격 시간을 맞춰야 하는데, 한 장군은 다음 장군에게만 메시지를 전달 할 수 있습니다. 그리고 메시지는 반드시 20분 안에 전달해줘야 합니다.

  • 시나리오:

① 위의 그림에서 보이듯이 장군 A는 장군 B에게 새벽 4시에 공격을 개시하자는 메시지를 전달합니다.

② 장군 B는 메시지를 확인하고, 장군 C에게 메시지를 그대로 전달합니다.

③ 장군 C는 배신자이므로 기존에 왔던 메시지를 찢어버리고, 공격 시 간 새벽 5시로 위조하여 장군 D에게 전달합니다.

④ 장군 D는 메시지를 확인하고, 장군 E에게 메시지를 그대로 전달합니다.

  • 결론:

성을 함락하기 위해 최소 3명의 장군이 필요한데, 장군 A와 B만 공격에 가담해서 성을 함락하지 못합니다.

3)POW (Proof of Work)


( a ) POW 를 문제의 해결 방법제시


위의 문제에서 장군 C가 배신자일 경우 적 본진 함락에 실패하는 것을 확인하였습니다. 난제로 알려진 비잔틴 장군 문제는 작업증명 방식을 이용하여 해결하였으며, 어떻게 해결하였는지 설명하겠습니다.

  • 시나리오:

① 위의 그림에서 보이듯이 장군 A는 장군 B에게 새벽 4시에 공격을 개시하자는 메시지를 작성합니다. 동시에 장군 A는 10분간 작업을 해야만 만들어 낼 수 있는 서명 '@A'도 같이 첨부합니다.

② 장군 B는 메시지로 공격 시간과 서명'@A'를 확인합니다. 그리고 장군 B가 10 동안 작업을 해서 얻은 서명 '@B'도 같이 첨부하여 장군 C에게 메시지를 그대로 전달합니다.

③ 장군 C는 배신자인데 공격 시간을 임의로 바꿀 수 없습니다. 공격 시간을 바꾸려면 자신의 서명인 '@C'를 만들어야 할 뿐만 아니라, 서명 '@A'와 '@B' 도 함께 조작해야 합니다. 그런데 그렇게 하자니 메시지는 전달받고 20분 안에 보내야 하는데, 시간상 불가능합니다.

그래서 발각되지 않기 위해 장군 C는 그대로 새벽 4시로 시간을 써서 서명 '@C'와 함께 장군 D에게 전달합니다.

④ 장군 D는 메시지로 공격 시간과 서명'@A', '@B', '@C'를 확인합니다. 그리고 장군 D가 10 동안 작업을 해서 얻은 서명 '@D'도 같이 첨부하여 장군 E에게 메시지를 그대로 전달합니다.

  • 결론:

성을 함락하기 위해 최소 3명의 장군이 필요한데, 모든 장군이 동시에 성을 공격하므로 승리합니다.

( b ) 배신자의 공격 시도


위의 상황에서 배신자가 장군 C가 아니라 장군 A 나 B였다면 어떨까요? 아래의 시나리오별로 나누어 보겠습니다.

( i ) 장군 A가 배신자일 경우


  • 시나리오:

① 장군 A는 새벽 4시가 아닌 새벽 5시에 공격을 개시하자고 합니다. 10분간 작업을 하여 서명 '@A'를 같이 첨부합니다.

②, ③, ④ 에 의해 장군 B, C, D, E는 모두 새벽 5시가 공격 시간으로 인지합니다.

  • 결론:

따라서 4명의 장군이 공격에 가담하므로 성은 함락됩니다.

( ii ) 장군 B가 배신자일 경우


  • 시나리오:

① 장군 A는 새벽 4시에 공격을 개시하자고 합니다. 10분간 작업을 하여 서명 '@A'를 같이 첨부합니다.

② 장군 B는 공격 시간을 새벽 5시로 조작하고, 빠르게 작업하여 서명 '@A', '@B'를 20분 안에 만들어서 장군 C에게 전달합니다.

③, ④ 에 의해 장군 C, D, E는 모두 새벽 5시가 공격 시간으로 인지합니다.

  • 결론:

따라서 3명의 장군이 공격에 가담하므로 성은 함락됩니다.

4)결론


이번 글은 신뢰할 수 없는 P2P 환경에서는 어떤 방식으로 시스템을 공격할 수 있는지 설명하였습니다. P2P 환경에서의 난제였던 비잔틴 장군 문제를 POW 알고리즘으로 해결한 것을 간단하게 설명해 드렸습니다.

다음 글은 비트코인의 채굴과 합의에 대한 개념을 설명할 예정입니다.

5)참고자료 및 각주


참고문헌:

각주:


긴 글 읽어주셔서 감사합니다.
여러분의 팔로우+업보팅+리스팀은 저에게 힘이 됩니다.


Sponsored ( Powered by dclick )
DCLICK: An Incentivized Ad platform by Proof of Click - 스팀 기반 애드센스를 소개합니다.

안녕하세요 스티미언 여러분. 오늘 여러분께 스팀 블록체인 기반 광고 플랫폼 DCLICK을 소개...

Sort:  

짱짱맨 호출에 응답하여 보팅하였습니다. 짱짱맨의 보팅현황은 보팅 자동화 서비스 스티머를 통해서 투명하게 공개됩니다.

https://steemer.app/jjm

Hi @eaglekeeneye!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 1.011 which ranks you at #52583 across all Steem accounts.
Your rank has not changed in the last three days.

In our last Algorithmic Curation Round, consisting of 201 contributions, your post is ranked at #128.

Evaluation of your UA score:
  • Only a few people are following you, try to convince more people with good work.
  • Your contribution has not gone unnoticed, keep up the good work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

Coin Marketplace

STEEM 0.16
TRX 0.16
JST 0.032
BTC 59234.78
ETH 2525.56
USDT 1.00
SBD 2.47