>

De herstelzin, fail-safe of niet?

door Aat de Kwaasteniet

Inleiding

De serieuze crypto currencies maken in hun portemonnee gebruik van een backup techniek die we de “herstelzin” noemen. Is deze backup techniek wel veilig en betrouwbaar? In dit artikel gaan we wat dieper in op deze techniek.

Geschiedenis

In de begintijden van crypto currencies, en bij sommige huidige crypto currencies nog steeds, kon een verloren digitale portemonnee door diefstal of door technische malheur alleen hersteld worden als u regelmatig backups gemaakt had van de portemonnee. De eerste generatie wallets maakten bij installatie een “pool” van 100 random “private keys / public keys” sets aan en deze werden bewaard in een bestand genaamd “wallet.dat”. 
Iedere keer als er een bedrag verzonden werd vanuit de wallet, of er een nieuw ontvangstadres werd gekozen, werd er een nieuwe set private key/public key gebruikt en als de Pool van 100 keys sets leeg begon te raken genereerde de wallet een nieuwe aanvullende pool van 100 keys sets. 
Het was dus zaak om regelmatig backup’s te maken van het bestand “wallet.dat”, een klusje dat vaak vergeten werd en daarom voor heel wat leed zorgde als iemand zijn wallet moest herstellen en er dan achter kwam dat de backup te oud was en de laatste transacties dus niet meegenomen waren.

Deterministische wallet

Later kwam de deterministische wallet in zwang en kon volstaan worden met éénmaal een backup te maken bij installatie want de deterministische wallet maakte een random “master seed” aan waaruit alle volgende private keys / public keys afgeleid konden worden. Dus het bewaren van de master seed was voldoende om de hele geschiedenis aan transacties in een wallet te kunnen herstellen.
Nog weer later werd de “master seed” techniek verbeterd door de “master seed” niet te laten bestaan uit een enorme lange sliert van getallen maar een voor mensen bruikbaarder, leesbare manier van een aantal woorden die de zogenaamde herstelzin vormde. Andere benamingen zijn Recovery phrase, recovery sentence, mnemonic sentence enz.

De herstelzin ontleed

Een herstelzin kan uit 12, 15, 18, 21 of 24 woorden bestaan. Alle woorden worden in kleine letters geschreven en worden gekozen uit een gestandaardiseerde lijst van 2048 woorden. Deze lijst is met zorg samengesteld en alle woorden voldoen aan de volgende voorwaarden:

  • de woordenlijst is zo opgesteld dat het voldoende is om de eerste vier letters te typen om het woord ondubbelzinnig te identificeren.
  • woordenparen als “build” en “built”, “woman” en “women”, of “quick” en “quickly” maken het niet alleen moeilijk om de zin te onthouden, maar zijn ook meer vatbaar voor fouten en moeilijker te raden.
  • De woordenlijst kan native karakters bevatten, maar ze moeten gecodeerd worden in UTF-8 met behulp van Normalization Formatibility Decomposition (NFKD).

Voor verschillende hoofdtalen zijn woordenlijst samengesteld, zo zijn er woordenlijsten voor:

In Nederland gebruiken we meestal de Engelse variant van de woordenlijst.

Voor de technisch geïnteresseerde:
Elk woord heeft een nummer gekregen van 0 tot 2047 en al die getallen achter elkaar geeft dan de digitale representatie van de “master seed” waaruit alle sets van private / public keys worden gegenereerd. Een getal tussen 0–2047 kan door 11 bits (2¹¹ = 2048) weergegeven worden. Als we dan uitgaan van een herstelzin van 12 woorden is de “master seed” dus 12 x 11 bits = 132 bits lang. Omdat het laatste woord een checksum bevat in de laatste 4 bits is de effectieve lengte van de “master seed” 128 bits. Volgens de afspraak moet lengte van de seed een veelvoud van 32 bits zijn en moet liggen tussen de 128 en 256 bits. De grootte van de checksum is de nuttige lengte van de master seed gedeeld door 32. Dat leidt tot de volgende tabel:
 

Werking

Een wallet van een crypto currency genereert bij installatie een random herstelzin en presenteert die aan de persoon die de wallet installeert. Deze persoon moet de herstelzin netjes opslaan en zorgvuldig bewaren. Met deze herstelzin als “master seed” kan de wallet private keys en bijbehorende public keys uitrekenen via een vastgestelde berekening methode. 
Omdat de herstelzin uniek bij een wallet hoort kan, bij een calamiteit, de complete wallet altijd hersteld worden door de herstelzin in te voeren zodat de wallet software de bijbehorende private keys en public keys weer kan uitrekenen. Dus als de oorspronkelijke computer defect gaat of gestolen wordt kan de wallet altijd op een andere computer hersteld worden met behulp van de herstelzin. Er kan niet met voldoende nadruk op gewezen worden dat de herstelzin dus zorgvuldig bewaard moet worden want zonder herstelzin kan de wallet nooit meer hersteld worden. 
De herstelzin moet uiteraard in de juiste volgorde ingevoerd worden en de woorden moeten in de lijst voorkomen en het laatste woord bevat een checksum zodat gecontroleerd kan worden bij de invoer of de herstelzin geldig is. Niet iedere willekeurige gekozen reeks woorden geeft dus een geldige herstelzin.

Veiligheid

Elke wallet heeft dus zijn eigen unieke herstelzin. Maar wat gebeurt er nu als een miljoen mensen een dergelijk wallet hebben of zelfs een miljard mensen? Zijn dan alle herstelzinnen ook nog uniek?
Veel mensen geloven dat het met maar twaalf woorden makkelijk is om de herstelzin te gaan “raden”. Je rommelt wat met de woorden en voor je het weet heb je een herstelzin van één van de miljard bestaande wallets te pakken en kan je de wallet leeg halen.

Maar is dat wel zo?

We kunnen uitrekenen dat een herstelzin bestaande uit twaalf woorden uit een lijst van 2048 woorden een kans heeft van 1 op de 2048¹² om te ontstaan.
Dat is niet helemaal waar want niet alle combinaties van woorden zijn toelaatbaar in verband met de aanwezigheid van de checksum. Het laatste woord is dus niet vrij te kiezen maar is afhankelijk van de voorgaande 11 woorden. Als we op bitnivo van de “master seed” kijken kunnen we zeggen dat we een kans hebben van 1 op de 2¹²⁸ om een herstelzin samen te stellen die gelijk is aan uw unieke herstelzin. 2¹²⁸ lijkt niet veel maar als we het getal uitschrijven krijgen we een indruk van het de grootte van het getal
2¹²⁸ = 340.282.366.920.938.000.000.000.000.000.000.000.000

Maar als er nu een miljard wallets zijn wordt de kans een miljard maal groter. Ook dan is de kans nog miniem. Namelijk 9 nullen minder.
1 op 340.282.366.920.938.000.000.000.000.000

Als we bedenken dat we iedere poging moeten gaan testen en we moeten voor iedere poging de gehele blockchain af lopen om te kijken of een bepaalde wallet, behorend bij die herstelzin, ook iets bevat. Dat kost tijd. 
Laten we zeggen dat we een supersnelle computer hebben die binnen 1 seconde de gehele blockchain scant en bekijkt of we raak schieten dan kunnen we uitrekenen dat we 10.790.283.070.806.000.000.000 jaar bezig zijn om één van de miljard wallets te treffen die in gebruik zijn.

Maar als we nu kwantumcomputers krijgen wat dan? Misschien zijn die computers wel een factor miljard sneller? 
Wel, dan duurt het maar 10.790.283.070.806 jaar voordat een wallet gevonden wordt die in gebruik is.

Ik hoop dat u door de rekenvoorbeelden overtuigd bent van de praktische onmogelijkheid dat een wallet gekraakt kan worden door “brute force” of het “raden” van de herstelzin.

Andere verhalen van mij zijn:

Miners, Blocktijd en Orphans, een drie-eenheid.
De onzin van Marketcap
De hype van transacties per seconde
Welke crypto wordt het nieuwe betaalmiddel
Crypto gerangschikt naar aantallen gebruikers
Fact check Gulden website
Security Token Offering, de nieuwe ICO?
The white hat ethical investor
Energieverbruik van Gulden en Bitcoin.
Kan de Bitcoin koers naar $100.000 stijgen?


Lees ook