비트코인 코어는 지난주 최신 소프트웨어 릴리스를 발표했으며, 여기에는 제안된 분리된 증인(Segregated Witness) 소프트 포크가 포함되어 있습니다. 만약 대다수의 채굴자가 이 제안에 대한 지지를 표명하면, 분리된 증인은 비트코인 네트워크에서 활성화될 것입니다 — 아마도 12월에. 이는 효과적인 블록 크기 제한 증가, 변조 수정 등 여러 가지 이점을 제공합니다.
덜 알려진 이점은 거래의 입력 금액 — 전송되는 비트코인의 양 — 이 사용자에 의해 암호화 서명된다는 것입니다: 작은 변화이지만, 레저 CTO 니콜라스 바카에 따르면, “이것은 오늘날 하드웨어 지갑이 직면한 가장 큰 문제 중 하나를 해결합니다.”
입력 금액
모든 비트코인 거래는 비트코인을 “입력”에서 “출력”으로 전송하며, 입력은 비트코인이 전송되는 비트코인 주소를 지정하고, 출력은 수신 주소를 나타냅니다.
자연스럽게, 모든 입력은 모든 출력만큼의 비트코인을 포함해야 합니다. 발신자는 공중에서 비트코인을 생성할 수 없습니다.
그러나 사실 입력은 일반적으로 출력보다 약간 더 많은 비트코인을 포함합니다. 그 차이는 채굴 수수료입니다. 따라서 모든 입력이 1 BTC의 가치가 있고, 모든 출력이 0.999 BTC의 가치가 있다면, 거래를 채굴하는 사람은 남은 0.001 BTC를 자신에게 귀속시킬 수 있습니다.
하지만 현재 이상한 특성이 있습니다. 출력은 명시적인 금액을 포함하지만, 입력은 그렇지 않습니다. 이는 실제로 문제가 되지 않습니다. 왜냐하면 각 입력은 이전 거래에 의존하기 때문입니다. 따라서 비트코인 지갑은 블록체인을 확인하여 특정 입력이 얼마나 포함되어 있는지 조회할 수 있습니다.
예외는 하드웨어 지갑입니다. 바카는 비트코인 매거진에 설명했습니다:
“하드웨어 지갑은 전체 블록체인을 저장하지 않으며, 비트코인 네트워크에 직접 접근할 수 없습니다. 대신 거래 기록을 수집하기 위해 연결된 소프트웨어를 통해 연결됩니다. 예를 들어, 데스크탑 컴퓨터에서 실행되는 지갑이나 웹 지갑을 통해 비트코인 네트워크에 연결됩니다.”
많은 면에서 이것은 문제가 되지 않습니다. 하드웨어 지갑은 특정 비트코인 양을 특정 주소로 지출하는 거래를 생성합니다. 사용자가 정말로 이 비트코인 양을 이 주소로 보내고 싶다면 거래에 서명할 것입니다. 출력으로 너무 많은 자금을 보내는 위험은 없습니다.
하지만 여전히 “수수료 공격”의 위험이 남아 있습니다. 비트코인 코어 및 디지털 비트박스 개발자 요나스 슈넬리는 비트코인 매거진에 말했습니다:
“간단한 예를 들어보겠습니다. 당신의 컴퓨터가 트로이 목마에 의해 손상되었다고 가정해 보겠습니다. 하드웨어 지갑에서 자금을 보낼 때, 이 트로이 목마는 입력 금액을 증가시키거나 추가 입력을 추가하여 사용자에게 이를 알리지 않습니다. 하드웨어 지갑을 통해 사용자는 출력이 확인되고 출력 금액도 확인되며 거래에 서명합니다. 그는 입력이 거래에 필요한 것보다 훨씬 더 많은 비트코인을 포함하고 있다는 것을 알지 못합니다; 아마도 하드웨어 지갑에 저장된 모든 비트코인일 수도 있습니다. 이 모든 비트코인은 모두 채굴자에게 큰 수수료로 귀속됩니다.”
비록 가능성이 낮다고 하더라도, 이 위험은 하드웨어 지갑의 중요한 목적을 무효화합니다. 결국, 이러한 장치가 해킹될 수 없다는 것이 아이디어입니다. 비록 불안정한 컴퓨터와 함께 사용되더라도 말입니다.
분리된 증인
이 “수수료 공격”에 대한 대응책이 존재합니다. 하드웨어 지갑은 연결된 소프트웨어를 통해 블록체인에서 이전 거래를 가져와 출력 금액을 해시하고, 이를 새로운 거래의 입력 금액 해시와 비교할 수 있습니다.
하지만, 트레조르 아키텍트 마렉 “슬러시” 팔라티누스는 설명했습니다. “이러한 솔루션은 매우 복잡하고 느립니다.” 하드웨어 지갑의 제한된 계산 자원으로 인해, 경우에 따라 이들은 실행 가능하지도 않습니다. “채굴 풀이나 수돗물에서의 지급과 같이 많은 입력이나 출력을 포함하는 거래는 계산하는 데 최대 한 시간이 걸릴 수 있습니다.”라고 팔라티누스는 말했습니다.
분리된 증인은 더 나은 솔루션을 제공합니다.
분리된 증인은 암호화 서명을 거래의 일종의 “부가 부분”인 “증인”으로 이동합니다. 이것은 하드웨어 지갑에 대해 중요하지 않습니다. 그러나 서명 데이터가 어쨌든 이동되고 있기 때문에, 지갑이 이를 읽는 방식을 변경하면서 비트코인 코어 개발자들은 서명을 생성하는 방식을 약간 변경하기로 결정했습니다.
구체적으로, 입력 금액은 여전히 거래 자체의 일부는 아니지만 서명됩니다. 어떤 면에서 이러한 입력 금액은 암호화 서명의 “일부”가 됩니다. 따라서 하드웨어 지갑 사용자는 복잡하고 느린 과정을 거치지 않고 특정 비트코인 양에 대해서만 서명하게 됩니다. 너무 많은 자금을 보내는 위험도 없습니다. (트로이 목마가 서명 후 입력 금액을 변경하려고 시도하면, 거래는 비트코인 노드에 의해 무효로 간주됩니다.)
분리된 증인이 활성화되면, 모든 기존 하드웨어 지갑을 이 옵션을 활용하도록 쉽게 업그레이드할 수 있습니다. 레저는 이미 레저의 코드베이스를 업데이트했으며, 트레조르와 디지털 비트박스 통합은 소프트 포크가 활성화될 경우 준비될 것입니다.
“분리된 증인은 단순히 확장성에 관한 것이 아닙니다.”라고 팔라티누스는 강조했습니다. “비트코인 내부에는 다른 문제들이 있으며, SegWit은 오늘날 불가능한 응용 프로그램과 사용 사례의 가능성을 열어줍니다. 더 큰 블록만으로 비트코인의 환율을 구할 수 있다고 생각하는 사람들과 SegWit 채택 여부를 결정할 채굴자들에게는 이해하는 것이 중요합니다.”