×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,488,524명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)

1. 이중 지불(Double Spending)이란?


A, B, C란 사람이 있을때 A가 1비트를 가지고있다고 가정하고

이것을 B한테 1비트를 보냈는데 C에게도 1비트를 보낸다는 상황을 가정해보자.


이제 A가 1비트를 B에게 보낸건 Tx1이라 하고

A가 1비트를 C에게 보낸걸 Tx2라 해보자.


가정 1. 

Tx1, Tx2가 같은 블록에 담기게 되는 경우


실제로 내가 가진게 1비트밖에 없기에 먼저 트랜잭션 처리된것만 성립하고 뒤에 실행된 명령은 무효가 된다.


즉, 같은 블록에 담기게 되는 경우 트랜잭션이 우선적인 것이 유효하다고 판정된다.



가정 2.

Tx1, Tx2가 서로 다른 블록에 담기게 되는 경우


이때는 작업의 증명(PoW)에 의해 블록체인이 긴 노드가 살아남게 된다.


그 체인이 살아남기 위해서 즉, 더 긴 체인이 되기 위해서는 6개의 블록이 승인을 받아야 확정지을 수 있게 된다.

(이것을 블록체인 6 컨펌이라 한다.)


그리고 실패로 돌아간 블록안의 Tx들은 다시 mempool에 들어가서 다시 승인을 받기위해 기다려야한다.


이제 블록체인을 공부해오고 있는 입장이라면 다음과 같은 상황에 대해 생각해보아야한다.




6개의 블록이 승인을 받아야 확정받는다는데 그럼 


Block#1이 확정지어지려면 Block#6까지 마이닝이 성공돼야한다는것이다.


그럼 Block#2~Block#6안에있는 트랜잭션은 아직 불확실한게되고


Block#1이 확정되기까지는 비트코인에서 1개의 블록이 10분마다 마이닝되게 설계됐으니 


6개면 60분을 기다려야한다는 것이다.


즉, 하나의 거래가 완벽히 성사되려면 60분을 기다려야하는걸까?


이를 위해 비트코인의 블록체인에서는 0~6컨펌이라는 개념을 도입하였다.





2. 컨펌(Confirm)



우리는 컨펌이라는 개념을 이제 알아볼 것인데 앞서 우리는 


하나의 블록이 완전한 승인을 받기 위해서 6개의 블록이 확정을 받아야한다고 들었다.


그렇다면 위의 질문처럼 우리는 60분을 기다려야 하게 될 것이다. 



하지만 한번 생각해보자.


누가 카페를 가서 5천원에 해당하는 코인을 내고 60분이나 기다렸다가 확정되면 커피를 받아서 카페를 이용할까?


만약 이렇게 블록체인이 실생활에서 동작한다면 아무도 쓰지 않게 될 것이다.


하지만 비트코인 결제는 사실상 그렇게 대충만들지 않았다.


60분이 걸리는 것이 아닌 10분도, 몇 초도 걸리지 않는다는 것이다! 


그 이유는 컨펌이라는 개념중 0 컨펌 결제라는 개념이 있기 때문이다.




비트코인에서 트랜잭션을 보내면 모든 마이너들은 해당 거래를 검증하게 된다.


그리고 올바른 트랜잭션이라 검증이 된 후에야 블록에 들어갈 자격을 얻게 된다.


즉, 블록 하나를 발행하는데는 10분이 걸리지만 이 트랜잭션을 검증하는데는 몇 초도 걸리지 않게 된다는 것이다.


즉, 블록에 포함될 올바른 거래라는 것만 검증하고 승인해 주는것이 바로 0 컨펌이다.






3. 이중 지불과 컨펌간의 관계


그렇다면 0컨펌은 이중 지불에서 안전할까?


정답은 99.9% Yes라고 말할 수 있다.


그 이유는 0컨펌은 오직 오프라인상에서만 해주기 때문이다.


다시 한번 잘 생각해보자.


온라인에서 이중 지불 문제가 될 수 있는 것은 A라는 사람이 1비트코인밖에 없는데 두 사이트를 동시에 띄어두고 


1비트코인짜리 물건을 두개 동시에 산다고 하면 이중 지불 공격을 할 수 있게 된다.(물론 결국 막히겠지만)


그렇다면 오프라인에서 이중 지불을 하기 위해서는 사람이 동시에 두군데 있어야 한다는 것이다.


이러한 상황은 절대적으로 불가능하니 오프라인 상에서는 0컨펌을 할 수 있을 것이다.



두번째로 하나의 통장에 2개의 카드를 이용하여 두 사람이 다른곳에서 동시에 결제한다 생각해보자.


이 경우에는 가능하다. 하지만 모든 곳에 cctv가 존재하고 오프라인 상에서 자신을 노출하며까지 5천원을 위해 사기를 치는 사람은 없을 것이다. 즉, 자신의 신원이 모두 밝혀진 상태에서 낮은 금액을 이중지불 할 가치가 부족하다는 것이다.


물론 돈의 단위가 올라가면 1컨펌 정도는 처리할 수 있게 될 것이다.



결국 0~6컨펌은 안전성의 강도를 나타내는 확률적 지표를 의미하게 되는 것이다.


수질검사에서도 1등급이면 물이 더러울 수 없다는 것이 되듯이 말이다.








'Applied > Blockchain' 카테고리의 다른 글

머클트리(Merkle Tree)  (0) 2018.04.23
작업 증명(Proof of Work, PoW)  (0) 2018.04.21
이중 지불(Double Spending), 컨펌(Confirm)  (1) 2018.04.19
블록체인 관련 자료  (2) 2018.03.23
블록체인 튜토리얼(Blockchain Tutorial)  (0) 2018.03.20
블록체인(BlockChain)이란?  (0) 2017.12.31
  1. ㅇㅇ 2019.08.05 11:02

    한 사람이 동시에 두군데서 있는게 매우 번거로운 일이지만, 불가능한건 아니죠. 원격으로 지구 반대편에서 트랜잭션 날린다든가.. 매우 번거롭지만, 가능성은 있는 공격이기에 0컨펌 거래는 이뤄질수없다고 생각합니다