본문으로 건너뛰기
buybitcoinsmart

용어집 / 주소와 키

NUMS 포인트

NUMS 포인트란 무엇입니까?
NUMS 포인트는 아무도 개인 키를 보유하지 않는 공개 키로, 협력적 지출 경로가 불가능하도록 의도한 경우 taproot 내부 키로 사용됩니다.

BIP-341에 명시되어 있습니다.

Nothing Up My Sleeve는 그 속성입니다. 즉, 이 포인트는 공개적이고 반복 가능한 절차로 만들어지므로 아무도 자신이 비밀 키를 안다고 주장할 수 없습니다. BIP-341은 그러한 포인트 하나를 공개하는데, x 좌표 0x50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0이며, 이는 secp256k1 기본점 G의 표준 비압축 인코딩을 해시하여 만들어집니다. 지갑의 경우, 이것이 taproot 출력이 스크립트 전용이 되는 방식입니다. 즉, 조건으로 이루어진 트리를 통해서만 지출할 수 있고 다른 방식으로는 지출할 수 없습니다.

작동 방식

NUMS 포인트는 키가 아니라 해시로 시작합니다.

일반적인 공개 키는 생성점 G에 비밀 숫자를 곱한 것이며, 그 숫자를 고른 사람은 서명할 수 있습니다. NUMS 포인트는 거꾸로 만들어집니다. 고정된 공개 문자열을 가져다 해시하고, 나온 32바이트 다이제스트를 x 좌표로 읽습니다. BIP-341의 예시는 G 자체의 표준 비압축 인코딩을 해시하므로 작성자가 입력값을 조작할 여지가 없습니다. 그 값을 곡선 위의 점으로 올리면 모든 면에서 유효한 공개 키가 되지만 한 가지 예외가 있습니다. 즉, 이에 대한 서명은 이산 로그 문제를 푸는 것을 의미하며, BIP-341은 설계의 보안 한계로 2의 128제곱분의 1을 명시합니다.

나머지는 taproot가 제공합니다. taproot 출력 키는 스크립트 트리의 머클 루트에 커밋하는 tweak에 의해 곡선을 따라 이동된 내부 키 P입니다. BIP-341은 t = hash_TapTweak(p || merkle_root)로 두고, 이어서 Q = P + int(t)G로 정의합니다. 키 경로에서 Q에 대해 서명하려면 P 뒤에 있는 개인 키가 필요하므로, P가 NUMS 포인트일 때 그 경로는 닫히고 스크립트 경로가 유일한 진입 방법이 됩니다. 이러한 지출은 리프 하나와 33 + 32m 바이트의 제어 블록을 드러내며, 여기서 m은 형제 해시의 수이고 BIP-341에 의해 128로 제한됩니다.

알아 둘 만한 누출이 하나 있습니다. 잘 알려진 NUMS 포인트는 보는 즉시 알아볼 수 있으므로, 제어 블록에 이를 그대로 공개하면 키 경로가 처음부터 죽어 있었음을 알리는 셈입니다. BIP-341은 이를 권장하지 않습니다. 즉, 0부터 n에서 1을 뺀 값까지의 범위에서 무작위로 새로운 정수 r을 균일하게 골라 H + rG를 대신 사용하라고 하며, 이는 일반적인 내부 키와 구별되지 않습니다. r을 보관하면, 이를 건네주어 다시 계산하게 함으로써 공동 서명자에게 그 포인트가 NUMS였음을 여전히 증명할 수 있습니다.

확인할 수 있는 곳

NUMS 포인트는 주소에는 결코 나타나지 않고, 스크립트 경로 지출의 증인(witness)에만 나타납니다.

온체인에서 출력은 34바이트이며, OP_1 뒤에 32바이트 푸시가 오는 형태로, 다른 어떤 taproot 출력과도 다르지 않습니다. 내부 키는 제어 블록의 첫 바이트 뒤에 오는 32바이트이므로, 누군가 트리를 통해 지출하는 첫 순간에 드러납니다. 자금이 들어왔지만 스크립트로 지출된 적이 없는 출력은 결코 이를 드러내지 않습니다.

디스크립터는 선택을 명시적으로 만듭니다. BIP-386은 tr() 아래의 모든 키 표현이 x-only일 것을 요구하고 내부 키를 tr(KEY, TREE)에서 맨 앞에 두므로, 그 자리에 있는 NUMS 포인트는 키 경로가 존재하지 않음을 디스크립터가 진술하는 방식입니다. 대칭적인 경우는 트리가 없는 tr(KEY)이며, 여기서 BIP-386은 스크립트 경로가 없는 출력도 지출 불가능한 경로에 여전히 커밋해야 한다는 BIP-341의 조언을 인용합니다.

NUMS 내부 키는 복구가 시드 문구만이 아니라 디스크립터 문자열에 의존하게 만듭니다. 시드는 리프 키를 재현하지만, 그 안에는 트리나 그 위의 포인트를 기록하는 것이 없습니다. Sparrow의 멀티시그 흐름은 디스크립터를 보관하라고 안내하며, 그 지시는 일반적인 키 경로 지갑에서보다 여기서 더 큰 비중을 가집니다.

NUMS 포인트 vs 널 데이터 트랜잭션

NUMS 포인트는 하나의 지출 경로를 닫는 반면, 널 데이터 트랜잭션은 출력을 완전히 지출 불가능하게 만듭니다. OP_RETURN 출력은 설계상 지출 불가능함이 증명됩니다. 즉, 노드는 이를 UTXO 집합에서 제거하고 여기에 배정된 모든 가치는 소각됩니다. NUMS 내부 키 뒤에 있는 코인은 소각되지 않습니다. 스크립트 트리의 모든 조건을 통한 지출은 여전히 정상적으로 이루어집니다. 두 경우가 공유하는 단어는 지출 불가능이라는 말이며, 한 경우에는 출력 전체를, 다른 경우에는 단일 분기를 가리킵니다.

혼동하기 쉬운 용어

자주 묻는 질문

NUMS 내부 키를 가진 taproot 출력으로 보낸 비트코인도 여전히 지출할 수 있습니까?

예, 스크립트 경로를 통해 지출할 수 있습니다. NUMS 내부 키는 키 경로 지출만 비활성화하므로, 트리에 커밋된 모든 스크립트는 여전히 정상적으로 지출되며 아무것도 소각되지 않습니다.

BIP-341은 왜 NUMS 포인트에 무작위 값을 더하라고 권장합니까?

키 경로를 사용할 수 없다는 사실을 숨기기 위해서입니다. BIP-341은 무작위로 새로운 정수 r을 골라 H 더하기 r 곱하기 G를 내부 키로 사용하라고 제안합니다. 그러면 제어 블록에서 드러나는 값이 다른 어떤 키와도 같아 보이며, r은 나중에 공개하여 그 포인트에는 알려진 개인 키가 없었음을 증명할 수 있습니다.

일반적인 비트코인 구매자로서 NUMS 포인트를 신경 써야 합니까?

아닙니다. taproot 계약을 직접 만들거나 디스크립터로 지갑을 복구하는 경우가 아니라면 그렇지 않습니다. 단일 서명 지갑은 실제로 본인이 관리하는 내부 키를 사용하며, NUMS 기법은 금고(vault)와 공동 수탁 구성 같은 스크립트 전용 배치에서만 나타납니다.

다음에 읽을 글

관련 용어

주소와 키 분야의 다른 용어

이 페이지를 영어로 읽기