Blockchain Immutability Myth

Kilde node: 1738527

Hvor fleksibel tenkning er å foretrekke fremfor dogmatisme

"Det høyeste gode, enn det det ikke er noe høyere, er blokkjeden, og følgelig er det uforanderlig godt, derav virkelig evig og virkelig udødelig."
- Saint Augustine, De natura boni, i, 405 C.E. (med mindre endringer)

Hvis du spør noen som er godt informert om egenskapene til blokkjeder, vil ordet "uforanderlig" alltid vises i svaret. På vanlig engelsk brukes dette ordet for å betegne noe som aldri kan endres eller endres. I en blokkjede refererer det til den globale loggen over transaksjoner, som er opprettet ved konsensus mellom kjedens deltakere. Grunntanken er denne: når en blokkjedetransaksjon har mottatt et tilstrekkelig nivå av validering, sikrer noe kryptografi at den aldri kan erstattes eller reverseres. Dette markerer blokkjeder som forskjellige fra vanlige filer eller databaser, der informasjon kan redigeres og slettes etter eget ønske. Eller så sier teorien.

I blokkjededebattens heseblesende arena har uforanderlighet blitt en kvasi-religiøs doktrine – en kjernetro som ikke må rokkes ved eller stilles spørsmål ved. Og akkurat som doktrinene i vanlige religioner, bruker medlemmer av motsatte leire uforanderlighet som et våpen for hån og latterliggjøring. Det siste året har vært vitne til to fremtredende eksempler:

  • Forkjempere for kryptovaluta hevder at uforanderlighet bare kan oppnås gjennom desentraliserte økonomiske mekanismer som bevis-på-arbeid. Fra dette perspektivet er private blokkjeder latterlige fordi de er avhengige av den kollektive gode oppførselen til en kjent gruppe validatorer, som tydeligvis ikke kan stole på.
  • Hån strømmet på ideen om en redigerbar (eller mutbar) blokkjede, der retroaktive endringer kan gjøres i transaksjonshistorikken under visse betingelser. Mockers stilte spørsmålet: Hva kan være vitsen med en blokkjede hvis innholdet enkelt kan endres?

For de av oss på sidelinjen er det gøy å se gjørmekastingen. Ikke minst fordi begge disse kritikkene er rett og slett feil, og stammer fra en grunnleggende misforståelse av naturen til uforanderlighet i blokkjeder (og faktisk ethvert datasystem). For de som har kort tid, her er bunnlinjen:

I blokkjeder er det ikke noe slikt som perfekt uforanderlighet. Det virkelige spørsmålet er: Hva er forholdene under hvilke en bestemt blokkjede kan og ikke kan endres? Og stemmer disse forholdene med problemet vi prøver å løse?

For å si det på en annen måte, en blokkjedes transaksjoner er ikke skrevet inn i Guds sinn (med unnskyldninger til Augustine ovenfor). I stedet avhenger kjedens oppførsel av et nettverk av fysiske datasystemer, som alltid vil være sårbare for ødeleggelse eller korrupsjon. Men før vi går inn i detaljene om hvordan, la oss fortsette med å samle opp noen grunnleggende om blokkjeder selv.

Blokkkjeder i korte trekk

En blokkjede kjører på et sett med noder, som hver kan være under kontroll av et eget selskap eller organisasjon. Disse nodene kobles til hverandre i et tett peer-to-peer-nettverk, slik at ingen individuelle noder fungerer som et sentralt kontroll- eller feilpunkt. Hver node kan generere og digitalt signere transaksjoner som representerer operasjoner i en slags hovedbok eller database, og disse transaksjonene forplanter seg raskt til andre noder på tvers av nettverket på en sladderlignende måte.

Hver node verifiserer uavhengig hver ny innkommende transaksjon for gyldighet, når det gjelder: (a) dens overholdelse av blokkjedens regler, (b) dens digitale signatur og (c) eventuelle konflikter med tidligere sett transaksjoner. Hvis en transaksjon består disse testene, går den inn i nodens lokale liste over foreløpige ubekreftede transaksjoner ("minnepoolen"), og vil bli videresendt til sine jevnaldrende. Transaksjoner som mislykkes avvises direkte, mens andre hvis evaluering avhenger av usynlige transaksjoner blir plassert i et midlertidig oppbevaringsområde ("foreldreløse pool").

Med periodiske intervaller genereres en ny blokk av en av "validator"-nodene på nettverket, som inneholder et sett med ennå ubekreftede transaksjoner. Hver blokk har en unik 32-byte identifikator kalt en "hash", som bestemmes helt av blokkens innhold. Hver blokk inkluderer også et tidsstempel og en lenke til en tidligere blokk via sin hash, og skaper en bokstavelig "blokkkjede" som går tilbake til begynnelsen.

Akkurat som transaksjoner, forplanter blokker seg over nettverket på en peer-to-peer-måte og blir uavhengig verifisert av hver node. For å bli akseptert av en node, må en blokk inneholde et sett med gyldige transaksjoner som ikke er i konflikt med hverandre eller med de i de tidligere koblede blokkene. Hvis en blokk består denne og andre tester, legges den til nodens lokale kopi av blokkjeden, og transaksjonene innenfor blir "bekreftet". Alle transaksjoner i nodens minnepool eller foreldreløse basseng som er i konflikt med de i den nye blokken, blir umiddelbart forkastet.

Hver kjede bruker en slags strategi for å sikre at blokker genereres av flere deltakere. Dette sikrer at ingen individuelle eller små grupper av noder kan ta kontroll over blokkjedens innhold. De fleste offentlige blokkjeder som bitcoin bruker "proof-of-work" som gjør at blokker kan lages av alle på Internett som kan løse et meningsløst og djevelsk vanskelig matematisk puslespill. Derimot, i private blokkjeder, har blokker en tendens til å bli signert av en eller flere tillatte validatorer, ved å bruke et passende opplegg for å forhindre minoritetskontroll. Vårt produkt multikate bruker en teknikk kalt "mining diversity" som krever at en minimum andel av de tillatte validatorene deltar for å skape en gyldig kjede.

Avhengig av konsensusmekanismen som brukes, kan to forskjellige validatornoder generere motstridende blokker samtidig, som begge peker til den samme forrige. Når en slik "gaffel" skjer, vil forskjellige noder i nettverket se forskjellige blokker først, noe som fører til at de har forskjellige meninger om kjedens nyere historie. Disse gaflene blir automatisk løst av blockchain-programvaren, med konsensus gjenvunnet når en ny blokk kommer til en av grenene. Noder som var på den kortere grenen spoler automatisk tilbake sin siste blokk og spiller de to blokkene på nytt på den lengre. Hvis vi er virkelig uheldige og begge grenene utvides samtidig, vil konflikten løses etter den tredje blokken på en gren, eller den etter den, og så videre. I praksis faller sannsynligheten for at en gaffel vedvarer eksponentielt når lengden øker. I private kjeder med et begrenset sett med validatorer kan sannsynligheten reduseres til null etter et lite antall blokkeringer.

Ikke desto mindre er det viktig å huske at hver node kjører på et datasystem som eies og kontrolleres av en bestemt person eller organisasjon, så blokkjeden kan ikke styrke det å gjøre hva som helst. Hensikten med kjeden er å hjelpe ærlige noder til å holde seg synkroniserte, men hvis nok av deltakerne velger å endre reglene, kan ingen jordisk makt stoppe dem. Det er derfor vi må slutte å spørre om en bestemt blokkjede er virkelig og absolutt uforanderlig, fordi svaret alltid vil være nei. I stedet bør vi vurdere forhold der en bestemt blokkjede kan endres, og sjekk deretter om vi er komfortable med disse forholdene for brukssaken vi har i tankene.

Mulighet i offentlige kjeder

La oss gå tilbake til de to eksemplene som er nevnt i innledningen, der læren om uforanderlighet har blitt brukt som grunnlag for latterliggjøring. Vi begynner med påstanden om at de konsensuelle valideringsprosedyrene som brukes i tillatte blokkjeder ikke kan frembringe den "sanne uforanderligheten" som er lovet av offentlige kjeder.

Denne kritikken løses lettest ved å peke på sårbarheten til selve offentlige blokkjeder. Ta for eksempel Ethereum-blokkjeden, som led en ødeleggende utnyttelse i juni 2016. Noen fant et kodehull i en smart kontrakt kalt «The DAO», der nesten 250 millioner dollar hadde blitt investert, og begynte å tappe pengene sine i fart. Selv om dette klart krenket intensjonene til kontraktens skapere og investorer, er det vilkår og betingelser stolte på mantraet om at "kode er lov". Lov eller ikke, mindre enn en måned senere ble Ethereum-programvaren oppdatert for å hindre hackeren i å trekke tilbake den "tjente" kryptovalutaen.

Selvfølgelig kunne ikke denne oppdateringen håndheves, siden hver Ethereum-bruker kontrollerer sin egen datamaskin. Ikke desto mindre ble det offentlig støttet av Vitalik Buterin, Ethereums grunnlegger, så vel som mange andre samfunnsledere. Som et resultat overholdt de fleste brukere, og blokkjeden med de nye reglene beholdt navnet "Ethereum". Et mindretall var uenig i endringen og fortsatte blokkjeden i henhold til de opprinnelige reglene, og fikk tittelen "Ethereum Classic". Et mer nøyaktig valg av navn kan være "Ethereum kompromittert" og "Ethereum den rene". Uansett er demokrati demokrati, og (det pragmatiske og populære) "Ethereum" er nå verdt over ti ganger (den idealistiske, men sidelinjen) "Ethereum Classic".

La oss nå vurdere en mindre velvillig måte som offentlig blokkjede-uforanderlighet kan undergraves. Husk at blokkoppretting eller "gruvedrift" i bitcoin og Ethereum bruker et proof-of-work-skjema, der et matematisk problem må løses for å generere en blokk og kreve belønningen. Verdien av denne belønningen gjør uunngåelig gruvedrift til et våpenkappløp, med gruvearbeidere som konkurrerer om å løse problemene raskere. For å kompensere justerer nettverket periodisk vanskelighetsgraden for å opprettholde en konstant hastighet på blokkoppretting, en gang hvert 10. minutt i bitcoin eller 15 sekunder i Ethereum.

De siste 5 årene, bitcoins vanskelighet har økt med en faktor på 350,000 1,089×. I dag foregår det store flertallet av bitcoin-gruvedrift på dyr spesialisert maskinvare, på steder der været er kaldt og elektrisitet er billig. For eksempel vil $XNUMX XNUMX kjøpe deg en Antminer S9, som miner blokker 10,000 10 ganger raskere enn noen stasjonær datamaskin og brenner XNUMX ganger mer elektrisitet. Alt dette er langt unna de demokratiske idealene som bitcoin ble skapt med, selv om det gjør blokkjeden ekstremt sikker.

Vel, litt sikkert. Hvis noen ønsket å undergrave uforanderligheten til bitcoin-blokkjeden, her er hvordan de ville gjort det. For det første ville de installere mer gruvekapasitet enn resten av nettverket til sammen, og skape et såkalt "51% angrep". For det andre, i stedet for å delta åpent i gruveprosessen, ville de utvinne sin egen "hemmelige gren", som inneholder hvilke transaksjoner de godkjenner og sensurerer resten. Til slutt, når ønsket tid hadde gått, ville de anonymt kringkaste sin hemmelige filial til nettverket. Siden angriperen har mer gruvekraft enn resten av nettverket, vil grenen deres inneholde flere bevis på arbeid enn den offentlige. Hver bitcoin-node vil derfor bytte over, siden reglene for bitcoin sier at den vanskeligere grenen vinner. Alle tidligere bekreftede transaksjoner som ikke er i den hemmelige grenen vil bli reversert, og bitcoinen de brukte kan sendes andre steder.

Nå vil de fleste bitcoin-troende le, fordi jeg skrev "installer mer gruvekapasitet enn resten av nettverket til sammen" som om dette er trivielt å oppnå. Og de har et poeng, for det er det selvfølgelig ikke lett, ellers ville mange allerede ha gjort det. Du trenger mye gruveutstyr og mye strøm for å drive det, som begge koster massevis av penger. Men her er det ubeleilige faktum at de fleste bitcoinere børster over: For regjeringen i ethvert mellomstort land er pengene som kreves fortsatt småpenger.

La oss anslå kostnadene for et 51% angrep som reverserer et år med bitcoin-transaksjoner. Med dagens bitcoin-pris på $1500 og en belønning på 15 bitcoins (inkludert transaksjonsgebyrer) per 10-minutters blokk, tjener gruvearbeidere rundt $1.2 milliarder per år ($1500 × 15 × 6 × 24 × 365). Forutsatt (med rimelighet) at de ikke taper penger totalt sett, eller i det minste ikke taper mye, betyr dette at de totale gruvearbeiderutgiftene også må ligge i samme område. (Jeg forenkler her ved å amortisere engangskostnadene for å kjøpe gruveutstyr, men $400 millioner vil kjøpe deg nok Antminer 9-er til å matche det nåværende bitcoin-nettverkets gruvekapasitet, så vi er i rett ballpark.)

Tenk nå på rapporter at bitcoin blir brukt av kinesiske borgere for å omgå landets kapitalkontroller. Og tenk videre på at den kinesiske regjeringens skatteinntekter er omtrent $3 billioner per år. Ville et ikke-demokratisk lands regjering bruke 0.04 % av budsjettet sitt på å stenge ned en populær metode for ulovlig å ta penger ut av det landet? Jeg vil ikke påstå at svaret er nødvendigvis ja. Men hvis du tror svaret er helt sikkert nei, du er mer enn litt naiv. Spesielt med tanke på at Kina angivelig sysselsetter 2 millioner mennesker til politiinnhold på Internett, som utgjør 10 milliarder dollar/år hvis vi antar en lav lønn på 5,000 dollar. Det setter kostnadene på 1.2 milliarder dollar ved å reversere et år med bitcoin-transaksjoner i perspektiv.

Selv denne analysen underslår problemet, fordi den kinesiske regjeringen kan undergrave bitcoin-nettverket mye enklere og billigere. Det ser ut til at flertallet av bitcoin-gruvedrift finner sted i Kina, på grunn av lavkost vannkraft og andre faktorer. Gitt noen få stridsvogner og platonger, kan Kinas hær fysisk gripe disse bitcoin-gruveoperasjonene og bruke dem til å sensurere eller reversere transaksjoner. Mens den bredere bitcoin-verdenen utvilsomt vil legge merke til, er det ingenting den kan gjøre uten å fundamentalt endre styringsstrukturen (og dermed naturen) til selve bitcoin. Hva var det med sensurfrie penger?

Ingenting av dette skal tolkes som en kritikk av bitcoins design, eller en spådom om at en nettverkskatastrofe faktisk vil skje. Bitcoin blockchain er et bemerkelsesverdig stykke ingeniørkunst, kanskje til og med perfekt for formålet dens skaper(e) hadde i tankene. Og hvis jeg måtte sette penger på det, ville jeg satset på at Kina og andre regjeringer sannsynligvis vil ikke angripe bitcoin på denne måten, fordi det ikke er i deres endelige interesse å gjøre det. Mer sannsynlig vil de fokusere sin vrede på de mer usporbare søskenbarnene som Dash, Zcash og Monero.

Ikke desto mindre setter bare muligheten for denne formen for interferens doktrinen om kryptovalutaens uforanderlighet i stedet. Bitcoin blockchain og lignende er ikke uforanderlige i noen perfekt eller absolutt forstand. Snarere er de uforanderlige så lenge ingen store nok og rike nok bestemmer seg for å ødelegge dem. Likevel, ved å stole på økonomisk kostnadene ved å undergrave nettverket, cryptocurrency-uforanderlighet tilfredsstiller de spesifikke behovene til folk som ikke ønsker å stole på myndigheter, selskaper og banker. Det er kanskje ikke perfekt, men det er det beste de kan gjøre.

Overskrivbare private kjeder

La oss nå gå videre til private blokkjeder, designet for behovene til myndigheter og store selskaper. Vi kan begynne med å merke oss at fra disse organisasjonenes perspektiv er uforanderlighet basert på bevis på arbeid en kommersiell, lovlig og regulatorer ikke-starter, fordi det lar enhver (tilstrekkelig rik) aktør anonymt angripe nettverket. For institusjoner kan uforanderlighet bare være grunnet i god oppførsel til andre lignende institusjoner, som de kan signere en kontrakt med og saksøke om nødvendig. Som en bonus er private blokkjeder langt mindre kostbare å drive, siden blokker bare trenger en enkel digital signatur fra nodene som godkjenner dem. Så lenge et flertall av validatornodene følger reglene, er sluttresultatet sterkere og billigere uforanderlighet enn noen offentlig kryptovaluta kan tilby.

Selvfølgelig er uforanderlighet fortsatt lett å undergrave hvis alle deltakerne i en kjede bestemmer seg for å gjøre det sammen. La oss forestille oss en privat blokkjede brukt av seks sykehus for å samle data om infeksjoner. Et program på ett sykehus skriver et stort og feilaktig datasett til kjeden, noe som er en kilde til ulempe for de andre deltakerne. Noen få telefonsamtaler senere er IT-avdelingene på alle sykehusene enige om å "spole tilbake" nodene sine én time tilbake, slette de problematiske dataene og deretter la kjeden fortsette som om ingenting hadde skjedd. Hvis alle sykehusene er enige om å gjøre dette, hvem skal da stoppe dem? Faktisk, bortsett fra de involverte ansatte, hvem vil i det hele tatt vite at det skjedde? (Det bør bemerkes at noen konsensusalgoritmer liker PBFT gir ikke en offisiell mekanisme for tilbakeføringer, men dette hjelper ikke med styring siden noder fortsatt står fritt til å omgå reglene.)

Vurder nå et tilfelle der de fleste av deltakerne i en privat blokkjede samtykker i å spole tilbake og fjerne noen transaksjoner, men noen få tilbakeholder sitt samtykke. Siden hver organisasjons node er under dens endelige kontroll, kan ingen tvinge minoriteten til å slutte seg til konsensus. Men ved å holde seg til prinsippene deres, vil disse brukerne finne seg selv på en gaffel og bli ignorert av alle andre. I likhet med de dydige tilhengerne av Ethereum Classic, kan deres plass i himmelen godt være sikret. Men her på jorden vil de bli ekskludert fra konsensusprosessen som kjeden ble utplassert for, og kan like gjerne gi opp helt. Den eneste praktiske anvendelsen av transaksjoner utenfor konsensus er å tjene som bevis i en domstol.

Med dette i tankene, la oss snakke om det andre tilfellet der læren om blokkjede-uforanderlighet har blitt brukt til å latterliggjøre ideer. Her refererer vi til Accentures idé om ved hjelp av en kameleon-hash slik at en blokk begravd dypt i en kjede enkelt kan skiftes ut. Den primære motivasjonen, som beskrevet av David Treat, er å tillate at en gammel problematisk transaksjon raskt og effektivt kan fjernes. I henhold til ordningen, hvis en blokkerstatning skjer, blir det etterlatt et "arr" som alle deltakere kan se. (Det skal bemerkes at eventuelle senere transaksjoner som avhenger av den slettede, også må fjernes.)

Det er vanskelig å overvurdere hvor mange mennesker som hånet denne ideen da den ble kunngjort. Twitter og LinkedIn var forferdet og forferdet. Og jeg snakker ikke bare om kryptopublikummet, som har sportslig glede i å håne alt relatert til enterprise blockchains. Ideen ble også kritisert av private blockchain-forkjempere.

Og likevel, under de rette forholdene, kan ideen om å tillate at blokkjeder endres med tilbakevirkende kraft via kameleon-hasher gi perfekt mening. For å forstå hvorfor, begynner vi med et enkelt spørsmål: i denne typen blokkjeder, hvem ville egentlig ha makten til å erstatte gamle blokker? Det kan tydeligvis ikke være noen uidentifisert nettverksdeltaker, fordi det vil gjøre kjeden ustyrlig.

Svaret er at en kameleon-hash bare kan brukes av de som har dens hemmelige nøkkel. Nøkkelen kreves for at en ny versjon av en blokk, med forskjellige transaksjoner, skal kunne gis samme kameleon-hash som før. Selvfølgelig vil vi sannsynligvis ikke ha sentralisert kontroll i en blokkjede, så vi kan gjøre ordningen sterkere ved å ha flere kameleon-hasher per blokk, hvis nøkkel holdes av en annen part. Eller vi kan bruke hemmelig deling teknikker for å dele en enkelt kameleon-hash-nøkkel mellom flere parter. Uansett kan kjeden konfigureres slik at en tilbakevirkende blokkerstatning kun kan skje dersom et flertall av nøkkelinnehavere godkjenner det. Begynner dette å høres kjent ut?

Tillat meg å gjøre parallellen mer eksplisitt. La oss si at vi deler kontroll over kameleon-hasher mellom de samme valideringsnodene som er ansvarlige for blokkoppretting. Dette betyr at en gammel blokk kun kan erstattes hvis et flertall av validerende noder godtar å gjøre det. Og likevel, som vi diskuterte tidligere, noen blockchain kan allerede modifiseres med tilbakevirkende kraft av et flertall av validerende noder, via tilbakespolings- og avspillingsmekanismen. Så når det gjelder styring, Chameleon hashes underlagt en validator majoritet gjør ingen forskjell i det hele tatt.

Hvis ja, hvorfor bry seg med dem? Svaret er: ytelsesoptimalisering, fordi kameleon-hasher gjør at gamle blokker kan erstattes i en kjede langt mer effektivt enn før. Tenk deg at vi må fjerne en transaksjon fra starten av en blokkjede som har kjørt i 5 år. Kanskje dette skyldes EUs retten til å bli glemt lovgivning, som tillater enkeltpersoner å få sine personopplysninger fjernet fra selskapenes registre. Noder kan ikke bare slette den fornærmende transaksjonen fra diskene sine, fordi det vil endre den tilsvarende blokkens hash og bryte en kobling i kjeden. Neste gang blokkjeden ble skannet eller delt, ville alt falle fra hverandre.

For å løse dette problemet uten kameleon-hasher, må noder omskrive den tidlige blokken uten den problematiske transaksjonen, beregne blokkens nye hash, og deretter endre hashen som er innebygd i neste blokk for å matche. Men dette vil også påvirke neste blokks egen hash, som må beregnes på nytt og oppdateres i den påfølgende blokken, og så videre hele veien langs kjeden. Selv om denne mekanismen i prinsippet er mulig, kan det ta timer eller dager å fullføre i en blokkjede med millioner av blokker og transaksjoner. Enda verre, mens den er engasjert i denne prosessen, kan en node være ute av stand til å behandle ny innkommende nettverksaktivitet. Så kameleon-hasher gir en langt mer beregningseffektiv måte å oppnå det samme målet på. Hvis du ser for deg en dårlig transaksjon som en stein begravd mange mil under jorden, kan kameleonhasj teleportere steinen til overflaten, i stedet for å få oss til å grave helt ned, hente steinen og fylle hullet.

Uforanderlighet er nyansert

Ved å gjennomgå risikoen for proof-of-work blokkjeder og den tekniske verdien av kameleon-hasj, håper jeg å ha overbevist deg om at blokkjedens uforanderlighet er langt mer nyansert enn et "ja eller nei"-spørsmål. Å sitere Simon Taylor siterer Ian Grigg, må spørsmålet alltid være "hvem er du og hva vil du oppnå?"

For cryptocurrency-troende som ønsker å unngå statlig utstedte penger og det tradisjonelle banksystemet, gir det perfekt mening å tro på en offentlig proof-of-work blockchain, hvis uforanderlighet hviler på økonomi snarere enn pålitelige parter. Selv om de må leve med muligheten for at en stor regjering (eller annen velstående aktør) kan ødelegge nettverket, kan de trøste seg med at dette ville vært en smertefull og kostbar operasjon. Og uten tvil håper de at kryptovalutaer bare vil bli sikrere, ettersom verdien og gruvekapasiteten deres fortsetter å vokse.

På den annen side, for bedrifter og andre institusjoner som ønsker å trygt dele en database på tvers av organisasjonsgrenser, gir bevis-på-arbeid uforanderlighet ingen mening i det hele tatt. Ikke bare er det forbløffende dyrt, men det lar enhver tilstrekkelig motivert deltaker anonymt ta kontroll over kjeden og sensurere eller reversere transaksjoner. Det disse brukerne trenger er uforanderlighet basert på god oppførsel til et flertall av identifiserte validatornoder, støttet av kontrakter og lov.

Til slutt, for de fleste tillatte blokkjedebrukstilfeller, ønsker vi sannsynligvis ikke at validatornoder enkelt og billig skal kunne erstatte gamle blokker i kjeden. Som Dave Birch sa da, "måten å korrigere en feil debet er med en korrekt kreditering", i stedet for å late som om debet aldri fant sted. Ikke desto mindre, for de tilfellene hvor vi trenger den ekstra fleksibiliteten, hjelper kameleon-hasher å gjøre blokkjeder til et praktisk valg.

Legg inn kommentarer på Linkedin.

Tidstempel:

Mer fra multikate