Uppdaterad hårdvaruimplementation av ChaCha

Nu finns det en uppdaterad hårdvaruimplementation av strömkryptot ChaCha från Secworks. Den nya versionen använder fyra parallella QR-moduler istället för en enda modul i den första versionen av implementationen.

I en Altera Cyclone IV GX ökar prestandan från 870 Mbps till 2,6 Gbps och detta med endast 5% mer hårdvaruresurser.

Skälet till detta är att den ARX-konstruktion (Addition, Rotation och XOR) som utgör kärnan i kryptot och finns i QR-modulen implementeras effektivt i FPGA-strukturen. Detta gör att den ökande mängden logik för de tre nya QR-modulerna i stort sett kompenseras av minskad logik för att välja ut operander (MUX-ar) till den enda QE-modulen. Motsvarande resultat såg vi när vi byggde ut hårdvaruimplementationen av den nyckelstyrda hashfunktionen SipHash från en till fyra parallella ARX-enheter. Men för SipHash minskade till och med totala antalet resurser.

Prestandamässigt ökade inte prestandan fyra gånger utan bara drygt tre gånger. Skälen till detta är att klockfrekvensen minskade något men även att det finns några cykler för att initiera och avsluta processningen. Dessa cykler går inte att parallellisera bort och tar allt större del av den totala latenstiden ju mer QR-processningen parallelliseras.

Det skulle gå att utöka till åtta stycken QR-moduler. Men detta skulle skapa direkta beroenden mellan par av QR-moduler och totala logikdjupet skulle fördubblas. Eftersom den längsta logikvägen går genom QR-modulerna innebär en sådan parallellisering att klockfrekvensen närmast skulle halveras. Resulatet skulle troligen bli en marginellt förbättrad prestanda. Samtidigt skulle det maximala klockfrekvensen bli så låg att implementationen skulle bli svår att använda i konstruktioner utan att bli den modul som begränsar klockfrekvensen för hela konstruktionen.

Implementationen av ChaCha har självtestande testbänkar och i kombination med bra revisionshantering (Git i kombination med Github) har det varit lätt och smidigt att utifrån en första fungerande enkel implementation stegvis bygga ut implementationen för att nå bättre prestanda. Detta utan att riskera att den tidigare versionen inte går sönder. I värsta fall får man köra git checkout på en fil man försökt ändra och börja om.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *