xpub: 내 비트코인 지갑 공개키가 드러내는 정보
xpub이 있으면 비트코인 계정의 모든 주소와 그 전체 내역을 찾을 수 있지만, 돈을 쓸 수는 없어요. xpub이 드러내는 정보, 위험, 누구에게 줘도 되는지 알려 드려요.
xpub(확장 공개키)은 비트코인 지갑 계정의 공개키로, 계정의 모든 주소가 이 키에서 파생돼요. xpub을 가진 사람은 이 계정이 받고 보낸 모든 결제를 볼 수 있지만, 아무것도 쓸 수 없어요.
xpub에 담긴 것
BIP32 표준은 계층적 결정론적 지갑을 설명해요. 시드 하나가 키 트리 전체를 만들어요. 확장 키는 키에 체인 코드(chain code)를 더한 것으로, 체인 코드는 자식 키를 계산하는 데 쓰여요. BIP32 표준에 따르면, 확장 공개키를 알면 강화되지 않은(non-hardened) 자식 공개키를 모두 재구성할 수 있어요.
지갑은 이 키들을 BIP44 경로에 따라 정리해요: m / purpose' / coin_type' / account' / change / address_index. 지갑에 표시되는 xpub은 account' 단계의 키예요. xpub은 두 개의 주소 체인을 포함해요: 0은 받기 주소, 1은 잔돈 주소이고, 잔돈 주소는 내가 보낸 거래에서 돌려받는 잔돈을 받아요.
xpub, ypub, zpub
접두어를 보면 그 계정이 쓰는 주소 유형을 알 수 있어요:
| 접두어 | 표준 | 첫 번째 계정의 경로 | 주소 |
|---|---|---|---|
xpub | BIP44 | m/44'/0'/0' | 레거시 주소, ‘1’로 시작 |
ypub | BIP49 | m/49'/0'/0' | 중첩 SegWit, ‘3’으로 시작 |
zpub | BIP84 | m/84'/0'/0' | 네이티브 SegWit, ‘bc1q’로 시작 |
세 가지 모두 같은 종류의 키예요. 버전 바이트만 다르고, 그래서 앞 글자가 달라져요.
xpub이 드러내는 것
- 계정의 모든 주소: 과거의 주소도, 앞으로 쓸 주소도요. 하나씩 끝없이 파생할 수 있어요.
- 전체 내역: 블록체인은 공개되어 있으니, 받은 거래, 보낸 거래, 금액 하나하나가 모두 드러나요.
- 계정 잔고: 언제든지요.
- 돈을 쓸 수는 없음: 개인키가 없으면 어떤 거래에도 서명할 수 없어요.
BIP32 표준이 직접 이 용도를 예로 들어요: 계정의 확장 공개키를 감사인에게 건네면, 어떤 비밀 키에도 접근하지 못하게 하면서 들어오고 나가는 모든 결제를 보여 줄 수 있어요. 내 xpub을 가진 사람은 이 감사인과 같은 것을 영원히 볼 수 있어요. xpub은 취소할 수 없거든요.
알아 둘 위험
xpub만으로는 돈을 쓸 수 없어요. 하지만 BIP32 표준은 경고해요: 확장 공개키와, 거기서 파생된 강화되지 않은 개인키 중 아무거나 하나를 알면, 부모 확장 개인키를 아는 것과 같아요. 다시 말해, 내 xpub과 내 주소 중 단 하나의 개인키만 있으면 계정 전체의 돈을 쓸 수 있어요.
account' 단계는 강화되어 있어요. 그래서 이런 유출은 해당 계정에만 머무르고, 같은 시드의 다른 계정에는 미치지 않아요. 그러니 내보낼 때는 xpub을 내보내고, 주소의 개인키는 절대 내보내지 말고, 복구 구문은 절대 알려 주지 마세요.
소프트웨어가 주소를 찾는 방법
xpub을 읽는 소프트웨어는 주소를 순서대로 파생하다가, 한 번도 쓰이지 않은 주소가 연달아 나오면 멈춰요. BIP44 표준은 이 한도(gap limit)를 20으로 정해요. 쓰지 않은 주소를 연달아 20개 넘게 만들었다면, 이 규칙을 따르는 소프트웨어는 그다음 주소들을 보지 못해요.
잔고를 읽으려면 소프트웨어는 이어서 서버나 노드에 주소를 하나하나 조회해요. 그러면 그 서버는 내 모든 주소를 알게 되고, 이 주소들을 서로 연결할 수 있어요. 이것이 또 다른 유출로, xpub 자체가 아니라 xpub을 읽는 방식에서 생겨요.
xpub을 건네기 전에
- 누가 보관하는지 따져 보세요: 내 xpub을 자사 서버에 보관하는 앱은 보관하는 동안 내 계정을 알고, 그 데이터가 유출되면 계정도 드러나요.
- 로컬에서 읽는 방식을 고르세요: 내 노드에 연결한 지갑이나, 내 기기에서 주소를 파생하는 도구는 xpub을 누구에게도 맡기지 않아요.
- 용도마다 계정 하나씩: 다른 계정(다음
account')은 다른 xpub을 가지며, 이 xpub은 다른 계정에 대해 아무것도 드러내지 않아요.
CentraFIN이 내 xpub을 읽는 방법
CentraFIN은 내 xpub을 내 기기에서 읽어요. 브라우저가 주소를 파생하고, 종단 간 암호화 연결로 잔고를 읽고, 이 모든 것을 브라우저가 직접 암호화하는 금고에 보관해요. CentraFIN 서버는 xpub도, 주소도, 잔고도 절대 보지 못해요. 각 주소는 무작위로 정해진 같은 노드에서 항상 읽어서, 어떤 노드도 계정 전체를 보지 못해요. 자세한 내용은 비트코인 페이지에 있어요.
출처
자주 묻는 질문
xpub으로 비트코인을 훔칠 수 있나요?
xpub만으로는 안 돼요. 서명할 수 없거든요. 여기에 계정 주소 중 하나의 개인키까지 있으면 가능해요. 계정 전체를요.
xpub만 있으면 내 잔고를 볼 수 있나요?
네. xpub이 계정의 모든 주소를 알려 주고, 블록체인이 그 주소들의 잔고와 거래를 알려 줘요.
내 xpub이 유출됐다면 어떻게 해야 하나요?
xpub은 취소할 수 없어요. 그것을 가진 사람은 이 계정을 계속 볼 수 있어요. 앞으로는 xpub을 한 번도 공유하지 않은 새 계정을 쓰세요. 다만 예전 계정에서 옮기는 이체 자체는 계속 보여요.
xpub, ypub, zpub은 무엇이 다른가요?
계정의 주소 유형이에요: xpub은 ‘1’로 시작하는 주소, ypub은 ‘3’으로 시작하는 주소(중첩 SegWit), zpub은 ‘bc1q’로 시작하는 주소(네이티브 SegWit)예요.
내 자산을 직접 관리하세요
비밀번호 없이, 1분이면 계정이 준비돼요.