Porównanie prędkości kryptograficznych funkcji skrótu

Kryptograficznych funkcji skrótu używa praktycznie każdy programista. Zwykle kryterium wyboru nie jest ich prędkość a odporność na różnego rodzaju ataki. Jest parę własności które taka funkcja skrótu powinna spełniać (preimage resistance, second preimage resistance, collision resistance). Zwykle dobrze jest się kierować zaleceniami Amerykańskiego Narodowego Instytutu Standardów będącego wyznacznikiem dla standardów publicznej kryptografii.  Publikuje on zalecenia dotyczące stosowania kryptograficznych funkcji skrótu. Zaleca między innymi aby nie stosować już funkcji MD5, zaś funkcja SHA-1 powinna być stosowana co najwyżej do 2010 roku. Niemniej jednak istnieją zastosowania w których priorytetem wcale nie jest ogólne bezpieczeństwo lecz któraś ze szczególnych własności i jej jakość dostarczana przez każdą z funkcji jest więcej niż wystarczająca. W jednej z moich implementacji interesowała mnie jedynie własność jednokierunkowości (preimage reistance) na którą ataki są najtrudniejsze a bezpieczeństwo większości standardowych funkcji pod tym względem było dla mnie więcej niż wystarczające. Ważna była prędkość obliczania skrótów dla małych bloków danych.

Przeprowadzone przez innych testy prędkości nie dotyczyły zwykle implementacji we współczesnej Javie (optymalizacja runtime ma tu duże znaczenie). Stanąłem więc przed koniecznością samodzielnego przeprowadzenia testu. Read more

Przekazywanie akcji do komponentu composite w Facelets dla JSF 2

Specyfikacja JavaServer Faces 2.0 (JSR 314) obejmuje język definicji widoku Facelets. Udostępnia mechanizmy ułatwiające trzymanie się reguły DRY (Don’t Repeat Yourself) czyli unikanie powtarzania własnego kodu. Templates i composite components, bo o nich mowa umożliwiają dekompozycję definicji widoku na mniejsze framenty. Często w przypadku komponentów zawierających na przykład przyciski przydaje się możliwość przekazywania jako parametru akcji przez nie wywoływanej. W specyfikacji znalazłem informację o dwóch sposobach, w tym jednym podanym w przykładzie. Niemniej jednak podczas korzystania z referencyjnej implementacji okazało się, że jeszcze nie wszystko jest spójne. Read more