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

Uppdaterad hårdvaruimplementation av SipHash

Joachim Strömbergson

SipHash är en så kallad pseudoslumptalsfunktion (psudo random function - PRF), det vill säga en nyckelberoende funktion som mappar indata till ett utdata på ett slumpmässigt sätt. Typiska exempel på användning av PRF:er är för att generera autenticeringskoder för meddelanden.

Det som gör SipHash intressant är att den är mycket snabb, ställer låga krav på systemmiljön (processorns operationer och operander) och att den är säker. SipHash är snabbare än andra PRF:er och till och med snabbare än många icke-säkra hashfunktioner. Sedan Aumasson och Bernstein introducerade SipHash har den bland annat blivit den underliggande hashfunktionen i ett stort antal programspråk (ex Perl, Python, Ruby, Rust), verktyg som OpenDNS och operativsystem so OpenBSD, FreeBSD.

För ett par år sedan implementerade jag hashfunktionen SipHash i hårdvara. Implementationen var relativt simpel, men visade att SipHash i hårdvara blir kompakt och ger hög prestanda, båda viktiga egenskaper för inbyggda system.

En nackdel med den gamla versionen av SipHash var att resultatet vara var 64 bitar stort. Det ger en väl låg säkerhet mot gissningsattacker. Aumasson och Bernstein löste detta genom att utöka SipHash till 128 bitar. Men tyvärr har jag inte uppdaterat min implementation.

Men nu finns en uppdaterad hårdvaruimplementation av SipHash som stödjer både 64- och 128-bitarsh hashresultat. Samtidigt har jag städat, snyggat till, förbättrat implementationen. Inte minst har det tillkommit en bra Pythonmodell som stödjer båda storlekarna av hashresultat och kör ett antal testvektorer. Även testbänkarna för hårdvaruimplementationens olika delar kör nu bra tester och är dessutom självtestande.

Implementationsmässigt kräver SipHash färre resurser (logik och register) än MD5 i en Altera Cyclone 4E, och går att klocka dubbelt så fort. Samtidigt tar det SipHash ett fåta cykler att genererar hashresultatet i jämförelse för typiskt 64 cykler för MD5.

Samtidigt ska det medges att jämförelsen med MD5 haltar lite. SipHash är inte en kryptografiskt säker hashfunktion utan en PRF. Men å andra sidan är MD5 inte heller en kryptografiskt säker hashfunktion och ska INTE användas som det. Men en gång när MD5 utvecklades var syftet att vara kryptografiskt säker.

Men om du bygger en FPGA och letar efter en snabb, kompakt hashfunktion, eller om du behöver integritetsskydda data med en nyckelberoende meddelandeäkthetskod finns nu SipHash med upp till 128 bitars kod.

Min förhoppning är att min implementation är enkel att integrera. Om den inte är det, hör av dig!

(Joachim Strömbergson)