블록체인 강의 - 세그윗(SegWit) 이란?

    오늘은 블록체인의 기술 중 하나인 세그윗(SegWit)에 대해서 설명해 보겠습니다. 세그윗은 비트코인의 블록 크기 사건으로 생겨난 기술로, 세그윗으로 인해서 비트코인(Bitcoin, BTC)과 비트코인캐시(Bitcoin Cash, BCH)가 분리되기도 하였습니다.


    비트코인캐시와 분리된 사건은 추후, 비트코인캐시를 포스팅할 때 다뤄볼 예정이기에 오늘은 순수하게 세그윗은 어떤 기술인지만 설명해보도록 하겠습니다.




    세그윗이 등장하게 된 배경


    비트코인은 2008년 처음 사토시 나카모토의 "peer to peer electronic cash system"에서 등장하였으며, 사토시는 블록의 크기를 제한했던 적은 없습니다. 비트코인 개발에 큰 공헌을 한 할 피니(Hal Finney, 사실 이 분도 사토시 후보 중 한명이나 현재는 루게릭 병으로 돌아가셨습니다)는 사토시에게 블록의 크기를 제한하지 않으면, DDoS 같은 공격에 취약하다고 말하며 그에게 1MB의 블록 크기를 제안하게 됩니다. 사토시는 이를 받아들여서 현재의 비트코인 블록 크기가 되었습니다.


    비트코인의 관심이 없던 시절에는 큰 문제가 발생하지 않았으나, 시간이 점차 흐르면서 사람들은 비트코인에 대해서 관심을 가지고 어느샌가 비트코인의 가격이 생각지도 못하게 큰 폭으로 오르게 됩니다.


    비트코인의 관심으로 생기는 비트코인의 병목현상


    2013년에는 비트코인의 거래량이 한 블록에 담지 못할 정도로 많아지게 되었는데 비트코인은 10분당 하나의 블록을 생성하게 되며 하나의 블록에는 약 2100개의 거래만 입력할 수 있게 되었기 때문에 거래가 빨리빨리 안된다는 문제가 불거지기 시작합니다.


    거래량이 많아지면, 해당 블록에 기록을 못하게 되어서 기달려야 한다


    예를 들어, 10분에 거래량이 1만번이상 생기게 되면, 최소 5번째 블록부터 컨펌을 받아서 거래를 처리하게 되어 1시간 이상을 기달려야 하는 문제가 발생합니다. 시간이 흐르면서 이 부분에 대한 큰 개선이 없자 비트코인은 캐시시스템 즉, 전자화폐의 개념보다는 가치를 저장하는 금(Gold)와 같은 모습으로 변질되게 됩니다.



    블록의 구조


    그럼, 이제 다시 돌아와서 세그윗이 등장했을 당시의 비트코인 블록의 구조에 대해서 간단히 개념만 알기 쉽게 살펴 보겠습니다. 


    하나의 블록에는 헤더 정보와 거래기록, 서명 등으로 이루어져 있었으며, 블록의 대다수는 거래정보와 서명으로 이루어져 있었습니다. 



    세그윗(SegWit)의 개념


    거래정보는 필연적이니 어쩔 수 없다고 쳐도, 서명 부분은 생각지도 못한 공간을 점령하고 있어서 이 부분을 분리하자라는 것이 바로 세그윗입니다. 저 부분을 빼고 거래정보로 모두 채우게 되면, 꽤 많은 거래기록을 담을 수 있기 때문에, 비트코인은 이를 채택하여 서명 부분을 분리하게 됩니다. 



    세그윗은 Segregated Witness에서 따온 말이며 이 부분을 해석하면, "분리된 증인", "분리된 서명"이라는 말로 명칭 자체가 기술을 고스란히 보여주기도 합니다. 그럼 여기서 서명이라는 것은 왜 중요할까요?



    블록체인에서의 전자서명의 필요성


    블록체인에서 사용되는 서명은 전자서명이라고 하며, 전자서명은 실제 우리가 알게 모르게 많이 사용되고 있는 기술입니다. 대표적으로는 공인인증서에서 전자서명을 활용하고 있습니다.


    그럼, 블록체인에서는 전자서명이 왜 필요할까요? 만약에 어떤 해커가 내 지갑에 있는 비트코인을 자기에게 보내려고 하며, 내 지갑에 있는 BTC 1개를 본인에게 보낸다는 거짓 거래기록을 사람들에게 전송합니다. 우리는 이 거래가 잘못되었다는 것을 어떻게 증명할 수 있을까요? 여기서 필요한 기술이 바로 전자서명입니다. 



    전자서명은 위 상황처럼 누군가가 거래를 한 후, "이 거래를 내가 했다"라는 전자서명을 동봉하여 사람들에게 보낸 후, 사람들은 전자서명을 확인해서 본인이 보냈다는 사실을 승인하고, 최종적으로 블록에 추가 시키는 작업을 하게 되는데 이 전자서명으로 인해서 분산된 장부에서도 누가 거래를 했는지 확인이 가능하게 되는 것이죠. 



    거래가변성(Transaction Malleability) 문제 해결


    세그윗은 위와 같은 서명을 분리해서, 블록에 거래기록만 가득채워 더 많은 정보만 넣는 핵심적인 개념을 떠나서 한가지 보안적 측면에서 개선이 된 부분이 있습니다. 기존에 비트코인은 거래가변성이라고 하는 문제점을 가지고 있었습니다.


    거래가변성이라는 것은 이중거래를 유도하여, 다른 거래를 채택하게 만드는 보안 취약점인데 상황으로 설명해보도록 하겠습니다.


    우선 이 기술을 현실에다가 그대로 대입을 해보겠습니다.


    나 : 길동아, 어제 내가 돈 빌려준 만원 줘

    길동 : 아 맞다. 지금 줄게 계좌번호 불러줘봐

    나 : xxx-xxxx-xxxx 이야 입금해줘

    길동 : 입금했어

    나 : 안왔는데?

    길동 : 휴대폰 줘봐...



    사실 이런 상황은 빈번하게 발생하나, 휴대폰의 거래기록을 확인하며 충분히 확인이 가능합니다. 그러나 시스템이 자동화 되어 있는 거래소는 상황이 다릅니다. 거래소를 예로 들어서 상황을 만들어 보겠습니다.


    나 : 거래소야 내 비트코인 1개 내 개인계좌로 출금해줘

    거래소 : 응, 잠깐만 네가 그정도 보유하는지 체크해볼게. (체크중) 응, 보유량 체크됐고, 비트코인 보내줄게...

    (전송)

    나 : 이 거래 기록을 하나 더 만들어서 다른 사람에게 보내야지

    (거래 기록을 복사해서 하나를 더 만들게됨)

    다른노드 : 뭐야 똑같은 거래기록이 왔네. 이중지불 안됨 하나는 삭제


    이때 복사한 카피 거래기록이 삭제되었으면, 문제가 안되지만 원본이 삭제 되었으면 문제가 발생하게 됩니다. 이해가 잘 안되시죠? 어차피 거래소는 비트코인을 출금했고, 2개로 복사된 거래기록 중 하나는 날라갔는데 뭐가 문제가 있는지 이해가 안되실 겁니다.



    비트코인은 거래를 기록할 때, TXID(Transaction ID, 거래번호)를 만들어내는데, 이때 거래소가 저에게 출금시킨 거래번호가 TXID가 0001 이라고 해보겠습니다. 그런데 저는 이 거래번호를 복사하면서 0002를 만들어낸 것이죠. 그리고 사람들에게 0001과 0002를 전파했는데 0002가 선택되었고, 0001이 삭제되었다면 거래소에서 0001에 대한 거래기록을 찾을 수 없게 됩니다.


    즉, 본인 DB에는 0001이라는 기록은 있는데 모든 장부에는 0001이 없으며, 0002가 있기 때문에 0001을 검색해도 나오지 않기 때문에 제대로 조사하지 않고, 다시 주게 되는 것이죠. 그래서 이런 상황이 만들어지는 것입니다.


    나 : 거래소야, 왜 안보내줘?? 빨리 보내줘

    거래소 : 무슨 소리야? 보냈는데 TXID 0001로 보냈어

    나 : 안왔는데? 그런 기록 없어

    (거래소가 블록체인 뒤지는 중)

    거래소 : 엥? 그렇네? 알았어 다시 보내줄게...


    사실 위와 같은 상황은 가능만 할 뿐, 가능성이 매우 희박하며 거래소가 바보가 아닌 이상 준 것을 다시 줄리 없습니다 안 주고 오리발 내밀지 모르겠지만 말이죠. 최근의 거래소들은 초창기 거래소보다 보안이 좋고, 이러한 문제점들을 다 예방하는 해결책들이 있기 때문에 사실 거래가변성은 보안 이슈가 있을 뿐, 가능성이 매우 적을 것입니다.


    세그윗은 서명을 분리함과 동시에 TXID를 관리하는 시스템이 추가적으로 들어가 있어서, 위와 같은 가변성 문제를 원천적으로 봉쇄하게 됩니다. 



    유튜브 영상


    동일한 내용은 유튜브 영상으로 찍어보았습니다. 포스팅이 완벽히 이해되셨다면 유튜브 영상을 볼 이유는 없을 것입니다.




    댓글

    Designed by JB FACTORY