Skip to content

Instantly share code, notes, and snippets.

@jimhansson
Last active July 5, 2019 18:01
Show Gist options
  • Save jimhansson/39f04962c33e09956c00e98a77648027 to your computer and use it in GitHub Desktop.
Save jimhansson/39f04962c33e09956c00e98a77648027 to your computer and use it in GitHub Desktop.

Detta är en liten guide i hur man skapar nycklarna för en watch-only wallet

För denna guide så behöver man tillgång till linux, det går nog att genomföra på andra OS men då måste man anpassa en hel del. för att göra detta så behöver man en del verktyg, flesta är gjorda för linux och jag har medvetet valt att inte använda tjänster som är online eftersom vi kommer arbeta med den privata nyckeln och det skulle inte kännas bra att skriva en guide som lär folk att vara oförsiktig med sin privata nyckel. så först en liten varning

I DENNA GUIDE KOMMER DU ATT ARBETA MED DIN PRIVATA NYCKEL SOM OM NÅGON FÅR TAG PÅ SÅ KAN DE TA ALL DIN KRYPTOVALUTA, SÅ DETTA BÖR I BÄSTA FALL GENOMFÖRAS PÅ EN MASKIN SOM INTE ÄR ANSLUTEN TILL INTERNET OCH SOM DU BRÄNNER UPP EFTERÅT!!!

Hoppas det ovan för tillräckligt tydligt och ta och läs det en gång till bara för att verifera att du har läst rätt.

du behöver ett av dessa verktyg

förutom något av dessa verktyg så behöver du också känna till de kodord som används som backup för din wallet. dessa brukar vara antingen 12 eller 24 men kan även vara 18 st. Dessa brukar användarna uppmanas att skriva ner och spara undan på ett säkert ställe, brukar kunna kallas för backup phrase eller seed...

Vi ska börja med att omvandla dessa ord till något som kallas för seed. detta gör vi genom att skriva kommandot bx mnemonic-to-seed

Efter att du har matat in det kommandot så väntar det på att du ska börja skriva in orden, skriv in dem med mellanslag i mellan och när du är klar trycker du först ENTER och sen på CTRL+D för att tala om att inmatningen är klar. då kommer programmet spotta ut sig något i stil med.

5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4

det kan se lite olika ut men det ska vara en så kallad hexadecimal sträng. Jag har kört med en känd test fras, så detta är inte min riktiga nyckel för er som trodde att ni hade funnit något intressant :-) .

nu ska vi göra om detta frö(seed) till sjävla huvudnyckeln för plånboken. detta gör vi genom att köra in den där strängen i ett annat kommmand som ser ut så här. bx hd-new <frö från ovan, detta är ett läge då copy/paste är det rätta sättet att se till att man fått allt rätt>

Detta kommand kommer spotta ur sig något i stil med: xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu

och där har vi själva huvudnyckeln för denna plånbok, har man denna så kan man ta alla bitcoins som finns på denna plånbok. detta är den hemlighet som inte får komma på avvägar. Nu kommer en liten krånglig del, denna huvudnyckel används inte direkt utan den är bara toppen på ett träd av nycklar och nu måste vi leta oss ut på den gren som tillhör det konto som vi vill kunna hålla koll på i mycelium. för att kunna göra detta så måste vi känna till kontots så kallade derivation path, jag kommer här lista en följa en standard som heter BIP44 den är vanligast men är inte den som används överallt(bland annat följer ett så kallat "legacy" ethereum konto i ledger inte denna standard) så beroende på vilken plånbok man har använt förut så kan detta behövas justeras, men var inte orolig blir det fel så är det enda som kommer hända att du inte kommer kunna se några bitcoin i din watch-only wallet, men inget dåligt händer med dina bitcoins.

I alla falll den normala derivation path som används av de flesta är m / purpose' / coin_type' / account' / change / address_index

där m är din huvudnyckel purpose är 44 cointype är 0 account är numret på kontot där första har 0 resternade nivåer är inte intressanta för oss just nu. den där ' (fnutten) är viktigt, den säger att det är en HÅRD derivation.

det går att läsa mer om det här https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

så de intressanta sifforna för oss är 44' 0' och den sista(med fnutt) som är sjävla kontot som vi är intressard av.

nu måste huvudnyckeln vi fick ovan och derivera den ner till en nyckel för det konto som är intressant. detta gör vi genom att köra samma kommando 3 gånger med lite olika argument, för att på så sätt ta oss ner genom trädet till rätt gren som motsvara kontot som vi är intresserad av.

kommandot är: bx hd-private --index 44 -d xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu

vad som händer då är att programmet ger oss en ny xprv sträng, detta betyder att vi har tagit ett steg ner i trädet av nycklar som vi har. den strängen vi har nu skulle man kunna säga är nyckeln för alla konton av typen 44' nu ska vi ta oss ner till den nyckel som gäller för alla bitcoin konton det gör vi genom att köra detta kommando:

bx hd-private --index 0 -d xprv9ukW2Usuz4v9T49296K5xDezLcFCEaGoLo3YGAJNuFmx1McKebuH2S5C5VhaFsBxuChmARtTHRLKnmLjRSL7vGuyDrCaBh7mfdyefDdp5hh

detta spottar återingen ut en ny xprv sträng som man skulle kunna säga är nyckeln till alla bitcoin konton av typen 44' nu tar vi denna nyckel och istället för att skapa en till PRIVAT nyckel för en ett specifikt konto, så ska vi skapa en PUBLIK nyckel för ett specifikt bitcoin konto. det kommandot ser ut så här

bx hd-public --index <0 om det är första kontot 1 för andra...> -d xprv9wnZLsHUEcR3UVuysrCTjAu7FWKXN2m5XVrgkEmeptHqi5yNkR8seouPutDWAJQcUPYDzTDgjK7G1h53M4QeA4myt6gUSUgdFhQSYw7XAV4

nu får vi en sträng som börjar på xpub istället för xprv, detta betyder att den är publik och om den skulle hamna i orätta händer så är skadan inte lika stor, de skulle inte kunna stjäla dina bitcoins, men de skulle däremot kunna följa och se allt vad du gör, och se när du för bitcoins till detta konto.

denna sträng som börjar med xpub kan man mata in i mycelium och där kunna följa och se när det kommer in bitcoins till just detta konto. och även om man skulle förlora telefonen så är det enda som den som hittar telefonen kan göra är att följa vilka transaktioner som du har på detta konto, denne kan inte själv skapa transaktioner.

detta ovan kan även anpassas så att man i sista steget kör med hd-private istället för hd-public, då skapar man en nyckel för det kontot som kan göra transaktioner men som är låst till just det kontot och inte kan varken se eller röra de andra kontonen.

TODO: visa hur man gör stegen med det andra verktyget.

TODO: Verifera alla stegen

TODO: verifera att det fungerar i mycelium annars hitta annan programvara för telefon som det fungerar med.

förhoppningsvis skriver jag mitt eget verktyg för detta någon dag som gör dettta enkelt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment