Anpassning av GNU Nettle för inbyggda system

GNU Nettle är ett minimalistiskt kryptobibliotek som tillhandahåller kryptografiska byggstenar: hashfunktioner (som MD5, SHA1, och SHA256), krypteringsalgoritmer (som DES, AES, Camellia, Salsa20) och digitala signaturer (som RSA och DSA).

Inbäddade och mobila enheter blir allt vanligare. Samtidigt är avlyssning av Internetkommunikation på frammarsch. Effektiv kryptering även på mobila enheter är därför avgörande för att skydda privat kommunikation.

Många inbäddade och mobila enheter, bland annat smartphones och hemmaroutrar, använder processorer ur ARM-familjen. GNU Nettle har fram tills det här projektet saknat optimeringar specifikt för dessa processorer.

Mål och syfte

Projektets övergripande syfte är att göra kryptering med hjälp av biblioteket GNU Nettle mer effektivt för inbyggda system och mobila enheter. De två konkreta delmålen för projektet är:

  • Att implementera digitala signaturer baserade på elliptiska kurvor (ECC). Jämfört med traditionella digitala signaturer med RSA, så ger elliptiska kurvor motsvarande säkerhet med betydligt mindre processortid. Även minnesåtgång, både för själva beräkningen, och för nycklar och signaturer, är betydligt mindre.
  • Att optimera andra viktiga kryptografiska byggstenar, som krypteringsalgoritmen AES och hashfunktionerna SHA1 och SHA256, för ARM-arkitekturen.

Testplatform är en Pandaboard med en 1 GHz ARM Cortex-A9, och operativsystemet Debian GNU/Linux.

Resultat

Den senaste releasen av GNU Nettle, nettle-2.7, innehåller stöd för ECDSA-signaturer enligt standardkurvor, där den kanske viktigaste är secp256r1. Nedan benchmark för digitala signaturer, för några olika algoritmer och nyckelstorlekar:

nisse@arm:~/build/nettle$ examples/hogweed-benchmark 
           name size   sign/ms verify/ms
            rsa 1024    0.4958    9.1339
            rsa 2048    0.0831    2.6843
  rsa (openssl) 1024    0.0955    1.8990
  rsa (openssl) 2048    0.0159    0.5903
            dsa 1024    0.9833    0.5008
          ecdsa  192    1.4045    0.5592
          ecdsa  224    1.0153    0.4155
          ecdsa  256    0.8105    0.3271
          ecdsa  384    0.3348    0.1355
          ecdsa  521    0.1833    0.0748
ecdsa (openssl)  224    0.1843    0.1522
ecdsa (openssl)  384    0.0693    0.0585
ecdsa (openssl)  521    0.0261    0.0214
nisse@arm:~/build/nettle$

För etablerade kryptografiska primitiver, som hashfunktionerna SHA1 och SHA256, och krypterinsalgoritmen AES, har implementation i ARM-assembler gett 10%–30% uppsnabbning. Mer dramatiska uppsnabbningar blir det för funktioner som kan dra nytta av ARM-utökningen Neon, som ger tillgång till 64-bits operationer och parallella SIMD-instruktioner (Single Instruction Multiple Data). För effektiv kryptering och meddelandeautenticering kan man till exempel välja Salsa20 (58 MByte/s), och UMAC-128 (349 MByte/s).

Projektet drevs avNiels Möller, South Pole Consulting AB.

Läs mer