Formell verifisering av Ethereum 2.0 fase 0 spesifikasjonene

blogg 1NyheterUtviklereEnterpriseBlockchain ExplainedBegivenheter og konferanserPresseNyhetsbrev

Abonner på vårt nyhetsbrev.

Epostadresse

Vi respekterer personvernet ditt

HjemBloggBlockchain utvikling

Formell verifisering av Ethereum 2.0 fase 0 spesifikasjonene

En oppdatering fra ConsenSys R&D om deres innsats for å gi pålitelighet til Beacon Chain og kjernen til Eth2. av Franck Cassez 10. august 2020 Publisert 10. august 2020

dafny verifisere blogghelt

Det automatiserte verifiseringsteamet på ConsenSys R&D har jobbet med en formell spesifikasjon og verifisering av Beacon Chain i noen måneder. Vi er glade for å kunne rapportere at det er gjort store fremskritt, og selv om vi ikke har fullført det ennå, har vi klart å utvikle oss en solid og formelt bekreftet kjerne av Beacon Chain. For første gang gir vårt arbeid et uovertruffen nivå av pålitelighet til kjernefundamentene i Eth2.0-infrastrukturen.

Metodikk

Verifisering kontra testing

Vi brukte prisvinnende verifiseringsbevisst programmeringsspråk Dafny å skrive en formell (funksjonell og logisk) spesifikasjon av hver Beacon Chain-funksjon, en gjennomføring av hver funksjon, og a bevis at implementeringen er i samsvar med spesifikasjonene. Vi har med andre ord matematisk bekreftet fraværet av feil. Implementeringene som vi etter hvert har vist seg å være korrekte, er basert på de offisielle Eth2.0-spesifikasjonene med forbehold om at vi har løst og rapportert om noen feil og inkonsekvenser.

Metoden vår er annerledes enn å teste som vi matematisk bevise funksjonenes samsvar med spesifikasjonene, for alle innganger. Testing kan ikke variere over uendelig mange innganger, og kan som en konsekvens oppdage feil, men ikke bevise fraværet av feil.

Og det beste er at vi ikke trenger å publisere et papir eller å gjennomgå bevisene. Bevisene er en del av kodebasen og skrevet som programmer. Ja, i Dafny kan du skrive et bevis som et utviklervennlig program. Også, den bevis sjekkes mekanisk av en teoremprover, og gir ikke rom for ufullstendige eller mangelfulle bevis.

Eiendommer vi har bevist 

Egenskapene spenner fra fravær av regning under / overløp og indeksere utenfor grensene, samsvar for hver funksjon til logiske (første ordens logikk) pre / post-forhold (merkelise eksempel her), til mer komplekse som involverer funksjoners komposisjoner. For eksempel har vi følgende eiendommen til SSZ Serialiser / Deserialiser funksjoner: for hvert objekt x, Avserialisering (Serialisering (x)) = x, dvs. avserialisering av et serieobjekt returnerer det opprinnelige objektet. Vi har også etablert en antall invarianter, og brukte dem for å bevise at kjernevirksomheten til Beacon Chain og ForkChoice (state_transition, on_block) faktisk bygge en kjede av blokker: for hvilken som helst blokk b i butikken, danner forfedrene til b en endelig fullstendig ordnet sekvens som fører til genese-blokken, som er hovedegenskapen til en blockchain!

Fordelene med formell verifisering

Enhver formell metodist vil insistere på at verifisering er en sikkerhetspraksis. Her er nøyaktig hvordan denne metoden sikrer en sikker og pålitelig infrastruktur for Ethereum 2.0.

Funksjonell spesifikasjon

Først har vi løftet de offisielle Eth2.0-spesifikasjonene til a formell logisk og funksjonell spesifikasjon. For hver funksjon definerer vi formelt hva funksjonen forventes å beregne, ikke hvordan. Dette gir språkagnostiske utviklervennlige referansespesifikasjoner som kan brukes til å utvikle sikrere implementeringer, med mindre innsats. 

Modularitet

For det andre er våre spesifikasjoner, implementeringer og bevisarkitektur modulær. Som et resultat kan vi enkelt eksperimentere med nye implementeringer (f.eks. optimaliseringer) og sjekk deres innvirkning på det samlede systemet. Tenk på et smart hack for å implementere en funksjon? Endre implementeringen og be Dafny om å kontrollere at den fremdeles er i samsvar med spesifikasjonene. Hvis den gjør det, påvirkes ikke bevisene for komponentene som bruker denne funksjonen.

Kjørbarhet

For det tredje er implementeringene våre det kjørbar. Vi kan kompilere og kjøre et Dafny-program. Enda bedre, du kan automatisk generere kode på noen populære programmeringsspråk som C #, Go (og snart Java) fra Dafny-koden. Dette kan brukes til å utfylle eksisterende kodebaser eller til å generere sertifiserte tester. Implementeringen som skal testes, kan bruke våre beviste korrekte funksjoner til å beregne det forventede resultatet av en test og sjekke det mot sitt eget resultat.   

Alt på ett språk

Sist, men ikke minst, er kodebasen vår selvstendig. Den inneholder spesifikasjonene, implementeringene, dokumentasjonene og bevisene, alt på ett enkelt, lesbart, enkelt og semantisk veldefinert programmeringsspråk.

Spørsmål og betraktninger 

Hva med lyden til verifiseringsmotoren?

Du lurer kanskje på: “Hva om Dafny-kompilatoren / verifisereren er buggy?” Vi vet faktisk at Dafny er buggy (dafny repo problemer), men vi stoler ikke på fraværet av feil i Dafny. Vi stoler på at Dafny (og dens verifiseringsmotor) er det lyd. Sundhet betyr at når Dafny rapporterer at bevisene er korrekte, er de virkelig riktige. 

Hva om spesifikasjonen vi har skrevet ikke er den rette? 

I dette tilfellet vil vi bevise samsvar med et galt krav. Ja, dette kan skje, og det er ingen sølvkule som løser dette problemet. Som vi nevnte tidligere, er Dafny imidlertid kjørbar. Dette gjør at vi kan kjøre koden og få litt tillit til at spesifikasjonene våre er de riktige. Og spesifikasjonene våre er skrevet i første ordens logikk uten rom for tvist om betydningen, så hvis du merker et problem, gi oss beskjed, så ordner vi det.

Hva om Dafny ikke kan bevise at en implementering samsvarer med en spesifikasjon? 

Dette kan skje, men i dette tilfellet har Dafny noen tilbakemeldingsmekanismer for å undersøke hvilke trinn i et bevis som ikke kan verifiseres. Og til nå har vi alltid klart å lage bevis som Dafny automatisk kan sjekke.

Vi tar gjerne imot tilbakemeldingene dine, så sjekk ut vårt eth2.0-dafny depot. Vi har vært glade for å se utviklingen av Ethereum 2.0 nå de siste milepælene for testnett, og vi ser frem til å samarbeide med team i hele økosystemet for å sikre at neste fase av nettverket er bygget på et bunnsolid fundament.

Takk til mine lagkamerater Joanne Fuller, Roberto Saltini (Automated Verification team), Nicolas Liochon og til Avery Erwin for kommentarer til en foreløpig versjon av dette innlegget.

Hold deg oppdatert på Ethereum 2.0

Abonner på ConsenSys-nyhetsbrevet for å få de siste Eth2-nyhetene direkte til innboksen din. Ethereum 2.0 Forskning og utvikling Sikkerhet Nyhetsbrev Abonner på vårt nyhetsbrev for de siste Ethereum-nyhetene, bedriftsløsninger, utviklerressurser og mer. E-postadresse Eksklusivt innholdHvordan lage et vellykket Blockchain-produktWebinar

Hvordan lage et vellykket Blockchain-produkt

Hvordan sette opp og kjøre en Ethereum-nodeWebinar

Hvordan sette opp og kjøre en Ethereum-node

Hvordan lage din egen Ethereum APIWebinar

Hvordan lage din egen Ethereum API

Hvordan lage et sosialt tokenWebinar

Hvordan lage et sosialt token

Bruke sikkerhetsverktøy i smart kontraktutviklingWebinar

Bruke sikkerhetsverktøy i smart kontraktutvikling

Fremtiden for digitale eiendeler og deFiWebinar

Fremtidens økonomi: digitale eiendeler og deFi

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me