{"id":97,"date":"2005-02-26T19:02:17","date_gmt":"2005-02-26T17:02:17","guid":{"rendered":"http:\/\/blogs.bl0rg.net\/netzstaub\/?p=97"},"modified":"2005-02-26T19:02:17","modified_gmt":"2005-02-26T17:02:17","slug":"poly1305-mac-von-djb","status":"publish","type":"post","link":"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/26\/poly1305-mac-von-djb\/","title":{"rendered":"poly1305 MAC von djb"},"content":{"rendered":"<p>\nDJB hat vor einiger Zeit ein MAC-Verfahren namens <a href=\"http:\/\/cr.yp.to\/mac.html\">Poly1305<\/a> ver&#246;ffentlicht, das auf AES basiert. Portiert wurde es auf die g&#228;ngigsten heutigen Platform (eigentlich nicht portiert, sondern optimiert, eine portable Version gibt es auch). Interessant sind folgende Features:\n<\/p>\n<ul>\n<li>Bewiesene Sicherheit, wenn die unterliegende Kryptierungsfunktion (in dem Fall, l&#228;sst sich aber austauschen). Den Beweis habe ich mir nicht angeguckt, solche Sachen verstehe ich meistens kaum, aber sch&#246;n zu wissen, das DJB sowas sagt.<\/li>\n<li>Schnell (auch ein nettes Feature, je nach Anwendung jedoch nicht lebensnotwendig)<\/li>\n<li>Wenn schon schnell, dann auch schnell f&#252;r kleine Messages. Das war mir b&#246;se aufgestossen als ich im Sommer eine kryptierende Ethernet-Bridge gebaut habe. F&#252;r &#8220;grosse&#8221; Ethernetframes war alles im gr&#252;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&#252;cken am Ethernet-Treiber ging das dann noch gerade so.<\/li>\n<li><\/li>\n<\/ul>\n<p>\nIn einem kleinen <a href=\"http:\/\/cr.yp.to\/mac\/20050130-bestcase.txt\">Text<\/a> beschreibt DJB, wie ein Kryptoverfahren zu Benchmarken ist, und was oft gemacht wird, und die Zahlen zu versch&#246;nern. Dazu geh&#246;rt:\n<\/p>\n<ul>\n<li>Die Funktion mit nur einem Key, einem Nonce und einer Nachricht zu testen. Es gibt Anwendungsf&#228;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.<\/li>\n<li>Alle wichtigen Daten vorrechnen, so dass diese im L1 Cache sind. Das ist je nach Anwendung eben auch nicht immer der Fall.<\/li>\n<li>Die Message hat eine sinnvolle L&#228;nge, und ist auch sch&#246;n aligned. Wie immer, das gilt auch nicht, also Bl&#246;cke ein bisschen randomisiert ablegen, usw&#8230;<\/li>\n<li>Die Funktion auf sehr langen Messages zu testen. Sinnvoller ist, die L&#228;nge der Nachrichten zu variieren.<\/li>\n<li>Nur eine gute CPU als Benchmark zu nehmen. Das Verfahren sollte man auf m&#246;glichst vielen CPUs einsetzen. Code, der auf einem PIII performt, kann auf einem G4 total abkacken.<\/li>\n<\/ul>\n<p>\nIch muss zugeben, dass ich die beiden ersten Punkte nicht wirklich ber&#252;cksichtigt habe. Das war aber in dem Fall einer Ethernetbridge auch nicht wirklich notwendig, puh \ud83d\ude42\n<\/p>\n<p>\nUpdate: Danke Fefe f&#252;r den Link \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DJB hat vor einiger Zeit ein MAC-Verfahren namens Poly1305 ver&#246;ffentlicht, das auf AES basiert. Portiert wurde es auf die g&#228;ngigsten heutigen Platform (eigentlich nicht portiert, sondern optimiert, eine portable Version gibt es auch). Interessant sind folgende Features: Bewiesene Sicherheit, wenn &hellip; <a href=\"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/26\/poly1305-mac-von-djb\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,17],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-c-staub","category-computerstaub"],"_links":{"self":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":0,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}