Vad är stealth addresses?

Ett stealth address är en engångsadress som skapas automatiskt för varje enskild Monero-transaktion. Mottagarens publika adress, den som delas med omvärlden, syns aldrig på blockkedjan. I stället publiceras en unik adress per betalning, och bara mottagaren kan koppla den adressen till sin plånbok.

Tekniken eliminerar adressklustring som analysmetod. Chainalysis och liknande tjänster bygger sin Bitcoin-spårning på att en adress återkommer på kedjan och att transaktioner från samma adress knyts samman. Med stealth addresses finns det inget att klustrera: varje output är kryptografiskt separat och ser ut som en slumpmässig nyckel för en utomstående.

Jämförelsen med Bitcoin är tydlig. En Bitcoin-adress syns i klartext i varje transaktion den deltar i. Blockchain.com, Blockchair och dedikerade kedjeanayltiker lagrar hela adresshistoriken. En Monero stealth address är unik per transaktion och avslöjar ingenting om mottagarens identitet, balans eller transaktionsmönster.

Stealth addresses är ett av fyra sekretesslager i Monero. Ring signatures döljer avsändaren, RingCT krypterar beloppen och Bulletproofs komprimerar bevisens storlek. Alla lager är obligatoriska och aktiva i varje transaktion. En fullständig genomgång av hur lagren hänger samman finns i guiden om Moneros integritet.

Hur fungerar det tekniskt?

Stealth addresses bygger på Diffie-Hellman nyckelutbyte, samma kryptografiska princip som används för att förhandla krypteringsnycklar i TLS. I Moneros implementation sker beräkningen över den elliptiska kurvan Ed25519.

Flödet ser ut så här: avsändaren väljer ett slumpmässigt tal, transaktionsnyckeln r, och publicerar den korresponderande publika nyckeln rG på blockkedjan som en del av transaktionsposten. Sedan beräknar avsändaren engångsadressen P med formeln P = H(rA) + B, där A är mottagarens publika view key, B är mottagarens publika spend key och H är en kryptografisk hashfunktion.

Resultatet P ser ut som en slumpmässig punkt på kurvan för alla som inte har tillgång till mottagarens privata view key a. Mottagarens plånbok beräknar samma formel men från sin sida: H(aR) + B, där R är den publika transaktionsnyckeln och a är den privata view key. Tack vare Diffie-Hellman gäller att rA = aR, och plånboken får fram samma P och kan bekräfta att outputen tillhör den.

Plånboken skannar varje nytt block och testar varje output mot sin view key. Det kallas scanning och är den enda metoden att hitta inkommande betalningar. Det finns ingen central server som notifierar mottagaren. Ju fler outputs per block, desto mer beräkningsarbete krävs vid synkronisering. Optimeringen view tags, som beskrivs längre ned, adresserar den flaskhalsen.

View key och spend key

Varje Monero-plånbok innehåller fyra nycklar: privat view key, publik view key, privat spend key och publik spend key. De två privata nycklarna härleds matematiskt från plånbokens seed och styr helt olika rättigheter.

Privat view key ger läsrättighet. Den som har a kan beräkna vilka outputs på kedjan som tillhör plånboken och se inkommande belopp, men inte skicka XMR. Det är möjligt att skapa en view-only wallet genom att importera enbart privat view key, utan att exponera privat spend key. Den konfigurationen passar revisorer, arbetsgivare eller system som behöver bekräfta inkommande betalningar utan att riskera att medlen försvinner vid ett intrång.

Privat spend key krävs för att signera transaktioner och flytta XMR. Utan spend key är outputs låsta. En hårdvaruplånbok som Ledger eller Trezor håller privat spend key i ett Secure Element-chip som aldrig exponeras utanför enheten, även om datorn är komprometterad. Mer om plånboksarkitekturer finns i guiden om Monero-plånbok.

Uppdelningen i view key och spend key är en designprincip som inte finns i Bitcoin på samma sätt. I Bitcoin krävs den privata nyckeln för att både spåra och spendera. Moneros separation ger ett extra lager av flexibilitet för organisationer, börser och custodial-tjänster som hanterar XMR i stor skala.

En viktig detalj: privat view key avslöjar alla inkommande transaktioner men inte utgående. En fullständig transaktionshistorik, inklusive utgående, kräver antingen tillgång till privat spend key eller att plånboken sparar sina egna utgående transaktioner lokalt. Monero block explorer och hur view key används praktiskt beskrivs i guiden om Monero block explorer.

Subadresser

En subadress är en härledd adress från samma plånbok. Tekniken introducerades i Monero 2017 och ersatte det äldre systemet med integrerade adresser för de flesta användningsfall. Subadresser genereras deterministiskt från plånbokens spend key och ett index: (account, subaddress_index).

Användningsfallet är att separera inkommande betalningar från olika källor utan att röja kopplingen. En person som tar emot betalningar från en arbetsgivare, donationer från allmänheten och fakturor från kunder kan ge varje källa en unik subadress. Alla tre subadresser synkroniseras till samma plånbok och saldo utan att ett externt verktyg kan avgöra att de är kopplade till varandra.

Subadresser skiljer sig från vanliga adresser i ett viktigt hänseende: stealth address-beräkningen för en subadress använder subadressens publika spend key B' direkt, i stället för att addera H(rA) till den primära spend key B. Det gör att plånboken kan identifiera vilken subadress en betalning är riktad till, vilket är nödvändigt för att hålla redovisningen separerad per källa.

En plånbok stöder i princip ett obegränsat antal subadresser. Praktiska plånböcker som Monero GUI, Feather Wallet och Cake Wallet tillåter namngivna subadresser och grupperar dem i konton, vilket underlättar bokföringen. Det är kryptografiskt omöjligt för en utomstående att avgöra att två subadresser tillhör samma plånbok.

View tags 2022

View tags introducerades i Monero-nätverksuppgraderingen i augusti 2022, samma hardfork som höjde ring size till 16. Uppgraderingen var ett svar på ett konkret prestandaproblem: stealth address-scanning kräver en fullständig Diffie-Hellman-beräkning per output, och antalet outputs per block hade vuxit med ökad nätverksanvändning.

Mekaniken är enkel. Avsändaren beräknar ett hashvärde av den delade hemligheten rA och tar den första byten som en view tag, T. Den byten inkluderas i klartexten i transaktionsposten på blockkedjan. Mottagarens plånbok beräknar sin förväntade view tag för varje output och jämför: om byten inte stämmer hoppas outputen över utan att den fullständiga Diffie-Hellman-beräkningen görs.

Resultatet är att plånboken skippar ungefär 255 av 256 outputs direkt med minimal beräkningskostnad. Outputs som passerar view tag-kontrollen behandlas med full kryptografisk verifiering. Sammantaget reduceras scanningstiden med ungefär 40 procent, ett mätbart genombrott för mobila enheter med begränsad CPU och batteritid.

View tags avslöjar ingen information om mottagaren. Taggen är en hash av den delade hemligheten, inte av mottagarens nyckel, och en utomstående kan inte använda taggen för att korrelera outputs till en specifik plånbok. Integritetsegenskaperna hos stealth addresses förblir intakta.

Vanliga frågor om stealth addresses

Vad är ett stealth address i Monero?

Ett stealth address är en engångsadress som genereras automatiskt för varje enskild Monero-transaktion. Avsändaren beräknar adressen från mottagarens publika nycklar via Diffie-Hellman nyckelutbyte, och resultatet ser slumpmässigt ut för alla utom mottagaren. Mottagarens faktiska adress syns aldrig på blockkedjan, vilket gör adressklustring omöjlig.

Vad är skillnaden mellan view key och spend key?

View key och spend key är de två privata nycklarna i varje Monero-plånbok. Privat view key ger enbart läsrättighet: den som har den kan se inkommande transaktioner men inte spendera XMR. Privat spend key krävs för att skicka XMR och används för att signera transaktioner. Uppdelningen gör det möjligt att dela view key med en revisor utan att ge tillgång till medlen.

Vad är en subadress i Monero?

En subadress är en härledd adress från samma Monero-plånbok. Subadresser används för att separera inkommande betalningar från olika källor, till exempel donationer och arbetsgivarutbetalningar, utan att avslöja att de tillhör samma plånbok. Alla subadresser synkroniseras automatiskt till plånbokens gemensamma saldo och historik. En utomstående kan inte avgöra att två subadresser tillhör samma ägare.

Vad är view tags och vad förbättrade de?

View tags är en byte prefix som lades till i Monero-uppgraderingen i augusti 2022. Plånboken kontrollerar view tag-byten innan den kör den fullständiga kryptografiska beräkningen på en output. Om view tag inte stämmer hoppas outputen över direkt. Optimeringen reducerar scanningstiden med ungefär 40 procent, vilket märks tydligast på mobila enheter och vid synkronisering av stora delar av blockkedjan. Vill du förstå hur hela integritetssystemet hänger samman läser du mer i guiden om Moneros integritet.