Xpub: wat de publieke sleutel van je Bitcoin-wallet onthult
Met een xpub vind je alle adressen van een Bitcoin-account terug, en dus de hele geschiedenis, zonder te kunnen uitgeven. Wat hij onthult, het risico en aan wie je hem geeft.
Een xpub (uitgebreide publieke sleutel) is de publieke sleutel van een account in een Bitcoin-wallet, waaruit al zijn adressen worden afgeleid: wie hem heeft, ziet elke betaling die dit account ontvangt en verstuurt, maar kan niets uitgeven.
Wat een xpub bevat
De standaard BIP32 beschrijft hiërarchisch deterministische wallets: één seed levert een hele boom van sleutels op. Een uitgebreide sleutel voegt aan de sleutel een kettingcode (chain code) toe, waarmee zijn kindsleutels worden berekend. Volgens BIP32 kun je met een uitgebreide publieke sleutel al zijn niet-geharde (non-hardened) publieke kindsleutels reconstrueren.
Wallets ordenen deze sleutels volgens het pad van BIP44: m / purpose' / coin_type' / account' / change / address_index. De xpub die een wallet toont, is die van het niveau account'. Hij dekt twee ketens van adressen: 0 voor de ontvangstadressen, 1 voor de wisselgeldadressen, die het wisselgeld van je eigen verzendingen ontvangen.
xpub, ypub of zpub
Het voorvoegsel zegt welk type adres het account gebruikt:
| Voorvoegsel | Standaard | Pad van het eerste account | Adressen |
|---|---|---|---|
xpub | BIP44 | m/44'/0'/0' | Oude adressen, beginnend met 1 |
ypub | BIP49 | m/49'/0'/0' | Geneste SegWit, beginnend met 3 |
zpub | BIP84 | m/84'/0'/0' | Native SegWit, beginnend met bc1q |
Alle drie zijn hetzelfde soort sleutel: alleen de versiebytes verschillen, en daarmee de eerste letters.
Wat een xpub onthult
- Alle adressen van het account, vroegere en toekomstige: ze worden een voor een afgeleid, zonder grens.
- De hele geschiedenis: elke ontvangst, elke verzending, elk bedrag, want de blockchain is openbaar.
- Het saldo van het account, op elk moment.
- Niets om mee uit te geven: zonder privésleutel kan geen enkele transactie worden ondertekend.
BIP32 noemt dit gebruik zelf: wie de uitgebreide publieke sleutel van een account aan een auditor geeft, laat hem alle inkomende en uitgaande betalingen zien, zonder toegang tot enige geheime sleutel. Wie je xpub heeft, heeft het zicht van die auditor, voor altijd: een xpub kun je niet intrekken.
Het risico dat je moet kennen
Met een xpub alleen kun je niets uitgeven. Maar BIP32 waarschuwt: wie een uitgebreide publieke sleutel kent en daarbij een willekeurige niet-geharde privésleutel die ervan afstamt, kent daarmee ook de bovenliggende uitgebreide privésleutel. Met andere woorden: je xpub en de privésleutel van één enkel adres volstaan om het hele account uit te geven.
Het niveau account' is gehard: zo'n lek blijft beperkt tot het betrokken account en bereikt de andere accounts van dezelfde seed niet. Exporteer dus een xpub, nooit de privésleutel van een adres, en geef nooit je herstelzin.
Hoe software de adressen terugvindt
Software die een xpub leest, leidt de adressen op volgorde af en stopt na een reeks adressen die nooit zijn gebruikt: BIP44 legt deze grens (gap limit) op 20. Heb je meer dan 20 adressen op rij aangemaakt zonder ze te gebruiken, dan ziet software die deze regel volgt de adressen daarna niet.
Om de saldi te lezen, bevraagt de software vervolgens een server of een node, adres per adres. Die server leert zo al je adressen kennen en kan ze met elkaar in verband brengen: dat is het andere lek, dat niet van de xpub zelf komt maar van de manier waarop hij wordt gelezen.
Voordat je je xpub geeft
- Vraag je af wie hem bewaart: een app die je xpub op zijn servers bewaart, kent je account zo lang als hij hem heeft, en een lek van zijn gegevens legt het bloot.
- Kies voor lokaal uitlezen: een wallet die aan je eigen node is gekoppeld, of een tool die de adressen op je apparaat afleidt, vertrouwt de xpub aan niemand toe.
- Eén account per doel: een ander account (het volgende
account') heeft een andere xpub, die niets over de andere accounts onthult.
Hoe CentraFIN je xpub leest
CentraFIN leest je xpub op je apparaat: je browser leidt de adressen af, leest hun saldi via een end-to-end versleutelde verbinding en bewaart alles in een kluis die hij zelf versleutelt. De server van CentraFIN ziet nooit je xpub, een adres of een saldo. Elk adres wordt altijd bij dezelfde, willekeurig gekozen node uitgelezen, zodat geen enkele node het hele account ziet. De details staan op de pagina Bitcoin.
Bronnen
- BIP32: hiërarchisch deterministische wallets
- BIP44: afleidingspad en gap limit
- BIP49: ypub, geneste SegWit
- BIP84: zpub, native SegWit
Veelgestelde vragen
Kan iemand bitcoins stelen met een xpub?
Niet met de xpub alleen: daarmee kun je niet ondertekenen. Met daarbij de privésleutel van een van de adressen van het account wel: het hele account.
Is een xpub genoeg om mijn saldo te zien?
Ja. Hij geeft alle adressen van het account, en de blockchain geeft hun saldi en transacties.
Wat moet ik doen als mijn xpub is uitgelekt?
Hij kan niet worden ingetrokken: wie hem heeft, blijft dit account altijd zien. Gebruik voortaan een nieuw account waarvan de xpub nooit is gedeeld. De overboeking vanaf het oude account blijft wel zichtbaar.
Wat is het verschil tussen xpub, ypub en zpub?
Het adrestype van het account: adressen die met 1 beginnen voor xpub, met 3 voor ypub (geneste SegWit), met bc1q voor zpub (native SegWit).
Neem de controle over je vermogen
Je account is in een minuut klaar, zonder wachtwoord.