본문으로 건너뛰기
buybitcoinsmart

용어집 / 주소와 키

하드닝 파생 vs 비하드닝 파생

하드닝 파생 vs 비하드닝 파생이란 무엇입니까?
하드닝 파생과 비하드닝 파생은 BIP-32의 자식 인덱스를 절반으로 나눕니다. 비하드닝 자식은 확장 공개 키로 계산할 수 있지만 하드닝 자식은 계산할 수 없습니다.

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

하드닝은 설정을 켜고 끄는 스위치가 아니라 파생 경로에 놓인 경계입니다. BIP-32는 2012년 2월 11일에 비하드닝 파생만으로 지정되었습니다. 0x80000000 이상의 인덱스에 대한 비공개 파생은 2013년 4월 16일에 추가되었고, 그 키들은 2014년 1월 15일에 하드닝 키로 이름이 바뀌었습니다. 이 경계가 어디에 놓이느냐에 따라 공유된 확장 공개 키가 지갑의 어느 부분까지 넘겨주는지가 결정됩니다.

작동 방식

비하드닝 파생에는 하드닝 파생이 일부러 갖지 않은 한 가지 성질이 있으며, BIP-32는 그 차이를 하나의 대수적 항등식으로 기록합니다. N()을 뉴터링, 즉 확장 키에서 비공개 부분을 버리고 32바이트 체인 코드를 유지하는 단계라고 하겠습니다. 비하드닝 단계에 걸쳐서는 N(m/a/b/c)가 N(m)/a/b/c와 같으므로, 파생 전에 뉴터링하든 파생 후에 뉴터링하든 같은 키에 도달합니다. 하드닝 단계에서는 이 재작성이 깨집니다. N(m/a')는 N(m)/a'로 바꿀 수 없는데, 공개 파생은 비하드닝 자식에 대해서만 정의되며 그 밖의 경우에는 실패를 반환하기 때문입니다.

기계적으로 두 모드는 한 필드에서 다릅니다. 둘 다 부모의 체인 코드를 열쇠로 HMAC-SHA512를 적용하고 4바이트 인덱스를 덧붙입니다. 비하드닝 모드는 부모의 압축 공개 키를 제공하고, 하드닝 모드는 부모의 비밀 앞에 영으로 채운 바이트 하나를 붙여 같은 33바이트 폭으로 맞춘 값을 제공합니다. xpub만 가진 쪽은 그 두 번째 입력을 갖지 못하므로 파생은 경계에서 멈춥니다.

BIP-32는 비하드닝 키가 보호하지 못하는 것이 무엇인지에 대해 이례적으로 단호합니다. 보안 절은 두 가지 성질을 존재하는 것이 아니라 없는 것으로 열거합니다. 부모 확장 공개 키와 자식 공개 키가 주어지면 인덱스를 찾는 것이 어렵지 않고, 그 같은 부모 확장 공개 키와 비하드닝 자식 개인 키 하나가 주어지면 부모 확장 개인 키를 복원하는 것도 어렵지 않습니다. 첫 번째는 프라이버시를 잃게 합니다. 두 번째는 그 분기를 잃게 합니다.

나타나는 곳

확장 공개 키를 내보낼 가치가 있게 만드는 것이 비하드닝 단계이며, BIP-32는 그 위에 세워진 공유 방식에 한 절을 할애합니다. 계정 확장 공개 키를 받은 감사자는 모든 계정으로 들어오고 나가는 모든 결제를 보지만 비밀 키는 하나도 보지 못합니다. 자주 거래하는 두 회사는 한 계정의 외부 체인을 상시 입금 주소로 공유할 수 있어, 각 전송마다 새 주소를 요청할 필요가 없습니다. 웹숍은 같은 종류의 키를 웹 서버에 넘길 수 있고, 그 서버는 자신이 지출할 권한이 없는 수신 주소를 생성합니다.

경계를 계정 수준에 두는 배치는 권고이며 규칙이 아닙니다. BIP-32는 마스터, 계정, 체인, 하위 체인 구조를 참고용일 뿐이라고 부르며, 구현이 특정 필요에 따라 벗어나도 된다고 밝힙니다. 그래서 규격을 따르는 지갑 하나가 옆의 규격 준수 지갑보다 더 많은 단계를 하드닝할 수 있습니다.

상호운용성 함정 하나는 알아둘 만한데, 명세가 그 때문에 두 번 패치되었기 때문입니다. 선행 영이 있는 하드닝 파생을 다루는 테스트 벡터는 2017년 2월 24일에 추가되었고 2020년 11월 4일에 다시 추가되었습니다. 하드닝 입력은 33바이트로 고정되며, 영으로 채운 바이트 하나와 32바이트 비밀이 이어집니다. 그래서 그 폭을 유지하지 않고 선행 영을 잘라내는 소프트웨어는 다른 데이터를 해시하고 다른 분기를 파생하며, 누군가 그 시드를 다른 프로그램에서 복원할 때 빈 지갑을 만나게 합니다. 비하드닝 파생은 이 버그를 만나지 않는데, 압축 공개 키는 항상 0x02 또는 0x03으로 시작하므로 잃을 선행 영이 없기 때문입니다.

자주 묻는 질문

제가 공유한 확장 공개 키로 누군가 제 하드닝 계정을 파생할 수 있습니까?

아닙니다. 공개 파생은 비하드닝 자식에 대해서만 정의되며 0x80000000 이상의 인덱스에는 실패를 반환하므로, 확장 공개 키는 하드닝 단계를 넘을 수 없습니다. 그것을 가진 사람은 내보낸 단계 아래의 분기를 볼 뿐이며, 그 위나 옆은 보지 못합니다.

하드닝 파생이 더 안전하다면 BIP-32는 왜 비하드닝 파생을 남겨 두는 것입니까?

비하드닝 파생은 확장 공개 키가 수행할 수 있는 유일한 파생이기 때문입니다. 감시 전용 지갑, 모든 계정에 대한 감사자 접근, 비밀을 보관하지 않는 웹 서버에서 생성되는 수신 주소가 모두 그것에 의존합니다. 모든 단계를 하드닝하면 확장 공개 키는 쓸모없어집니다.

BIP-32는 왜 선행 영이 있는 하드닝 파생에 대한 테스트 벡터를 추가했습니까?

하드닝 입력은 33바이트로 고정되며, 영으로 채운 바이트 하나와 32바이트 비밀이 이어지기 때문입니다. 그래서 그 폭을 유지하지 않고 선행 영을 잘라내는 구현은 다른 데이터를 해시하고 다른 분기를 파생합니다. 그 벡터들은 2017년 2월 24일에 추가되었고 2020년 11월 4일에 다시 추가되었으며, 이를 통과하지 못하는 구현은 시드를 잘못된 주소로 복원하게 됩니다.

다음에 읽을 글

관련 용어

주소와 키 분야의 다른 용어

이 페이지를 영어로 읽기