I dag, den 24. november 2019, markeres den officielle frigivelse af Bitcoin Core 0.19.0, den 19. store frigivelse af Bitcoins originale softwareklient, der blev lanceret af Satoshi Nakamoto for næsten 11 år siden og stadig den dominerende Bitcoin-implementering på netværket i dag. (Skønt på grund af et problem, der kom frem i et sent stadium af frigivelsesprocessen Bitcoin Core 0.19.0, er den version, der frigives til download, faktisk 0.19.0.1.) Overvåget af Bitcoin Core hovedopretholder Wladimir van der Laan, denne seneste store udgivelse blev udviklet af over hundrede bidragydere over et tidsrum på omkring seks måneder.
Resultatet af 550 flettede pullanmodninger, Bitcoin Core 0.19.0, inkluderer en række forbedringer af ydeevnen, moderniseringer og fejlrettelser samt andre ændringer.
Her er en oversigt over nogle af disse ændringer.
Bech32 adresser som standard i GUI
Adresseformatet “bech32” (BIP 173) var allerede introduceret i Bitcoin Core 0.16.0, udgivet i begyndelsen af 2018, men er nu for første gang indstillet som standardindstilling i Bitcoin Core tegnebog Grafisk brugergrænseflade (GUI).
Bech32-adresser er adresserne, der starter med “bc1” (i modsætning til adresser, der starter med en 1 eller en 3.) Disse adresser er også lidt længere, men bruger færre forskellige tegn end det aktuelle adresseformat, da der ikke længere er en forskel mellem små og store bogstaver. (Dette reducerer potentialet for menneskelige fejl, f.eks. Når en adresse læses højt.) Bech32-adresser er også designet til at begrænse fejl forårsaget af skrivefejl..
Derudover tilbyder bech32 fordele i forbindelse med SegWit. Nogle tegnebøger, der tilbyder SegWit – inklusive Bitcoin Core-tegnebogen som standard indtil nu – gør det ved at “pakke” det ind i P2SH-udgange (med adresser, der starter med en “3”). For at bruge bitcoin fra en sådan adresse skal brugerne afsløre et stykke kode – “indløs script” – for at vise, at bitcoin virkelig var låst inde i et SegWit-output. Med de nye bech32-adresser kan dette trin springes over, hvilket betyder, at udgifter fra et SegWit-output vil kræve, at der sendes lidt mindre data over Bitcoin-netværket og inkluderes i blockchain. Dette gør transaktioner fra en bech32-output endnu billigere end SegWit-transaktioner fra en P2SH-output.
Da ikke alle bitcoin-tegnebøger understøtter afsendelse til bech32-adresser endnu, vil Bitcoin Core 0.19.0-brugere stadig være i stand til valgfrit at generere en PS2H-modtageradresse i stedet gennem en skift i GUI.
To blok-kun udgående forbindelser ekstra som standard
Bitcoin-noder forbinder til flere andre Bitcoin-noder og danner sammen peer-to-peer-netværket. Over dette netværk deler noderne blokke, transaktioner og nogle yderligere transaktionsdata.
Men peer-to-peer-netværket kan være udsat for angreb, såsom “partitioneringsangreb.” Hvis en hacker kontrollerer et stort nok antal Bitcoin-noder, kan det potentielt “afskære” visse dele af Bitcoin-netværket (eller endda bestemte noder) ved at opfange al trafik til det. Den partitionerede del af netværket kunne for eksempel narre for at acceptere en mindretalskæde – ikke den længste kæde – som gyldig, hvilket igen kunne åbne døren for dobbelt-udgiftsangreb..
Et partitioneringsangreb modvirkes, hvis en node i den partitionerede del af netværket endda kun har en forbindelse til en ærlig node på hovednetværket. Det ville derefter modtage og videresende alle transaktioner og blokke og ville afvise mindretalskæden til fordel for majoritetskæden.
En måde at indse dette på og at gøre partitioneringsangreb sværere at trække af er at få noder til at etablere flere forbindelser til hinanden. Flere forbindelser kommer dog med flere krav til hukommelse og båndbredde; der er en kompromis.
Bitcoin Core 0.19.0 øger standard for udgående forbindelser med to, men – smart – disse to ekstra forbindelser bruges kun til at videresende blokke – de videresender ikke transaktioner eller yderligere transaktionsdata. Dette øger de tilføjede båndbreddekrav minimalt, mens det stadig gør partitioneringsangreb sværere at trække med succes.
Bloom-filtre udfaset
Bitcoin Core er en fuld nodeimplementering, hvilket betyder, at den downloader og verificerer alle Bitcoin-blokke. Selvom dette er optimalt sikkert, gør det det ikke særlig velegnet til computere med lav ressource, f.eks. Mobiltelefoner. Mobile tegnebøger (såvel som nogle stationære tegnebøger) er derfor normalt “lette klienter”: disse downloader kun transaktioner og (dele af) blokke, der specifikt vedrører dem.
En måde at gøre dette på er med Bloom Filters, der bruges af et par tegnebøger i dag. Kort sagt er Bloom Filters et kryptografisk trick, der bruges af lette klienter til at anmode om relevante data fra mere eller mindre tilfældige fulde noder på netværket. Desværre er det imidlertid blevet klart gennem årene, at Bloom-filtre er ret uvenlige for privatlivets fred: De afslører i det væsentlige alle deres adresser til den fulde knude. Oven i det koster support til Bloom Filter-anmodninger en pris i CPU og diskplads til fulde noder – uden direkte fordel for selve hele noden.
Især af sidstnævnte grund understøtter Bitcoin Core 0.19.0 ikke længere Bloom Filter-anmodninger som standard. Brugere kan stadig skifte standard til at understøtte Bloom Filters, hvis de vælger det.
Det er også værd at bemærke, at Bitcoin-netværket som helhed næsten helt sikkert vil fortsætte med at understøtte Bloom-filtre i de kommende år, selvom ingen skifter standardindstillinger, simpelthen fordi ældre Bitcoin Core-noder typisk fortsætter med at være i brug i årevis, efter at nye versioner er blevet frigivet.
Mere support til kompakt blokfiltrering på klientsiden
Et alternativ til Bloom Filters er en nyere løsning kaldet “kompakt blokfiltrering på klientsiden” (BIP 158). Kompakt blokfiltrering på klientsiden vender i det væsentlige Bloom Filter-tricket på hovedet. I stedet for at lette tegnebøger opretter filtre til at sende til fulde noder, opretter fulde noder filtre til hver blok. Lette klienter kan derefter bruge disse filtre til at finde ud af, om transaktioner, der er relevante for dem, muligvis er sket i en blok. I så fald henter den lette tegnebog hele blokken og vælger relevante transaktionsdata ud af den.
Bitcoin Core 0.19.0 bevæger sig fortsat mod understøttelse af kompakt blokfiltrering på klientsiden. Bitcoin Core-noder kunne allerede oprette filtre lokalt, men Bitcoin Core 0.19.0-brugere kan nu også gøre dem tilgængelige via et fjernprocedurkald (RPC) til applikationer, der kører oven på noden (som en tegnebog).
Filtrene er dog endnu ikke tilgængelige over peer-to-peer-netværket. Dette betyder, at en Bitcoin Core 0.19.0-node ikke automatisk sender filtre til andre Bitcoin-brugeres tegnebøger. Denne funktion kan føjes til en fremtidig Bitcoin Core-udgivelse – eller Bitcoin Core 0.19.0-brugere kan vælge at tilbyde funktionen gennem en brugerdefineret applikation, der kører oven på deres Bitcoin Core-node..
Support til betalingsprotokol deaktiveret fra GUI
Betalingsprotokollen (BIP 70) blev designet for flere år siden for at forbedre Bitcoins betalingsoplevelse. Ud over den almindelige betaling, som sendes til Bitcoin-netværket, kommunikerer en bruger og en købmand yderligere oplysninger om en betaling, såsom en menneskelig læsbar destinationsadresse (navnet på den handlende) og en refusionsadresse, hvis noget går galt med købet.
Mens Bitcoin Core integrerede betalingsprotokollen i sin GUI, blev standarden aldrig bredt vedtaget. I stedet bruger de fleste tegnebøger stadig den mere grundlæggende URI-ordning (BIP 21) for at modtage betalinger: Det klikbare link eller det scannelige QR-kodeformat, der for eksempel kommunikerer betalingsadressen og beløbet. (Den eneste bemærkelsesværdige undtagelse i dag er betalingsprocessor BitPay, som ikke understøtter URI-ordningen, men bruger en ændret version af BIP 70.)
Måske vigtigere end manglen på vedtagelse har BIP 70-betalingsprotokollen lidt under et antal sikkerheds- og privatlivssårbarheder i årenes løb. Nogle tegnebøger har derfor aktivt afvist at implementere protokollen. Bitcoin Core havde også planlagt at afskrive BIP 70 i nogen tid, da vedligeholdelse af det ikke blev anset for en anstrengelse værd – men BitPays vedtagelse af det stoppede denne proces.
I Bitcoin Core 0.19.0 er BIP 70 som standard fjernet fra GUI. Bitcoin Core 0.19.0-brugere skal kompilere deres node med en speciel konfiguration for stadig at gøre brug af funktionen.
Andet…
Udover de ovennævnte ændringer kommer Bitcoin Core 0.19.0 med en lang liste med mindre forbedringer og moderniseringer.
Det er nu muligt at starte en beskåret node straks fra opsætningen, for eksempel, som lader brugere med lidt diskplads let starte en ny Bitcoin-node. Bitcoin Core 0.19.0 inkluderer også nye funktioner til PSBT-protokollen (Partially Signed Bitcoin Transactions), som er nyttig til multisignatur- og CoinJoin-transaktioner. Ligeledes er der flere forbedringer i domænet for tegnebogsbeskrivere, hvilket er særligt nyttigt for programmører, der arbejder med Bitcoin-applikationer. Bitcoin Core 0.19.0-noder accepterer og videresender også transaktioner, der bruger en fremtidig SegWit-version for at sikre, at kommende opgraderinger forløber glat.
For en mere omfattende liste over opgraderinger, se også Udgivelsesnoter for Bitcoin Core 0.19.0.1.
Tak til Sjors Provoost for feedback om denne artikel.