Abstract-This paper presenterar en ny ram för att bevisa specifikationer av säkerhetsprotokoll i beräkningsmodellen och genererarunnable implementations från sådana bevisade specifikationer. Vi förlitar oss på kontrollanten CryptoVerif för att bevisa specifikationen, och vi har implementerat en kompilator som översätter en CryptoVerif-specifikation till en implementering i OCaml. Vi har tillämpat denna kompilator på SSH Transport Layer-protokollet: vi bevisade autentiseringen av servern och sekretessen för sessionsnycklarna i detta protokoll och verifierade att den genererade implementeringen framgångsrikt interagerar med OpenSSH. Sekretessen för meddelanden som skickas över SSH-tunneln kan inte bevisas på grund av kända svagheter i SSH med CBC-mode-kryptering. Verifieringen av säkerhetsprotokoll är ett viktigt forskningsområde sedan 1990-talet: utformningen av säkerhetsprotokoll är notoriskt felbenägen, och fel kan få allvarliga konsekvenser. För att kontrollera protokollen har två huvudmodeller beaktats: den symboliska modellen och beräkningsmodellen. Den symboliska modellen representerar budskap som termer i en term algebra. Angriparen kan bara skapa termer i denna algebra, och så att den bara kan använda den kryptografiska primitiva definieras i den. Beräkningsmodellen är den modell som används av kryptografer, där meddelanden är bitsträngar och angripare är polynom-tid probabilistiska Turing maskiner. Bevis i den senare modellen är svårare än i den förra, men ger en mycket mer exakt analys av protokollet. Det räcker dock inte med att bevisa specifikationer för protokoll i sådana modeller. Även om specifikationen är korrekt, kan ett genomförande av protokollet vara osäkert, på grund av fel i genomförandeuppgifter som lämnats ospecificerade på specifikationsnivån, eller på grund av att specifikationen inte har genomförts korrekt. Det är därför viktigt att se till att genomförandet är säkert, och inte bara specifikationen. Därför är vårt mål att få protokoll implementeringar säkra i beräkningsmodellen. Det finns två sätt att få en säker implementering: skriva ett genomförande av ett protokoll, analysera det för att extrahera en protokollspecifikation och sedan bevisa denna specifikation, eller på annat sätt runt, skriva en specifikation, bevisa det korrekt, och sedan generera en implementering från det. Vi valde det senare sättet av två skäl. För det första anser vi att det är bättre att börja med att utforma ett protokoll, formalisera det, bevisa att det är formellt säkert, och först därefter genomföra det, än att börja med genomförandet. För det andra:
I REF utförs protokollverifiering i beräkningsmodellen för kryptografi, vilket är mer exakt än den symboliska modellen som används av JavaSPI.
From Computationally-proved Protocol Specifications to Implementations
{'venue': '2012 Seventh International Conference on Availability, Reliability and Security', 'journal': '2012 Seventh International Conference on Availability, Reliability and Security', 'mag_field_of_study': ['Computer Science']}