För att kunna skapa en egen bitcoinadress att ta emot bitcoin till behövs först och främst det som kallas för en privat nyckel, vilket är den hemliga motsvarigheten till bitcoinadressen, det som krävs för att kunna skicka bitcoin från adressen. Med andra ord, om bitcoinadressen är som adressen på en postlåda, dit vem som helst kan skicka brev, så är den privata nyckeln den nyckel som krävs för att låsa upp postlådan.
Satoshi insåg redan från början att det av integritetsskäl fanns en poäng i att inte återanvända bitcoinadresser utan att istället generera en ny varje gång man skulle ta emot bitcoin. När man tryckte generate new address i bitcoinklienten så slumpades en ny privat nyckel fram och man fick alltså en ständigt växande lista av privata nycklar. För att inte förlora sina bitcoin om ens dator skulle krascha etc. var det viktigt att man gjorde en backup på dessa men problemet var ju att det fylldes på med nya nycklar hela tiden så man var tvungen att göra en ny backup varje gång man skapade en ny adress. En liten förbättring introduceras av Satoshi redan 2010 i form av en key pool där 100 adresser förgenererades (men inte visades upp för användaren) så att en backup du gjorde idag skulle säkra dig ett bra tag framåt i tiden. Dock fanns ju fortfarande problemet att när dessa 100 adresser hade används och 100 nya skapades så var det väldigt viktigt att ha koll på detta så att man kunde göra en ny backup.
Deterministiska plånböcker
Några smarta hjärnor insåg snart att det faktiskt fanns en enkel lösning på detta som gjorde att man kunde generera oändligt många privata nycklar med utångspunkt från en enda hemlighet. I sin enklaste form använder man helt enkelt en hashfunktion för att omvandla sin hemlighet till nya nycklar. Om din hemlighet är myverylongsecret så kan du t.ex. göra såhär:
- hash(myverylongsecret1) -> privat nyckel #1
- hash(myverylongsecret2) -> privat nyckel #2
- o.s.v., så länge du vill
Det finns inget sätt att från resultatet av en hashfunktion få fram det som stoppades in så även om t.ex. privat nyckel #2 skulle läcka ut nån gång i framtiden så avslöjar detta ingenting om myverylongsecret och därmed alltså inte heller något om alla de andra privata nycklarna. I all praktisk mening är de oberoende av varandra. På detta sätt kan du alltså som din backup endast spara undan myverylongsecret och ändå ha möjlighet att återskapa alla dina privata nycklar.
Det här konceptet utvidgades sedan till så kallade hierarchical deterministic wallets som använder liknande principer men med mer avancerade funktioner. Förutom att, som namnet antyder, kunna skapa en hierarki av plånböcker blev det bl.a. också möjligt att ha en master public key utifrån vilken man kan generera nya adresser utan att ha tillgång till den hemliga delen. På det viset kan man alltså ha en wallet som själv kan generera nya adresser för att ta emot betalningar men som aldrig har tillgång till de privata nycklarna. Allt detta beskrivs i BIP 32 som blivit en standard för deterministiska plånböcker för bitcoin.
Från hemlig data till 24 ord
Ett s.k. seed (eller "frö" på svenska), alltså den hemlighet som alla nycklar genereras utifrån, är helt enkelt en mängd slumpmässig data. En dator skulle se det som en rad nollor/ettor medan vi människor brukar gilla att använda 10 siffror för att uttrycka samma sak. Talet "18" ser t.ex. för en dator ut som "10010" (och för nån som gillar romerska siffror "XVIII") men det motsvarar precis samma sak.
Alla de här sätten är dock rätt besvärliga om man ska skriva ned en stor mängd data för hand och spara undan nånstans (vilket är rekommenderat för att undvika att bli hackad) och därför togs ett sätt fram för att omvandla datan till vanliga ord. Väldigt kortfattat går det till såhär.:
- Ta de 256 nollor och ettor som den slumpmässiga datan består och dela upp i grupper om 11.
- Kolla i den fördefinierade ordlistan och gör om varje grupp till ett ord. Exempel: 00101000111 -> (för oss människor: "327") -> "churn"
Nu kanske du noterade att 256 inte är jämnt delbart med 11 så efter att vi fått ut 23 ord har vi bara 3 stycken nollor/ettor kvar och behöver alltså 8 till. Dessa 8 är en s.k. kontrollsumma, ungefär som den sista siffran i våra personnummer, och finns där för att skydda oss mot fel. På samma sätt som du tack vare kontrollsumman kan få felmeddelandet "Detta är inte ett giltigt personnummer" när du knappar in det någonstans ska du alltså kunna få meddelandet "Detta är inte ett giltigt seed". Exakt hur man tar fram denna kontrollsumma kan du läsa om i BIP 39.
Sammanfattning
De 24 orden är alltså en hemlighet, speciellt framtagen för att vara lätthanterlig för människor, utifrån vilken du kan skapa alla de privata nycklar (samt tillhörande bitcoinadresser) som din plånbok använder. Förvara dem så säkert du kan, och varför inte också se till att memorera dem, som en extra säkerhet?
Kommentarer