세그윗(Segwit)이란 무엇인가?
세그윗은 Segregated Witness의 약자로, 굳이 번역하자면 ‘분리된 증인’ 이라 할 수 있습니다.
분리된 증인을 통해 얻을 수 있는 주된 효과는 거래 가변성(Transaction Malleability) 문제를 해결하는 것이지만, 부가적으로 블록 사이즈가 늘어나는 효과를 기대할 수 있습니다. 세그윗 채택 당시 비트코인 블록 사이즈의 포화로 전송 수수료가 지속적으로 오르는 상황이었기 때문에 거래 가변성을 원천 차단하는 보안 강화 효과보다 블록 사이즈 해소가 더 큰 주목을 받았습니다.
세그윗 적용이 어떻게 블록사이즈와 연결되는지 이해하기 위해서는 비트코인 거래의 구조를 이해할 필요가 있습니다.
비트코인의 거래는 입력(input)과 출력(output), 크게 두 가지 영역으로 구분할 수 있습니다.
가령 A 주소에서 B 주소로 0.1 BTC를 보낸다고 하면,
- 입력에는 A 주소의 0.1 BTC를 잠그는 내용이,
- 출력에는 B 주소에 0.1 BTC를 허용하는 내용이
포함되어 하나의 거래를 이루게 됩니다. 이 때 실제 A 소유자가 승인한 것이 맞는지 확인하기 위한 서명이 입력 부분에 함께 포함되어야 합니다. 아래 그림에서 주황색 영역이 입력, 분홍색 영역이 출력에 해당하는 부분이고 주황색 입력 안쪽의 회색 부분이 전자서명입니다.
비트코인의 블록에는 이런 거래들이 모여 있습니다. 그리고 세그윗이 적용되지 않은 기존 버전은 이런 거래를 모아 최대 1MB 용량 이내로 하나의 블록을 만들도록 되어있습니다.
세그윗은 ‘분리된 증인’ 이라는 말 그대로, 전자 서명을 인풋에 포함시키지 않고 별도로 모아 1MB 블록을 만듭니다. 그리고 분리된 증인들은 블록 뒤에 별도로 붙여둡니다. 이렇게 하면 기존 1MB 영역에 서명 부분이 제외된 만큼 더 많은 거래를 담을 수 있게 됩니다. 이를 통해 실제 최대 4MB까지 블록 사이즈를 늘린 것과 동일한 효과를 얻을 수 있습니다.
기존 버전과 호환 가능한 이유
세그윗은 하드포크가 아닌 소프트포크입니다. 이는 비트코인 소프트웨어의 업그레이드를 하지 않더라도 세그윗 이전과 세그윗 적용 버전을 모든 노드에서 사용할 수 있다는 뜻입니다.
세그윗 미적용 노드비트코인 코어 기준 0.13.1 이전)은 1MB 이상의 블록은 읽을 수 없지만 거래의 중요한 입, 출력 내용은 1MB 이내에 들어 있기 때문에 호환이 가능합니다. 서명 부분이 빠져 있기 때문에 구버전의 노드는 이를 검증하지 않고 그냥 받아들이지만, 세그윗이 가능한 버전의 노드들이 이를 증명해주기 때문에 문제가 되지 않습니다.
거래 가변성(Transaction Malleability)의 문제
거래 가변성 문제는 일반적인 지갑간 송금에서는 크게 문제되지 않습니다. 하지만 거래소처럼 이를 블록체인이 아닌 전산과 연동되어 사용하는 어플리케이션에서 자칫 문제를 야기할 수 있습니다. 세그윗 이전 버전에는 전자서명이 입력부분에 포함되어 있어 이를 다음과 같이 악용할 수 있습니다.
- 해커 B가 거래소 A 에서 자신의 지갑주소 B1으로 0.1 BTC를 출금합니다.
- 거래소 A는 거래소가 관리하는 지갑주소 A1에서 B1으로 0.1BTC를 보내는 거래번호(TXID) C1을 네트워크에 전파합니다.
- 거래소 A는 거래번호 C1을 자신의 전산에 기록합니다.
- 해커 B는 네트워크 전파를 확인하는 동시에 이 거래의 거래번호만 C2로 바꾸어 네트워크에 전파합니다.
거래 C1과 C2는 거래번호는 다르지만 같은 거래이므로 하나가 채택되면 다른 하나는 거부됩니다. - 해커의 운이 좋아 C2가 블록에 포함되어 C1은 지워졌습니다.
- 해커 B는 거래소 A에게 자신의 거래가 출금되지 않았으니 다시 0.1BTC를 출금 해줄 것을 요청합니다.
- 거래소 A는 전산에 기록한 C1거래를 네트워크에서 찾아봐도 없으니 다시 B에게 0.1BTC를 송급합니다.
비트코인 외적인 부분의 전산 처리를 잘 하면 큰 문제가 되지 않습니다만 초기에는 이를 악용한 해킹사례가 종종 있었으며, mtGox도 대규모 유실 사태 초기에는 거래 가변성 문제를 핑계 삼기도 했습니다.
세그윗이 적용되면 거래의 입력란에 서명이 포함되지 않으므로 이를 악용하는 방법이 원천적으로 차단됩니다.
위 내용은 CRYPTOKIWI에서도 확인하실 수 있습니다.
http://www.cryptokiwi.kr/currency?id=btc&category=2&content_id=217