용어집 / 주소와 키
자식 키
별칭은 Child key, 자식 공개 키, 자식 개인 키, Child public key입니다.
- 자식 키란 무엇입니까?
- 자식 키는 난수 생성기가 아니라 파생 단계에서 나오며, 상위 키가 이 키를 생성할 때 사용한 인덱스로 식별됩니다.
BIP-32에 명시되어 있습니다.
자식 키는 상위 키보다 약하지 않습니다. 자식 키는 자체 체인 코드를 가진 완전한 256비트 개인 키로, 트랜잭션에 서명할 수 있고 다시 자식 키를 가질 수도 있습니다. 이 단어는 트리에서의 위치를 가리키며, 표준 지갑에서 실제로 코인을 보관하는 키는 루트에서 다섯 단계 아래에 있습니다.
작동 방식
자식 키를 파생하려면 해시 한 번과 덧셈 한 번이 필요합니다. 상위 키의 체인 코드가 HMAC-SHA512의 키가 되고, 데이터는 상위 키 자료 뒤에 4바이트 인덱스를 붙인 것이며, 64바이트 결과는 절반으로 나뉩니다. 오른쪽 32바이트가 자식 키의 체인 코드가 됩니다. 왼쪽 32바이트는 상위 개인 키에 더해지고, secp256k1 곡선의 위수를 법으로 하며, 그 합이 자식 개인 키입니다.
공개 파생이 가능한 이유가 바로 이 덧셈입니다. 개인 키에 수를 더하는 것은 공개 키에 점을 더하는 것에 대응하므로, 공개 측만 가진 소프트웨어도 비밀을 보지 않고 같은 자식 공개 키를 계산할 수 있습니다. BIP-32는 해시 출력이 유효 범위를 벗어나는 경우도 다루며, 그 확률을 2의 127제곱분의 1 미만으로 제시하고, 해당 인덱스를 건너뛰고 다음으로 넘어가라고 지시합니다.
형제 키끼리는 아무것도 드러내지 않습니다. 한 상위 키의 두 자식 키는 관찰자가 주소에서 알아챌 수 있는 어떤 것도 공유하지 않으며, 그래서 결제마다 새 주소를 쓰는 것이 가치가 있습니다. 그 관계는 상위 확장 공개 키를 가진 사람만 복원할 수 있습니다.
확인하는 곳
지갑은 실제로 자식 키로 만들어지므로, 자식 키는 키가 아니라 인덱스 번호로 만나게 됩니다.
Sparrow나 Electrum에서 코인 컨트롤 화면을 열면 모든 주소에 경로가 표시됩니다. m/84'/0'/0'/0/7은 0부터 세어 첫 번째 계정의 여덟 번째 수신 주소입니다. Trezor나 Ledger에서 출금을 확인하면 기기가 주소 옆에 같은 경로를 표시하며, 이렇게 해서 목적지가 컴퓨터를 장악한 사람이 아니라 자신의 트리에 속하는지 확인합니다.
깊이도 읽을 만합니다. 마스터 키는 깊이 0에 있고, BIP-44 방식 경로에서는 결제에 서명하는 키가 깊이 5에 있습니다. 그 사이의 모든 단계는 위 단계의 자식이자 아래 단계의 부모이므로, 두 단어는 등급이 아니라 관계를 설명합니다.
여기서 한 가지 습관이 따라옵니다. 그 가지를 완전히 버릴 생각이 아니라면 HD 지갑에서 개별 자식 개인 키를 내보내지 마십시오. 강화되지 않은 자식 개인 키를 상위 확장 공개 키와 결합하면 상위 확장 개인 키가 드러나므로, 부주의한 내보내기 한 번으로 주소 하나가 아니라 계정 전체를 넘겨줄 수 있습니다.
자식 키 vs 상위 키
자식 키와 상위 키는 하나의 파생 단계를 양 끝에서 본 같은 종류의 대상입니다. 마스터를 제외한 모든 키는 누군가의 자식이고, 파생이 이루어진 모든 키는 누군가의 부모이므로, m/84'/0'/0'에 있는 노드는 동시에 둘 다입니다. 비대칭성은 각자가 계산할 수 있는 것에 있습니다. 상위 키는 자식을 끝없이 파생하는 반면, 자식 키만으로는 위의 키에 대해 아무것도 알려주지 않습니다. 이 단방향 성질이 트리의 보안 모델 전체이며, 강화 파생이 이 성질을 단방향으로 유지합니다.