Segregated Witness와 Taproot를 사용하여 비트코인을 재구성하는 이유는 무엇일까요?

이 기사는 기계로 번역되었습니다
원문 표시

저자: 시노비

출처: https://bitcoinmagazine.com/print/the-core-issue-why-bitcoin-needed-a-remodel-with-segwit-and-taproot

Segregated Witness(BIP 개발자는 Pieter Wuille, Eric Lombrozo, Johnson Lau)와 Taproot(BIP 개발자는 Pieter Wuille, Jonas Nick, Tim Ruffing, Anthony Towns)는 현재까지 비트코인 ​​프로토콜에 적용된 가장 큰 두 가지 변화입니다.

전자는 기존 거래 구조의 내재적 한계를 해결하기 위해 비트코인 ​​거래(그리고 비트코인 ​​블록)의 구조를 근본적으로 변경했습니다. 후자는 비트코인 ​​스크립팅 언어(복잡한 스크립트를 구성하고 검증하는 방식)의 일부를 재구성하고 암호화 서명을 생성하는 새로운 방식을 도입했습니다.

둘 다 중요한 변화이지만, 이에 비해 CHECKTIMELOCKVERIFY(CLTV)와 같은 오퍼레이션 코드를 추가하는 것은 수신자가 특정 시간 이전에 결제를 사용하지 않도록 선택할 수 있게 해주는 것일 뿐, 큰 문제는 아닙니다. (역자 주: CLTV는 2015년 BIP65 소프트 포크 에서 비트코인 ​​프로토콜에 추가된 스크립트 수준의 상대적 시간 잠금 기능입니다.)

이러한 변화는 비트코인 ​​시스템의 가장 근본적인 단점과 한계를 해결하기 위한 것입니다. 비트코인 ​​프로토콜은 비트코인 ​​전체 상태(즉, 사용되지 않은 모든 코인)에 대한 글로벌 합의를 유지하는 기반 계층으로서 매우 귀중하고 독창적인 혁신입니다. 그러나 이것만으로는 모든 사람이 비트코인을 직접 거래할 수 있도록 하는 데에는 아직 충분하지 않습니다.

Segregated Witness와 Taproot이 활성화된 이후 수년 동안 그들이 지적했던 많은 문제점들이 잊혀졌습니다. 또한 그들이 설계 방식을 선택한 이유와 철학도 시간이 흐르면서 입소문을 통해 점차 왜곡되었습니다.

이 두 가지 변화는 비트코인 ​​프로토콜의 주요 문제점을 해결하는 동시에, 향후 다른 문제점을 해결하고 최적화를 진행할 수 있는 토대를 마련합니다.

비트코인 네트워크에 많은 신규 참여자가 합류함에 따라, 이러한 두 가지 변경 사항을 검토하고 설계 선택의 배경을 설명하는 것이 중요합니다.

격리 증인 (BIP 141 1 )

비트코인 거래에서 코인이 사용될 때, 해당 코인을 생성한 거래의 식별자(TXID)와 출력 대기열에서 해당 코인의 인덱스 번호를 사용하여 코인을 인덱싱합니다. 이를 통해 각 거래 출력물을 고유하게 식별하고, 이전에 사용되지 않았음을 절대적으로 확인할 수 있습니다.

Segregated Witness 업그레이드 이전의 비트코인 ​​거래 구조는 다음과 같았습니다.

 [Version] [Inputs] [Outputs] [Locktime]交易版本号输入输出交易锁定时间

거래 식별자는 이 데이터의 해시 값입니다. 문제는 거래(지출 작업)의 유효성을 증명하는 데 사용되는 입력 "스크립트 서명(ScriptSig)"(서명, 해시 역상 등)도 입력의 일부로 취급된다는 점입니다. 스크립트 서명의 프로그램 명령어를 약간 변경하거나 암호화 서명 자체를 변경하더라도 유효성이 손상되지 않습니다.

이러한 "녹화 작업"은 TXID를 변경합니다. 이로 인해 사전 서명된 거래에 심각한 문제가 발생합니다.

라이트닝 네트워크, 아크, 스파크, 비트VM, 그리고 큐셔스 로그 컨트랙트(DLC)와 같은 확장 도구들은 모두 사전 서명된 트랜잭션에 의존합니다. 참여자들은 먼저 서명될 자금 조달 트랜잭션을 생성하고, 계약의 적절한 실행과 자금 보안을 보장하는 모든 트랜잭션에 사전 서명을 한 다음, 자금 조달 트랜잭션에 서명하고 확인해야 합니다. 또한, 이러한 시스템들은 모두 자금이 이중으로 사용되는 것을 방지하기 위해 다중 서명 인증을 사용합니다(이는 중요한 부분이며, 나중에 자세히 설명하겠습니다).

자금 조달 거래가 블록 확인을 받기 전에 거래 ID가 변경되면 레이어 2 자금을 보호하는 모든 사전 서명된 거래가 무효화됩니다. 누군가가 자금 조달 거래의 전파 과정 중에 거래 ID를 변경할 수 있다면 위에 언급된 모든 도구는 무용지물이 됩니다.

분리된 증인(Segregated Witness)은 정의되지 않은 opcode를 마스크로 사용하여 입력 스크립트 서명에 이전에 배치된 데이터를 대체하고, 이 모든 데이터를 트랜잭션의 "witness"라는 새 필드로 이동합니다. 새로운 트랜잭션 구조는 다음과 같습니다.

 [Version] [Marker/Flag] [Inputs] [Outputs] [Witness] [Locktime]交易版本号标记输入输出见证交易锁定时间

입력값에 적용된 이러한 "블라인드" 기능 덕분에 기존 노드(SegWit 규칙을 사용하지 않는 노드)는 자신과 관련된 모든 데이터를 기본적으로 유효한 것으로 처리할 수 있는 반면, 최신 노드(SegWit 규칙을 사용하는 노드)는 필요에 따라 적절한 검증 로직을 적용합니다. 기존의 TXID는 더 이상 증인 데이터의 변경으로 인해 변경되지 않습니다. 이로써 사전 서명된 트랜잭션에 대한 문제가 해결되고 오늘날 개발되고 있는 다양한 확장 솔루션이 가능해집니다.

하지만 블록 헤더의 트랜잭션 머클 트리는 블록에 포함되는 각 트랜잭션의 기존 TXID만 커밋하기 때문에 새로운 문제가 발생합니다. 즉, 블록이 증인 데이터에 대한 커밋을 하지 않는다는 것입니다. 따라서 "증인 트랜잭션 ID(WTXID)"뿐만 아니라 증인 커밋도 필요합니다. 일반 TXID의 머클 트리 구성과 마찬가지로 각 트랜잭션의 WTXID는 머클 트리를 형성하며, 이 커밋은 코인베이스 트랜잭션의 증인에 저장됩니다. (역자 주: 이는 잘못된 설명입니다. WTXID의 머클 트리 루트는 코인베이스 트랜잭션 출력의 스크립트 공개 키에 저장되어야 합니다.)

유일한 차이점은 이 트리의 루트가 예약 값과 함께 해시되고, 이 예약 값이 코인베이스 트랜잭션의 증인(witness)에 배치된다는 것입니다. 이를 통해 해당 값은 향후 커밋 합의 규칙의 다른 새로운 데이터 필드에 사용될 수 있습니다. 이 증인 트리 커밋(루크 대시 주니어의 아이디어)이 고안되기 전에는 트랜잭션 구조가 변경되고 블록 헤더에 별도의 증인 커밋이 필요하기 때문에 분리형 증인(Segregated Witness)을 구현하려면 하드 포크 필요하다고 여겨졌습니다.

이러한 "베네치아 블라인드" 설계 덕분에 스크립팅 시스템의 모든 업그레이드가 가능합니다. 새로운 규칙을 사용하지 않는 노드는 새로운 데이터를 무시하고 검증하지 않기 때문입니다. 이를 통해 기존 스크립팅 시스템의 모든 한계를 극복하는 새로운 스크립팅 시스템을 설계할 수 있습니다. 또한, 이러한 유연한 업그레이드 경로는 슈노르 서명(Schnorr signature)을 통합하고 양자 내성 서명 방식(필요한 경우)을 구현하는 데에도 도움이 됩니다. (양자 내성 서명 방식의 공개 키 크기는 일반적으로 기존 스크립팅 시스템의 단일 데이터 객체 크기 제한인 520바이트보다 크며, 서명에도 동일하게 적용됩니다.)

Segregated Witness는 거래 ID 소멸이라는 근본적인 문제를 해결하여 확장 가능한 레이어 2 프로토콜이 자유롭게 작동하고 더 많은 사용자가 비트코인을 이용할 수 있도록 합니다. 동시에 이러한 레이어 2 프로토콜을 지원하고 개선하는 데 필요한 스크립팅 시스템 최적화를 위한 기반도 마련합니다.

슈노르 시그니처 2

슈노르 서명 방식은 클라우스 슈노르가 1991년에 발명했으며, 그는 곧바로 특허를 취득했습니다. 사실, 슈노르의 서명 방식이 특허를 받았기 때문에 ECDSA 서명 방식이 발명된 것입니다. 슈노르의 특허는 비트코인 ​​네트워크가 출시된 지 1년 남짓 지난 2010년 2월에 만료되었습니다.

그 특허가 없었다면 사토시 나카모토(그리고 전 세계의 다른 사람들)가 애초에 슈노르 서명을 사용했을지도 모릅니다.

ECDSA와 비교했을 때, Schnorr 서명은 다음과 같은 몇 가지 주요 장점을 가지고 있습니다.

  • 슈노르 서명은 안전성이 입증되었습니다. 슈노르 서명이 위조 불가능하거나 깨지지 않는다는 것을 증명하는 수학적 증거는 ECDSA에 비해 더 강력하고 더 적은 가정을 필요로 합니다. 비트코인의 핵심 암호화 기술에 더 강력한 보안을 보장하는 것은 분명히 큰 이점입니다.
  • 슈노르 서명은 본질적으로 위조가 불가능합니다. 즉, ECDSA를 사용할 때 발생하는 것처럼 서명을 교체해도 거래가 무효화되지 않는 문제가 슈노르 서명을 사용할 때는 완전히 발생하지 않습니다.
  • 슈노르 서명은 "분할 속성"을 가지고 있어 가산 암호화, 분산 키 생성 및 분산 서명 생성을 간단하고 효율적으로 구축할 수 있습니다. 이를 통해 사용자는 개별 슈노르 공개 키를 직접 "합산"한 다음, 팀으로 해당 통합 공개 키에 대한 서명을 생성할 수 있습니다.

슈노르 서명은 ECDSA보다 안전하며, 제3자가 위조할 수 없고, 효율적이고 유연한 모든 유형의 암호화 방식을 사용하여 다중 서명 인증을 강화할 수 있는 길을 열어줍니다.

이전 거래 소멸 가능성에 대한 논의에서, 사전 서명된 거래를 사용하는 모든 오프체인 프로토콜은 사용자 자금을 보호하기 위해 다중 서명 인증에 의존한다고 언급했습니다. 이는 자금 공유를 위한 보안 조치이지만, 암묵적으로 확장성을 제한합니다. 기존의 다중 서명 방식은 축소가 불가능합니다. 거래 크기 자체에 제한이 있을 뿐만 아니라, 버전 0(분리된 증인)의 증인 데이터 크기에도 제한이 있습니다. 다중 서명 주소가 허용할 수 있는 참여자 수가 제한되어 있다면, 그만큼의 참여자만 자금을 공유할 수 있다는 의미이며, 결과적으로 확장성이 제한됩니다.

슈노르 기반 서명 방식은 여러 공개 키를 하나의 공동 공개 키로 통합함으로써 이러한 제약을 완화합니다. 이제 각 구성원의 공개 키를 명시적으로 포함하는 스크립트를 작성할 필요가 없습니다. 분리된 증인(Segregated Witness) 업그레이드 이전에는 다중 서명 주소에 참여할 수 있는 인원이 최대 15명이었지만, 분리된 증인 업그레이드 이후에는 최대 20명까지 참여할 수 있게 되었습니다.

하지만 "MuSig" 5 및 "FROST" 6 과 같은 Schnorr 기반 서명 방식을 사용하면 이러한 제한 사항이 완전히 사라집니다(적어도 합의 규칙 수준에서는). 다중 서명 장치에 참여하는 사람의 수는 원하는 만큼 많을 수 있으며, 단 그룹이 서명 프로세스를 조정할 수 있고 서명을 거부하거나 중도 포기하는 사람으로 인해 서명 프로세스가 중단되지 않아야 합니다.

(역자 주: MuSig는 Schnorr 기반의 다중 서명 방식으로, 공개 키 집합에 참여한 모든 사람이 서명에도 참여해야 합니다. 반면 FROST는 임계값 서명 방식으로, 서명에 참여하는 공개 키의 수가 미리 설정된 임계값에 도달하면 서명을 생성할 수 있습니다.)

이러한 속성 덕분에 키를 이런 방식으로 집계할 수 있을 뿐 아니라 효율적인 어댑터 서명도 가능합니다. 이러한 방식에서는 일시적으로 유효하지 않지만 비밀 정보가 노출되면 유효해지는 서명을 생성할 수 있습니다. 또한 이러한 속성 덕분에 서명자가 보지 않은 메시지에도 서명할 수 있는 영지식 증명 기반 방식도 구현할 수 있습니다.

원뿌리 3 4

"Taproot"는 "Merkel Abstract Syntax Tree (MAST)"라는 기존 개념을 업그레이드한 버전입니다. 7. MAST 자체는 "Pay-to-Script Hash (P2SH)" 스크립트의 플러그인일 뿐입니다. 8. P2SH는 두 가지 주요 문제를 해결하기 위해 개발되었습니다.

  • 대규모 사용자 지정 잠금 스크립트를 사용하는 경우(이러한 스크립트가 트랜잭션 출력에 직접 배치되는 경우), 결과적으로 생성되는 미사용 출력(UTXO)의 크기가 커지므로(소규모 잠금 스크립트를 사용하는 경우와 비교하여), UTXO 세트(즉, 비트코인 ​​네트워크의 최신 상태)를 저장하는 데 더 많은 공간이 필요합니다.
  • 대규모 맞춤형 잠금 스크립트를 사용할 경우, 발신자는 자신이 시작하는 거래 규모가 커지기 때문에 더 높은 수수료를 지불하게 되며, 이는 잠재적으로 더 안전한 맞춤형 스크립트에 비용을 지불하는 것을 꺼리게 만듭니다.

P2SH의 핵심 아이디어는 전체 스크립트를 명시적으로 포함하는 대신, 트랜잭션 출력에 스크립트의 해시값만 포함하는 것입니다. 출력을 사용할 때, 출력 소유자(이전 트랜잭션의 수신자)는 입력에 전체 스크립트를 제공하고, 이 스크립트는 해시값을 사용하여 검증할 수 있습니다. 이는 사용되지 않은 출력이 저장 공간을 차지하는 문제를 해결하고, 대용량 스크립트 사용에 따른 비용 부담을 스크립트 비용을 지불하는 사람이 아닌 사용자 본인이 부담하도록 합니다.

하지만 여기에는 문제가 있습니다. 사용자 지정 스크립트에는 여러 지출 방법이 포함될 수 있지만, 지출 시 지출자는 지출 작업의 유효성 검증과 무관한 분기를 포함하여 전체 스크립트를 공개해야 합니다. 따라서 사용자 지정 스크립트의 공간 효율성은 스크립트 크기가 커질수록 감소하여 지출자에게 불필요한 비용 부담을 안겨줍니다.

MAST의 기본 아이디어는 여러 분기로 이루어진 스크립트를 개별 비용 조건으로 분할 다음, 이러한 비용 조건을 사용하여 머클 트리를 구성하는 것입니다. 각 비용 조건은 해시 처리되며, 머클 트리의 루트는 사용자의 주소입니다. 사용자는 결제 시 사용하려는 비용 조건, 해당 조건이 트리에 존재함을 증명하는 머클 증거, 그리고 비용 조건을 충족하는 데 필요한 데이터만 제공하면 됩니다.

이 머클 트리 구조는 P2SH가 해결하고자 하는 모든 문제를 해결할 뿐만 아니라 사용자 비용을 최적화하고 개인 정보 보호를 강화합니다.

Taproot은 이러한 개념을 채택하고 Schnorr 서명의 선형성을 활용하여 더욱 개인정보 보호적인 방식으로 통합합니다. 대부분의 스마트 계약은 모든 사용자가 자금 분배 방식에 동의하는 이상적인 결과를 가져옵니다. 이 경우, 사용자들은 직접 거래에 서명할 수 있습니다. Taproot은 MAST의 루트를 사용하여 Schnorr 공개 키를 "세분화"하고 새로운 공개 키를 생성합니다. 동일한 MAST 루트를 사용하여 개인 키를 "세분화"하면 이 새로운 공개 키에 해당하는 개인 키를 얻을 수 있습니다.

이러한 방식으로 사용자는 수정된 키를 사용하여 MAST 트리에 흔적을 남기지 않고 직접 출력을 사용하거나, 원래 공개 키, MAST 루트 및 트리에 저장된 사용 조건을 공개할 수 있습니다. 또한 수정된 키를 직접 사용하지 않으려면 백도어가 없는 특수 NUMS 포인트를 원래 공개 키로 사용할 수 있습니다. 이 포인트는 사용 불가능함을 입증할 수 있으며(아무도 그 뒤에 있는 개인 키를 알지 못함), 따라서 MAST에 있는 스크립트만이 유효한 사용 경로로 남게 됩니다.

분리된 증인(Segregated Witness)을 사용하는 설계 방식 외에도 Taproot는 "tapscript"라는 새로운 스크립팅 시스템을 도입했습니다. 기존 스크립팅 시스템과의 가장 큰 차이점은 다중 서명 검증에 사용되던 OP_CHECKMULTISIGOP_CHECKMULTISIGVERIFY 오퍼레이션 코드를 없애고, 여러 서명을 더욱 효율적으로 검증할 수 있는 OP_CHECKSIGADD 로 대체한 것입니다. 슈노르 키 집계(Schnorr key aggregation)와 결합하면 기존 스크립팅 시스템과 유사한 다중 서명 기능을 구현할 수 있습니다.

또한 tapscript는 OP_CHECKSIGOP_CHECKSIGVERIFY 명령어를 수정하여 Schnorr 서명만 검증하도록 했으며, 이전 스크립트에서 정의되지 않은 명령어 코드인 OP_NOP 대체하는 OP_SUCESS 추가했습니다. OP_SUCCESSOP_NOP 에 비해 더 깔끔하고 안전한 명령어 코드 업그레이드를 가능하게 하도록 설계되었습니다.

증인 데이터 용량 제한

지금까지 논의되지 않은 두 가지 측면이 있습니다. 하나는 Segregated Witness 업그레이드에서 추가된 "블록 가중치" 제한이고, 다른 하나는 Taproot 업그레이드에서 개선된 "witness 크기 제한"입니다.

두 결정 모두 생태계 내에서 매우 활동적이고 경험이 풍부한 소수의 사용자들 사이에서 논란을 불러일으켰습니다. 블록 크기 증가는 블록 가중치 제한의 일부였으며, 당시 블록 크기 제한 증가를 위한 하드 포크 를 요구하던 사용자들의 의견 차이를 해소하기 위한 타협안이었고, 당시 네트워크 참여자들은 이를 안전하다고 여겼기 때문에 여기서는 다루지 않겠습니다. 하지만 증인 할인 메커니즘은 중요한 의미를 지닙니다.

비트코인 거래 수수료의 수평적 비교는 전송된 금액과 관계없이 거래소 에 포함된 데이터 양을 기준으로 합니다. 이는 전적으로 입력, 출력(및 분리된 증인)의 양과 크기(바이트)에 따라 결정됩니다. 앞서 언급했듯이, 분리된 증인(Segregated Witness) 업그레이드 이전에는 스크립트 서명(또는 서명과 기타 데이터)이 거래 출력에 포함되었습니다. 이는 입력에는 존재하지만 출력에는 포함되지 않는 상당한 양의 데이터였습니다.

이는 단일 거래 관점에서 입력 비용이 출력 비용보다 훨씬 더 높다는 것을 의미합니다. 따라서 사용자는 소액권을 대량 누적해서 사용하는 대신, 고액권을 사용하고 잔돈을 생성하는 방향으로 장기적인 유인을 갖게 됩니다. 다시 말해, 이는 사용자가 UTXO 세트를 지속적으로 확장하도록 장려하는 장기적인 경제적 인센티브이며, UTXO 세트를 저장하는 것은 모든 풀 노드가 거래와 블록을 검증하기 위한 필수 조건입니다.

데이터 할인 도입의 출발점은 이러한 가격 차이를 조정하여 확대하는 것이 아니라 축소하는 데 있습니다. 이는 적어도 이론적으로는 비트코인 ​​프로토콜을 사용하고자 하는 경제적으로 합리적인 사용자들에게 책임감 있는 UTXO 관리를 장려하는 데 매우 중요합니다.

Taproot 업그레이드를 통해 트랜잭션의 Witness 필드 데이터 크기 제한이 제거되었습니다. Segregated Witness 업그레이드 이전에는 이 제한이 10,000바이트였습니다. 이는 Taproot 설계 자체가 검증하기 어려운 트랜잭션을 구성하는 가능성을 이미 완화했기 때문에, Tapscript에 이러한 크기 제한을 추가하면 "Miniscript"가 대량 복잡해질 수 있다는 판단에 따른 것입니다. 이 제한이 방지하고자 했던 문제는 Taproot 자체에는 영향을 미치지 않았지만, 사용자 정의 스크립트를 더욱 안전하고 사용하기 쉽게 만드는 도구에 복잡성을 더할 수 있었기에 개발자들이 이를 제거하기로 결정했습니다.

(역자 주: 미니스크립트는 비트코인 ​​스크립트 조각들을 구조적으로 조합할 수 있게 해주는 프로그래밍 언어로, 전체 잠금 스크립트를 더 쉽게 분석하고 더 안전하게 만들 수 있습니다.)

파노라마

이 두 가지 변화는 비트코인 ​​확장에 대한 중요한 장애물을 제거하고 더 많은 사람들이 자체 보관 방식으로 비트코인을 사용할 수 있도록 했습니다. 그러나 이를 달성하기 위해서는 필연적으로 프로토콜의 근본적인 부분에 대량 변화가 필요했습니다.

이러한 디자인 선택과 그 이면에 담긴 철학에 익숙하지 않은 독자들도 이러한 우려 사항들을 이해하고 디자인 접근 방식에 대해 더 깊이 생각해 볼 수 있기를 바랍니다. 비트코인은 의심할 여지 없이 놀라운 창조물이지만, 그 혜택을 상당수의 사람들에게 공평하게 분배할 수는 없습니다.

Segregated Witness와 Taproot는 비트코인의 확장성 부족 문제를 해결하는 데 절대적으로 필요한 두 가지 초석을 마련했습니다. 이 두 가지 제안(또는 동일한 문제를 해결하는 다른 프로토콜 변경)이 없었다면 오늘날 우리가 보고 있는 모든 확장성 프로토콜과 시스템은 허황된 꿈에 불과했을 것입니다.

Ark, Spark, BitVM, DLC 등은 등장할 가능성이 낮습니다.

큰 그림은 이렇습니다. 비트코인은 현재 완벽하지는 않지만, 충분히 큰 규모로 성장하여 세상에 실질적인 영향을 미치고, 기존 자산을 처분하려는 사람들에게 진정한 대안을 제공할 수 있는 좋은 기회를 맞이하고 있습니다. 이는 모두 두 가지 프로토콜 업그레이드 덕분입니다. 이 업그레이드들이 근본적인 장벽들을 제거했기 때문입니다.

(위에)

각주

1. https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki

2. https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki

3. https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki

4. https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki

5. https://github.com/bitcoin/bips/blob/master/bip-0327.mediawiki

6. https://github.com/siv2r/bip-frost-signing

7. https://github.com/bitcoin/bips/blob/master/bip-0114.mediawiki

8. https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트