Anony, BTC 연구
사용자들은 비트코인을 접할 때 '주소'라는 개념을 처음 접하게 되는 경우가 많습니다. 비트코인 결제를 받으려고 할 때 주소를 제공해야 합니다. 블록 브라우저에서 결제금이 도착했는지 확인할 때에도 특정 주소가 검색 기준으로 사용되는 경우가 많습니다.
"비트코인 세계에서 주소는 은행 계좌와 같으며, 비트코인을 받는 데 사용할 수 있다"고 생각할 수 있습니다. 하지만 이러한 이해는 지갑 사용 중 몇 가지 상황에 직면했을 때 여전히 혼란스러울 수 있습니다. 예를 들어, 비트코인 소프트웨어 지갑을 처음 사용할 때 "Bech32(SegWit)", "P2PKH ", "네스티드 세그윗(P2SH)" 등과 같은 주소를 선택하라는 메시지가 표시될 수 있습니다. 다른 소프트웨어 지갑으로 전환할 때 새 소프트웨어 지갑이 원래 소프트웨어 지갑과 완전히 다른 비트코인 주소 집합을 제공할 수 있는데, 이 경우 어떻게 해야 할까요?
이 글에서는 비트코인 주소와 주소 유형에 대해 좀 더 자세히 설명하여 주소 유형 선택, 소프트웨어 지갑에서 다른 지갑으로 마이그레이션하는 번거로움 등 비트코인을 직접 보관할 때 겪을 수 있는 몇 가지 문제를 해결하는 데 도움을 드리고자 합니다.
마지막 섹션에서는 독자들이 접할 수 있는 다양한 주소의 특징과 경제성을 설명하는 데 중점을 두었습니다. 기술적 세부 사항에 전혀 관심이 없거나 정보를 빠르게 확인하고 싶은 경우 마지막 섹션으로 건너뛸 수 있지만, 자가 보유를 계획하고 있다면 처음부터 시작하시는 것을 권장합니다.
요약하자면, 비트코인 주소는 표준화된 비트코인 스크립트에서 사용되는 주요 데이터를 특수 인코딩(음역)한 결과이며, 특수 인코딩 방식은 전송에 더 적합하고 오류를 경고하는 기능을 제공하며, 경제성의 차이는 기본 비트코인 스크립트의 차이에서 비롯됩니다. 경제성의 차이에서 비롯됩니다.
Standardised Bitcoin Script
비트코인은 피어 투 피어 네트워크에서 작동하는 전자 화폐로 알려져 있습니다. 비트코인을 개발할 때 사토시 나카모토는 "UTXO"로 알려진 화폐의 존재 형태를 고안했습니다. 이 형태는 비트코인 자금을 계좌와 계좌 사이에 있는 돈이 아니라 서로 분리된 수표와 수표 사이에 있는 돈처럼 만듭니다. 이러한 "수표"에는 두 가지 주요 정보, 즉 화폐의 액면가(사토시로 측정)와 화폐를 사용할 수 있는 상황을 정의하는 스크립트펍키가 기록됩니다. 스크립트펍키는 특정 키가 있어야 열 수 있는 자물쇠와 같습니다.
사토시 나카모토는 똑똑한 자물쇠를 사용자 정의할 수 있다면 비트코인을 다양한 시나리오에서 더 유연하게 사용할 수 있다는 사실을 깨달았습니다. 그래서 그는 "비트코인 스크립트"라는 프로그래밍 언어와 UTXO를 기반으로 한 거래 검증 모델을 설계했으며, 이를 통해 스크립트의 공개 키로 사용되는 프로그램을 작성하고 관련 자금이 사용될 때 이를 기반으로 검증할 수 있습니다.
이 혁신은 피어 투 피어 네트워크를 통해 거래가 전파될 때 거래를 수신하는 노드가 먼저 일부 검증 작업을 실행한다는 현실적인 어려움을 안고 있습니다. 이 프로그래밍 언어와 프로그래밍에 트랜잭션의 유효성을 검사하는 과정에서 노드가 충돌할 수 있는 내재적 취약점이 있다면, 이 취약점을 악용한 트랜잭션이 전체 네트워크를 파괴하는 데 사용될 수 있습니다. 트랜잭션의 자유로운 확산과 네트워크의 보안 사이에서 어떻게 균형을 잡을 수 있을까요?
사토시 나카모토는 비트코인 스크립트의 유연성을 의도적으로 제한하는 것 외에도, 장애를 유발하지 않을 만큼 간결하다고 알려진 스크립트를 "표준화된 비트코인 스크립트"로 정의하는 방법을 생각해냈습니다; [1]; 이러한 스크립트를 사용해 자금을 보낼 때 자금을 사용할 때, 해당 거래는 "표준 비트코인 거래"로 취급되며 네트워크를 통해 방해받지 않고 전파될 수 있습니다. 반대로, 이러한 표준화된 스크립트를 사용하지 않으면 거래가 유효하더라도 채굴자에게 직접 제출할 수 있으며, 채굴자는 이를 블록에 담아 채굴한 후 네트워크 전체에 전파할 수 있습니다. 이는 보안 문제가 네트워크를 통해 전파되어 노드 다운을 일으킬 수 있는 트랜잭션의 수를 제한합니다.
초기에 구현된 표준화된 비트코인 스크립트 중 두 가지가 있었습니다: "P2PKH"와 "P2PK"; 이름에서 알 수 있듯이, 이는 스크립트에 공개 키(또는 공개 키의 해시)와 해당 공개 키(그 뒤에 있는 개인 키)에 대한 서명을 제공하기 위해 돈을 소비하는 트랜잭션을 요구하는 스크립트입니다.
P2PKH 스크립트 공개 키는 다음과 같습니다:
OP_DUP OP_HASH160 55ae51684c43435da751ac8d2173b2652eb64105 OP_EQUALVERIFY OP_CHECKSIG
(유명한 비트코인 과학 웹사이트에서 제공: 배우기 비트코인)
주소의 개념
표준화된 스크립트는 비트코인 시스템의 기본 기능(개인이 개인 키를 보유하여 비트코인을 보관하고 다른 사람에게 메시지를 보낼 수 있습니다. 를 보유하여 비트코인을 보관하고, 다른 사람에게 전자 화폐 결제를 시작할 수 있습니다.) 하지만 여전히 컴퓨터를 위해 설계된 데이터이므로 문자열을 이해해야 하는 것은 컴퓨터입니다. 컴퓨터는 문자열의 길이에 민감하지 않으며, 데이터를 복사할 때 실수를 하지 않습니다. 그리고 인간은 여러 면에서 정반대입니다.
문제는 이 시스템의 사용자로서 사람이 이 데이터를 처리해야 한다는 것입니다. 어떤 사람이 비트코인 결제를 받을 때, TA가 요구하는 것은 상대방이 TA가 제어하는 (또는 TA가 성공적으로 잠금 해제할 수 있는) 비트코인 스크립트로 비트코인 자금의 총액을 보내는 것뿐이며, 나아가 TA가 자신의 자금을 장기간 보관하고자 할 때, TA가 결제의 책임자가 되어야 한다는 것입니다. 또한, TA가 자금을 장기간 보관하고 싶을 때는 비트코인 스크립트를 백업하는 것이 좋습니다.
그렇다면 어떻게 해야 할까요? 위와 같은 긴 문자열은 전송(너무 길다)이나 백업(복사 오류가 발생하기 쉽다)에 적합하지 않은 것이 분명합니다.
앞에서도 언급했듯이 대부분의 사람들에게 유용한 스크립트는 표준화되어 있으며, 이러한 표준화는 두 스크립트가 키 데이터 중 하나만 다르다는 것을 의미합니다: 두 P2PKH 스크립트의 경우 서로 다른 공개키 해시를 기록한다는 것뿐입니다. 따라서 결제를 수집할 때는 이 해시와 스크립트 유형(P2PKH 스크립트)만 제공하면 충분합니다. 결제자(소프트웨어)는 이 정보를 바탕으로 전체 비트코인 스크립트를 복구하여 거래의 올바른 위치로 비트코인을 전송합니다.
그리고 (공학에 정통한 사토시 나카모토가 깨달았듯이) 이 해시(<코드>55ae51684c43435da751ac8d2173b2652eb64105, 40비트 문자) 형식은 생략할 수도 있었습니다. 특별히 고안된 인코딩 방법을 사용하면 더 짧고 쉽고 정확하게 인식할 수 있는 형태로 변환할 수 있습니다.
이것은 "주소"입니다: 인코딩된 데이터로 비트코인 스크립트를 올바르게 복구할 수 있는 핵심 정보를 담고 있습니다.
인코딩 방법
Base58
"Base58 " [2] 사토시 나카모토가 발명한 인코딩 방법으로, "Base64"라는 잘 알려진 인코딩 방법을 변형한 것입니다.Base64의 문자 집합은 모든 숫자와 대소문자, 두 개의 기호("+", "/")로 구성됩니다. "와 "/"), 총 64자로 구성됩니다. 사토시 나카모토는 숫자 0, 대문자 I와 O, 소문자 l, 기호를 제거하여 Base58을 만들었습니다.
이러한 축소는 의도적인 것이었습니다. 사토시 나카모토의 광고문은 다음과 같습니다:
왜 base64 대신 base58을 사용하나요?
0OIl을 사용하지 않는 이유는 이 문자들이 비슷해 보이고 거의 동일하게 보이는 계정을 만드는 데 사용할 수 있기 때문입니다.
사람들은 계정에서 문자와 숫자 이외의 문자를 쉽게 받아들이지 않습니다.
대개 이메일에서는 구두점이 없으면 줄 바꿈이 깨지지 않습니다.
두 번 클릭하면 문자와 숫자만 있으므로 전체 문자열이 선택됩니다.
- Satoshi Nakamoto, Bitcoin v0.1 (base58.h)
> 블록쿼트>주소는 비트코인 스크립트로 복구되도록 되어 있으므로, 한 글자 오류만 있어도 완전히 다른 비트코인 스크립트로 자금이 전송될 수 있습니다(완전히 잠금 해제할 수 있는 스크립트일 수도 있습니다!). 또는 이러한 혼란스러운 문자를 허용하면 멀웨어가 사용자의 주소를 비슷해 보이지만 실제로는 공격자가 제어하는 주소로 조용히 대체하여 결제를 받을 때 자금을 잃게 만들 수 있습니다.
따라서 사토시 나카모토의 고려 사항은 전적으로 정당한 것입니다.
Base58 인코딩을 수행하기 전에 키 데이터(예: 위 P2PKH 스크립트의 해시)에 타입 코드를 접두사로 붙이고 접두사가 붙은 키 데이터의 처음 두 연속 SHA256 연산 중 첫 4바이트에 접미사를 붙입니다.
접두사는 데이터의 유형과 목적을 빠르게 나타내며, 접두사 때문에 동일한 유형의 데이터는 Base58 인코딩 결과에서 항상 동일하게 시작하게 됩니다. 그렇기 때문에 비트코인 주소의 시작 부분만 보고도 어떤 유형의 주소인지 알 수 있습니다.
반면 접미사는 체크섬 역할을 합니다: 소프트웨어에 전사 오류가 있는 주소를 입력하면 소프트웨어가 오류 가능성을 알려줍니다(전사 오류가 있는 위치를 가리키지는 못하지만).
즉, 인코딩을 시작하기 전에 문자열을 다음과 같이 구성합니다. 키 데이터 + SHA256(SHA256(유형 코드 + 키 데이터))[0:4] (여기서 "+"는 문자열 접합을 의미)
위의 P2PKH 스크립트를 예로 들면, 먼저 키에 키 데이터를 부여해야 합니다. 예를 들어, 먼저 키 데이터에 접두사 00
를 추가하고(55ae51684c43435da751ac8d2173b2652eb64105
), 데이터에서 처음 4바이트(16진수의 처음 8자)를 취하여 두 번 연속으로 SHA256 계산을 실행합니다. 그런 다음 이 데이터에 대해 두 개의 연속적인 SHA256 계산을 실행하고 처음 4바이트(16진수 8자, <코드>96ab3cb1코드>)를 가져와 접미사로 사용하여 <코드>0055ae51684c43435da751ac8d2173b2652eb6410596ab3cb1코드>를 얻습니다. 마지막으로 Base58 인코딩을 실행하여 다음과 같은 결과를 얻습니다: 18p3G8gQ3oKy4U9EqnWs7UZswdqAMhE3r8
.
이 문자열은 비트코인 스크립트에 사용된 키 정보(공개 키 해시)를 포함하고, 사용 방법을 설명하며(앞에 1
이 붙어 P2PKH 스크립트로 복구되어야 함을 나타냅니다), 전사 오류를 감지하는 기능을 가지고 있지만 여전히 34자에 불과합니다. 여전히 34자에 불과하며 원본 해시보다 더 짧습니다.
Bech32
"Bech32"는 BIP 0173이 해시에 부여한 이름입니다."[3] BIP 0173에서 정의한 이름입니다."[4], 1959년과 1960년에 세 명의 수학자가 발명한 순환 오류 수정 인코딩 알고리즘(BCH라는 이름은 세 수학자의 성에서 유래)을 의미합니다. (BCH라는 이름은 이 세 수학자의 성에서 유래했습니다). "32"는 인코딩 방법의 문자 집합에 숫자 "1", 문자 "b", "i", "b"를 제외한 소문자와 숫자 등 32개 문자만 있음을 의미합니다, "i" 및 "o".
BIP는 "분리된 증인(SegWit)" 업그레이드를 계기로 두 개의 새로운 표준화된 스크립트 "P2WPKH" 및 "P2WSH"를 위한 새로운 표준화된 스크립트를 제공할 계획입니다. "P2WSH" 주소.
BIP 0173의 시작 부분에서 저자들은 Base58의 바람직하지 않은 측면을 다음과 같이 지적합니다.
Base58은 대문자와 소문자를 모두 사용하므로 데이터가 QR 코드로 표시될 때 작은 '숫자 알파벳' 모드를 사용할 수 없고 큰 '바이트 데이터' 모드를 사용할 수 있습니다.
또한 대문자와 소문자를 사용하기 때문에 휴대폰 키보드로 입력하거나 판독하기가 쉽지 않습니다.
체크섬은 두 번의 연속적인 SHA256 연산이 필요하므로 속도가 느리고 오류를 찾을 수 있는 기능이 없습니다.
오류 위치를 찾을 수 있는 대부분의 인코딩 방법은 문자 집합의 크기가 소수의 거듭제곱인 경우에만 작동하며 58은 소수의 거듭제곱이 아닙니다.
Base58 디코딩은 더 복잡하고 느립니다.
이 새로운 접근 방식인 Bech32는 소문자와 숫자만 사용하며, 필요한 경우(예: QR 코드를 그릴 때) 모두 대문자로 전환하여 보다 간결하게 표시할 수 있습니다. 동시에 Bech32는 오류를 찾아내는 기능도 갖추고 있어 필사 오류를 찾아낼 수 있을 뿐만 아니라 어떤 비트를 잘못 필사했는지 알려줄 수도 있습니다(Base58보다 훨씬 낫습니다).
사실, BCH 알고리즘은 "오류 수정" 기능도 갖추고 있습니다: 어떤 비트를 잘못 복사했는지 알려줄 뿐만 아니라 어떤 문자가 되어야 하는지도 알려줍니다. 그러나 BIP 0173의 저자는 내재된 위험성을 발견했습니다: 한편으로는 오류 수정 기능을 강화하면 오류를 찾는 능력이 약화되고, 다른 한편으로는 사용자가 소프트웨어의 오류 수정 기능을 너무 신뢰하면 소프트웨어가 사용자가 입력한 잘못된 데이터를 "유효하지만 쓸모없는" 데이터로 수정할 위험이 있습니다. -- BCH로 인코딩된 데이터는 유효하지만, 이 데이터에서 복구되는 비트코인 스크립트는 수취인이나 다른 사람이 통제할 수 없을 수도 있습니다. 이는 매우 위험합니다. 따라서 BIP 0173은 "소프트웨어는 어떤 비트가 잘못 기록되었을 수 있는지 사용자에게 경고하는 것 외에 오류 수정 기능(수정 제안 제공)을 구현해서는 안 된다"고 경고하고 있습니다.
그 외, Bech32는 Base58 인코딩에서 발견되는 패턴을 따릅니다:
Bech32 데이터는 Base58의 접두사와 유사한 "의미 있는 데이터(hrp)" 단락으로 시작하며, 어떤 종류의 데이터인지 나타낼 수 있습니다.
hrp는 32자를 훨씬 초과하여 사용할 수 있으므로 Bech32에서도 다음과 같이 사용합니다. 숫자 "1"은 hrp와 디코딩할 실제 데이터 사이의 구분 기호로 사용됩니다.
Bech32는 비트코인 외에도 많은 다른 프로젝트에서 사용되며, 다른 프로젝트의 데이터는 hrp로 서로 구별됩니다. 다음은 등록된 hrp 목록입니다. [5].
Bech32는 또한 인코딩된 데이터의 마지막 6자를 차지하는 체크섬으로 설계되었습니다.
위 사례와 정확히 동일한 공개 키 해시를 사용한다고 가정하면, P2WPKH 스크립트는 다음과 같습니다:0 55ae51684c43435da751ac8d2173b2652eb64105
(예, 원래 P2PKH보다 더 간단하고 추상적입니다.) 그리고 Bech32로 인코딩된 주소는 42자 길이인 bc1q2kh9z6zvgdp4mf634jxjzuajv5htvsg9ulykp8
입니다.
Bech32m
"Bech32m"은 BIP 0350의 이름입니다. [6] 인코딩 방법을 정의합니다. 개발자들이 Bech32 인코딩에서 취약점을 발견하여 제안되었습니다.
마지막 문자가 "p"인 경우 문자 앞에 "q"를 몇 개든 삽입하거나 삭제해도 체크섬이 발생하지 않습니다. ', 어느 쪽도 체크섬이 오류를 보고하지 않는다면 체크섬 메커니즘은 완전히 쓸모가 없습니다.
더 이상 표준화된 비트코인 스크립트가 추가되지 않는다면 이 문제는 쉽게 해결할 수 있을 것입니다. P2WPKH 주소와 P2WSH 주소 모두 길이가 정의되어 있고 길이 체크섬을 추가하면 괜찮을 것입니다. 그러나 향후 주소 길이가 변경될 수 있는 새로운 표준화된 스크립트가 추가될 예정이므로 이 문제를 해결해야 합니다.
Bech32m은 Bech32 체크섬 생성기의 파라미터를 변경하여 이 문제를 해결합니다.
현재 Bech32m은 "Taproot" 업그레이드로 추가된 "P2TR" 스크립트의 주소를 인코딩하는 데만 사용됩니다. 향후에는 다른 표준화된 스크립트의 주소를 인코딩하는 데 사용될 수 있습니다.
경제
주소가 표준화된 비트코인 스크립트의 특별한 표현이고 주소의 유형이 실제로 표준화된 비트코인 스크립트의 유형에서 비롯된다는 것을 이해했다면, 어떻게 주소의 유형이 서로 다른 경제성을 가질 수 있으며 어떻게 주소의 유형이 서로 다른 경제성을 가질 수 있는 것일까요? 주소 유형에 따라 경제성이 다르고 사용 시 수수료 비용이 달라질 수 있는 이유에 대한 의문이 해결되었습니다. 이는 비트코인 스크립트마다 경제성이 다르기 때문입니다.
네트워크의 탈중앙화와 보안을 유지하기 위해 비트코인의 블록 크기는 제한되어 있으며, 거래를 더 작게 만드는 스크립트는 경제적 이점이 있습니다.
이 점에서 가장 큰 변화는 2017년에 활성화된 세그윗(Segregated Witness) 소프트포크가 가져온 것입니다. 분리형 위트니스는 "P2WPKH"와 "P2WSH"라는 두 가지 새로운 표준화된 스크립트를 도입하는 동시에 완전히 새로운 트랜잭션 검증 모델을 설계했습니다.
기존(레거시) 비트코인 스크립트에서는 스크립트의 공개 키로 정의된 유효성 검사 절차를 통과하는 데 사용되는 데이터(예: 디지털 서명)가 트랜잭션(scriptSignature
필드)에 배치되며, 이는 "거래 융합성"이라고 알려진 문제를 발생시킵니다. " 문제가 발생합니다. [7]을 발생시켜 비트코인 스크립트로 다자간 참여자 애플리케이션을 프로그래밍하지 못하게 하며, 심지어 지갑이 거래를 전혀 추적할 수 없게 만들 수도 있습니다.
그리고 분리된 증인의 거래 검증 모델은 이 데이터를 거래 외부(<코드>증인코드> 필드)에 배치하고, 분리된 증인은 새로운 거래량 측정 단위("가상 바이트(vByte)"), 증인 필드에 배치된 데이터는 볼륨 측정에서 할인됩니다(이는 분리된 증인이 있는 트랜잭션을 기존 트랜잭션보다 더 경제적으로 만들기 위한 의도적인 설계입니다).
최종 결과는 격리된 증인 유형 스크립트 P2WPKH와 P2WSH가 기존 스크립트 P2PKH와 P2SH보다 훨씬 더 경제적이라는 것입니다: 한편으로는 격리된 증인 스크립트의 스크립트 공개 키가 더 간결하고, 다른 한편으로는 기존 스크립트의 서명이 트랜잭션에 배치되는 반면 격리된 증인 스크립트의 서명은 거래 외부에 배치된다는 점입니다. 반면에 기존 스크립트의 서명은 트랜잭션 내부에 배치되고 격리된 감시 스크립트의 서명은 트랜잭션 외부에 배치되며, 데이터 크기가 동일하더라도 후자의 vByte가 더 작습니다.
이 표는 트랜잭션의 입력과 출력에서 다양한 유형의 스크립트가 차지하는 용량을 보여줍니다.
- 이미지 출처:옵테크 매주 한정 - 확인 대기 중옵테크 매주 한정 - 확인 대기 중 -
또한 거래량 계산기를 통해 특정 유형의 스크립트가 얼마나 많은 양을 유발하는지 알 수 있습니다.
주: 경제성을 고려할 때, 일반적으로 비트코인 거래에는 '변경 출력'이 있기 때문에 스크립트를 입력으로 사용할 때 거래량만 비교할 수 없습니다(거래에 제공한 금액이 지불금보다 큰 경향이 있으므로 일부 금액을 다시 자신에게 돌려줍니다). 변경 출력은 일반적으로 이 지갑의 지급 주소와 동일한 유형의 스크립트를 사용합니다.
주소 유형
이 섹션에서는 사용자가 접할 수 있는 다양한 유형의 주소의 특성과 경제성에 대해 설명합니다.
P2PKH
P2SH
Base58 인코딩 방법을 사용합니다. 숫자 "3"으로 시작하며 일반적으로 34자 길이입니다.
사용자에게 가장 자주 노출되는 P2SH 주소는 실제로 "중첩 세그윗(P2SH)"이라는 스크립트의 주소로, 그 이름은 다음과 같습니다. "분리된 증인 스크립트를 캡슐화하는 P2SH 스크립트"라는 뜻입니다.
이 캡슐화를 달성하는 능력은 P2SH 자체의 업적이지만 이 캡슐화의 근본적인 정의는 다음과 같습니다. 지갑 소프트웨어 호환성 문제를 해결하기 위한 것이었습니다. 분리된 증인 주소는 완전히 새로운 인코딩 방법을 사용하기 때문에 새로운 방법을 구현하지 않는 지갑 소프트웨어는 분리된 증인 주소를 잘못 입력한 것으로 인식하고 유효한 비트코인 스크립트를 복구할 수 없습니다. 네스티드 세그윗 P2SH 스크립트는 적절한 절충안을 제공합니다: 지불자의 지갑(업그레이드 여부에 관계없이)은 이러한 주소를 정상적인 P2SH 주소로 해석한 다음 다음과 같이 처리합니다. 트랜잭션을 올바르게 구성하는 P2SH 스크립트를 복구하고, 수취인의 후속 자금 지출은 (이를 지원하는 지갑 소프트웨어 덕분에) 분리된 증명의 일부 이점을 얻게 됩니다.
동일한 단일 서명 지갑에서 P2PKH보다 더 나은 경제성을 제공합니다.
다중 서명 지갑과 함께 사용할 수 있습니다(분리된 증인 기능 유무에 관계없이).
예시:38Y2PBD1mihxtoVncaSz3oC2vRrjNF8sA2
(이 P2SH 스크립트는 위와 동일한 P2PKH 스크립트를 캡슐화하지만, 아무 소용 없음)
P2WPKH
네이티브 격리 증인 스크립트. Bech32 인코딩을 사용하며 숫자와 문자 "bc1q"로 시작하고 42자 길이입니다.
단일 서명 지갑용.
P2PKH보다 경제성이 훨씬 우수하고 중첩형 세그윗 P2SH보다 낫습니다.
예시(위와 동일): bc1q2kh9z6zvgdp4mf634jxjzuajv5htvsg9ulykp8
P2WSH
기본 검역 증인 스크립트. Bech32 인코딩 방법을 사용하며, 숫자와 문자 "bc1q"로 시작하고, 길이는 62자입니다.
다중 서명 지갑에 일반적으로 사용됩니다.
다중 서명 지갑으로 사용할 경우 P2SH보다 경제성이 훨씬 좋습니다.
예시: (이 P2WSH 스크립트는 위와 동일한 P2PKH 스크립트를 캡슐화하지만 이점은 거의 없습니다)
P2TR
네이티브 분리형 증인 스크립트(Taproot는 "분리형 증인 v1"). Bech32m 인코딩 방법을 사용하며, "bc1p"로 시작하고 62자 길이입니다.
단일 서명 지갑과 다중 서명 지갑 모두에 사용할 수 있습니다.
단일 서명 지갑으로 사용할 경우 P2WPKH보다 경제성이 약간 좋지만 차이가 거의 없습니다(이는 거래의 고유한 오버헤드로서 입력과 제로화된 출력이 있다고 가정하며, 입력이 많아질수록 P2TR의 이점이 커집니다).
다중 서명 지갑으로 사용할 경우, 일부 슈노르 서명 집계 알고리즘의 도움으로 P2WSH보다 경제성이 훨씬 더 좋을 수 있습니다. 그러나 이 글을 쓰는 시점(2024년 11월)에 지갑 소프트웨어는 상호 작용의 복잡성으로 인해 이러한 집계 알고리즘을 구현하는 경우가 거의 없습니다.
P2TR과 이전 표준 비트코인 스크립트의 주요 차이점은 기존 스크립트는 모두 공개 키를 사용하는 단일 서명 지갑 사용자를 구분했다는 점입니다. 전자는 공개 키 해시 스크립트를 사용하고, 후자(다중 서명 장치 및 라이트닝 채널과 같은 고급 장치 포함)는 상환 스크립트 해시 스크립트를 사용했는데, P2TR은 처음으로 이 둘을 통합하여 스크립트/주소의 외형만으로는 스크립트의 사용을 직접 추측할 수 없게 만들었습니다. 결과적으로 P2TR은 장기적으로 더 나은 프라이버시를 제공할 것입니다.
지금까지 모든 지갑이 P2TR 주소를 지원하는 것은 아닙니다(하지만 거의 모든 지갑이 P2WPKH와 P2WSH를 지원합니다). 사용자에게는 선택의 폭과 마이그레이션 기능이 더 제한되어 있습니다. 또한 P2TR 기반 다중 서명 장치에 대한 지원은 훨씬 더 적습니다.
예시(무작위로 선택):bc1pxy5r3slcqc2nhc0r5698gmsqwruenj9c8pzmsy5cedp3649wyktstc6z3c
/ li>
결론
주소는 특정 비트코인 스크립트를 나타내며, 이러한 비트코인 스크립트는 표준화되어 주소의 정보에 따라 전체 내용을 복구할 수 있습니다. 특수 인코딩 방법을 사용하면 주소를 더 간결하게 만들 수 있고, 전사 오류를 확인할 수 있습니다. 그리고 다양한 주소 유형의 경제성은 그 뒤에 있는 표준화된 비트코인 스크립트의 경제성에서 비롯됩니다.
부록 A. 설명자
"주소의 개념" 섹션에서 설명했습니다. 사용자에게 간결하고 안정적인 스크립트 레코드가 필요할 수 있는 두 가지 시나리오, 즉 결제(배송) 시나리오와 장기 보관 시나리오가 있다고 언급했습니다.
그리고 "인코딩 방법" 섹션에서 이러한 인코딩 방법의 설계는 주로 장기 보관 시나리오가 아닌 배송 프로세스에 기반하고 있음을 알 수 있습니다. 그렇다면 보관 시나리오에서 주소는 어떻게 저장되어야 할까요?
다행히 오늘날에는 (단일 주소가 아닌) 집합 주소를 표현하는 적절한 방법이 있으며, 이것이 바로 '출력 (주소) 설명자'입니다.
비트코인이 탄생하고 주소 개념이 등장한 이후, 자율 수탁의 기술과 보안 관행이 많이 개선되었습니다. 한 가지 주요 발전은 이른바 '계층적 결정론적(HD) 지갑'으로, 결정론적 무작위 알고리즘에 따라 비밀 자료를 사용하여 많은 개인 키와 그에 따른 많은 주소를 도출함으로써 한편으로는 '주소 재사용 금지'의 보안을 충족하고 개인키 백업의 부담을 최소화할 수 있습니다.
설명자 역시 이 개념을 기반으로 하며, 주소 유형과 해당 주소 집합을 생성하기 위해 수행한 단계를 일반 텍스트로 표현하고 체크섬을 추가하여 설명합니다. 예를 들어:
wpkh([8b47f816/84h/0h/0h]xpub6C8vwWQ[...]) NgW2SnfL/<0;1>/*)#c38kz2nr
위 단락에서 P2WPKH 주소 집합을 나타내며 이 주소 집합에 사용된 공개 키는 &...의 지문에서 파생되었음을 볼 수 있습니다. 8b47f816
마스터 공개 키는 8b47f816
의 지문에서 파생되며, 84h/0h/0h
BIP32 파생 경로에 따라 0
및 1
주소 집합에서 공개 키로 사용됩니다. 코드>1의 파생 경로를 사용하여 수집 주소와 변경 주소를 구분합니다. 마지막으로, c38kz2nr
은 전사 오류를 확인하기 위한 체크섬입니다.
이러한 문자열은 주소 집합을 생성하는 과정을 모두 설명하므로 장기 보관과 지갑 마이그레이션에 적합합니다.
각주
1. https://en.bitcoin.it/wiki/Script#Script_examples
2. https://learnmeabitcoin.com/technical/keys/base58/
3. https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki
4. https://en.wikipedia.org/wiki/BCH_code 
5. https://github.com/ satoshilabs/slips/blob/master/slip-0173.md
6. https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
7.& nbsp;https://www.btcstudy.org/2022/10/07/segregated-witness-benefits/#%E4%BF%AE%E5%A4%8D%E7%86%94%E8%9E%8D%E6%80%A7% E9%97%AE%E9%A2%98