En seed-frase på 12 eller 24 ord er det svakeste leddet i de fleste kryptolommebøker. Mister du lappen, mister du alt. Blir den stjålet, mister du også alt. SLIP-39 Shamir Backup løser dette problemet på en annen måte enn passordfraser og air-gapped multisig: i stedet for én frase som må beskyttes perfekt, deler du hemmeligheten matematisk i flere biter der ingen enkelt bit avslører noe som helst. Denne guiden viser deg, steg for steg, hvordan du setter opp SLIP-39 med Trezor Model T og med det offisielle Python-biblioteket shamir-mnemonic, slik at du kan bygge en gjenopprettingsplan som tåler både tyveri og brann.

Du trenger ikke være utvikler for å følge guiden, men vi viser både kommandolinjen og de fysiske stegene, slik at du kan velge om du vil styre alt fra en hardware-lommebok eller bygge et eget offline-verktøy. Målet er et oppsett du faktisk har testet, ikke bare et du håper fungerer den dagen du trenger det mest.

Hva er Shamir’s Secret Sharing og SLIP-39?

Shamir’s Secret Sharing (SSS) er en matematisk metode utviklet av kryptografen Adi Shamir i 1979. Ideen er enkel å forklare, men kraftig i praksis: du deler en hemmelighet i N deler, og setter en terskel K som avgjør hvor mange deler som trengs for å rekonstruere den. Har du færre enn K deler, får du null informasjon om hemmeligheten, ikke engang en brøkdel av den. Det er en helt annen egenskap enn å rive en fysisk lapp i to biter, der hver halvdel fortsatt lekker halvparten av ordene.

Den matematiske intuisjonen bak dette er polynominterpolasjon. Hemmeligheten kodes som konstantleddet i et polynom av grad K-1, og hver del er ett unikt punkt på kurven. Kjenner du færre enn K punkter, finnes det uendelig mange polynomer som passer gjennom dem, så konstantleddet forblir fullstendig ukjent. Kjenner du nøyaktig K punkter eller flere, finnes det bare ett polynom som passer, og du kan regne deg frem til konstantleddet, altså hemmeligheten. Det er denne egenskapen, ikke bare “flere kopier”, som gjør ordningen matematisk bevisbar trygg.

SLIP-39 er SatoshiLabs sin standard for å bruke akkurat denne teknikken på kryptolommebøker. Standarden ble publisert i 2018 og definerer hvordan en hovedhemmelighet kobles til mnemoniske ord, på samme måte som BIP-39 gjør med vanlige seed-fraser. Forskjellen ligger i detaljene: SLIP-39 bruker en ordliste på 1024 ord der hvert ord koder 10 bit, mens BIP-39 bruker 2048 ord og 11 bit per ord. En SLIP-39-del for en 128-bit hemmelighet blir 20 ord lang, mens en del for en 256-bit hemmelighet blir 33 ord. Hver del inneholder også en 15-bit tilfeldig identifikator som er lik på tvers av alle deler i samme sett, et 4-bit iterasjonseksponent-felt som styrer PBKDF2-styrken, og en 30-bit RS1024-sjekksum fordelt på tre kontrollord.

Trezor beskriver funksjonen slik: “Shamir backup (also known as SLIP39) is a reliable security standard that addresses the two most common risks associated with protecting your wallet backup (recovery seed): theft and loss.” Det oppsummerer godt hvorfor metoden har blitt standard for brukere som vil unngå at ett enkelt fysisk objekt avgjør skjebnen til hele porteføljen.

SatoshiLabs selv formulerer det tekniske grunnlaget slik i spesifikasjonen: “This SLIP describes a standard and interoperable implementation of Shamir’s secret-sharing (SSS) and a specification for its use in backing up Hierarchical Deterministic Wallets described in BIP-0032.” Og videre om selve mekanismen: “SSS splits a master secret into unique parts which can be distributed among participants.” Det er nettopp denne fordelingen som gjør SLIP-39 til noe mer enn bare “flere kopier av samme lapp”.

Interessen for terskeldeling har økt i takt med at enkeltpunkt-svikt fortsetter å koste kryptobrukere dyrt. shattered.io har tidligere dekket hvordan $116 millioner ble drenert fra kaldlagring knyttet til Coldcard-enheter, en påminnelse om at selv air-gapped oppbevaring kan feile på måter brukeren ikke forutså. SLIP-39 løser ikke alle disse scenarioene alene, men det fjerner ett konkret svakt punkt: at tapet eller tyveriet av ett enkelt fysisk objekt avgjør alt. Kombinert med god enhetshygiene og verifisert firmware blir terskeldeling ett lag i en bredere forsvarsstrategi, ikke en erstatning for den.

SLIP-39 vs BIP-39-passordfrase: to ulike forsvarslinjer

Mange forveksler SLIP-39 med en BIP-39-passordfrase (ofte kalt “25. ordet”). De løser to forskjellige problemer, og du bør forstå forskjellen før du velger metode. En passordfrase legger til et hemmelig ekstra ord eller en setning oppå den vanlige 12/24-ords seed-frasen. Det gir deg en skjult lommebok som ikke eksisterer uten passordfrasen, men hele beskyttelsen hviler fortsatt på én hemmelighet du må huske eller lagre trygt. Glemmer du passordfrasen, er midlene borte for alltid, uansett hvor trygt selve seed-frasen ligger.

SLIP-39 angriper et annet problem: hva skjer hvis lappen med seed-frasen blir stjålet, brenner opp, eller du rett og slett dør uten at noen finner den? Med en terskelordning som 2-av-3 kan du miste én del uten å miste tilgangen, og en tyv som finner én del sitter fortsatt uten noe brukbart. Ulempen er at oppsettet er mer komplekst, og delene er lengre enn en vanlig seed-frase (20 eller 33 ord per del mot 12 eller 24 ord totalt for BIP-39). De to metodene utelukker for øvrig ikke hverandre. Mot slutten av denne guiden viser vi hvordan du kombinerer SLIP-39-terskeldeling med en ekstra passordfrase for et reelt to-faktor-oppsett.

Tabellen under oppsummerer de tekniske forskjellene mellom de to standardene, hentet direkte fra spesifikasjonene til BIP-39 og SLIP-39.

EgenskapBIP-39SLIP-39
Ordlistestørrelse2048 ord1024 ord
Bit per ord11 bit10 bit
Lengde ved 128-bit hemmelighet12 ord20 ord per del
Lengde ved 256-bit hemmelighet24 ord33 ord per del
SjekksumInnebygd i siste ordRS1024, 3 dedikerte kontrollord
Terskeldeling (K-av-N)Nei, kun én fraseJa, innebygd i standarden
Publisert20132018

Forutsetninger: dette trenger du før du starter

Sett av 45 minutter og sørg for at du har følgende klart før du går i gang. Ingenting av dette bør gjøres på en maskin som er koblet til internett når du håndterer faktiske hemmeligheter. Regn med at selve genereringen og nedskrivingen tar 15-20 minutter, mens fordeling av delene til flere oppbevaringssteder ofte strekker seg over flere dager, siden det innebærer reise eller avtaler med familie.

  • Python 3.10 eller nyere, installert på en maskin du kan koble fra nettet under selve genereringen
  • Pip-pakken shamir-mnemonic, den offisielle referanseimplementasjonen fra trezor/python-shamir-mnemonic på GitHub, publisert på PyPI i minst versjon 0.3.0
  • En Trezor Model T, Trezor Safe 3, Safe 5 eller Safe 7 med firmware 2.7.2 eller nyere, hvis du vil bruke native SLIP-39-støtte på enheten (valgfritt, men anbefalt for produksjonsbruk)
  • Nyeste versjon av Trezor Suite for å styre enheten under oppsett og gjenoppretting, lastet ned direkte fra Trezor sine egne kanaler og verifisert før installasjon
  • Fysisk materiale for å skrive ned delene: enten arkivbestandig papir eller stålplater beregnet på seed-oppbevaring
  • Minst to fysisk atskilte, låsbare oppbevaringssteder til de ferdige delene (for eksempel hjemmesafe og bankboks, eller to familiemedlemmers hjem)

Vil du bruke en annen enhet enn Trezor, støtter Keystone hardware-lommebøker SLIP-39-deler ifølge Trezors egen dokumentasjon, i tillegg til programvarelommebøker som Electrum, Sparrow, BlueWallet, Wasabi og Rabby. Vær oppmerksom på at Trezors forum har dokumentert en kompatibilitetsfeil mellom enheter som implementerer SLIP-39 som “single-seed” og enheter som kun støtter “multi-seed”, så test alltid gjenoppretting på tvers av merker før du stoler på oppsettet.

Velg helst én implementasjon og hold deg til den gjennom hele livssyklusen til lommeboken, fra generering til eventuell fremtidig gjenoppretting. Blander du enheter og biblioteker underveis, øker sjansen for at en detalj i hvordan grupper eller terskler tolkes skiller seg mellom implementasjonene, selv om begge i teorien følger samme SLIP-39-spesifikasjon.

EnhetNative SLIP-39-støtteMinstekravMerknad
Trezor Model TJaFirmware 2.7.2+Referanseimplementasjon, mest testet
Trezor Safe 3JaFirmware 2.7.2+Samme SLIP-39-motor som Model T
Trezor Safe 5JaFirmware 2.7.2+Berøringsskjerm, samme kompatibilitet
Trezor Safe 7JaFirmware 2.7.2+Nyeste modell i serien
KeystoneJa, med forbeholdSjekk single-seed/multi-seed-modusKompatibilitetsfeil dokumentert på Trezor-forumet
Electrum, Sparrow, BlueWallet, Wasabi, RabbyJa (programvare)Nyeste versjonKan importere og kombinere SLIP-39-deler

Steg 1-2: Frakoblet arbeidsmiljø og installasjon av verktøy

Start med en maskin du stoler på, gjerne en frisk Linux-installasjon på en USB-pinne eller en gammel bærbar PC uten nettverkskort. Koble fra Wi-Fi og eventuell kabel før du fortsetter. Installer deretter Python 3.10 eller nyere, og last ned shamir-mnemonic-pakken mens du fortsatt har nett, slik at du kan installere den offline etterpå. Dette er samme prinsipp som brukes i air-gapped multisig-oppsett: alt som rører selve hemmeligheten skal skje uten nettverkstilgang.

Last ned pip-pakken som en .whl-fil eller wheel-arkiv på en tilkoblet maskin først, kopier filen over med en USB-pinne, og installer den lokalt med pip install --no-index --find-links . på den frakoblede maskinen. Slik unngår du at installasjonsprosessen selv krever nettverkstilgang midt i en operasjon der du helst vil holde maskinen fysisk isolert. Slett USB-pinnen etter bruk, eller bruk en du kun bruker til dette formålet.

pip install shamir-mnemonic
python3 -c "import shamir_mnemonic; print(shamir_mnemonic.__file__)"

Får du en importfeil, sjekk at du bruker riktig virtuelt miljø og at pip peker mot samme Python-versjon som du kjører skriptene med. Kjør gjerne kommandoen python3 -m pip list for å bekrefte at pakken faktisk havnet der du forventer.

Steg 3-4: Generer hovedhemmeligheten og del den i en terskelgruppe

Nå genererer du en ny hovedhemmelighet og deler den umiddelbart. Ikke gjenbruk en eksisterende BIP-39-frase direkte inn i biblioteket, siden SLIP-39 bruker sin egen kodede struktur. Skal du erstatte en eksisterende lommebok, må du opprette en helt ny SLIP-39-lommebok og deretter flytte midlene dit i en egen transaksjon.

Enkel terskelgruppe (2-av-3)

import os
from shamir_mnemonic import generate_mnemonics

master_secret = os.urandom(16)  # 128-bit hemmelighet gir 20-ords deler

groups = [(2, 3)]  # 2 av 3 deler kreves for gjenoppretting
group_threshold = 1

shares = generate_mnemonics(
    group_threshold=group_threshold,
    groups=groups,
    master_secret=master_secret,
    passphrase=b"",
    iteration_exponent=1,
)

for i, share in enumerate(shares[0], start=1):
    print(f"Del {i}: {share}")

Med iteration_exponent=1 bruker PBKDF2 20 000 runder (10 000 × 2¹), som gir en fornuftig balanse mellom sikkerhet og tid brukt ved gjenoppretting. Vil du ha maksimal beskyttelse mot brute-force på passordfrasen, kan du øke eksponenten, men husk at hver økning dobler tiden det tar å rekonstruere hemmeligheten på svak maskinvare.

Legg merke til de tre viktigste parameterne i kallet. master_secret er selve hemmeligheten, her 16 tilfeldige byte generert med os.urandom, som er kryptografisk sikker på de fleste moderne operativsystemer. groups beskriver strukturen som en liste av tupler, der hvert par angir terskel og totalt antall deler for den gruppen. group_threshold styrer hvor mange av gruppene som må oppfylles når du bruker flere grupper samtidig, og settes til 1 i et enkeltgruppe-oppsett som dette. Bruk aldri en svak eller forutsigbar kilde til tilfeldighet her, siden hele sikkerheten i skjemaet hviler på at master_secret faktisk er uforutsigbar.

Kjører du skriptet, får du output som ligner dette (eksempel, ikke ekte deler du skal bruke):

Del 1: academic acid acrobat romance benefit spider extra sunlight
        obesity mailman ranked hormone slush editor exact ceramic
        aluminum smug leader typical
Del 2: academic acid beard romance chest lawsuit rebound mustang
        raspy tenant briefing dragon glasses beard scared valid
        outdoor jury tackle vegan
Del 3: academic acid ceramic romance dragon ecology fiction rebound
        legs exchange twice wildlife husband holiday spew round
        knit gasoline oral ancestor

Flere medlemsgrupper for avanserte oppsett

SLIP-39 støtter også flere grupper med egne terskler, for eksempel én gruppe for familie og én for et pengeskap hos advokat. Da setter du groups=[(2, 3), (1, 1)] med group_threshold=2, som betyr at du trenger 2 av 3 familie-deler pluss den ene advokat-delen for å rekonstruere hemmeligheten. Eksakte grenser for antall grupper og medlemmer per gruppe er ikke fullt dokumentert i brukervendt materiale fra SatoshiLabs, så test alltid et konkret oppsett i praksis før du stoler på det.

Et praktisk eksempel: en gründer med to forretningspartnere kan sette opp tre grupper, én per partner, hver med terskel 1-av-1 for den enkeltes egen kopi, og deretter kreve group_threshold=2 slik at minst to av de tre partnerne må delta for å gjenopprette selskapets kryptobeholdning. Ingen enkelt partner kan da tømme kontoen alene, samtidig som selskapet overlever om én partner blir utilgjengelig. Dette ligner konseptuelt på multisig, men uten at hver signering krever on-chain-koordinering, siden delingen kun brukes til å gjenopprette selve seed-frasen, ikke til å signere hver enkelt transaksjon.

Steg 5: Verifiser og rekonstruer delene lokalt

Før du skriver ned en eneste del for hånd, test at kombinasjonen faktisk fungerer. Dette steget hopper overraskende mange over, og det er den vanligste årsaken til at folk oppdager et ødelagt oppsett først når det er for sent.

from shamir_mnemonic import combine_mnemonics

recovered = combine_mnemonics(shares[0][:2], passphrase=b"")
assert recovered == master_secret
print("Rekonstruksjon vellykket, hemmeligheten stemmer.")

Legg merke til at vi her kun bruker to av de tre delene, siden terskelen var satt til 2-av-3. Bytt ut hvilke to deler du tester med noen ganger, slik at du bekrefter at alle kombinasjoner som oppfyller terskelen faktisk fungerer, ikke bare den første.

Denne testen bør du kjøre umiddelbart etter generering, mens hemmeligheten fortsatt ligger i minnet på maskinen din, og aldri senere basert på fysiske notater du allerede har skrevet ned. Stemmer ikke recovered med master_secret, har noe gått galt i selve genereringen, og du bør starte prosessen på nytt fra bunnen fremfor å feilsøke et oppsett du ikke stoler på.

Steg 6-7: Skriv delene på metall og fordel dem geografisk

Papir tåler verken brann, vann eller tid særlig godt. Stemples delene inn på stålplater beregnet for seed-oppbevaring, overlever de branntemperaturer og fuktighet som ville ødelagt en vanlig lapp. Skriv ordene tydelig, nummerer dem i rekkefølge, og merk hvilken gruppe og hvilket terskeltall delen tilhører (for eksempel “Gruppe 1, del 2 av 3”). Bland aldri deler fra forskjellige hemmeligheter i samme oppbevaring uten svært tydelig merking, for en sammenblanding gjør hele poenget med terskeldeling verdiløst.

Flere selskaper selger stålplater spesielt designet for seed-oppbevaring, blant dem Cryptotag, som eksplisitt markedsfører produkter for SLIP-39-brukere med plass til flere delers ordlister. Uansett hvilket produkt du velger, se etter plater som tåler minst 1100 grader Celsius, siden det dekker de fleste boligbranner. Bor eller stemple ordene fremfor å skrive med tusj, siden blekk kan falme eller smelte bort under høy varme.

Fordel deretter delene fysisk. Med et 2-av-3-oppsett kan du for eksempel oppbevare én del hjemme i safe, én hos et familiemedlem, og én i en bankboks. For norske brukere er en vanlig løsning å kombinere en hjemmesafe i egen bolig med en bankboks hos en lokal sparebank og en tredje del hos foreldre eller søsken i en annen by, slik at ingen enkelt brann, innbrudd eller naturkatastrofe skal kunne ta mer enn én del samtidig. Skriv ned hvor hver del befinner seg i et eget dokument, men lagre aldri det dokumentet sammen med selve delene. Vurder også å informere minst én betrodd person om at delene finnes og omtrent hvor de er, uten å avsløre selve ordene, slik at kunnskapen om oppsettet ikke dør med deg alene.

Steg 8-9: Native SLIP-39 på Trezor Model T

Vil du at enheten selv skal generere og administrere delene, uten at hemmeligheten noensinne vises på en datamaskin, bruker du Trezor sin innebygde funksjon. Dette krever firmware 2.7.2 eller nyere, som støttes av Model T, Safe 3, Safe 5 og Safe 7. Eldre firmware støtter ikke funksjonen i det hele tatt, og du må oppdatere før du starter.

  • Koble Trezor-enheten til Trezor Suite og bekreft at firmware er 2.7.2 eller nyere under Enhetsinnstillinger
  • Velg “Opprett ny lommebok” og deretter alternativet for “Shamir Backup” i stedet for standard enkelt seed-frase
  • Velg antall deler (N) og terskel (K) direkte på enhetens skjerm, for eksempel 3 deler med terskel 2
  • Skriv ned hver del etter hvert som enheten viser dem, én om gangen, direkte på skjermen (aldri på en tilkoblet PC)
  • Bekreft hver del ved å taste den inn på nytt når enheten ber om det

Merk at nyere firmware kan gjenopprette eldre SLIP-39-sikkerhetskopier, men eldre firmware kan ikke gjenopprette sikkerhetskopier laget med det nyere multi-share-oppsettet. Det betyr i praksis at du bør holde firmware oppdatert på alle enheter du planlegger å bruke til gjenoppretting, ikke bare den du opprettet delene på.

Selve genereringen på enheten skjer inne i en sikker chip, og ordene vises kun på Trezor-skjermen, aldri på PC-en som kjører Trezor Suite. Det gjør denne metoden tryggere mot skadevare på selve datamaskinen enn Python-metoden fra tidligere steg, som forutsetter at den frakoblede maskinen faktisk er fri for skadevare. Har du ikke full kontroll på maskinvaren du bruker til Python-metoden, er enhetens innebygde funksjon det tryggeste alternativet.

Steg 10-11: Gjenopprett lommeboken og kjør en gjenopprettingstest

En sikkerhetskopi du aldri har testet er ikke en sikkerhetskopi, den er en gjetning. Kjøp en billig, brukt Trezor Model T eller bruk en fabrikknullstilt enhet du allerede eier, og gjennomfør en full gjenoppretting med de fysiske delene dine før du legger reelle midler i lommeboken. Gjør dette selv om du er sikker på at oppsettet er riktig, siden testen også avdekker om du selv husker riktig fremgangsmåte under stress, noe som er en helt annen ferdighet enn å forstå teorien.

# Python-versjon av dry run, uten hardware, for å bekrefte
# at antall deler og terskel faktisk rekonstruerer riktig verdi
from shamir_mnemonic import combine_mnemonics

test_shares = [
    "academic acid acrobat romance benefit spider extra sunlight "
    "obesity mailman ranked hormone slush editor exact ceramic "
    "aluminum smug leader typical",
    "academic acid beard romance chest lawsuit rebound mustang "
    "raspy tenant briefing dragon glasses beard scared valid "
    "outdoor jury tackle vegan",
]

secret = combine_mnemonics(test_shares, passphrase=b"")
print("Lengde på rekonstruert hemmelighet:", len(secret), "byte")

På selve Trezor-enheten velger du “Gjenopprett lommebok fra sikkerhetskopi” og deretter “Shamir Backup”. Enheten spør deg om ordene fra hver del i tur og orden, og forteller deg når terskelen er nådd. Sammenlign til slutt den offentlige adressen (ikke privatnøkkelen) fra den gjenopprettede lommeboken mot den opprinnelige, for å bekrefte at det faktisk er samme lommebok. Gjenta gjerne testen én gang i året, ideelt sett samtidig som du sjekker at stålplatene fortsatt er lesbare og at ingen av oppbevaringsstedene er kompromittert.

Steg 12: Kombiner SLIP-39 med en BIP-39-passordfrase

For maksimal beskyttelse kan du legge en ekstra passordfrase oppå selve SLIP-39-hemmeligheten, akkurat som med en vanlig BIP-39-frase. Da må en angriper både samle nok deler til å nå terskelen og kjenne passordfrasen for å få tilgang til midlene. Ulempen er den samme som med enhver passordfrase: glemmer du den, hjelper ikke delene deg, uansett hvor mange du klarer å samle inn.

shares_with_passphrase = generate_mnemonics(
    group_threshold=1,
    groups=[(2, 3)],
    master_secret=master_secret,
    passphrase=b"min-hemmelige-frase",
    iteration_exponent=1,
)

Bruk denne kombinasjonen kun hvis du har en pålitelig måte å huske eller oppbevare passordfrasen på, adskilt fra selve delene. En vanlig løsning er å memorere en kort, men høy-entropi frase, i stedet for å skrive den ned i nærheten av stålplatene. Noen brukere velger i stedet å dele opp selve passordfrasen mellom to steder, slik at heller ikke den finnes samlet ett sted, men da må du huske at det introduserer enda et element som må testes ved gjenoppretting.

Vanlige fallgruver du bør unngå

De fleste problemene med SLIP-39 i praksis kommer ikke fra selve algoritmen, den er godt testet og har vært produksjonsklar siden 2018. Problemene oppstår i grensesnittet mellom matematikken og menneskene som skal håndtere delene fysisk over flere år. Under følger de feilene vi ser oftest.

  • Blande deler fra forskjellige sett. To ulike SLIP-39-hemmeligheter kan gi deler som ligner hverandre visuelt. Merk alltid tydelig hvilket sett og hvilken gruppe hver del tilhører.
  • Lagre alle delene på samme sted. Har du 3 deler i samme skuff, har du i praksis bygget en enkelt seed-frase igjen, bare mer arbeidskrevende å lese.
  • Aldri teste gjenoppretting. Et oppsett du ikke har testet kan feile av grunner du ikke oppdaget under generering, som feiltastede ord eller byttet rekkefølge på grupper.
  • Forveksle terskel med totalt antall deler. Et 2-av-3-oppsett krever nøyaktig 2 gyldige deler, verken 1 eller 3. Skriver du feil ord på én del, kan du fortsatt gjenopprette med de to andre, men du bør rette feilen så snart du oppdager den.
  • Bruke gammel firmware ved gjenoppretting. Trezor-enheter med firmware eldre enn 2.7.2 støtter ikke SLIP-39 multi-share-oppsettet i det hele tatt, og gjenoppretting vil rett og slett feile.
  • Anta at Keystone og Trezor alltid er kompatible. Trezors eget forum har dokumentert tilfeller der single-seed- og multi-seed-implementasjoner ikke snakker sammen, så test på tvers av merker før du stoler på det.
  • Gjenbruke en BIP-39-frase direkte som SLIP-39-inndata. De to standardene bruker forskjellig kodet struktur, og du kan ikke bare lime inn en eksisterende 24-ords frase i et SLIP-39-bibliotek og forvente riktig resultat.
  • Fotografere delene “for sikkerhets skyld”. Et bilde på en telefon som synkroniserer til skyen fjerner nesten hele poenget med fysisk, offline oppbevaring. Behandle et fotografi av en del som like sensitivt som selve delen.
  • Sette en for høy terskel i forhold til antall tilgjengelige personer. Krever oppsettet 4 av 5 deler, men du realistisk sett kun har tre personer du stoler på til å oppbevare dem, har du bygget et system som er vanskeligere å bruke enn det er trygt.

Feilsøking: de vanligste feilene og hvordan du løser dem

Når noe går galt under gjenoppretting, er det fristende å begynne å gjette på ord eller rekkefølge. Ikke gjør det. SLIP-39 sin RS1024-sjekksum fanger nesten alle transkripsjonsfeil umiddelbart, så en feilmelding betyr nesten alltid at noe konkret er galt, ikke at systemet er ustabilt. RS1024 er en variant av Reed-Solomon-koding, samme familie av feilrettende koder som brukes i alt fra CD-plater til satellittkommunikasjon, tilpasset til å oppdage feil i en sekvens av 10-bit ord. De tre kontrollordene på slutten av hver del gjør at et enkelt feiltastet ord nesten alltid blir fanget opp før du i det hele tatt prøver å kombinere delene. Gå gjennom tabellen under systematisk før du prøver deg frem.

Feil eller symptomSannsynlig årsakLøsning
“Invalid checksum” ved inntastingFeiltastet ord eller byttet rekkefølgeSjekk hvert ord mot SLIP-39-ordlisten og skriv inn i eksakt rekkefølge
“Not enough shares” / for få delerDu har tastet inn færre deler enn terskelen kreverFinn flere deler til du når terskeltallet som ble satt ved opprettelse
Delene kombineres, men gir feil adresseDelene tilhører to forskjellige settBekreft at alle delene har samme 15-bit identifikator innledningsvis
Enheten viser ikke “Shamir Backup”-valgetFirmware eldre enn 2.7.2Oppdater firmware via Trezor Suite før du fortsetter
Gjenoppretting på Keystone feiler med Trezor-delerMismatch mellom single-seed og multi-seed-modusSjekk enhetens modusinnstilling, eller gjenopprett på samme merke som opprettet delene
Passordfrasen gir tom eller feil lommebokPassordfrasen er feilstavet eller har ekstra mellomromSkriv passordfrasen nøyaktig likt, inkludert store/små bokstaver
Python-skript kaster ImportErrorFeil virtuelt miljø eller manglende installasjonKjør pip show shamir-mnemonic for å bekrefte at pakken er installert i riktig miljø
Gjenoppretting tar svært lang tidHøy iterasjonseksponent kombinert med svak maskinvareVent det ut, PBKDF2-tiden dobles for hver økning i eksponenten, det er forventet
Enheten viser “Backup already exists”Enheten har allerede en aktiv lommebokFabrikknullstill enheten før du starter en ny SLIP-39-backup
Delene ser identiske ut i starten, men gir feil ved kombineringOrdene etter den felles identifikatoren er lest eller skrevet feilKontroller hvert ord bokstav for bokstav mot referanselisten, ikke bare de første stavelsene

Avanserte tips for team, arv og virksomheter

For familier som planlegger arv, gir multi-gruppe-oppsett en fleksibilitet enkeltpersoner sjelden trenger. Sett opp én gruppe for nærmeste familie med en lav terskel, og én gruppe hos en advokat eller notarius med krav om at minst én av dem må delta. På den måten kan verken familien alene eller advokaten alene få tilgang, men sammen kan de gjenopprette midlene selv om eieren er utilgjengelig.

For virksomheter og større beholdninger er det verdt å kjenne skillet mellom Shamir-basert deling og full Multi-Party Computation (MPC). Shamir-deling, slik SLIP-39 bruker den, rekonstruerer hemmeligheten på ett sted i det øyeblikket terskelen er nådd. MPC-baserte custody-løsninger, som blant annet Fireblocks tilbyr til institusjonelle kunder, signerer transaksjoner uten at hele nøkkelen noensinne settes sammen på én enhet. De to teknikkene løser beslektede, men ikke identiske problemer, og større organisasjoner bør vurdere MPC når kravet er at ingen enkelt part eller enhet noensinne skal se hele hemmeligheten, ikke bare ved backup, men også ved hver signering.

Team som deler ansvar for en felles beholdning bør også avklare tilgangsstyring på forhånd, ikke etter et problem har oppstått. Skriv ned hvem som har rett til å initiere en gjenoppretting, hvilken dokumentasjon som kreves for å bekrefte identitet overfor de som sitter på deler, og hvordan dere håndterer en situasjon der en av nøkkelpersonene blir utilgjengelig uten forvarsel. Denne typen prosedyre er like viktig som selve den kryptografiske delingen, siden de fleste virkelige hendelser handler om mennesker og prosess, ikke om selve algoritmen.

Et siste tips til drift: roter delene med noen års mellomrom, spesielt hvis noen som kjente til en oppbevaringslokasjon har flyttet, sluttet i en rolle, eller ikke lenger er en du stoler på. Generer et helt nytt sett, flytt midlene til den nye SLIP-39-lommeboken, og destruer de gamle stålplatene fysisk (ikke bare kast dem).

Komplett Python-prosjekt: SLIP-39-verktøy for offline bruk

Under følger et samlet, fungerende kommandolinjeverktøy du kan kjøre helt offline for å generere, verifisere og gjenopprette SLIP-39-deler. Lagre koden som slip39_verktoy.py og kjør den på den frakoblede maskinen du satte opp i steg 1. Verktøyet er bevisst holdt enkelt: to kommandoer, ingen skjulte nettverkskall, og alle standardverdier eksponert som argumenter du kan overstyre, slik at du selv kan lese og forstå hver linje før du stoler på den med en ekte hemmelighet.

#!/usr/bin/env python3
import argparse
import os
from shamir_mnemonic import generate_mnemonics, combine_mnemonics


def cmd_generate(args):
    master_secret = os.urandom(args.bytes)
    groups = [(args.threshold, args.shares)]
    result = generate_mnemonics(
        group_threshold=1,
        groups=groups,
        master_secret=master_secret,
        passphrase=args.passphrase.encode(),
        iteration_exponent=args.iterations,
    )
    print(f"Generert {args.shares} deler, terskel {args.threshold}:\n")
    for i, share in enumerate(result[0], start=1):
        print(f"--- Del {i} ---")
        print(share)
        print()


def cmd_verify(args):
    shares = args.shares
    secret = combine_mnemonics(shares, passphrase=args.passphrase.encode())
    print(f"Rekonstruksjon vellykket. Hemmeligheten er {len(secret)} byte.")


def main():
    parser = argparse.ArgumentParser(description="Offline SLIP-39-verktoy")
    sub = parser.add_subparsers(dest="command", required=True)

    gen = sub.add_parser("generate", help="Generer nye SLIP-39-deler")
    gen.add_argument("--shares", type=int, default=3)
    gen.add_argument("--threshold", type=int, default=2)
    gen.add_argument("--bytes", type=int, default=16, help="16=128-bit, 32=256-bit")
    gen.add_argument("--passphrase", type=str, default="")
    gen.add_argument("--iterations", type=int, default=1)
    gen.set_defaults(func=cmd_generate)

    ver = sub.add_parser("verify", help="Kombiner deler for a bekrefte gjenoppretting")
    ver.add_argument("shares", nargs="+", help="En eller flere SLIP-39-mnemoniske deler")
    ver.add_argument("--passphrase", type=str, default="")
    ver.set_defaults(func=cmd_verify)

    args = parser.parse_args()
    args.func(args)


if __name__ == "__main__":
    main()

Bruk verktøyet slik for å generere et 2-av-3-oppsett med en 128-bit hemmelighet:

python3 slip39_verktoy.py generate --shares 3 --threshold 2 --bytes 16

Og slik verifiserer du at to av delene faktisk rekonstruerer hemmeligheten, ved å lime inn de to delene som argumenter til verify-kommandoen. Dette scriptet rører aldri nettverket, skriver ingenting til disk med mindre du selv legger til det, og kan trygt kjøres på en Live-USB som slettes etter bruk.

Ønsker du å utvide verktøyet selv, er naturlige neste steg å legge til en --groups-flagg for multi-gruppe-oppsett, en funksjon som skriver ut delene direkte til en utskriftsvennlig PDF-mal, eller en kommando som validerer et enkelt ord mot SLIP-39-ordlisten uten å avsløre resten av frasen. Hold deg unna avhengigheter du ikke kan lese koden til, siden hele poenget med et offline-verktøy er at du skal kunne stole på hver linje som kjører.

Før du stoler på verktøyet med en reell hemmelighet, kjør en fullstendig runde med testdata: generer et sett med generate, noter delene manuelt slik du ville gjort i praksis, tast dem inn på nytt, og kjør verify med nøyaktig det du skrev ned. Denne øvelsen fanger opp både feil i selve koden og feil i din egen håndskrift, lenge før noe av verdi står på spill.

Ofte stilte spørsmål

Er SLIP-39 det samme som en vanlig seed-frase delt i to?

Nei. Hvis du fysisk river en seed-frase i to biter, avslører hver bit fortsatt halvparten av ordene. Med SLIP-39 gir enhver mengde deler under terskelen null informasjon om hemmeligheten, matematisk sett, ikke bare praktisk sett.

Kan jeg konvertere en eksisterende BIP-39-frase til SLIP-39?

Ikke direkte gjennom standard SLIP-39-biblioteket. Du må opprette en helt ny SLIP-39-lommebok og flytte midlene dit i en egen transaksjon. Enkelte tredjepartsverktøy tilbyr en slik konvertering, men de er ikke del av den offisielle referanseimplementasjonen fra Trezor.

Hvor mange deler og hvilken terskel bør jeg velge?

Et vanlig utgangspunkt for enkeltpersoner er 2-av-3. Det tåler tap av én del uten å miste tilgang, samtidig som en tyv som finner én del ikke får noe. Familier som planlegger arv, bruker ofte flere grupper med egne terskler i stedet for ett enkelt sett.

Må jeg ha en Trezor for å bruke SLIP-39?

Nei. Du kan generere og kombinere SLIP-39-deler helt offline med Python-biblioteket shamir-mnemonic, uten noen hardware-lommebok i det hele tatt. Trezor Model T, Safe 3, Safe 5 og Safe 7 tilbyr native støtte som gjør at hemmeligheten aldri vises på en tilkoblet datamaskin, men det er ikke et krav for å bruke standarden.

Hva skjer hvis jeg mister for mange deler?

Faller du under terskelen, er hemmeligheten tapt for godt, akkurat som om du mistet en vanlig seed-frase. Dette er grunnen til at valg av terskel er en avveining: en lav terskel gjør gjenoppretting enklere, men senker også antallet deler en angriper trenger å samle inn.

Er SLIP-39 sikkert nok for større beholdninger?

For privatpersoner og familier er SLIP-39 en solid, godt dokumentert standard. Institusjoner og virksomheter med krav om at ingen enkelt part noensinne ser hele nøkkelen, selv under signering, bør i tillegg vurdere MPC-baserte løsninger som brukes i profesjonell custody.

Hva gjør jeg hvis en del blir stjålet, men jeg fortsatt har nok deler igjen?

Flytt midlene så raskt som mulig. En stjålet del alene gir ikke tilgang under terskelen, men du bør likevel behandle hendelsen som en reell trussel. Generer et helt nytt SLIP-39-sett med nye deler, flytt beholdningen over til den nye lommeboken, og destruer både de gamle delene og den kompromitterte lommeboken permanent.

Kan jeg bruke SLIP-39 sammen med en passordfrase?

Ja. Legger du til en passordfrase oppå SLIP-39-hemmeligheten, kreves både nok deler og riktig passordfrase for å få tilgang. Husk at en glemt passordfrase er like ødeleggende her som i et vanlig BIP-39-oppsett.

Hvor lang tid tar en full gjenoppretting i praksis?

Selve inntastingen av terskelantallet deler tar typisk 5-10 minutter på en Trezor-enhet, forutsatt at du har delene lett tilgjengelig og lesbare. Legger du til reisetid for å hente deler fra en bankboks eller et annet oppbevaringssted, bør du regne timer eller dager for et fullt geografisk spredt oppsett. Dette er nettopp derfor en testet gjenoppretting i forkant er så viktig, den avdekker den praktiske tidsbruken før du er avhengig av den.