용어집 / 주소와 키
BIP-86 파생
- BIP-86 파생이란 무엇입니까?
- BIP-86 파생은 단일 키 Taproot 계정을 m/86'/0'/0'에 두고, 이어서 파생된 각 키를 그 키 자신의 해시로 조정하여 주소가 사용할 수 없는 스크립트 경로를 확정하도록 합니다.
BIP-86에 명시되어 있습니다.
BIP-86은 단일 서명자를 위해 Taproot 출력을 보관하는 지갑을 다루며, 목적 레벨에 86'을 두고 BIP-44의 계정 구조를 재사용합니다. BIP-49와 BIP-84도 두 번째 주소 단계를 정의하지만, 키 자체를 바꾸는 것은 BIP-86뿐입니다. 주소에 들어 있는 32바이트 값은 파생한 키를 그 키 자신의 해시로 조정한 값입니다. 복구 문구를 BIP-84 방식만 검사하는 소프트웨어에 복원하면 bc1p 잔액이 0으로 표시됩니다.
작동 방식
BIP-86 파생은 두 단계로 이루어지며, 익숙한 키 트리 하강은 첫 단계뿐입니다.
첫 단계는 경로입니다. 템플릿은 m / purpose' / coin_type' / account' / change / address_index이고, 목적 자리에 86'이 들어가며 그 아래 모든 레벨은 그대로 사용합니다. 따라서 첫 번째 비트코인 계정은 m/86'/0'/0'에 있고 첫 수신 키는 m/86'/0'/0'/0/0에 있습니다.
두 번째 단계에서 BIP-86은 선행 표준들과 갈라집니다. BIP-49와 BIP-84도 두 번째 단계를 정의하지만, 그쪽은 파생된 키를 스크립트로 감싸고 위트니스는 여전히 경로가 만들어 낸 키를 드러냅니다. BIP-86은 키를 교체합니다. 이 표준은 충족해야 하는 규칙에 대해 BIP-341을 인용합니다: "If the spending conditions do not require a script path, the output key should commit to an unspendable script path instead of having no script path." 그래서 파생된 키를 lift_x를 통해 내부 키로 읽고, 체인에 도달하는 것은 그 내부 키에 int(HashTapTweak(bytes(internal_key)))G를 더한 값입니다. 그 결과 OP_1 뒤에 32바이트 푸시 하나가 놓이며, 0x5120 다음에 조정된 키가 이어서 기록되고, 이를 사용하려면 scriptSig는 비워 두고 위트니스에 서명만 있으면 됩니다.
공개된 테스트 벡터가 그 차이를 보여 줍니다. m/86'/0'/0'/0/0에서 시드로부터 파생된 내부 키는 cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115인 반면, 네트워크가 보는 키는 a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c이며 bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr로 인코딩됩니다. 두 번째 단계를 건너뛰는 구현은 대신 첫 번째 값을 공개하므로, 같은 시드를 복원하는 표준 준수 지갑이 결코 찾지 못할 그럴듯해 보이는 주소를 건네줍니다.
Ava Chow가 이 문서를 작성했으며, 이 문서는 2021년 6월 22일에 지정되었고 현재 상태는 Deployed입니다.
확인할 수 있는 곳
BIP-86 파생은 어떤 형식을 원하는지 묻지 않고 bc1p 주소를 건네주는 대부분의 단일 서명 지갑 뒤에 있습니다. Bitcoin Core는 버전 23.0에서 디스크립터 지갑을 기본값으로 만들었고, 그 버전의 릴리스 노트는 새로 만든 디스크립터 지갑에 자동으로 생성된 tr() 디스크립터가 들어 있으며 이것이 "which allows for creating single key Taproot receiving addresses"라고 밝힙니다.
하드웨어는 매우 다른 속도로 따라잡았습니다. 이 사이트의 KeepKey 리뷰는 해당 기기의 Taproot 출력 지원을 2025년 2월의 펌웨어 7.10.0으로 기록하므로, 저렴한 서명 기기는 86' 브랜치를 보여 주지 않는 시드를 보관할 수 있는 반면, 같은 단어를 읽는 다른 소프트웨어는 그 코인을 정상적으로 사용합니다.
이 명세는 고정 경로가 여전히 필요한 이유를 이례적으로 솔직하게 밝힙니다. 동기 섹션은 "there are now solutions which obviate the need for fixed derivation paths for specific script types"라고 인정하며, 이는 디스크립터를 뜻합니다. 이어서 그것이 왜 문제를 해결하지 못하는지 밝힙니다. 많은 소프트웨어 지갑과 하드웨어 서명 기기는 여전히 시드만 백업하고 경로나 스크립트 유형의 기록은 곁에 두지 않습니다. 디스크립터는 그 정보를 담지만 단어 목록은 담지 못하므로, 대신 숫자 86이 그 정보를 담습니다.
BIP-86 파생 vs P2TR
BIP-86 파생은 P2TR 출력을 채우는 한 가지 방식일 뿐, 그 정의는 아닙니다. P2TR은 위트니스 버전 1이며 32바이트 출력 키라면 무엇이든 받아들입니다. MuSig2로 여러 서명자의 키를 집계한 키와 실제로 사용할 수 있는 스크립트 트리를 커밋하는 키도 포함됩니다. BIP-86은 그 영역에서 가장 좁은 경우를 다룹니다. 서명자 하나, 시드 하나, 그리고 키 뒤에 아무것도 숨지 않도록 의도적으로 사용할 수 없게 남겨 둔 스크립트 경로입니다. BIP-86이 만드는 모든 주소는 P2TR 출력이며, P2TR이 표현할 수 있는 것의 대부분은 그 범위를 완전히 벗어납니다. 따라서 Taproot 지원을 광고하는 지갑이라도 같은 주소 형식을 쓴 다중 서명 분기나 시간 잠금 분기를 거부할 수 있습니다.