Bitcoin and Blockchain(4)

in #blockchain8 years ago (edited)

확장성

- 라이트닝 네트워크(Lightning network)

비트코인 블록체인은 실생활에서 사용되기 힘들다. 확장성문제도 있고 비트코인시스템 특성상 수수료도 비싸고 많은 거래를 빠르게 처리하기 어렵고 결제(settlement)까지 걸리는 시간도 길다. 그래서 개발사(Lightning Labs, Blocksteam, Acinq)들은 비트코인의 확장성 솔루션으로써 제로에 가까운 수수료와 실시간에 가까운 속도로 많은 양의 거래를 빠르게 해결해줄 수 있는 기술을 개발하고 있는데 그것이 오프체인(Off-chain) 솔루션인 라이트닝 네트워크이다. 라이트닝 네트워크의 기본 아이디어는 블록체인에 모든 거래를 기록하지 않는다는 것이고 따로 채널 네트워크를 만들어 이 안에서 계속 거래를 주고 받게 하는 것이다. 단기간 혹은 일정 기간 안에 다량의 소액결제 혹은 중복결제가 이루어지는 경우 라이트닝 네트워크를 이용하면 좋다.
참고로 라이트닝 네트워크는 세그윗을 구현한 시스템에서 적용가능하다. 거래가변성(Transaction Malleability) 문제가 해결되어야 하기 때문이다. 아래 기술하겠지만, 라이트닝 네트워크에서 Commitment tx이 계속 최신 장부로 업데이트되기 위해서는 이전 tx의 거래id(Txid)를 refer하는데 거래가변성으로 인해 Txid가 계속 바뀐다면 refer할 Txid가 없어 제대로 작동할 수 없게 된다.
우선 어떤 식으로 라이트닝 네트워크가 이루어지는지 보자.

상대방과 거래를 하고 싶은 사람은 Payment Channel(지불 채널)을 열고 일정한 금액을 예치(Funding tx에 예치)하고 블록체인에 기록한다(블록체인에 기록하는 수수료를 한 번 지불). Payment channel은 멀티시그(Multi-sig) 기능을 사용하고 Funding transaction과 Commitment transaction 두 개의 거래로 이루어진다.(아래에서 자세히 설명) 멀티시그기능은 나와 상대방 모두 서명을 해야 예치금을 사용할 수 있는 개념이고 예치된 금액 내에서 무제한적으로 거래를 주고 받을 수 있다. 또한 타임락(time-lock)기능을 통해 예치금이 보호될 수 있고 상대방을 신뢰하지 않아도 된다. 이 Payment channel에서 다양한 거래를 할 수 있고 이 거래들은 블록체인에 기록되지 않고 Payment channel에서만 오고 가며 한 시간, 하루, 아니면 항상 열어둘 수 있다. Payment channel을 다 이용하고 채널을 닫고 싶을 때(즉 정산하고 싶을 때) 당사자 중 한 사람이라도 닫고 닫기 전 잔액 상태를 각자가 되돌려 받게 된다. 그리고 이를 블록체인에 기록(최종 상태-잔액만 기록)하면 된다(이 때 수수료를 낸다. 라이트닝 네트워크를 이용하면 아무리 많은 거래를 해도 블록체인에 처음과 최종 두 번만 기록되므로 수수료도 2번만 내면 된다.). 각각의 거래기록이 블록체인에 포함될 필요가 없고 결국 10분, 혹은 그 이상의 컨펌을 거래마다 받을 필요가 없다(즉시 컨펌이 이루어지는 셈이고 초당 수천 건 이상의 거래를 할 수 있는 속도를 제공한다.).
자세한 프로세스는 예를 들어서 보자.

은경이와 연실이가 서로 Payment channel을 열기 위해 ‘Funding transaction’을 형성한다. 이 ‘Funding transaction’에 각각 3BTC씩 총 6BTC을 예치한다. 그리고 ‘Commitment transaction’이라는 거래를 하나 더 생성한다. 이제 모든 거래는 ‘Commitment transaction’에서 이루어지게 된다. ‘Commitment transaction’는 현재 잔고를 나타내는 동시에 예치한 금액을 다시 각자에게 환불하는 일종의 안전장치개념인데 여기서 똑같은 Commitment transaction 두 개를 생성하고 은경이는 한 개에, 연실이는 나머지 한 개에 서명을 하고 교환한다. 그 후 ‘Funding transaction’에 모두 서명하고 블록체인에 기록(Broadcast)하여 거래를 시작할 준비를 한다. 여기서 ‘Funding transaction’은 블록체인에 기록되지만 ‘Commitment transaction’은 블록체인에 기록되지 않는다. 따라서 Commitment transaction을 거래당사자 누구든, 언제든 블록체인에 공개한다면 현재 잔고를 바로 환불(각자 본인에게 보내는 거래)받고 Payment channel을 닫을 수 있다.
은경이와 연실이가 서로 거래를 주고 받을 때마다 Commitment transaction이 계속 새로 생성된다. 즉 현재 잔고가 거래를 하면서 계속해서 변하기 때문에 Commitment transaction이 업데이트 된다고 보면 된다.
은경이가 연실이에게 1BTC을 주면 은경 : 2BTC / 연실 : 4BTC가 기록된 Commitment transaction가 새로 생성되는 것이다. 이런 식으로 계속 거래를 주고 받다가 은경이나 연실이 둘 중 하나 혹은 둘 다 거래를 그만하고 싶다면 최신장부 Commitment transaction를 블록체인에 공개하여 현재 잔고를 내 지갑에 환불받고 결제채널을 닫으면 된다.
이것이 라이트닝 네트워크를 이용하여 거래를 하는 원리이다.

Commitment tx는 현재(최신) 잔고를 나타낸다고 했는데 그 이전 Commitment tx도 은경이와 연실이 중 한 명이 블록체인에 공개를 할 수 있다. 그렇다면 은경이가 연실이에게 1BTC을 주어 각각 2BTC, 4BTC이 현재잔고인데 이전 잔고인 3BTC, 3BTC가 기록된 Commitment transaction를 블록체인에 공개해버리면 이 잔고가 환불되어버린다. 그러면 은경이는 1BTC 이득을 보게 되는 문제가 발생하게 되는데 이를 해결하는 방법은 결국 경제적인 패널티를 주는 것이다.
첫 번째, 이전 Commitment tx에 타임락(time-lock)을 걸어서 그 이전 Commitment tx을 취소가능하게 만드는 것이다. Off-chain이기 때문에 타임락을 걸어 취소할 수 있도록 할 수 있다.(블록체인에 기록을 하지 않기 때문에)
두 번째, 거래할 때마다 매번 똑같은 Commitment transaction 두 개(Commitment(1a), Commitment(1b))를 만들고 Commitment(1a)는 은경이가, Commitment(1b)는 연실이가 서명한다고 한다면 이를 통해 은경이와 연실이 둘 중 누가 이전 Commitment transaction을 블록체인에 공개하는 문제를 일으켰는지 식별할 수 있다. 만약 Commitment(1a)가 블록체인에 공개되었다면 이는 연실이만 블록체인에 공개 가능하므로 Commitment(1a)가 공개되었다면 연실이가 잘못한 것이다.
(Commitment(1a)는 은경이가 서명을 하고 연실이에게 준 것이기 때문에 이후 연실이가 얼마든지 공개해버릴 수 있다. 따라서 Commitment(1a)가 블록체인에 공개되었다면 연실이의 잘못이다.)
세 번째, 은경이가 이득을 보기 위해 위의 문제를 일으켰다면 취소가 가능했던 이전 Commitment tx을 취소하고 은경이의 예치금을 몰수하여 연실이에게 주는 패널티를 부과한다. 이렇게 서로 거래를 하기 전에 패널티 관련 사항을 Breach Remedy Transaction라는 거래에 합의(서명)하게 된다.
따라서 은경이가 이전 Commitment tx을 타임락 이후가 되어 공개할 수는 있지만 공개한다면 이미 Breach Remedy Transaction라는 거래에 서명을 한 상태이므로 예치한 금액 모두를 잃게 되는 리스크를 안아야 하고 따라서 그렇게 하지 않을 것이다.
이렇게 해서 은경이와 연실이 모두 최신장부 Commitment tx에 합의를 보게 되고 거래를 순조롭게 할 수 있게 된다.

은경이와 연실이가 직접 채널이 없는 경우에는 다은이나 민수를 통한 라이트닝네트워크를 이용할 수 있는데 은경이는 연실이와 채널이 없지만 다은이와 민수와는 채널이 있고 다은이나 민수는 연실이와 채널이 있는 경우 HTLC(hash time lock contract)를 통한 거래가 가능하다. HTLC는 아토믹 스왑에서 다시 설명한다.

라이트코인은 이미 라이트닝네트워크를 성공적으로 구현한 바 있다. 비트코인 역시 테스트넷에서 개념증명(PoC)를 했고 https://htlc.me/에서 테스트용 지갑도 만들어서 확인해볼 수 있다. 작년 말에 소프트웨어개발자 Alex Bosworth가 Bitrefill(라이트코인과 비트코인으로 휴대폰에 Top up 충전 등 온라인 구매를 지원하는 앱, 사이트 / Top up : 돈을 충전해서 데이터 등을 충전)에서 비트코인 테스트넷이 아닌 메인넷에서 비트코인 라이트닝네트워크를 통해 온라인 거래를 성공적으로 완료했었다. 하지만 실제로 메인넷 네트워크에서 범용화되려면 아직 시간이 필요하겠지만 올해에 될 가능성이 높다.
(블록체인ers 라이트닝네트워크 편, 백서 참조)

- 아토믹 스왑(Atomic swap)

아토믹 스왑은 크로스체인 스왑(cross-chain swap)이라고도 하며 말 그대로 서로 다른 블록체인 간의 암호화폐의 교환을 상대방 위험 없이(이를 counterparty risk라고 한다.) 가능하게 해주는 기술이다.
현재 거래소를 통한 암호화폐 교환을 나중에 아토믹 스왑이 대체할 것으로 전망되고 특히 분산화된 P2P거래를 실현시키는 거래소가 만들어진다면 여기에는 아토믹 스왑이 중요한 기술로써 쓰일 것이다.

라이트코인과 비트코인은 이미 작년 9월에 온-체인(On-chain) 아토믹 스왑을 성공했고 이어 11월 17일 라이트닝 아토믹 스왑(Off-chain)을 성공했다.(기존의 아토믹스왑은 On-chain상의 기술이었지만 라이트닝랩스(Lightning Labs)는 라이트닝네트워크(Off-chain) 위에서 아토믹스왑을 성공했다. Charlie Lee(라이트코인 창시자)는 라이트닝 아토믹스왑이 기존 온-체인스왑보다 더 좋다고 평가한다.) 비트코인과 라이트코인 모두 세그윗을 했고 비트코인의 코드를 베이스로 하기 때문에 기술적으로 구현이 용이했던 것 같다.
이전의 온-체인 아토믹 스왑보다 더 수수료도 싸고 속도도 빠르며 강력한 Privacy를 기대할 수 있다고 한다.

아토믹 스왑은 hashlock과 timelock의 조합인 HTLC(Hash Time Lock Contract)라는 기술을 사용한다.
예를 들면,
은경이는 재경이에게 1BTC를 보내고 재경이는 100LTC를 보낸다고 해보자. 은경이는 비트코인을 라이트코인으로 바꾸기를 원하고 반대로 재경이는 라이트코인을 비트코인으로 바꾸길 원한다. 거래소를 통하지 않고서 말이다.
은경이는 비트코인 블록체인에 결제채널을 만들고 재경이는 라이트코인 블록체인에 결제채널을 만든다. 은경이와 재경이는 타임락을 사용하여 어떤 문제가 있을 경우에 대비한 refund(환불)거래를 만들어놓는다. 은경이는 어떤 값 R을 만들고 이를 해시한 H값을 생성한다.
은경이는 1BTC를 송금하는 거래에 해시값인 H를 포함하여 보내고 이것에 hashlock을 걸어 재경이가 R값을 제시하는 경우에만 1BTC를 가질 수 있다는 조건을 명시한다.(해시값H로부터 원본 R값을 추론/계산할 수 없다.)
그리고 재경이도 100LTC를 은경이에게 송금하는 거래를 생성하면서 은경이가 R값을 제시하는 경우에만 100LTC를 가질 수 있다는 조건을 명시한다.
그렇게 되면 은경이는 100LTC를 가지기 위해 R값을 라이트코인 블록체인에 제시를 하게 되고 재경이는 R값을 확인할 수 있게 되고 은경이가 보낸 1BTC를 비트코인 블록체인에서 받을 수 있게 된다.
은경이가 R값을 제시를 하지 않는 경우에는 시간이 흘러 타임락이 지나게 되면 아까 만들어놓은 refund거래를 통해 각자 다시 환불받게 된다. 이것이 HTLC를 통한 아토믹스왑이다.
결제채널을 만든다든가 HTLC를 통한 거래프로세스 등 라이트닝네트워크와 기본 개념이 비슷하다.

리플레이 어택(Replay Attack)

리플레이 어택은 코인이 하드포크되어 두 개의 체인(코인)으로 분기되어 나온 후 발생될 수 있다. 지갑에 일정량의 코인을 가지고 있다면 체인분기 후 다른 체인에도 동일한 양의 새로운 코인이 생성된다. 그 때 분기되기 전 코인만을 출금하고 싶다고 하자. 여기서 문제가 발생하는데 두 개의 체인의 코인은 동일한 서명과 주소를 유효하게 사용하기 때문에 출금할 때 두 개의 체인에서 모두 출금이 될 수 있다. 이 것을 리플레이 어택이라고 한다.
이 문제는 리플레이 프로텍션(Protection) 코드를 넣어 방지한다. 기존 리플레이 어택이 가능한 방식에서는 출금할 때 몇 개를 출금해달라고만 한다고 하면 리플레이 프로텍션 코드를 넣으면 출금할 때 코인 명칭까지 명령할 수 있다.

블록체인(Blockchain)

블록체인은 비트코인이 탄생함과 함께 세상에 등장했다. 비트코인의 관심이 점차 증가하고 기술적 완성도가 높았다는 평가를 하게 된 결정적 근거는 블록체인이 그 기반으로 있었기 때문이다.
블록체인을 기반으로 한다는 것은 데이터베이스의 공유를 통해 참여자 모두에게 신뢰의 원천을 제공하는 것이다. '보안'으로만 본다면 기존 중앙시스템의 보안도 훌륭하다. 하지만 블록체인을 이용해 보안뿐만 아니라 데이터베이스 공유를 통한 부가가치를 창출할 수 있다.

블록체인 자체는 ‘분산 데이터베이스 기술’이라고 우선 알아두면 된다.(하지만 분산 데이터베이스 기술이라고 해서 분산원장기술(DLT) 자체라고 이해하지는 말자. DLT(Distributed Ledger Technology)는 원장을 분산 서버에 저장하고 참여자 모두가 이 원장 원본을 공유하고 업데이트하는 기술이며 일반적으로 블록체인을 포함한다.)
비트코인은 블록체인에서 기록되는 데이터가 거래내역에 관한 데이터였다. 따라서 비트코인은 블록체인의 최초 응용버전이다.
블록체인이 데이터베이스 기술인 것은 직관적으로 이해할 수 있다. 그러면 ‘분산’의 의미는 무엇일까. 분산은 중앙서버나 관리자에 의해 통제되지 않고 각 개인(여기서는 노드)이 데이터를 기록, 보관, 처리하는 것을 의미한다.
이렇게 데이터를 분산보관, 처리, 기록함으로써 블록체인은 기존 중앙관리시스템이 가진 제약과 한계를 극복하고 이전에 불가능했던 새로운 부가가치를 창출하는 것(혁신)을 목표로 한다. 블록체인이 어떤 작용을 해서 이러한 혁신을 이끌어내는 것인가.
블록체인을 통한 프로세스는 신뢰성을 확보하고 탁월한 비용절감을 이룰 수 있다. 과도한 중개프로세스를 단축시키고 스마트 컨트랙트를 활용해 예상치 못한 비용(이를테면 관리리스크비용)을 감축시켜 전체적인 비용절감을 가능하게 할 수 있다. 뿐만 아니라 정보의 관리, 감사 흐름이 원활해져 효율성이 극대화된다. 이미 우리나라를 포함한 전 세계 수많은 국가와 다양한 산업분야에서 일찌감치 블록체인의 파급력을 예측하고 테스트하며 연구하고 관련 사업을 진행하고 있다.

블록체인을 구조적 관점에서 보면, 하나의 블록은 체인을 통해 연결되어 시간 순으로 이어져간다. 블록에는 데이터가 들어가고 이 데이터들을 한데 모아 블록 안에 넣고 블록들을 계속 연결하는 형태로 하나의 블록체인을 형성한다. 각 블록 안의 데이터들은 해시라고 하는 암호화함수를 이용해 해시화되고 블록 안에는 해시화된 데이터가 들어간다.

이 데이터들이 들어간 블록은 다수의 합의를 통해 체인에 연결된다. 다수의 합의라는 것은 사람이 아닌 컴퓨터 프로그램 위에서 돌아간다. 또한 ‘다수’는 컴퓨터(노드)의 개수가 아닌 컴퓨팅 파워의 수치이다.
이렇게 블록이 연결된 블록체인은 전파되어 네트워크 참여자 모두가 동일한 체인(원본)을 가지고 있게 된다.
블록 내 데이터들은 해시함수와 디지털 서명을 통해 보호되며 참여자 각각에 분산 저장되어 위,변조를 막는다.

여기서 말하는 데이터는 비트코인에서는 거래기록이지만 굳이 거래기록뿐만이 아니라 세상에 존재하는 모든 데이터가 될 수 있다. 무역, 물류, 신원관련정보, 투표, 각종 소유권(부동산, 등기 등), 자산(주식, 채권 등) 등 이미 수많은 데이터들을 블록체인에 넣을 수 있다. 이러한 점 때문에 블록체인은 많은 분야에서 혁신가능성이 있다고 한다.

퍼블릭 블록체인

블록체인은 크게 퍼블릭(Public) 블록체인과 프라이빗(Private) 블록체인으로 나눌 수 있다. 퍼블릭 블록체인은 허가를 받지 않아도 누구나 접근, 이용할 수 있다는 의미에서 비허가성(Permissionless) 블록체인이라고도 하고 프라이빗 블록체인은 허가된 사람, 기관들만 접근가능하다는 의미에서 허가성(Permissioned) 블록체인이라고도 한다.
우리가 가장 많이, 그리고 익숙하게 들어본 비트코인은 퍼블릭 블록체인에 속한다. 비트코인 말고도 거의 대부분의 가상화폐가 퍼블릭 블록체인으로 구성된다. 우리가 언제라도 비트코인코어프로그램을 다운받아 네트워크에 참여할 수 있는 것을 보면 우리에게도 접근기회가 주어진 퍼블릭 블록체인이다.

퍼블릭 블록체인의 주요 특징은 다음과 같다.

  • 투명하게 공개 :데이터가 투명하게 공개되어 모두가 검증할 수 있고 원하는 데이터를 추적/감사하기 용이하다.
  • 검열저항성 : 블록체인 자체는 검열저항성을 가진다. 국가나 통제기관의 검열을 할 수 없다. 법적 규제로 인해 완전히 중단시킬 수 없기 때문이다.
  • 탈중앙 속성 : 탈중앙화를 통해 중앙기관이 가졌던 폐해를 방지한다. 관리부실로 인한 비용발생을 절감하고 과도한 수수료책정을 방지한다. 또한 데이터보안비용 역시 절감된다.

퍼블릭 블록체인이 돌아가는 핵심 원리는 1. 합의알고리즘 2. 인센티브 구조 이다.

  1. 블록체인에서는 특성상 각 참여자들이 데이터의 진본을 가지고 이 진본이 위조나 변조가 되지 않았다는 사실(검증)을 합의를 통해 도출해낸다. 블록 내의 데이터들은 해시함수와 디지털서명을 통해 변조를 불가능하게 했고 적절한 합의알고리즘을 설계해 블록체인이 계속 실행될 수 있도록 했다.
  2. 기존 중앙관리자가 없고 개인들이 분산된 네트워크에서 자발적으로 참여하여 합의를 도출하고 위조나 변조가 없는 동일한 장부를 계속 유지해나갈 수 있어야 한다. 이런 상황에서 개인들의 참여를 이끌어낼 수 있는 어떤 유인책이 필요한데 그 중 가장 효과적인 것이 금전적인 것이다. 이것이 인센티브 구조다. 본인에게 유리한, 이기적인 이득을 제공해야 가장 효과적인 참여를 유도할 수 있다.각 참여자 간 이해관계 속에서 적절한 인센티브를 주어 참여를 이끌어내는 구조를 설계하는 방법이 퍼블릭 블록체인에서 가장 중요한 원리 중 하나이다.

퍼블릭 블록체인의 문제

다만 퍼블릭 블록체인은 속도가 느리고 누구에게나 공개되어 있다는 점, 익명으로 데이터를 기록할 수 있다는 점 때문에 기업 이나 은행 내에서 적용할 수 없다. 그래서 블록체인을 자체개발(프라이빗 블록체인)하거나 R3의 Corda, 리눅스재단이 주관하여 개발중인 Hyperledger, DAH(Digital Asset Holdings)가 개발중인 Digital Asset Platform) 등의 기술에 참여하게 된다.
이를 프라이빗 블록체인은 퍼블릭 블록체인의 속도를 업무목적에 커스터마이징하여 개선한다. 또 투명하게 공개되는 프라이버시문제를 허가된 사람들에게만 공개하거나 여러 권한을 차등설정하여 해결할 수 있고 이로써 익명으로 데이터가 공유되는 것도 방지한다. 뿐만 아니라 퍼블릭 블록체인에서 일어나는 거버넌스(의사결정) 문제 역시 프라이빗 블록체인을 채택함으로써 더 쉽게 해결할 수 있다. 대다수 참여자의 동의를 얻어야 소프트웨어 업데이트나 중요한 변경을 할 수 있는 퍼블릭 블록체인은 비효율적일 수 밖에 없다. 많은 개인과 단체들의 이해관계가 얽혀있기 때문이다. 기업이나 은행들은 빠르고 쉽게 스스로 주체적인 의사결정을 할 수 있게 되고 거버넌스방법도 바꿀 수 있다.
또 비트코인이나 이더리움, 그 밖의 퍼블릭 블록체인의 합의알고리즘인 PoW방식을 쓰지 않기 때문에 더 비용효율적으로 데이터를 관리(기록, 데이터 무결성 검증)할 수 있게 된다.

fin.

우리는 아직까지 세계 암호화폐 시장에서 선두를 달리고 있다. 위안화가 암호화폐 시장에서 밀려난 후로 원화가 3번째로 거대한 영향을 끼치고 있다. 이런 상황에서 규제와 법제화의 역할은 중요하다. 선두를 달리는 우리나라 선수의 트랙 위에 허들을 놓으려고 해서는 안 된다.
우리나라에서 블록체인관련 비지니스는 아직 다른 나라에 비해 많지 않지만 세상에 선보일 준비를 하는 스타트업, 블록체인을 적용해 내부혁신과 경제부흥을 이룩하려는 기업, 비용절감과 프로세스단축, 효율화를 꿈꾸는 은행들까지 점점 더 많은 비즈니스가 블록체인기반으로 생겨날 것이다. 갈 길을 멀지만 필자는 미래를 긍정적으로 생각한다.

틀린 내용이나 공유하고 싶은 내용이 있으시면 언제든 출처와 함께 댓글이나 메일 주세요.
[email protected]

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.081
BTC 59524.83
ETH 1569.75
USDT 1.00
SBD 0.42