용어집 / 주소와 키
키 인덱스
- 키 인덱스란 무엇입니까?
- 키 인덱스는 HD 파생의 각 단계에서 0부터 4,294,967,295까지의 범위에서 선택되어, 상위 키의 어떤 하위 키에 도달하는지를 결정하는 숫자입니다.
BIP-32에 명시되어 있습니다.
인덱스는 지갑이 세는 방식입니다. 트리의 각 계층은 32비트 숫자를 사용하므로, 하나의 상위 키에는 가능한 하위 키가 4,294,967,296개 있고, 그 범위의 상위 절반 전체는 2,147,483,648부터 강화 파생에 예약되어 있습니다. 일상적으로는 경로의 마지막 인덱스만 접하게 됩니다. 수신 버튼을 누를 때마다 올라가는 인덱스입니다.
작동 방식
인덱스는 한 하위 키와 그 다음 하위 키 사이에서 유일하게 다른 요소입니다. 파생 과정에서 인덱스는 4바이트 빅엔디언 숫자로 직렬화되어 해시 계산 전에 상위 키 자료에 덧붙여지므로, 인덱스 0과 인덱스 1은 서로 눈에 보이는 관계가 없는 결과를 만들어냅니다. 그 단계에서 다른 것은 달라지지 않습니다.
범위는 2,147,483,648에서 둘로 나뉩니다. 그 선 아래에서는 파생이 일반 방식이며, 상위 확장 공개 키만으로 어떤 비밀도 없이 하위 공개 키를 계산할 수 있습니다. 그 선과 같거나 위에서는 파생이 강화 방식이므로 상위 개인 키가 반드시 참여해야 하며, 공개 자료만으로는 아무것도 얻을 수 없습니다. 표기법은 그 산술을 감춥니다. 84' 또는 84h라고 쓰는 것은 인덱스 2,147,483,732를 뜻하며, 이는 84에 강화 오프셋을 더한 값입니다.
같은 대상을 가리키는 두 표기법은 필요 이상으로 혼란을 일으킵니다. 오래된 문서와 대부분의 지갑 화면은 m/84'/0'/0'처럼 아포스트로피를 사용하는 반면, Bitcoin Core가 출력하는 디스크립터는 m/84h/0h/0h를 선호합니다. 둘은 동일합니다. 문자 형태가 존재하는 이유는 셸 인수 안의 아포스트로피가 따옴표 처리상의 위험이기 때문이며, 그것을 bitcoin-cli에 붙여 넣으면 디버깅하기 번거로운 방식으로 깨집니다.
확인할 수 있는 곳
경로의 마지막 숫자가 매일 접하는 인덱스입니다. m/84h/0h/0h/0/7에서 0은 수신 체인을 선택하고 7은 지갑이 내어 준 여덟 번째 주소를 표시하며, 0부터 셉니다. 잔돈은 체인 1에 자체 카운터가 있으므로, 새로 만든 지갑의 첫 번째 잔돈 출력은 m/84h/0h/0h/1/0에 위치하며, 두 카운터는 독립적으로 진행됩니다.
순차적으로 세는 방식은 복구를 가능하게 만들고, 동시에 복구를 실패하게 만드는 원인이기도 합니다. BIP-44는 복구하는 지갑에게 미사용 주소 20개를 연속으로 앞으로 파생한 뒤 탐색을 멈추라고 지시하므로, 그 앞에 긴 공백 구간이 있는 인덱스 45에서 받은 코인은 갭 한도를 직접 올리기 전까지 잔액 0으로 표시됩니다. Bitcoin Core는 미리 파생해 둔 키 풀을 유지하여, 기본값으로 1,000개를 두고 소비되는 대로 채워 넣음으로써 이 문제를 피합니다.
탐색은 한 계층 위에서도 같은 방식으로 작동합니다. 복구하는 지갑은 계정 0'를 확인하고 거래 내역을 발견하면 계정 1'로 넘어가며, 거래가 전혀 없는 첫 계정에서 멈춥니다. 따라서 계정 5'를 만들고 그 아래 계정들을 비워 두면, 나중의 복구가 사용자의 코인을 놓치게 만드는 확실한 방법이 됩니다.
키 인덱스 vs 파생 경로
인덱스는 숫자 하나이고, 경로는 그 숫자들의 순서 있는 목록입니다. m/84h/0h/0h/0/7에는 인덱스 다섯 개가 들어 있으며, 일반적인 사용에서는 마지막 하나만 움직입니다. 목적, 코인 유형, 계정, 체인은 지갑이 존재하는 동안 고정되어 있기 때문입니다. 이 구분은 지원 문서가 파생 경로를 확인하라고 안내할 때 중요합니다. 그것은 주소 카운터가 아니라 고정된 접두사를 뜻하며, 접두사가 잘못되어 사라진 잔액은 수신 버튼을 아무리 눌러도 되살릴 수 없습니다.