MSTR Cat

블록체인/레벨 IV · 프로토콜 심화/4.2 업그레이드/수업 3

부분 서명 트랜잭션(PSBT)

제3자도 기기가 무엇에 서명하는지 확인할 수 있게 해 주는 컨테이너

준비물PSBT를 지원하는 하드웨어 지갑‘decodepsbt’ 명령어가 지원되는 Bitcoin Core 소프트웨어에어갭 컴퓨터 또는 장치

호기심

  1. 왜 완성되지 않은 트랜잭션에는 완성된 트랜잭션보다 더 많은 데이터가 필요할까요?
  2. 왜 한때는 하드웨어 지갑마다 서명되지 않은 트랜잭션을 위한 자체 형식이 필요했을까요?
  3. 기존 템플릿이 이미 만들어진 후에 사용자는 새로운 출력을 어떻게 추가할 수 있나요?

탐구

  1. 표준 원시 트랜잭션은 바로 전파할 수 있는 간결한 최종 결과물입니다. 2017년 앤드류 초우가 BIP174로 정의한 부분 서명 비트코인 트랜잭션(PSBT)은 이와 다릅니다. PSBT는 미완성 트랜잭션과 함께 나중에 이를 완성하는 데 필요한 모든 메타데이터를 담는 컨테이너입니다. PSBT는 세 가지 상태로 존재합니다. 완전히 구성되었지만 서명되지 않은 상태, 일부 입력은 서명되고 나머지는 대기 중인 부분 서명 상태, 그리고 완전히 서명되어 원시 헥스로 추출할 준비가 된 상태입니다. 이 형식 덕분에 신뢰할 수 없는 프로그램이 템플릿을 만들고, 신뢰할 수 있는 기기가 네트워크에 접속할 필요 없이 이를 검증할 수 있습니다.
  2. PSBT 워크플로는 생성자(Creator), 업데이터(Updater), 서명자(Signer), 결합자(Combiner), 최종화자(Finalizer), 추출자(Extractor)라는 6가지 역할을 정의합니다(버전 2에서는 일곱 번째 역할인 구성자(Constructor)가 추가됨). 생성자가 트랜잭션을 만들면 업데이터가 지출되는 이전 출력과 그 스크립트, 키의 파생 경로를 덧붙여, 서명자가 금액과 수수료를 포함해 자신이 승인하는 내용을 정확히 확인할 수 있게 합니다. 이렇게 메타데이터를 명시적으로 포함하기 때문에 파일은 표준 직렬화보다 훨씬 덜 간결하지만, 하드웨어 지갑이 해킹되었거나 악성 소프트웨어를 실행하고 있을지도 모르는 인터넷 연결 노드에 접속하지 않고도 트랜잭션 구조를 검증할 수 있게 해 주므로 반드시 필요합니다.
  3. 상호운용성은 PSBT를 이끄는 핵심 동력입니다. 이 표준이 생기기 전에는 지갑 소프트웨어마다 핫 지갑과 콜드 스토리지 기기 사이에 데이터를 주고받는 방식이 서로 호환되지 않아 특정 업체에 종속되는 문제가 있었습니다. BIP174는 공통 언어를 마련해 이 문제를 해결했습니다. 오늘날에는 Sparrow 같은 코디네이터가 USB, SD 카드 또는 QR 코드를 통해 서로 다른 제조사의 서명 기기에 동일한 PSBT를 전달할 수 있습니다. 덕분에 여러 업체의 기기를 섞어 쓰는 멀티시그가 현실적으로 가능해졌습니다. 각 서명자는 파일에 자신의 서명을 추가하고, 개인 키는 결코 기기 밖으로 나가지 않습니다.
  4. PSBT 버전 0에는 경직된 구조적 한계가 있습니다. 일단 생성되면 전역 서명되지 않은 트랜잭션이 고정된다는 점입니다. 버전 0은 완전한 서명되지 않은 트랜잭션을 전역 필드에 저장하므로, 생성 후에는 입력과 출력을 추가할 수 없습니다. 이 때문에 누군가 복잡한 다자간 트랜잭션을 구성하다가 잔돈 출력이 하나 더 필요하다는 것을 깨달으면, 전체 과정을 폐기하고 새 템플릿으로 처음부터 다시 시작해야 했습니다.
  5. BIP370은 이러한 불변성 문제를 해결하기 위해 PSBT 버전 2를 도입했습니다. 버전 2에서는 특정 입력이나 출력에 관한 모든 정보가 로컬 데이터와 글로벌 데이터로 나뉘어 저장되는 대신 해당 필드에 통합됩니다. PSBT의 ‘수정 가능’ 플래그가 허용하는 한, 참여자들은 생성된 후에도 입력이나 출력을 추가할 수 있습니다. 이 방식은 단일 입력만 살펴보더라도 그와 관련된 모든 데이터가 바로 그곳에 포함되어 있도록 함으로써 협업 과정을 간소화하며, 하드웨어 장치의 검증을 용이하게 하고 상태 불일치 위험을 줄입니다.
  6. 실제 활용 범위는 하드웨어 지갑 서명부터, 참여자들이 모두 서명할 때까지 PSBT를 주고받는 페이조인(payjoin)이나 코인조인(coinjoin) 같은 협업 트랜잭션까지 다양합니다. 일반 사용자라면 휴대폰에서 트랜잭션을 만들고, 하드웨어 지갑을 연결해 오프라인에서 안전하게 서명한 뒤, 최종 원시 트랜잭션을 추출해 전파할 수 있습니다. 이 과정에서 각 기기는 자신이 무엇에 서명하는지 정확히 확인할 수 있습니다.

핵심 사실

  • BIP174는 생성된 후에는 수정할 수 없는 전역적인 서명되지 않은 트랜잭션 필드를 요구하는 PSBT의 버전 0을 정의합니다.
  • BIP370은 버전 2(PSBTv2)를 정의하며, 특정 필드에 데이터를 통합함으로써 생성 후에도 입력값과 출력값을 추가할 수 있게 합니다.
  • PSBT는 서명 장치의 검증을 위해 상당한 양의 메타데이터를 저장하기 때문에 표준 직렬화 방식보다 의도적으로 덜 압축된 형태를 가집니다.
  • 원래의 워크플로에는 생성자(Creator), 업데이터(Updater), 서명자(Signer), 결합자(Combiner), 최종화자(Finalizer), 추출자(Extractor)라는 6가지 역할이 있습니다.
  • PSBT는 다양한 지갑 소프트웨어와 하드웨어 서명 장치 간의 상호 운용성을 촉진합니다.
  • Sparrow 같은 코디네이터와 Coldcard 같은 서명 기기는 파일이나 QR 코드로 PSBT를 주고받습니다.

연습 아홉, 여섯, 셋, 하나

9모으기비트코인 트랜잭션이 처음 생성될 때부터 최종 전파될 때까지의 수명 주기에 관여하는 서로 다른 역할 또는 상태 9가지를 나열하세요.
6묶기9가지를 데이터 추가, 구조 검증, 암호학적 서명 적용, 기여분 병합, 형식 완성, 결과 전파 중 무엇에 해당하는지에 따라 6개 범주로 분류하세요.
3추리기6개 그룹을, 보안과 상호운용성을 보장하기 위해 모든 트랜잭션 관리 시스템이 수행해야 하는 3가지 핵심 기능으로 압축하세요.
1결정화완성되지 않은 트랜잭션에 완성된 트랜잭션보다 더 많은 데이터가 필요한 이유를 한 문장으로 설명하세요.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS