62 / 736BIP174

PSBT

부분 서명된 비트코인 거래

컴퓨터에서 결제를 준비하더라도 키는 하드웨어 지갑 안에 그대로 둘 수 있습니다. PSBT는 두 기기 사이에서 거래 초안과 검증에 필요한 정보를 전달합니다. 사용자가 승인하면 기기가 서명을 더합니다. 한 번의 결제에 여러 사람이나 기기의 서명이 필요할 때도 같은 형식을 활용할 수 있습니다.

PSBT는 작성 중인 비트코인 거래를 검토하고 서명하는 지갑과 기기 사이에서 주고받는 표준 형식입니다. 이름은 Partially Signed Bitcoin Transaction, 즉 부분적으로 서명된 비트코인 거래를 뜻하지만, 서명이 하나도 없는 파일도 포함합니다. 전달하는 것은 거래 초안, 보조 자료, 서명이지 개인 키가 아닙니다. 필요한 자료가 모이면 네트워크에 보낼 일반 거래를 만들 수 있습니다. 디지털 서명은 개인 키로 만든, 검증 가능한 승인 증명입니다. 개인 키는 서명을 만드는 데 필요한 비밀 데이터이며, 서명할 때 키 자체를 공개하지는 않습니다.

Multisig: 서명 임계값 시뮬레이터m-of-n 모델에서 남은 키가 서명 임계값을 충족하는지 확인합니다. 결과는 서명 가능성을 나타내며 지갑의 보안이나 완전한 복구 가능성을 뜻하지 않습니다.

안나는 파벨에게 60 000 sat, 비트코인의 최소 단위로 6만 개를 보내려고 합니다. 지갑은 이전에 받은 뒤 아직 쓰지 않은 100 000 sat짜리 출력 하나를 선택합니다. 출력에는 금액과 그 금액을 쓰기 위해 충족해야 할 조건이 기록됩니다. 이 예에서는 파벨에게 60 000 sat를 보내고, 39 000 sat는 안나에게 거스름돈으로 돌려주며, 나머지 1 000 sat를 수수료로 남깁니다. 아직은 지시 사항을 담은 초안일 뿐입니다. 앱은 이를 PSBT에 담아 기기에 따라 케이블, QR 코드 또는 메모리 카드로 하드웨어 지갑에 전달합니다. 안나는 기기 화면에서 결제를 확인한 뒤 서명을 승인합니다. 돌아오는 것은 서명이며 비밀 키가 아닙니다. 따라서 결제를 준비하는 기기와 서명 권한을 가진 기기가 같을 필요는 없습니다. [1] [4]

파일 이름이 .psbt로 끝난다고 결제가 안전한 것은 아닙니다. 파일을 만든 컴퓨터가 침해되었거나 단순히 잘못 설정되었을 수 있습니다. 안나는 파벨에게서 믿을 수 있는 경로로 받은 주소와 수신 주소를 비교하고, 금액과 총수수료, 거스름돈이 자기 지갑으로 돌아오는지 확인합니다. 하드웨어 지갑을 쓸 때는 신뢰할 수 있는 기기 화면과 제조사의 절차를 따릅니다. 서명 소프트웨어도 보조 자료와 서명이 어떤 내용을 확정하는지 검증합니다. 기술 용어 sighash는 서명이 거래의 어느 부분을 변경으로부터 보호하는지 나타냅니다. 초보자가 이해하지 못한 특수 모드를 승인해서는 안 됩니다. 주소가 다르거나 수수료를 검증할 수 없다면 검사를 건너뛰지 말고 초안을 다시 살펴봐야 합니다. [1]

키 세 개 중 두 개의 서명이 필요한 Multisig 지갑에서는 안나가 첫 서명을, 파벨이 두 번째 서명을 각자의 기기로 더할 수 있습니다. 복구 단어를 교환하거나 동시에 접속할 필요가 없습니다. 과정을 정리하는 앱인 코디네이터가 같은 결제의 자료를 모으고 서명을 합칩니다. 그래도 각 서명자는 자기 의도에 맞는지 직접 확인해야 합니다. 코디네이터가 대신 결정하지 않습니다. BIP 174에서는 초안을 만드는 역할을 creator, 데이터를 보충하는 역할을 updater, 서명하는 역할을 signer, 서로 대응하는 버전을 합치는 역할을 combiner라고 부릅니다. finalizer는 입력의 지출 조건을 충족하는 최종 데이터를 조립하고, extractor는 네트워크용 일반 거래를 추출합니다. 프로그램 하나가 여러 역할을 맡는 경우가 흔합니다. 이는 업무 이름이지 반드시 여섯 명이 참여해야 한다는 뜻이 아닙니다. [1] [4]

PSBT는 어떤 코인을 쓸 예정인지, 누구에게 지불하는지, 거스름돈이 얼마인지, 주소들이 어떻게 연결되는지를 드러낼 수 있습니다. 다른 공개 키를 파생하고 지갑의 주소 규칙과 함께 주소를 만드는 공개 데이터인 xpub나 지갑 구조에서 키의 위치를 나타내는 파생 경로도 포함할 수 있습니다. 내용을 읽어 보겠다는 이유만으로 임의의 웹 서비스에 보내지 마세요. 서명된 PSBT는 필요한 자료가 모두 있다면 다른 사람이 이미 승인된 특정 거래를 완성해 전파할 수 있게 하기도 합니다. 자신의 사본을 삭제해도 서명은 취소되지 않습니다. 이 파일은 Seed Phrase (키를 복구하는 데 쓰는 백업 단어 목록)나 완전한 Multisig 설정 백업을 대신하지도 않습니다. 특정 결제를 위한 자료이지 지갑 전체를 복구하는 수단은 아닙니다. [1] [4]

서명을 추가했다고 네트워크가 결제를 아는 것은 아닙니다. 최종 거래를 조립한 뒤에는 누군가 이를 전파해야 합니다. 노드는 비트코인 거래와 블록을 검증하는 소프트웨어를 실행하는 컴퓨터입니다. 노드는 네트워크 규칙과 자체 거래 수락 정책에 따라 검토하고, 채굴자는 이를 블록에 넣을 수 있습니다. 서명 부족, 이미 사용한 입력, 부족한 수수료는 서로 다른 문제이며 ‘완료’ 버튼만으로 해결되지 않습니다. 이 과정을 믿고 사용하기 전에 앱, 기기, 지갑 유형의 구체적인 조합을 시험해야 합니다. Bitcoin Core 29의 analyzepsbt는 빠진 데이터나 서명을 알려줄 수 있습니다. finalizepsbt는 완성된 거래를 만들 수 있지만 전송은 그다음 단계입니다. 완성에 성공해도 블록 확인을 받은 것은 아닙니다. [4] [5] [6]

BIP 174는 PSBT를 키–값 쌍으로 정보를 저장하는 바이너리 형식으로 정의합니다. 여기서 키는 필드 식별자이며 비트코인 개인 키라는 뜻은 아닙니다. 전역 맵은 거래 전체를, 입력 맵은 사용하려는 이전 출력을, 출력 맵은 새로 만드는 출력을 설명합니다. 거래 초안 외에도 지출 조건인 스크립트, 키의 출처, 부분 서명을 담을 수 있습니다. 데이터는 .psbt 파일로 저장하거나 바이너리를 텍스트로 표현하는 Base64로 나타낼 수 있습니다. Base64는 암호화가 아닙니다. PSBT는 비트코인 규칙에서 새로운 거래 유형도 아닙니다. 네트워크가 받는 것은 결과 거래이지 작업 파일 전체가 아닙니다. [1]

네트워크와 떨어진 기기도 무엇에 서명해 달라는 요청인지 알아야 합니다. UTXO는 이전에 만들어졌지만 아직 쓰지 않은 출력이며, 새 입력이 이를 참조합니다. Non-Witness UTXO는 이전 거래 전체를 전달할 수 있고, Witness UTXO는 특정 출력의 금액과 조건을 전달합니다. 어떤 근거 자료가 필요한지는 입력 유형과 서명 소프트웨어의 규칙에 달려 있습니다. 이전 거래의 식별자와 해당 출력, 스크립트 간의 관계, 허용 가능한 sighash 등을 확인합니다. 금액이 없다고 수수료가 0이라고 처리하거나, 근거가 없는데 검증에 성공했다고 판단해서는 안 됩니다. 추측으로 채우지 말고 신뢰할 수 있는 절차로 자료를 보충해야 합니다. [1]

PSBT 버전은 형식의 구조를 나타냅니다. 서명 개수나 비트코인 거래 자체의 버전이 아닙니다. PSBT v0는 서명하지 않은 거래를 전역 필드에 저장하며, PSBT 버전이 생략되어도 v0를 뜻합니다. BIP 370이 정의한 PSBT v2는 그 필드를 제외하고 거래를 구성하는 데 필요한 정보를 개별 필드로 나눕니다. 이를 통해 허용된 변경과 기존 서명의 제약을 따르면서 입력과 출력을 추가할 수 있습니다. 서명된 결제를 마음대로 다시 쓸 수 있다는 뜻은 아닙니다. 주고받는 양쪽이 해당 버전을 이해해야 하므로, 단순히 ‘PSBT 지원’이라고만 해서는 호환성을 충분히 알 수 없습니다. [2]

BIP 371은 서명, 스크립트, 키의 출처 등 Taproot에 필요한 정보를 추가합니다. 이 필드는 PSBT v0와 PSBT v2에서 모두 사용할 수 있습니다. 따라서 첫 번째 형식으로 Taproot를 처리하는 지갑이 두 번째 형식은 지원하지 않을 수도 있습니다. 반대로 v2를 지원한다고 모든 Taproot 상황을 처리하는 것도 아닙니다. 키 경로로 서명하는 방식과 스크립트 분기를 통해 지출하는 방식은 Taproot 출력의 조건을 충족하는 서로 다른 방법입니다. 사용자에게 중요한 질문은 간단합니다. 내 구체적인 구성으로 지금 서명하려는 결제를 처리할 수 있을까요? 기능 목록의 약어가 아니라 문서와 검증한 절차에서 답을 찾아야 합니다. [3]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Multisig, Hardware Wallet, Cold Storage, Output Descriptor. 다음 항목에서도 이 글을 참조합니다 Multisig, Cold Storage, Hardware Wallet, Watch-only Wallet.

DOC · 001BIP 174 — PSBT명세 DOC · 002BIP 370 — PSBT Version 2명세 DOC · 003BIP 371 — Taproot Fields for PSBT명세 DOC · 004Bitcoin Core — PSBT Howto문서 DOC · 005Bitcoin Core 29 RPC — analyzepsbt문서 DOC · 006Bitcoin Core 29 RPC — finalizepsbt문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다