From 42a47e49bbdd4d25b365e61dc1fc30f1f38ddaa2 Mon Sep 17 00:00:00 2001 From: Sun Knudsen Date: Sun, 7 Mar 2021 05:46:55 -0500 Subject: [PATCH] Fixed BIP39 implementation --- .../README.md | 44 +- .../bip39.txt | 2048 ----------------- .../bip39.txt.sig | Bin 566 -> 0 bytes .../create-seed.py | 10 + .../create-seed.py.sig | Bin 0 -> 566 bytes .../qr-backup.sh | 39 +- .../qr-backup.sh.sig | Bin 566 -> 566 bytes .../validate-seed.py | 12 + .../validate-seed.py.sig | Bin 0 -> 566 bytes 9 files changed, 60 insertions(+), 2093 deletions(-) delete mode 100644 how-to-create-encrypted-paper-backup/bip39.txt delete mode 100644 how-to-create-encrypted-paper-backup/bip39.txt.sig create mode 100644 how-to-create-encrypted-paper-backup/create-seed.py create mode 100644 how-to-create-encrypted-paper-backup/create-seed.py.sig create mode 100644 how-to-create-encrypted-paper-backup/validate-seed.py create mode 100644 how-to-create-encrypted-paper-backup/validate-seed.py.sig diff --git a/how-to-create-encrypted-paper-backup/README.md b/how-to-create-encrypted-paper-backup/README.md index 8108347..eba90c8 100644 --- a/how-to-create-encrypted-paper-backup/README.md +++ b/how-to-create-encrypted-paper-backup/README.md @@ -87,7 +87,7 @@ $ sudo apt update $ sudo apt install -y fim imagemagick zbar-tools -$ pip3 install pillow qrcode --user +$ pip3 install mnemonic pillow qrcode --user $ echo -e "export GPG_TTY=\"\$(tty)\"\nexport PATH=\$PATH:/home/pi/.local/bin" >> ~/.bashrc @@ -96,7 +96,7 @@ $ source ~/.bashrc ### Step 5 (optional): install `screen` and [Trezor](https://trezor.io/)’s [trezorcrl](https://wiki.trezor.io/Using_trezorctl_commands_with_Trezor) -> Heads-up: we will likely use `screen` and `trezorcrl` command line utilities in the future and this guide is designed to configure a [read-only](#step-11-make-filesystem-read-only) Raspberry Pi. +> Heads-up: we will likely use `screen` and `trezorcrl` command line utilities in the future and this guide is designed to configure a [read-only](#step-12-make-filesystem-read-only) Raspberry Pi. ```console $ sudo apt install -y screen @@ -106,41 +106,47 @@ $ pip3 install attrs trezor --user $ sudo curl https://data.trezor.io/udev/51-trezor.rules -o /etc/udev/rules.d/51-trezor.rules ``` -### Step 6: download [bip39.txt](./bip39.txt) ([PGP signature](./bip39.txt.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) +### Step 6: download [create-seed.py](./create-seed.py) ([PGP signature](./create-seed.py.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) ```shell -sudo curl -o /usr/local/sbin/bip39.txt https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/bip39.txt +sudo curl -o /usr/local/sbin/create-seed.py https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/create-seed.py ``` -### Step 7: download [qr-backup.sh](./qr-backup.sh) ([PGP signature](./qr-backup.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) +### Step 7: download [validate-seed.py](./validate-seed.py) ([PGP signature](./validate-seed.py.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) + +```shell +sudo curl -o /usr/local/sbin/validate-seed.py https://sunknudsen.com/static/media/privacy-guides/how-to-validate-encrypted-paper-backup/validate-seed.py +``` + +### Step 8: download [qr-backup.sh](./qr-backup.sh) ([PGP signature](./qr-backup.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) ```shell sudo curl -o /usr/local/sbin/qr-backup.sh https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/qr-backup.sh sudo chmod +x /usr/local/sbin/qr-backup.sh ``` -### Step 8: download [qr-restore.sh](./qr-restore.sh) ([PGP signature](./qr-restore.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) +### Step 9: download [qr-restore.sh](./qr-restore.sh) ([PGP signature](./qr-restore.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) ```shell sudo curl -o /usr/local/sbin/qr-restore.sh https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/qr-restore.sh sudo chmod +x /usr/local/sbin/qr-restore.sh ``` -### Step 9: download [qr-clone.sh](./qr-clone.sh) ([PGP signature](./qr-clone.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) +### Step 10: download [qr-clone.sh](./qr-clone.sh) ([PGP signature](./qr-clone.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) ```shell sudo curl -o /usr/local/sbin/qr-clone.sh https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/qr-clone.sh sudo chmod +x /usr/local/sbin/qr-clone.sh ``` -### Step 10: download [secure-erase.sh](./secure-erase.sh) ([PGP signature](./secure-erase.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) +### Step 11: download [secure-erase.sh](./secure-erase.sh) ([PGP signature](./secure-erase.sh.sig), [PGP public key](https://sunknudsen.com/sunknudsen.asc)) ```shell sudo curl -o /usr/local/sbin/secure-erase.sh https://sunknudsen.com/static/media/privacy-guides/how-to-create-encrypted-paper-backup/secure-erase.sh sudo chmod +x /usr/local/sbin/secure-erase.sh ``` -### Step 11: make filesystem read-only +### Step 12: make filesystem read-only > Heads-up: shout-out to Nico Kaiser for his amazing [guide](https://gist.github.com/nicokaiser/08aa5b7b3958f171cf61549b70e8a34b) on how to configure a read-only Raspberry Pi. @@ -204,13 +210,13 @@ sudo sed -i -e 's/vfat\s*defaults\s/vfat defaults,ro/' /etc/fstab sudo sed -i -e 's/ext4\s*defaults,noatime\s/ext4 defaults,noatime,ro,noload/' /etc/fstab ``` -### Step 12: disable Wi-Fi (if not using ethernet) +### Step 13: disable Wi-Fi (if not using ethernet) ```shell echo "dtoverlay=disable-wifi" | sudo tee -a /boot/config.txt ``` -### Step 13: disable `dhcpcd`, `networking` and `wpa_supplicant` services and “fix” `rfkill` bug +### Step 14: disable `dhcpcd`, `networking` and `wpa_supplicant` services and “fix” `rfkill` bug ```console $ sudo systemctl disable dhcpcd networking wpa_supplicant @@ -218,13 +224,13 @@ $ sudo systemctl disable dhcpcd networking wpa_supplicant $ sudo rm /etc/profile.d/wifi-check.sh ``` -### Step 14: delete macOS hidden files (if present) +### Step 15: delete macOS hidden files (if present) ```shell sudo rm -fr /boot/.fseventsd /boot/.DS_Store /boot/.Spotlight-V100 ``` -### Step 15: reboot +### Step 16: reboot ```shell sudo systemctl reboot @@ -232,9 +238,9 @@ sudo systemctl reboot > WARNING: DO NOT CONNECT RASPBERRY PI TO NETWORK EVER AGAIN WITHOUT REINSTALLING RASPBERRY PI OS FIRST (DEVICE IS NOW "READ-ONLY" AND “COLD”). -### Step 16 (optional): disable auto-mount of `boot` volume (on macOS) +### Step 17 (optional): disable auto-mount of `boot` volume (on macOS) -> Heads-up: done to prevent macOS from writing [hidden files](#step-11-delete-macos-hidden-files-if-present) to `boot` volume which would invalidate stored SHA512 hash of micro SD card. +> Heads-up: done to prevent macOS from writing [hidden files](#step-15-delete-macos-hidden-files-if-present) to `boot` volume which would invalidate stored SHA512 hash of micro SD card. Insert micro SD card into macOS computer, run following and eject card. @@ -244,7 +250,7 @@ volume_uuid=`diskutil info "$volume_path" | awk '/Volume UUID:/ { print $3 }'` echo "UUID=$volume_uuid none msdos rw,noauto" | sudo tee -a /etc/fstab ``` -### Step 17 (optional): compute SHA512 hash of micro SD card and store in password manager (on macOS) +### Step 18 (optional): compute SHA512 hash of micro SD card and store in password manager (on macOS) Run `diskutil list` to find disk ID of micro SD card with “Raspberry Pi OS Lite” installed (`disk2` in the following example). @@ -294,9 +300,9 @@ $ qr-backup.sh --help Usage: qr-backup.sh [options] Options: - --create-seed create random 24-word BIP39 seed phrase - --bip39 test secret against BIP39 word list - -h, --help display help for command + --create-seed create 24-word BIP39 seed + --validate-seed validate if secret is BIP39 seed + -h, --help display help for command $ qr-backup.sh Format USB flash drive? (y or n)? diff --git a/how-to-create-encrypted-paper-backup/bip39.txt b/how-to-create-encrypted-paper-backup/bip39.txt deleted file mode 100644 index 942040e..0000000 --- a/how-to-create-encrypted-paper-backup/bip39.txt +++ /dev/null @@ -1,2048 +0,0 @@ -abandon -ability -able -about -above -absent -absorb -abstract -absurd -abuse -access -accident -account -accuse -achieve -acid -acoustic -acquire -across -act -action -actor -actress -actual -adapt -add -addict -address -adjust -admit -adult -advance -advice -aerobic -affair -afford -afraid -again -age -agent -agree -ahead -aim -air -airport -aisle -alarm -album -alcohol -alert -alien -all -alley -allow -almost -alone -alpha -already -also -alter -always -amateur -amazing -among -amount -amused -analyst -anchor -ancient -anger -angle -angry -animal -ankle -announce -annual -another -answer -antenna -antique -anxiety -any -apart -apology -appear -apple -approve -april -arch -arctic -area -arena -argue -arm -armed -armor -army -around -arrange -arrest -arrive -arrow -art -artefact -artist -artwork -ask -aspect -assault -asset -assist -assume -asthma -athlete -atom -attack -attend -attitude -attract -auction -audit -august -aunt -author -auto -autumn -average -avocado -avoid -awake -aware -away -awesome -awful -awkward -axis -baby -bachelor -bacon -badge -bag -balance -balcony -ball -bamboo -banana -banner -bar -barely -bargain -barrel -base -basic -basket -battle -beach -bean -beauty -because -become -beef -before -begin -behave -behind -believe -below -belt -bench -benefit -best -betray -better -between -beyond -bicycle -bid -bike -bind -biology -bird -birth -bitter -black -blade -blame -blanket -blast -bleak -bless -blind -blood -blossom -blouse -blue -blur -blush -board -boat -body -boil -bomb -bone -bonus -book -boost -border -boring -borrow -boss -bottom -bounce -box -boy -bracket -brain -brand -brass -brave -bread -breeze -brick -bridge -brief -bright -bring -brisk -broccoli -broken -bronze -broom -brother -brown -brush -bubble -buddy -budget -buffalo -build -bulb -bulk -bullet -bundle -bunker -burden -burger -burst -bus -business -busy -butter -buyer -buzz -cabbage -cabin -cable -cactus -cage -cake -call -calm -camera -camp -can -canal -cancel -candy -cannon -canoe -canvas -canyon -capable -capital -captain -car -carbon -card -cargo -carpet -carry -cart -case -cash -casino -castle -casual -cat -catalog -catch -category -cattle -caught -cause -caution -cave -ceiling -celery -cement -census -century -cereal -certain -chair -chalk -champion -change -chaos -chapter -charge -chase -chat -cheap -check -cheese -chef -cherry -chest -chicken -chief -child -chimney -choice -choose -chronic -chuckle -chunk -churn -cigar -cinnamon -circle -citizen -city -civil -claim -clap -clarify -claw -clay -clean -clerk -clever -click -client -cliff -climb -clinic -clip -clock -clog -close -cloth -cloud -clown -club -clump -cluster -clutch -coach -coast -coconut -code -coffee -coil -coin -collect -color -column -combine -come -comfort -comic -common -company -concert -conduct -confirm -congress -connect -consider -control -convince -cook -cool -copper -copy -coral -core -corn -correct -cost -cotton -couch -country -couple -course -cousin -cover -coyote -crack -cradle -craft -cram -crane -crash -crater -crawl -crazy -cream -credit -creek -crew -cricket -crime -crisp -critic -crop -cross -crouch -crowd -crucial -cruel -cruise -crumble -crunch -crush -cry -crystal -cube -culture -cup -cupboard -curious -current -curtain -curve -cushion -custom -cute -cycle -dad -damage -damp -dance -danger -daring -dash -daughter -dawn -day -deal -debate -debris -decade -december -decide -decline -decorate -decrease -deer -defense -define -defy -degree -delay -deliver -demand -demise -denial -dentist -deny -depart -depend -deposit -depth -deputy -derive -describe -desert -design -desk -despair -destroy -detail -detect -develop -device -devote -diagram -dial -diamond -diary -dice -diesel -diet -differ -digital -dignity -dilemma -dinner -dinosaur -direct -dirt -disagree -discover -disease -dish -dismiss -disorder -display -distance -divert -divide -divorce -dizzy -doctor -document -dog -doll -dolphin -domain -donate -donkey -donor -door -dose -double -dove -draft -dragon -drama -drastic -draw -dream -dress -drift -drill -drink -drip -drive -drop -drum -dry -duck -dumb -dune -during -dust -dutch -duty -dwarf -dynamic -eager -eagle -early -earn -earth -easily -east -easy -echo -ecology -economy -edge -edit -educate -effort -egg -eight -either -elbow -elder -electric -elegant -element -elephant -elevator -elite -else -embark -embody -embrace -emerge -emotion -employ -empower -empty -enable -enact -end -endless -endorse -enemy -energy -enforce -engage -engine -enhance -enjoy -enlist -enough -enrich -enroll -ensure -enter -entire -entry -envelope -episode -equal -equip -era -erase -erode -erosion -error -erupt -escape -essay -essence -estate -eternal -ethics -evidence -evil -evoke -evolve -exact -example -excess -exchange -excite -exclude -excuse -execute -exercise -exhaust -exhibit -exile -exist -exit -exotic -expand -expect -expire -explain -expose -express -extend -extra -eye -eyebrow -fabric -face -faculty -fade -faint -faith -fall -false -fame -family -famous -fan -fancy -fantasy -farm -fashion -fat -fatal -father -fatigue -fault -favorite -feature -february -federal -fee -feed -feel -female -fence -festival -fetch -fever -few -fiber -fiction -field -figure -file -film -filter -final -find -fine -finger -finish -fire -firm -first -fiscal -fish -fit -fitness -fix -flag -flame -flash -flat -flavor -flee -flight -flip -float -flock -floor -flower -fluid -flush -fly -foam -focus -fog -foil -fold -follow -food -foot -force -forest -forget -fork -fortune -forum -forward -fossil -foster -found -fox -fragile -frame -frequent -fresh -friend -fringe -frog -front -frost -frown -frozen -fruit -fuel -fun -funny -furnace -fury -future -gadget -gain -galaxy -gallery -game -gap -garage -garbage -garden -garlic -garment -gas -gasp -gate -gather -gauge -gaze -general -genius -genre -gentle -genuine -gesture -ghost -giant -gift -giggle -ginger -giraffe -girl -give -glad -glance -glare -glass -glide -glimpse -globe -gloom -glory -glove -glow -glue -goat -goddess -gold -good -goose -gorilla -gospel -gossip -govern -gown -grab -grace -grain -grant -grape -grass -gravity -great -green -grid -grief -grit -grocery -group -grow -grunt -guard -guess -guide -guilt -guitar -gun -gym -habit -hair -half -hammer -hamster -hand -happy -harbor -hard -harsh -harvest -hat -have -hawk -hazard -head -health -heart -heavy -hedgehog -height -hello -helmet -help -hen -hero -hidden -high -hill -hint -hip -hire -history -hobby -hockey -hold -hole -holiday -hollow -home -honey -hood -hope -horn -horror -horse -hospital -host -hotel -hour -hover -hub -huge -human -humble -humor -hundred -hungry -hunt -hurdle -hurry -hurt -husband -hybrid -ice -icon -idea -identify -idle -ignore -ill -illegal -illness -image -imitate -immense -immune -impact -impose -improve -impulse -inch -include -income -increase -index -indicate -indoor -industry -infant -inflict -inform -inhale -inherit -initial -inject -injury -inmate -inner -innocent -input -inquiry -insane -insect -inside -inspire -install -intact -interest -into -invest -invite -involve -iron -island -isolate -issue -item -ivory -jacket -jaguar -jar -jazz -jealous -jeans -jelly -jewel -job -join -joke -journey -joy -judge -juice -jump -jungle -junior -junk -just -kangaroo -keen -keep -ketchup -key -kick -kid -kidney -kind -kingdom -kiss -kit -kitchen -kite -kitten -kiwi -knee -knife -knock -know -lab -label -labor -ladder -lady -lake -lamp -language -laptop -large -later -latin -laugh -laundry -lava -law -lawn -lawsuit -layer -lazy -leader -leaf -learn -leave -lecture -left -leg -legal -legend -leisure -lemon -lend -length -lens -leopard -lesson -letter -level -liar -liberty -library -license -life -lift -light -like -limb -limit -link -lion -liquid -list -little -live -lizard -load -loan -lobster -local -lock -logic -lonely -long -loop -lottery -loud -lounge -love -loyal -lucky -luggage -lumber -lunar -lunch -luxury -lyrics -machine -mad -magic -magnet -maid -mail -main -major -make -mammal -man -manage -mandate -mango -mansion -manual -maple -marble -march -margin -marine -market -marriage -mask -mass -master -match -material -math -matrix -matter -maximum -maze -meadow -mean -measure -meat -mechanic -medal -media -melody -melt -member -memory -mention -menu -mercy -merge -merit -merry -mesh -message -metal -method -middle -midnight -milk -million -mimic -mind -minimum -minor -minute -miracle -mirror -misery -miss -mistake -mix -mixed -mixture -mobile -model -modify -mom -moment -monitor -monkey -monster -month -moon -moral -more -morning -mosquito -mother -motion -motor -mountain -mouse -move -movie -much -muffin -mule -multiply -muscle -museum -mushroom -music -must -mutual -myself -mystery -myth -naive -name -napkin -narrow -nasty -nation -nature -near -neck -need -negative -neglect -neither -nephew -nerve -nest -net -network -neutral -never -news -next -nice -night -noble -noise -nominee -noodle -normal -north -nose -notable -note -nothing -notice -novel -now -nuclear -number -nurse -nut -oak -obey -object -oblige -obscure -observe -obtain -obvious -occur -ocean -october -odor -off -offer -office -often -oil -okay -old -olive -olympic -omit -once -one -onion -online -only -open -opera -opinion -oppose -option -orange -orbit -orchard -order -ordinary -organ -orient -original -orphan -ostrich -other -outdoor -outer -output -outside -oval -oven -over -own -owner -oxygen -oyster -ozone -pact -paddle -page -pair -palace -palm -panda -panel -panic -panther -paper -parade -parent -park -parrot -party -pass -patch -path -patient -patrol -pattern -pause -pave -payment -peace -peanut -pear -peasant -pelican -pen -penalty -pencil -people -pepper -perfect -permit -person -pet -phone -photo -phrase -physical -piano -picnic -picture -piece -pig -pigeon -pill -pilot -pink -pioneer -pipe -pistol -pitch -pizza -place -planet -plastic -plate -play -please -pledge -pluck -plug -plunge -poem -poet -point -polar -pole -police -pond -pony -pool -popular -portion -position -possible -post -potato -pottery -poverty -powder -power -practice -praise -predict -prefer -prepare -present -pretty -prevent -price -pride -primary -print -priority -prison -private -prize -problem -process -produce -profit -program -project -promote -proof -property -prosper -protect -proud -provide -public -pudding -pull -pulp -pulse -pumpkin -punch -pupil -puppy -purchase -purity -purpose -purse -push -put -puzzle -pyramid -quality -quantum -quarter -question -quick -quit -quiz -quote -rabbit -raccoon -race -rack -radar -radio -rail -rain -raise -rally -ramp -ranch -random -range -rapid -rare -rate -rather -raven -raw -razor -ready -real -reason -rebel -rebuild -recall -receive -recipe -record -recycle -reduce -reflect -reform -refuse -region -regret -regular -reject -relax -release -relief -rely -remain -remember -remind -remove -render -renew -rent -reopen -repair -repeat -replace -report -require -rescue -resemble -resist -resource -response -result -retire -retreat -return -reunion -reveal -review -reward -rhythm -rib -ribbon -rice -rich -ride -ridge -rifle -right -rigid -ring -riot -ripple -risk -ritual -rival -river -road -roast -robot -robust -rocket -romance -roof -rookie -room -rose -rotate -rough -round -route -royal -rubber -rude -rug -rule -run -runway -rural -sad -saddle -sadness -safe -sail -salad -salmon -salon -salt -salute -same -sample -sand -satisfy -satoshi -sauce -sausage -save -say -scale -scan -scare -scatter -scene -scheme -school -science -scissors -scorpion -scout -scrap -screen -script -scrub -sea -search -season -seat -second -secret -section -security -seed -seek -segment -select -sell -seminar -senior -sense -sentence -series -service -session -settle -setup -seven -shadow -shaft -shallow -share -shed -shell -sheriff -shield -shift -shine -ship -shiver -shock -shoe -shoot -shop -short -shoulder -shove -shrimp -shrug -shuffle -shy -sibling -sick -side -siege -sight -sign -silent -silk -silly -silver -similar -simple -since -sing -siren -sister -situate -six -size -skate -sketch -ski -skill -skin -skirt -skull -slab -slam -sleep -slender -slice -slide -slight -slim -slogan -slot -slow -slush -small -smart -smile -smoke -smooth -snack -snake -snap -sniff -snow -soap -soccer -social -sock -soda -soft -solar -soldier -solid -solution -solve -someone -song -soon -sorry -sort -soul -sound -soup -source -south -space -spare -spatial -spawn -speak -special -speed -spell -spend -sphere -spice -spider -spike -spin -spirit -split -spoil -sponsor -spoon -sport -spot -spray -spread -spring -spy -square -squeeze -squirrel -stable -stadium -staff -stage -stairs -stamp -stand -start -state -stay -steak -steel -stem -step -stereo -stick -still -sting -stock -stomach -stone -stool -story -stove -strategy -street -strike -strong -struggle -student -stuff -stumble -style -subject -submit -subway -success -such -sudden -suffer -sugar -suggest -suit -summer -sun -sunny -sunset -super -supply -supreme -sure -surface -surge -surprise -surround -survey -suspect -sustain -swallow -swamp -swap -swarm -swear -sweet -swift -swim -swing -switch -sword -symbol -symptom -syrup -system -table -tackle -tag -tail -talent -talk -tank -tape -target -task -taste -tattoo -taxi -teach -team -tell -ten -tenant -tennis -tent -term -test -text -thank -that -theme -then -theory -there -they -thing -this -thought -three -thrive -throw -thumb -thunder -ticket -tide -tiger -tilt -timber -time -tiny -tip -tired -tissue -title -toast -tobacco -today -toddler -toe -together -toilet -token -tomato -tomorrow -tone -tongue -tonight -tool -tooth -top -topic -topple -torch -tornado -tortoise -toss -total -tourist -toward -tower -town -toy -track -trade -traffic -tragic -train -transfer -trap -trash -travel -tray -treat -tree -trend -trial -tribe -trick -trigger -trim -trip -trophy -trouble -truck -true -truly -trumpet -trust -truth -try -tube -tuition -tumble -tuna -tunnel -turkey -turn -turtle -twelve -twenty -twice -twin -twist -two -type -typical -ugly -umbrella -unable -unaware -uncle -uncover -under -undo -unfair -unfold -unhappy -uniform -unique -unit -universe -unknown -unlock -until -unusual -unveil -update -upgrade -uphold -upon -upper -upset -urban -urge -usage -use -used -useful -useless -usual -utility -vacant -vacuum -vague -valid -valley -valve -van -vanish -vapor -various -vast -vault -vehicle -velvet -vendor -venture -venue -verb -verify -version -very -vessel -veteran -viable -vibrant -vicious -victory -video -view -village -vintage -violin -virtual -virus -visa -visit -visual -vital -vivid -vocal -voice -void -volcano -volume -vote -voyage -wage -wagon -wait -walk -wall -walnut -want -warfare -warm -warrior -wash -wasp -waste -water -wave -way -wealth -weapon -wear -weasel -weather -web -wedding -weekend -weird -welcome -west -wet -whale -what -wheat -wheel -when -where -whip -whisper -wide -width -wife -wild -will -win -window -wine -wing -wink -winner -winter -wire -wisdom -wise -wish -witness -wolf -woman -wonder -wood -wool -word -work -world -worry -worth -wrap -wreck -wrestle -wrist -write -wrong -yard -year -yellow -you -young -youth -zebra -zero -zone -zoo diff --git a/how-to-create-encrypted-paper-backup/bip39.txt.sig b/how-to-create-encrypted-paper-backup/bip39.txt.sig deleted file mode 100644 index 98940d9e36be46f04c514365186e380aeab85017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmV-60?GY}0y6{v0SW*e79j+wjLi}vLuFeg`ukxYr)P#My%Plm0$?}ur2q;E5Fe*! zhAX`j1yUpr{wXEmMgwPtkrZ25NC+yMOejc*sH)YK0P|3d zgkgC8N#G`UE-)}IKTSD-HS1{ulVc8-Ql46`xQ3L{ul)sl_*G*G1odDf;8SNtroRbx_w*k~eb8NFg-$9qChNc>g^xjNyNY05(J`Xig zkTeq{3{t$JzHxmRVEQMD2I08N$ zTY*A_4dghr`=yu{*&f3W%fqd$dx{*42xFS#xm z`E#yLSf*ce#5!???vdqR{If$$@RmU)>;&u>FHtOtN{s-djN(2dUT(LmQ9NDq?KbDKNZLX#XD*v> z-YLlokb_X_Xqn>g@Cjn^Cm~9YD>!!1{UuhPO!wufpUUVkLo~_Gi)=Tez=Q3s8Bzj3 zYaSP2RJT~#GeTk(ThJ%Dw6g7m2&Vjnb#;MW05Fe*! zhAX`j1!ag2{w1a^;$B}79<-EJNAqTU3+H#1*u# zIY$||^8N3PyVqpLv8FqLP~Ve-*h_oX&y8tyYhB--N;-k~09hjhxVv*#B~_gl{IOsa zI65@LL{sIL6-7OiwI)J`rzr!82^}OMp}u^0C1G$Nz9gL~eqT-L_Pk~7%)&enM2vCZ z$$-Z%Ac&~_U)e9h2D^A$DaU@;4twuxGY{H$>RD}I?#*zb9FF|`A`oy>$$za;_J?4v zVJ|OIIP?XU9)0kq*kYc-M1;miW6awJjY}*f{7D5IQc$Gug{k+c8b`j2WhqJtJH-%S zWq;716ECMD1M+is3ADHj;uq22e9zs7+2g>S2s=d_UfpA9XuN}hSU!)Ck!;l=yHYw$ z$K~hMP56;uNYm45*ALBS$jRVBMoyy%N*yad%4l#Ky>G9 z=YKydrT@pK&lIypCgdYN^5)2R+#ScX}RSfUAV+MyT$!}m} zG;HdqPKGrNR~#dTWg4EWbFD2o1SS5R)RM&f_R`>SCd0!!c#HR=HM-}H7T!-##kr}g zU&u+Zq=H(0g{r4CpX{pA>>J?Cyw#B2!yI@Umgbz_xE3{AMX;>+LGDdyZ!e0OxpzB} EM2z+g /dev/null; then fi if [ "$create_seed" = true ]; then - printf "%s\n" "Creating random 24-word BIP39 seed phrase…" - secret=$(cat "$basedir/bip39.txt" | shuf --head-count 24 --random-source=/dev/urandom --repeat | tr "\n" " ") + printf "%s\n" "Creating 24-word BIP39 seed…" + secret=$(python3 $basedir/create-seed.py) echo $secret sleep 1 fi @@ -91,25 +91,12 @@ if [ -z "$secret" ]; then fi fi -function exists { - bip39_words=($(cat "$basedir/bip39.txt")) - for bip39_word in ${bip39_words[@]}; do - if [ "$bip39_word" = "$1" ]; then - return 0 - fi - done - return 1 -} - -if [ "$bip39" = true ]; then - printf "%s\n" "Testing secret against BIP39 word list…" - words=($secret) - for word in ${words[@]}; do - if ! exists $word; then - printf "$red%s $bold%s$normal\n" "Invalid word" "$word" - exit 1 - fi - done +if [ "$validate_seed" = true ]; then + printf "%s\n" "Validate if secret is BIP39 seed…" + if ! echo -n $secret | python3 $basedir/validate-seed.py; then + printf "$red%s$normal\n" "Invalid BIP39 seed" + exit 1 + fi fi encrypted_secret=$(echo -n "$secret" | gpg --s2k-mode 3 --s2k-count 65011712 --s2k-digest-algo sha512 --cipher-algo AES256 --symmetric --armor) diff --git a/how-to-create-encrypted-paper-backup/qr-backup.sh.sig b/how-to-create-encrypted-paper-backup/qr-backup.sh.sig index ffdadad374305a9f34313e16e48952f883f88cee..cdf5326413cbde8eaf6599915854f50f1e43dcbf 100644 GIT binary patch delta 542 zcmV+(0^$9(1hxc_BY#99!~hBj5Fe*!hAX`j1)7%+|3rmKoVvEP@jZCka~PIxcjad( z807mQiodL;hyS6YT2t-2n$XQAr>^I4E3K?|CChv5JK9H;j}FtIsl&eBU0J)00qe0C zGqAG>_g;;ii7|bj7^cgi4ENnV)z&Pe$ma_TnP}u363Orm`B_eQXBDvU2zw=x|_sORUHB zA-B?EQp*kx2I8Ptif*KftvvjFZIrE=SV|a%(9j60yDPuf(Q5)}5WbfAI0BWI9hj`E zzl$w%i~15k8Go0~9S9-5r*8jZu3dLj+a2oRM8P7VYOM$TzSS}{=>%u5D>LAGp^zcW zfBr*5Jn;a4sP)-5`azSv#LAMW05PW#I<%|sXbp(L9vSv%R3P@X;HeGtukQKmdt`-+ zg`$}2_<;8L!x%C+7H^Xh7<^Uiei>LFW0mg(w7|7DD1Y-WPlc6PJS-h==T!F3FakOB^%s(gW3(WR|A8CtK}cjD7K@k$Jw zu62utQdz4sYA+@irBdZX)1h)%T7dtua|c;q}2zqzclvL=l4x`t$FK z_c6OM9qVoGH-9~@Kh-UDps*JJE@Y?*NxCfVh$T(uBWq&mo|f<~t*5Fj*wjHK!zOFU z%q(lVW5(yX*B1#AL$$g1%Vi1_yjauNNB#M)eZ z&Q12oy$i(^Q>2_=nqW?0N^p}yjs}YuQ$~+=PUUDHL#eiH$3#w3MfZ>c_Bb4Kp^Z^* z5Rv1AL1tKr-uPOi3l&|uoARApl*mQRcXKg$KAW8V945y=@Ul`(eoyMGfaD*KZt>Jy gf?u(a5f?~5P3jU|H58X=5R(R^b_qwK4y%nF*bUzU=Kufz diff --git a/how-to-create-encrypted-paper-backup/validate-seed.py b/how-to-create-encrypted-paper-backup/validate-seed.py new file mode 100644 index 0000000..65b1c00 --- /dev/null +++ b/how-to-create-encrypted-paper-backup/validate-seed.py @@ -0,0 +1,12 @@ +from sys import exit, stdin +from mnemonic import Mnemonic + +mnemo = Mnemonic("english") + +lines = stdin.readlines() + +for line in lines: + if not mnemo.check(line): + exit(1) + +exit(0) diff --git a/how-to-create-encrypted-paper-backup/validate-seed.py.sig b/how-to-create-encrypted-paper-backup/validate-seed.py.sig new file mode 100644 index 0000000000000000000000000000000000000000..e3f93e3bb6384f8746efa6170f3756dfcc6ae244 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SW*e79j+wjLi}vLuFeg`ukxYr)P#My%Plm0$@Zc)c^_!5Fe*! zhAX`j1uvBk|6@r!DEK^tquF&o7$*)|avX=gRKH`6UI-4UKQvuP{I-f7zVZX8AOurF z=Ri&m`U4st(78ppRY#0=0o|irnOH?DVz?W>BV_{`$;Ng_aj=^c zo#NQ=<7f|2a(z|rv<6q7(0W$m$)*@OV4?QQTrDr#V>f--Y~&6IybH+8E-0L;+Ja~t z*lWy2Rp2O967MT(X*a*zXXy!rD@cR~fYIG$B$o9`{Z1SV)nX+8yjMT@wYAwspqDBEV!Lk;uP;K3kcoL11@2gc zivRQ84rMfDD=O|Kalj$ef?Z7Q9wfXNequ0j?gOy18)2cfmv^xb&71B?-S*