mboost-dp1

SXC - theRIAA

Sikkerhed i mikrokerne bevist matematisk

- Via ZDNet Asia - , redigeret af Emil , indsendt af arne_v

Der findes software i næsten al slags elektronik, og udviklerne af softwaren har alle det mål, at den skal være så fejlfri som muligt. Nu har forskere i Australien fundet en metode til at sikre dette, på en helt ny måde.

Normalt testes kode igen og igen for at sikre, det er fejlfrit, men de australske forskere fra it-forskningscenteret NICTA har nu kunnet bevise det matematisk.

Den kode, de har bevist, er sikret mod en lang række fejl, er en mikrokerne bestående af 7.500 linjer kode kaldet seL4 (secure embedded L4). Beviset blev skabt af programmet Isabelle, der er lavet til at bevise matematiske teoremer.

Australierne er ikke de eneste, der forsker på området, men de er de første, der har ført bevis for en fuldt fungerende mikrokerne og ikke kun dele af en kerne.





Gå til bund
Gravatar #1 - Zeales
19. aug. 2009 07:19
Isabelle lyder rimelig lækker.
Gravatar #2 - gensplejs
19. aug. 2009 07:32
håber satme ikke de nogensinde vil tilføje noget nyt i deres kode... for hvis de ikke har nogen automatiske tests kan de lige så fint starte forfra med deres bevis hvis de ændre så meget som et komma i koden.
Gravatar #3 - TrolleRolle
19. aug. 2009 07:34
#2 Det kan de da sagtens. For så sender de jo bare Isabelle på opgaven igen og laver et nyt bevis.

Det fantastiske i nyheden er jo netop at man kan BEVISE at programmet er fejlfrit og ikke bare teste det lidt hist og pist som man normalt er nødt til at nøjes med at gøre.
Gravatar #4 - kalleMOD
19. aug. 2009 07:49
Og hvad sker der så hvis man kører Isabelle på sig selv? I følge det jeg har lært i kurset beregnelighed og logik så kan et programs korrekthed ikke bevises matematisk fordi halting-problemet ikke kan løses :)
Gravatar #5 - Lobais
19. aug. 2009 07:54
#4 Halting problemet siger, at man ikke kan lave en algoritme, der fastslår om en hvilken som helst maskine vil afslutte. Det siger ikke noget om, at det ikke kan lade sig gøre i enkelttilfælde.
Gravatar #6 - f-style
19. aug. 2009 07:57
Så skal det bare skrives så det kunne analyserer hele styresystemer :).
Ville være sejt hvis det rent faktisk ville virke, så kunne windows, linux, bsd, unix ect. køres igennem :). Men det er nok bare utopi, da der er alt for meget kode at skulle analyserer.
Gravatar #7 - PaNiX
19. aug. 2009 08:12
Jeg sidder og prøver at forstå betydnignen af det her.

Hvis vi nærmer os et system, der matematisk kan validere, at et system er fejlfrit, så må man kunne nå ufatteligt langt ved at køre det på operativsystemet og de få grundlæggende libraries, som det meste software er baseret på.

Dog må fejlfrit dække over det rent software-mæssige, for hvad sker der, hvis man har en driver, der modtager forkert input fra hardware. Tager den højde for det?

Kan Isabella også fortælle hvilke dele af koden, der giver problemer ifht. beviset eller kommer den bare til sandt/falsk? (Jeg går ud fra, at den giver nogle hints siden seL4 er valideret - det er jo en umulig opgave med kun sandt/falsk).

Jeg ved, at det her er lidt langt ude i fremtiden, men det er da interessant nok at tænke over...
Gravatar #8 - mireigi
19. aug. 2009 08:16
f-style (6) skrev:
Så skal det bare skrives så det kunne analyserer hele styresystemer :).
Ville være sejt hvis det rent faktisk ville virke, så kunne windows, linux, bsd, unix ect. køres igennem :). Men det er nok bare utopi, da der er alt for meget kode at skulle analyserer.


Testen afslører kun om der er programmatiske fejl som kan forårsage nedbrud ved runtime. Der testes ikke for brugerfejl.

Et program der er fejlfrit vil stadig fejle hvis brugeren er tilstrækkelig dum og forsøger at udføre handlinger der ikke kan lade sig gøre.
Gravatar #9 - sonicwave
19. aug. 2009 08:32
#7 / #8: Ikke nødvendigvis. Hvis et program er valideret, så er det valideret - under alle de former for input der er mulige i modellen.

Hvis man fx har et tastatur som input-enhed, så er der ingen input herfra der vil kunne få et valideret program til at fejle - i hvert fald så længe man ikke har simplificeret testen ved at begrænse mulige input til de "mest sandsynlige" (fx sat en øvre grænse for hvor hurtigt tastaturet kan spytte data ud eller lignende, eller gået ud fra at tastaturet altid giver gyldige tegn).
Gravatar #10 - gensplejs
19. aug. 2009 08:37
TrolleRolle (3) skrev:
#2 Det kan de da sagtens. For så sender de jo bare Isabelle på opgaven igen og laver et nyt bevis.

Det fantastiske i nyheden er jo netop at man kan BEVISE at programmet er fejlfrit og ikke bare teste det lidt hist og pist som man normalt er nødt til at nøjes med at gøre.

1. Uden at vide det præcist vil jeg antage at der går temmelig lang tid på at beregne sådan et bevis.
2. Det er ikke nyt. Lignende beviser af micro kerner er lavet i 70'erne. Problemet er hvad man vil bevise. Jeg har forsøgt mig lidt med at opstilning af matematiske krav til kode. Det er absolut ikke trivielt!
3. Med mindre Isabelle's egen kode er bevist, har de ikke bevist en hat (jeg kan her afsløre at det er den ikke men de mener den er meget gennemtestet :-) ).
4. Det er ikke bevist at systemet er sikkert. Det eneste isabelle kan bevise er at systemet overholder en række matematisk opstillede krav.
Hvis man siger at systemet er sikkert så antager man samtidig at rækken af opstillede krav (brugernes input til isabelle) er fejlfri og at de matematiske krav beskriver alle aspekter af "sikkerhed" perfekt.
Gravatar #11 - Tore
19. aug. 2009 09:24
Da jeg læste datalogi, havde vi et fag der hed Matematik og Beregninger, som var et matematisk system udviklet af D.Sc Klaus Grue der kunne bevise programmer.. Absolut ikke noget nyt, I flere år et 1 semesters fag på Datalogi ved KU...
http://www.diku.dk/hjemmesider/ansatte/grue/cv.htm...
Gravatar #12 - astrodude
19. aug. 2009 10:33
Et korrekthedsbevis er ikke noget bevis for, at processoren altid virker. Det kan kun bevise påstande, som at ... hvis de enkelte operationer har disse givne egenskaber, så har sammensætningen af operationer nogle andre egenskaber.

Hvis antagelserne om de enkelte operationer ikke holder stik (som f.eks. ved hardwarefejl pga. overophedning osv) så kan beviset ikke bruges til noget.

F.eks. kan man se i "stack dumps" fra mange fejl, som f.eks. rapporteres til Microsoft, at processoren har gjort noget, der ikke burde kunne lade sig gøre.
Gravatar #13 - Tore
19. aug. 2009 11:06
#12 Man skal se matematiske beviser af programmer som noget der foregår i en perfekt verden, egentlig en form for udtømmende unit test, på en fejlfri maskine..

Det her handler om hvorvidt programmet er skrevet korrekt, ikke om hardwaren fungere korrekt.
Gravatar #14 - peking
19. aug. 2009 12:28
#4 I tillæg til #5 kunne man tilføje at det de laver er en over approximation (eller underapproximation), det vil sige de vurderer en given egenskab for en større mængde tilstande end programmet kan komme i. Da egenskaben kan bevises for en mængde af tilstande, hvor mængden af tilstande programmet kan komme i er indeholdt, må det være indeholdt i programmet. Søger vi, uden at finde, efter tilstanden BAD i en overapproximation, findes den ej heller i en delmængde af den gennemsøgte tilstand.

Samme principt holder for under approximationer - hvis tilstanden BAD _findes_ i en underapproximation, i en delmængde af programmets tilstande, findes den også i programmets tilstande.

Disse approximationer gør spørgsmålet afgørbart. Tænk på din compiler hvis du laver:
int a, b;
a =1;
if(a==1) b=0;
a=b;

simple analyser vil fortælle dig at b ikke er initialiseret før brug, selvom vi vil kunne se at den altid er.



Gravatar #15 - arne_v
19. aug. 2009 13:13
#11

Ideen er gammel.

Men det er så vidt vides første gang at det er gjordt for en OS kerne som kan bruges i praksis.
Gravatar #16 - arne_v
19. aug. 2009 13:14
#0

For de nysgerrige er der flere detaljer i linkesene nederst på:
http://ertos.nicta.com.au/research/l4.verified/

Gravatar #17 - rmariboe
20. aug. 2009 01:53
#4 << Uddybning af #5: Halting-problemet beskriver intet om (algoritmer vedrørende) programmers "korrekthed". Halting-problemet beskæftiger sig udelukkende med algoritmer vedr. programmers afslutning og siger, at der ikke kan skrives én generel algoritme, som viser, hvorvidt et vilkårligt program vil afslutte.
Således taler problemet ikke imod at udvikle en sådan algoritme for hvert tænkeligt program.

#14 << Hvad mener du med, at "b" ikke er initialiseret "før brug"? Simpel analyse i mit hoved fortæller mig, at du initialiserer variablene "a" og "b" på første linie ved "int a, b" - og jeg gætter, at du med "brug" mener det øjeblik, hvor "b" tildeles værdi..?
Mener du, at compileren ikke internt initialiserer "b", før den ser, at variablen rent faktisk benyttes, og - i bekræftende fald - hvad er relevansen?
Gravatar #18 - arne_v
20. aug. 2009 02:03
rmariboe (17) skrev:
Simpel analyse i mit hoved fortæller mig, at du initialiserer variablene "a" og "b" på første linie ved "int a, b"


Ikke i C.
Gravatar #19 - rmariboe
20. aug. 2009 02:22
#18 << Det var ikke nogen forklaring; venligst uddyb..?
Jeg savner især svar på
- "Hvad mener du med, at "b" ikke er initialiseret "før brug"?"
- "Mener du, at compileren ikke internt initialiserer "b", før den ser, at variablen rent faktisk benyttes,"
og
- "hvad er relevansen?"
Gravatar #20 - arne_v
20. aug. 2009 03:08
#19

I C er a og b ikke initialiseret af:

int a,b;
Gravatar #21 - peking
20. aug. 2009 20:02
#17 ok. I mit hovede er "int a, b;" det man kalder 'erklæringen' (det nogle (fejlagtigt?) kalder deklareringen) af variablerne, hvor tilskrivningen af værdier til disse variable vil være en initialisering.
Iflg denne "definition" vil de være uinitialiserede da de ikke har fået tilskrevet en værdi endnu, (eller set som uinitialiserede, f.eks. i sprog som Java - ihvertfald med den compiler jeg har ved hånde, eclipse, brokke sig lidt (om JVM specifikationen siger noget om initialisering af variable er imho ligegyldigt, det var for illustration, uanset hvor dårligt eksemplet er)).
Min pointe var, at give et bud på en over/under approximation eller "safe approximation" eller hvad man vælger at kalde det, som uddybende forklaring af tidligere.

Et eksempel, hvor alle tilstande programmet faktisk kan nå i er sikre, men hvor man har en statisk analyse der tager en mængde tilstande der er skarpt større end det faktiske tilstandsrum i.e. tager "else" branchen med, hvor variablen 'b' ikke er initialiseret. (I følge min til eksemplet hjemmestrikkede semantik )

Denne approximation gør at man kan appriximere sig frem til svar til hvad Rice's theorem siger ikke kan lade sig gøre (uafgørbare sprøgsmål).

Det kan meget vel være det ikke var det bedste eksempel, specielt hvis der manglede forklaring. Beklager hvis det var utydeligt, håber det er bedre nu.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login