이중지불과 블록체인의 해결법

이중지불


이중지불 공격이란 100만원의 잔고에서
돈을 100만원 꺼내썼을때 잔고가 0원으로 갱신되기전에
재빨리 100만원 또 쓰는 시간차 공격을 말합니다.

물리적인 현실상에선
돈을 상인에게 지불함과 동시에 회수하여
다른 상인에게 지불하는

환상 같은 손기술이기에 실제 사용하는 바보는 없습니다.

하지만 넷트웤 상에선 시도가 가능합니다.

인터넷창 두개 띄워놓고
동시에 버튼을 누르면 두개의 지불요청이
동시에 날아가게 됩니다.
물론 중앙은 말할것도 없고 블록체인도
방어책이 있습니다.

중앙과 분산


중앙서버의 경우 어차피
한곳에 순차적으로 도착하기 때문에
뒤에 도착하는 것은 무시하면 되는 단순한 문제입니다

즉, 특별한 한명이 모든 것을 판단합니다.

하지만 분산시스템은 다릅니다

여기저기 어중이 떠중이 같이 펼쳐진 거지 소굴 같은
시스템이 분산시스템이기에
누구는 오늘 받고 누구는 내일 받고 누구는 아예 컴터 꺼놨고
완전 개판으로 메세지가 전해집니다

그리고 모두가 자기가 최고라고 말하죠

그렇기에 시간차 공격하기에
이처럼 개꿀인 시스템도 없습니다.

구체적으로 예를들면
잔고가 100만원이 있고

A : 100만원으로 게임사기
B : 100만원으로 밥사기

라는 메세지를 거의 동시에 발송했을때
중앙의 경우는 A나 B나 먼저오는 쪽을 취하고
후에 오는 메세지는 '잔고부족' 에러를 띄우죠.
중앙의 판단으로 상황종료입니다.

분산의 경우는..
먼저 오는 쪽을 취하는건 맞는데
여러사람이 받는다는 것이 문제죠
A를 한 30명이 받았으면 B를 한 35명이 받는다는겁니다

각자가 독립적 지위를 확보한 인격체(?)
이므로 누구하나를 지지할 수도 없고..
그렇다고 다수결로 하자니
저게 계정만 뻥튀기한 나쁜놈일 수도 있고..
고로 게임사기밥사기
뭘 취소해야될지 판단이 안되는 겁니다.

그래서 나온 것이
🔗비잔틴 장군 문제
를 해결한 작업증명(POW) 입니다

작업증명을 통해서 진정한 다수결을 가려낸 것이죠

블록체인


다만 작업증명에서 즉각 A거래와 B거래중 하나만
택하는 것은 아닙니다

A거래를 받은 사람이 한명이고
B거래를 받은 사람이 1000명이라도
A거래가 채택될 수 있습니다.
(다만 확률이 월등히 차이가 납니다)

중요한 건 그게 아니고

A나 B거래가 둘다 채택되는 일이 절대 없도록 하는 것입니다

A거래를 블록에 포함한 사람도 있고
B거래를 블록에 포함한 사람도 있지만
위에서 말했다시피 한사람이 두개를
다 포함하는 일은 없습니다.

즉, 하나의 블록엔 반드시 A,B중 한개만 승인됩니다

그리고 블록체인에선 10분에 하나의 블록만이
인정되죠.
그 인정된 블록안에 A가 있으면 B는 파기되는 겁니다.

앞서 🔗김영감 사건
처럼 블록이 우연히 두개가 각각 채택되는 경우도 있습니다만
그렇게 블록체인이 분열되더라도
결국은 하나로 합쳐지니까

이중지불 공격은 무위로 돌아가게 됩니다 :)

H2
H3
H4
3 columns
2 columns
1 column
25 Comments