SipHash i assembler för MOS 6502

I ett anfall av programmeringsklåda har jag (Joachim) implementerat den nyckelstyrda, kryptografiska hashfunktionen SipHash i assembler för den gamla 8-bitars processorn MOS 6502.

MOS 6502
MOS 6502

Resultatet, siphash_6502 finns i ett öppet repo på Gitorious.

Jag förväntar mig inte att koden kommer att få någon större spridning. Däremot var det en intressant övning att implementera 64-bitarsoperationer på en 8-bitarsprocessor med få instruktioner och än färre register. Koden, som är byggd med makron, borde även kunna gå att porta relativt lätt.

Storleksmässigt tar den nuvarande implementationen 677 Bytes i kod och 103 Bytes för datastrukturer inklusive lagring av nyckel samt datablock. Genom att ändra om de stora makrona till funktioner som återanvänds skulle det gå att banta koden en aning. Det finns i dag ett utkast till en kompakt version i repot, men den är inte färdig än. Men att få in en komplett MAC-funktionalitet på under 1 kByte på en sådan här processor visar att SipHash går att använda även i riktigt små system.

Prestandamässigt tar en kompressionsoperation knappt 5000 cykler, vilket ger ungefär 600 cykler/Byte för ett långt meddelande. I värsta fallet, med ett meddelande på ett enda block tar det ungefär 15000 cykler. En gammal Commomodore 64:a klarar ungefär 200 stycken sådana bearbetningar/s. För ett litet Internet of Things-system borde det i många fall vara mer än tillräckligt för att kunna autenticera meddelanden i realtid.

På Gitorious finns även den hårdvaruimplementation av SipHash som Secworks tidigare släppt.

Kommentera

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