Elke keer dat je een nieuwe bitcoin wallet aanmaakt word je gevraagd (en sterk aangeraden) om de recovery seed veilig op te bergen, maar wat is die seed precies en wat moet je ermee? In dit artikel gaan we in op de functie van de recovery seed en de best practices voor het opbergen daarvan.
Hoe werkt het?
Zoals onlangs wederom te lezen was in onze review van de Trezor Model T krijg je bij het aanmaken of initialiseren van een nieuwe wallet een lijstje met woorden die je veilig moet bewaren. Maar waarvoor dienen deze woorden precies en welke functie hebben ze?
De recovery seed geeft toegang tot al je bitcoins
De recovery seed dient als de basis voor alle privé-sleutels die je in je wallet gebruikt om bitcoins te versturen. Elke privé-sleutel is gekoppeld aan de bijbehorende publieke sleutel, ook wel bitcoinadres genoemd, welke je kunt gebruiken om bitcoins te ontvangen. Elk bitcoinadres dat je gebruikt is uniek, evenals de bijbehorende privé-sleutel. Dit is goed, want we willen niet voor elke transactie hetzelfde adres gebruiken vanwege de nadelige gevolgen voor onze privacy. Toch zou het onhandig zijn als voor elk bitcoinadres een aparte back-up nodig is om deze veilig te houden. De oplossing hiervoor is om een recovery seed te gebruiken op basis waarvan een oneindig aantal privé-sleutels (en bijbehorende bitcoinadressen) gegenereerd kan worden. We kijken op een hoog niveau naar hoe dit werkt, en hoe privé-sleutels afhankelijk zijn van de recovery seed.
Bij het aanmaken van een nieuwe wallet wordt een groot willekeurig getal gegenereerd op basis waarvan de verschillende privé-sleutels aangemaakt kunnen worden. Het is van belang dat dit getal echt willekeurig is, anders is deze mogelijk makkelijk te kraken. De eerste zin van je favoriete liedje gebruiken is dus niet bepaald een veilige basis voor je privé-sleutels. Het gegenereerde getal wordt omgezet in een reeks woorden. Dit kunnen er 12, 24 of meer zijn. Over het algemeen wordt 24 aangeraden, maar is 12 ook veilig. De woorden dienen als menselijk-leesbare representatie van het grote willekeurige getal waar de software mee rekent. Door de seed weer te geven als woorden wordt het een stuk makkelijker om deze op een veilige manier op te slaan en worden fouten bij het overnemen van de seed voorkomen. De lijst met woorden die hiervoor gebruikt wordt bestaat uit 2048 woorden, waarvan de Engelse variant hier te vinden is. Een seed ziet er bijvoorbeeld zo uit:
runway have rocket foot rally short egg exhibit evidence choice false acquire
Van seed naar privé-sleutel en bitcoinadres
De uitleg die nu volgt is een versimpelde en incorrecte versie van het proces om van seed naar privé-sleutel te komen, maar vergelijkbaar met hoe het echt werkt. Voor de volledige specificatie kun je bijbehorende BIPs lezen (1, 2).
Nu we de seed hebben, zullen we een aantal operaties uit moeten voeren om privé-sleutels en bitcoinadressen te genereren. In de werkelijkheid wordt van de recovery seed een master seed afgeleid, maar deze stap slaan wij voor het gemak en begrip even over. Herinner je je de hashfunctie: een hashfunctie is een algoritme dat, gegeven een bepaalde input, een unieke output genereert. Vanuit de gegenereerde output kan niet terug berekend worden wat de input was, maar het is wel mogelijk om, gegeven de input, te controleren dat de eerder getoonde output klopt door het algoritme nogmaals uit te voeren met de input. Een voorbeeld van zo’n hashfunctie is SHA-256. Wanneer we de seed hierboven eenmaal hashen met SHA-256 komt daar de volgende reeks uit:
D40B48CC06C7895FF44EE5D826E0D07C75DC637E405372CE49322D0E508A629B
Voor het gemak zeggen we dat deze reeks dient als onze privé-sleutel. Onze privé-sleutel is niet zomaar terug te draaien naar onze seed. Uiteraard moeten we onze privé-sleutel wel nog omzetten in een publieke sleutel willen we daadwerkelijk bitcoins kunnen ontvangen. Bitcoin gebruikt hiervoor een aantal stappen, wij doen er voor het gemak even één. Bitcoin gebruikt (vooralsnog) Base58Check als weergave voor bitcoinadressen. Wanneer we deze operatie loslaten op de bovenstaande SHA-256 hash van onze seed komt daar de volgende reeks uit:
FGjQtYShC3PB4zdBBq4vvYCvR6y3wE26HRhACyaWMcxi
Deze reeks lijkt op de bitcoinadressen die we gewend zijn. We hebben nu vanuit onze seed een privé-sleutel en bitcoinadres gegenereerd, maar dit is slechts één set. We willen natuurlijk meerdere (oneindig veel) bitcoinadressen kunnen gebruiken vanuit dezelfde seed. Dit kunnen we bereiken door bijvoorbeeld een nummer toe te voegen aan de originele seed, bijvoorbeeld +1, +2, +3, etc.
runway have rocket foot rally short egg exhibit evidence choice false acquire +1
runway have rocket foot rally short egg exhibit evidence choice false acquire +2
runway have rocket foot rally short egg exhibit evidence choice false acquire +3
Door hier SHA-256 op uit te voeren vertaalt dit zich vervolgens naar de volgende neppe privé-sleutels:
833F53DB674E164D825F22D094B794AF1499CA02033E0AF15D9D6485A5A59437
89DEE319AD81BC7FCAE6751890605C634E5621ACDA73B1A4A79B06F91F773CE6
58A800E42E7492C663773D613E8AA44882C11F257F6F8342C3D155239AEEA588
En bijbehorende neppe bitcoinadressen:
9qLR7AwXiqAFDynkSFhUoyCG6mghewYx6SqWPmnagGHt
AHByfumb3NBY74cc6BCcwDRRaCj8dmKgc1S4gG7VyPZF
6y5TiEhXY1vKPQeDnreprj1vJbyoRMp7sJS1WsPrkvRV
Op deze manier kunnen we oneindig veel verschillende privé-sleutels en bitcoinadressen genereren op basis van dezelfde seed. Mochten we de toegang tot onze wallet kwijtraken, dan kunnen we de seed gebruiken om opnieuw alle privé-sleutels te generen en zo wederom toegang te krijgen tot onze bitcoins. Toegang tot je wallet verliezen is dus niet zo erg, maar wanneer je de recovery seed ook kwijt bent is het echt niet meer mogelijk om toegang te krijgen tot je bitcoins. Bewaar deze dus goed.
Wat moet je ermee?
Bij de meeste hardware wallets krijg je kaartjes meegeleverd waar je de 12- of 24-woordige recovery seed op kunt schrijven om deze vervolgens op een veilige plek te bewaren. Het is noodzakelijk om de recovery seed altijd offline te bewaren. Alle informatie die online bewaard wordt kan gehackt worden, waardoor je je bitcoins kunt kwijtraken. Wanneer je een wallet op je computer aanmaakt of een mobiele wallet gebruikt zul je gevraagd worden de recovery seed zelf op een papiertje op te schrijven.
Sla je recovery seed niet op in Dropbox. Hiermee is de seed kwetsbaar wanneer een kwaadwillende toegang krijgt tot je dropbox account.
Vul je recovery seed nooit in op een computer die mogelijk besmet is of verbonden is met het internet, dit is een veiligheidsrisico.
Sla je recovery seed niet op in een e-mail. Net als bij Dropbox is je seed kwetsbaar voor eventuele hackers en meelezers.
Maak geen online back-up, deze zijn niet veilig.
Maak alleen een digitale back-up als je dit doet op een aparte offline computer die nooit verbonden wordt met het internet.
Sla de seed niet op een een versleutelde folder op je computer, ook deze kan gekraakt worden.
Bewaar de kaart waar je je recovery seed hebt opgeschreven op een veilige plek en weg van water en vuur, bij voorkeur een vuurvaste kluis.
Schrijf de recovery seed niet op papier, maar gebruik een waterdichte en vuurvaste variant zoals Cryptosteel.
Bewaar je recovery seed niet op één plek, maar op twee of meer verschillende veilige locaties. Op deze manier weet je zeker dat je nog bij je bitcoins kan, mocht de seed op een van de locaties verloren gaan.
Splits je 24-woordige seed op in drie delen: woorden 1-8, 9-16 en 17-24. Sla vervolgens de volgende delen op verschillende locaties op: 1-8 en 9-16 op locatie 1, 9-16 en 17-24 op locatie 2 en 1-8 en 17-24 op locatie 3. Zo kun je met de informatie op twee van de drie locaties bij je seed en is de seed tevens veilig mocht een van de locaties onveilig raken of verloren gaan.
Bedenk dat een papieren back-up niet veilig is tegen waterschade en brand. Daarom zijn er alternatieven, zoals de metalen Cryptosteel, waar je je seed fysiek in op kunt slaan.
Lees het originele artikel op Bitcoin.nl