Get in touch!

Use the form on the right to contact us.

We answer emails as soon as we can. See the contact page for more information.

           

123 Street Avenue, City Town, 99999

(123) 555-6789

[email protected]

 

You can set your address, phone number, email and site description in the settings tab.
Link to read me page with more information.

Blog

RFC 7905 - Nya kryptosviter för TLS och DTLS

Joachim Strömbergson

I natt blev en ny RFC publicerad av IETF som standard. RFC 7905 ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS) beskriver en ny uppsättning kryptosviter för TLS. Kryptosviterna bygger på strömkryptot ChaCha20 och ger så kallat AEAD-skydd, dvs autenticerad kryptering vilket ger både konfidentialitet och integritetsskydd samt stöd för metadata som också autenticeras. Och viktigt nog, autenticeringen sker på det krypterade datat (Encrypt then Autenticate - EtA). De specificerade kryptosviterna finns även anpassade för DTLS.

Publiceringen innebär slutet på det arbete Simon Josefsson, Nikos Mavrogiannopoulos, jag (Joachim Strömbergson) samt Adam Langley och Wan-Teh Chang startade för flera år sedan.

Grunden för mitt engagenang startade med att strömkryptot RC4 visade sig vara helt trasigt och inte längre var lämpligt för bland annat TLS. Konsekvensen var att det enda symmetriska krypto som fanns kvar i TLS var AES. AES är ett mycket bra krypto. Men det började bli en rejäl monokultur runt AES, om AES skulle visa sig vara svagt skulle konsekvenserna bli stora. Även om någon av andra skäl vill använda något annat symmetriskt krypto i TLS blir det problem. Ett konkret skäl att inte vilja köra AES är att få bra prestanda, speciellt på mindre processorer som inte har hårdvarustöd för AES. RC4 i jämförelse är mycket snabbare.

Samtidigt hade EU-projektet ECRYPT avslutat sitt eSTREAM-projekt där ett stort arbete lagts ned på att få fram nya, moderna strömkrypton. Krypton som både ger bra prestanda på stora och små processorer och med bra säkerhetsmarginal.

Vi började därför titta på att specificera kryptosviter för TLS som istället använde något av strömkryptona från eSTREAM. Av flera skäl (prestanda, skalbar säkerhet, bra licenskrav, väl specad beskrivning) valde vi Salsa20. Samtidigt blev det tydligt att vi även behövde en autenticeringsfunktion. Om jag minns rätt var det Nikos som presenterade och argumenterade för att använda Poly1305. Då byggde dock funktionen på AES som intern nyckelderiveringsfunktion (Key Derivation Function - KDF).

Så småningom visade det sig att det pågick ett närmast identiskt, långt gånget arbete med att ta fram nya kryptosviter av Adam Langley och Wan-Teh Chang. Ansträngningarna kombinerades och så småningom ändrades även kryptot till versionen av Salsa20 som kallas ChaCha20. ChaCha20 ersatte även AES som KDF i Poly1305.

De nya kryptosviterna finns för TLS 1.2 och Google har sedan tidigare implementerat kryptosviterna i Chrome. Men kryptosviterna är speciellt viktiga för nästa version av TLS, TLS 1.3 som förhoppningsvis kommer att standardiseras i år eller i början av 2017. ChaCha20-Poly1305 finns även implementerat i flera kryptobibliotek exempelvis Nettle.

För den som vill veta mer om implementationen av ChaCha20 och Poly1305 finns en mycket bra informations-RFC tidigare publicerad av Adam Langley och Yoav Nir. I RFC 7539, ChaCha20 and Poly1305 for IETF Protocols finns inte bara detaljerad information om ChaCha10 och Poly1305 med ChaCha20 utan det finns även testvektorer för alla delar. RFCn inkluderar även lite prestandainformation:

Prestandasiffror från RFC 7539. Notera att för x86-processorer utan AES-NI-instruktioner kommer ChaCha20-Poly1305 att ge bättre prestanda.

Prestandasiffror från RFC 7539. Notera att för x86-processorer utan AES-NI-instruktioner kommer ChaCha20-Poly1305 att ge bättre prestanda.

Om man vill göra en hårdvaruimplementation har jag sedan tidigare utvecklat en öppen implementation av ChaCha20. Att bygga Poly1305 och en core som tillhandahåller hela ChaCha20-Poly1305-funktionaliteten utifrån ChaCha20 borde vara ett förhållandevis enkelt arbete. Om sommaren blir svenskt regnig kan det mycket väl finnas en sådan core färdig till hösten.