netzstaub

beatz & funkz

Saturday, February 26, 2005

poly1305 MAC von djb

DJB hat vor einiger Zeit ein MAC-Verfahren namens Poly1305 veröffentlicht, das auf AES basiert. Portiert wurde es auf die gängigsten heutigen Platform (eigentlich nicht portiert, sondern optimiert, eine portable Version gibt es auch). Interessant sind folgende Features:

  • Bewiesene Sicherheit, wenn die unterliegende Kryptierungsfunktion (in dem Fall, lässt sich aber austauschen). Den Beweis habe ich mir nicht angeguckt, solche Sachen verstehe ich meistens kaum, aber schön zu wissen, das DJB sowas sagt.
  • Schnell (auch ein nettes Feature, je nach Anwendung jedoch nicht lebensnotwendig)
  • Wenn schon schnell, dann auch schnell für kleine Messages. Das war mir böse aufgestossen als ich im Sommer eine kryptierende Ethernet-Bridge gebaut habe. Für “grosse” Ethernetframes war alles im grünen, wenn ich aber mit 48 Bytes Frames gefloodet habe, ging das MAC Verfahren so in die Knie, dass ich mich ziemlich anstrengen musste, um die garantierte Geschwindigkeit noch zu erreichen. Am Ende und mit ein bisschen Drücken am Ethernet-Treiber ging das dann noch gerade so.

In einem kleinen Text beschreibt DJB, wie ein Kryptoverfahren zu Benchmarken ist, und was oft gemacht wird, und die Zahlen zu verschönern. Dazu gehört:

  • Die Funktion mit nur einem Key, einem Nonce und einer Nachricht zu testen. Es gibt Anwendungsfälle, wo viele Keys und Nachrichten gleichzeitig eingesetzt werden (z.B. ein bei einem VPN-Server). Also mit vielen Keys und Nachrichten testen, und auch fleissig neu initialisieren zwischendurch.
  • Alle wichtigen Daten vorrechnen, so dass diese im L1 Cache sind. Das ist je nach Anwendung eben auch nicht immer der Fall.
  • Die Message hat eine sinnvolle Länge, und ist auch schön aligned. Wie immer, das gilt auch nicht, also Blöcke ein bisschen randomisiert ablegen, usw…
  • Die Funktion auf sehr langen Messages zu testen. Sinnvoller ist, die Länge der Nachrichten zu variieren.
  • Nur eine gute CPU als Benchmark zu nehmen. Das Verfahren sollte man auf möglichst vielen CPUs einsetzen. Code, der auf einem PIII performt, kann auf einem G4 total abkacken.

Ich muss zugeben, dass ich die beiden ersten Punkte nicht wirklich berücksichtigt habe. Das war aber in dem Fall einer Ethernetbridge auch nicht wirklich notwendig, puh :)

Update: Danke Fefe für den Link :)

posted by manuel at 7:02 pm  

No Comments »

No comments yet.

RSS feed for comments on this post.

Leave a comment

Powered by WordPress