Det har meddelats att initiativet för att ersÀtta implementationerna av kryptografiska algoritmer som erbjuds i modulerna hashlib och hmac i Python har avslutats framgÄngsrikt. Arbetet med att övergÄ till funktioner med matematiska sÀkerhetsbevis har pÄgÄtt sedan 2022 och initierades efter att en buffertöverskridning upptÀcktes i implementationen av algoritmen SHA3, som anvÀnds i Python-modulen hashlib.
Kod med nya implementationer av kryptografiska hash-funktioner och HMAC-algoritmer (mekanism för meddelandebekrÀftelse) har antagits i huvudarkivet för projektet CPython. Alla standardhash-funktioner och HMAC i Python har ersatts med verifierade alternativ. Bland annat har en implementering av HMAC-BLAKE2 lagts till, som anvÀnder SIMD-instruktioner AVX2 för att pÄskynda berÀkningarna. Det förvÀntas att den verifierade koden kommer att inkluderas i höstlanseringen av Python 3.14.
De nya implementationerna av kryptografiska funktioner har överförts frÄn biblioteket HACL*, som utvecklas av forskare frÄn det franska statliga forskningsinstitutet för datavetenskap och automatiken (INRIA), en del av Microsoft Research och Carnegie Mellon University. Biblioteket HACL* stöder typiska kryptografiska funktioner, tillrÀckliga för att arbeta med TLS 1.3 och fullstÀndig stöd för API NaCl (Networking and Cryptography library), sÄsom Curve25519, Ed25519, AES-GCM, Chacha20, Poly1305, SHA-2, SHA-3, HMAC och HKDF. NÀr det gÀller prestanda Àr biblioteket HACL* nÀra OpenSSL, men i motsats till det senare ger det ytterligare garantier för tillförlitlighet och sÀkerhet.
Koden för HACL* Àr skriven i en delmÀngd av det funktionella sprÄket F*, som erbjuder ett system med beroende typer och specificeringar som gör det möjligt att stÀlla exakta specifikationer (matematisk modell) och garantera frÄnvaron av fel i implementationen med hjÀlp av SMT-formler och stödverktyg för bevisande. Referenskoden pÄ F* översÀtts till C-kod med hjÀlp av kompileraren KaRaMeL och Àr tillgÀnglig för integration med andra projekt.
Verifiering innebĂ€r att faststĂ€lla detaljerade specifikationer som beskriver alla möjliga beteenden hos programmet, samt att skapa ett matematiskt bevis för att koden som skrivits helt överensstĂ€mmer med de framtagna specifikationerna. Verifiering garanterar att programmet endast kommer att köras som utvecklarna avsett och att det saknar vissa klasser av fel, sĂ„som buffertöverflöd, pekardereferering, Ă„tkomst till redan frigjorda minnesomrĂ„den eller dubbel frigöring av minnesblock. Under kompileringen genomförs en strikt typ- och vĂ€rdekontroll â en komponent kommer aldrig att överföra parametrar som inte överensstĂ€mmer med specifikationen till en annan komponent eller fĂ„ tillgĂ„ng till interna tillstĂ„nd av andra komponenter.
ĂvergĂ„ngen till verifierad kod tog tvĂ„ och ett halvt Ă„r och krĂ€vde revidering av biblioteket HACL*, vars funktionalitet utvidgades med de nödvĂ€ndiga möjligheterna för en transparent ersĂ€ttning av den befintliga funktionaliteten i hashlib. Till exempel lades stöd för HMAC-strömmanvĂ€ndning till i HACL*, ytterligare driftslĂ€gen för Blake2-algoritmer infördes, en ny API för SHA3 implementerades som omfattade alla varianter av Keccak-familjen, nödvĂ€ndiga felmeddelandefunktioner tillhandahölls (till exempel vid problem med minnesallokering), och skript utvecklades för att automatisera överföringen av nya versioner av HACL* till Python-repot.
KĂ€lla: opennet.ru
