본문으로 건너뛰기
buybitcoinsmart

용어집 / 주소와 키

하드닝 파생

별칭은 Hardened derivation, 강화 인덱스입니다.

하드닝 파생이란 무엇입니까?
하드닝 파생은 모든 자식 키 계산에 부모 개인 키를 입력합니다. 그렇기 때문에 유출된 확장 공개 키가 그 아래의 가지를 풀어낼 수 없습니다.

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

BIP-32 트리의 모든 노드는 4,294,967,296개의 자식 노드를 만들 수 있으며, 그 범위의 위쪽 절반은 다르게 동작합니다. 2,147,483,648부터의 인덱스는 하드닝되었으며 어포스트로피나 문자 h로 표기하고, 어떤 공개 키도 이를 파생할 수 없습니다. 이 제약은 결함이 아니라 기능입니다.

작동 방식

하드닝된 파생과 일반 파생은 동일한 해시에 대한 입력 1개에서 차이가 납니다. 둘 다 부모의 체인 코드와 자식 인덱스를 HMAC-SHA512에 입력합니다. 일반 파생은 부모 공개 키를 추가하는데, 확장 공개 키를 가진 사람이라면 누구나 이미 갖고 있는 값입니다. 하드닝된 파생은 대신 부모 개인 키를 값이 0인 바이트 하나를 앞에 붙여 추가하므로, 비밀 없이는 그 계산을 수행할 수 없습니다.

그 이유는 BIP-32가 보안 노트에서 명시한 특정한 취약점입니다. 부모 확장 공개 키를 알고 그로부터 파생된 하드닝되지 않은 개인 키를 하나라도 아는 것은 부모 확장 개인 키를 아는 것과 같으며, 따라서 그 지점 아래의 모든 키를 아는 것과 같습니다. 그 뒤의 산술은 단순합니다. 일반 자식 개인 키는 부모 키에 공개 정보로 계산한 값을 더한 것과 같으므로, 그 값을 빼면 부모가 복원됩니다.

하드닝된 인덱스는 그 경로를 막습니다. 이들에 대해서는 공개 파생 함수가 없으므로, 확장 공개 키는 그 경계에서 완전히 멈춥니다. 한 계정의 xpub가 유출되면 그 계정의 이력만 드러나고, 그 위나 옆의 것은 드러나지 않습니다.

확인할 수 있는 곳

하드닝은 파생 경로의 어포스트로피로 나타나며, 그것이 어디에 붙는지는 의도적인 설계 결정입니다.

표준 네이티브 SegWit 경로는 m/84'/0'/0'/0/0입니다. 처음 세 단계인 목적, 코인 유형, 계정은 하드닝되어 있습니다. 마지막 두 단계인 체인과 주소 인덱스는 그렇지 않습니다. 이 구분이 바로 감시 전용 지갑을 쓸 수 있게 만드는 요소입니다. 계정 확장 공개 키는 그 아래의 모든 수신 주소와 잔돈 주소를 생성할 수 있지만, 같은 xpub를 얻은 공격자는 마스터 키 쪽으로 올라갈 수도, m/84'/0'/1'로 옆으로 갈 수도 없습니다.

표기법은 달라져도 내용은 바뀌지 않습니다. BIP-32는 0'라고 쓰고, 많은 도구는 0h를 받아들이며, Bitcoin Core는 JSON 안에서 어포스트로피를 이스케이프해야 하므로 내보내는 디스크립터에 h를 씁니다. Sparrow에서 Core로 복사한 경로는 h 형식으로 다시 쓰여 돌아오는데, 처음 보면 놀랍지만 순전히 표기상의 문제입니다.

실용적인 규칙은 짧습니다. 계정까지의 모든 단계를 하드닝하고, 그 아래 두 단계는 감시 전용 도구가 계속 작동하도록 하드닝하지 않은 채 두며, 하드닝되지 않은 자식 개인 키 1개를 내보내겠다고 하는 소프트웨어는 편의가 아니라 위험으로 취급해야 합니다. 그 내보내기와 xpub를 합치면 가지 전체가 되기 때문입니다.

하드닝된 파생 vs 패스프레이즈

하드닝된 파생은 자동이며, BIP-39 패스프레이즈는 사용자가 선택하는 비밀입니다. 둘은 지갑을 강화하는 방법으로 묶여 불리지만 서로 무관한 문제를 다룹니다. 하드닝은 유출된 확장 공개 키로부터 트리를 보호하며, 모든 표준 지갑은 사용자에게 묻지 않고 이미 이를 적용합니다. 패스프레이즈는 트리가 만들어지기 전에 시드에 섞이는 추가 입력으로, 같은 열두 단어나 스물네 단어에서 완전히 별개의 지갑을 만들어냅니다. 패스프레이즈를 잊으면 코인에 접근할 수 없습니다. 어디에도 그것이 기록되지 않기 때문입니다. 하드닝을 잊으면 아무 일도 일어나지 않습니다. 그것을 결정한 것이 사용자가 아니었기 때문입니다.

혼동하기 쉬운 용어

자주 묻는 질문

m/84'/0'/0'에서 어포스트로피는 무엇을 의미합니까?

하드닝 단계를 표시합니다. 인덱스가 2,147,483,648 이상이며, 자식 키는 부모 개인 키가 있어야만 파생할 수 있다는 뜻입니다. 일부 도구는 대신 h로 쓰며, Bitcoin Core는 디스크립터에 h를 사용하는데, JSON에서는 어포스트로피를 이스케이프해야 하기 때문입니다.

하드닝 파생을 직접 설정해야 합니까?

아닙니다. BIP-44, BIP-49, BIP-84 또는 BIP-86을 따르는 모든 지갑은 목적, 코인 종류, 계정 단계를 자동으로 하드닝하며, 감시 전용 지갑이 계속 작동하도록 그 아래 두 단계는 하드닝하지 않은 채로 둡니다.

다음에 읽을 글

관련 용어

주소와 키 분야의 다른 용어

이 페이지를 영어로 읽기