door Aat de Kwaasteniet
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.
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.
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.
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:
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: