MD5 jako generator pseudolosowy

0

Przeprowadziłem pewien eksperyment. Na początku jest dowolny ciąg bajtów (pełni rolę ziarna), a potem jest generowany skrót MD5. Następnie otrzymany skrót jest znowu podawany jako ciąg wejściowy i powstaje nowy skrót i tak w kółko. Algorytm liczący MD5 jest w bibliotekach standardowych, a jak nie ma, to bez problemu można znaleźć implementację w Internecie i skopiować.

Załóżmy, że potrzebne jest generowanie losowych bajtów (ciągów 8-bitowych). W takim przypadku obliczenie MD5 daje 16 kolejnych bajtów. Jak się wykorzysta te 16 bajtów, to z poprzedniego skrótu tworzy się nowy skrót i mamy kolejne 16 bajtów.

Zauważyłem, że jak się wytworzy i zapisze w pliku 64 miliony (1024*1024) kolejnych skrótów (otrzymuje się 1GB) to rozkład bajtów jest zupełnie równomierny. Już przy 1 milionie (plik miał 16777216 bajtów) rozkład jest równomierny.

Pytania:
Czy taki sposób tworzenia liczb pseudolosowych można uznać za bezpieczny (bardzo długi okres powtórzeń dla dowolnego ziarna i liczby zawsze mają rozkład równomierny, trudno odróżnić od szumu)?
Czy czasami praktykuje się taką metodę tworzenia liczb pseudolosowych?
Czy nadaje się do stosowania w celach kryptologicznych?

Domniemywane zalety takiego rozwiązania:

  • Szybkość, bo za jednym zamachem jest od razu 16 bajtów (128 bitów), w zależności od potrzeb można traktować jako 16 liczb 8-bitowych lub 4 liczby 16-bitowe lub 32 liczby 4-bitowe (od 0 do 15)
  • Łatwość implementacji, nie potrzeba jakiś np. bardzo dużych liczb pierwszych na potrzeby BBS
  • Znając ziarno, można ciąg powtórzyć w dowolnej technologii (w odróżnieniu od mechanizmów wbudowanych w standardowe biblioteki)
  • Algorytm chyba lepszy od rejestru przesuwnego
  • Ziarnem może być zupełnie dowolny ciąg bajtowy (teoretycznie istnieje 2^128 ziaren w przypadku MD5)
  • W przeciwieństwie do rejestru przesuwnego po dowolnej modyfikacji algorytmu również są spełnione założenia, mam na myśli takie modyfikacje, jak dołączanie stałego ciągu do skrótu przed obliczeniem następnego, zmiana stanu wybranych lub wszystkich bitów danego skrótu na przeciwny przed obliczeniem następnego skrótu.
0

Weźże człowieku wykorzystaj jakiś normalny PRNG (http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator) a nie rób security-by-obscurity. Sam bez studiów z matematyki/kryptologii wymyślisz najwyżej taki potworek jak mówisz. Już nawet nie wspominam o tym, że MD5 to się co najwyżej jako suma kontrolna kiedy Ci nie zależy bo już dawno było złamane.

http://en.wikipedia.org/wiki/RANDU - żeby uświadomić, co wymyślanie własnych PRNG przynosi. Jak popatrzysz to taki ładny i powinien działać. A tu taka porażka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1