Article View: pl.comp.lang.c
Article #310056Re: Generator liczb pseudolosowych bezpieczny kryptograficznie
From: M.M.
Date: Tue, 07 Jan 2020 14:23
Date: Tue, 07 Jan 2020 14:23
84 lines
5625 bytes
5625 bytes
On Tuesday, January 7, 2020 at 1:11:08 PM UTC+1, Piotr Gałka wrote: > W dniu 2020-01-07 o 11:15, M.M. pisze: > > > Ja skupiłem się na testach tylko niektórych generatorów i na ich > > rozbudowanych wersjach: > > Mógłbyś kilka słów jaki jest cel testów. Czasami jestem między młotem a kowadłem. Gdy używam dobrego generatora, to część mocy obliczeniowej idzie na generowanie liczb losowych. Gdy używam szybkiego, to boję się, się losowość liczb jest zbyt słaba do rozwiązywania problemów przy pomocy algorytmów ewolucyjnych, symulowanego wyżarzania, itd. Chciałbym mieć bardzo szybki algorytm o niskim ryzyku że zadanie zostanie gorzej rozwiązane z powodu słabej jakości liczb losowych - w sumie to jest mój główny cel. Zrobiłem jednolity interfejs żeby łatwo (bez ryzyka uszkodzenia generatora) przełączać się pomiędzy generatorami i porównywać je w testach. Wcześniej myślałem że generatory Fibonacciego spełniają zarówno wymagania szybkości jak i jakości generowanych liczb. Doskonale przechodziły testy w programie dieharder, a Mersenne Twister nie przechodził i działał wyraźnie wolniej. Jednak w programie PractRand wyniki testów dla generatorów Fibonacciego zazwyczaj były kiepskie - to ostatecznie przechyliło szalę żeby zrobić kilka eksperymentów z różnymi generatorami. > Chodzi o szybkość działania, czy chcesz wyłapać jakieś niedoskonałości > generatorów. Chcę przede wszystkim mieć dużą kontrolę nad jakością generowanych liczb przy maksymalnej wydajności. Gdy jakość generowanych liczb nie musi być wysoka, ale szybkość generowania jest ważna, to chcę wiedzieć czy nie mam błędów z powodu agresywnej optymalizacji i chcę wiedzieć jak spada jakość generowanych liczb w testach: do tego celu mam parametryzowalne adaptery: add-rot, xor, rndbuf, rndfbuf. Adaptery też można wrzucić do testów i sprawdzić jak szybko działają i jak spadają wyniki w testach. Przyznać jednak muszę, że przy tak wydajnym generatorze jak wyhash64 używanie niektórych adapterów może okazać się bezcelowe. Jeśli z użyciem tego kodu napisze się odpowiednio program, to można potem wygodnie zrobić szereg kolejnych testów. Wystarczy sterować warunkową kompilacją (identycznie jak w testach samych generatorów) i widać jak na dłoni czy jakość rozwiązania spada, czy czas obliczeń rośnie. Jeśli czas obliczeń nie spada po użyciu adapterów, to można je bezpiecznie wyłączyć kompilacją warunkową bez ingerencji w kod. > Nie jestem programistą - nie wczytywałem się w kody generatorów ani testów. > > Ja sobie napisałem generator inspirując się opisem z książki: Ferguson, > Schneier "Kryptografia w praktyce". Wydaje mi się (dawno było), że tak > totalnie to uprościłem (szczególnie gromadzenie entropii), że może nawet > nie powinienem pisać 'inspirując się'. > Mój generator oparty jest na funkcji SHA512d. > Literka d oznacza SHA512(SHA512(dane)) bo autorzy nie do końca ufają Moje udoskonalenie(?) wyhash mniej-więcej na tym: if( i1 >= size(dane1) ) i1 = 0; dane1[ i1 ] += liczba_pierwsza1; if( i2 >= size(dane2) ) i2 = 0; dane2[ i2 ] += liczba_pierwsza2; DANE = dane1[i1] ^ dane2[i2]; i1 = i1 + 1; i2 = i2 + 1; return hash( DANE ); > funkcjom SHA i nie znając się postanowiłem po prostu przyjąć ich racje. > Szybkości działania mnie w ogóle nie interesowała. Niektóre moje programy wyraźnie przyspieszają po zmianie generatora na szybszy. Dlatego mnie bardzo interesuje szybkość generowanych liczb. Gdyby mnie nie interesowała to bym wziął ranlux48. Zresztą mój kod jak najbardziej umożliwia użycie standardowego ranluxa48 i Mersenne Twister. Standardowego Knutha i ministd zakomentowałem bo zawieszały diehardera i dawały same faile w programie PractRand ;-) Pozdrawiam
Technical Details
Message-ID:
<adf17bb9-8221-45bb-b6ed-b812aa3ac91f@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.stu.neva.ru!aioe.org!peer02.am4!peer.am4.highwinds-media.com!news.highwinds-media.com!tr2.eu1.usenetexpress.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g89no8925788qtd.0!news-out.google.com!w29ni121qtc.0!nntp.google.com!g89no8925784qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<f55958c3-26d2-42da-b677-ad2bc3e61c22@googlegroups.com> <5e11fa14$0$540$65785112@news.neostrada.pl> <9519b70b-f91d-4b8a-83d6-38412be2113e@googlegroups.com> <qv1sgp$t9s$1$PiotrGalka@news.chmurka.net>Show Full Headers
Complete Article Headers
X-Received: by 2002:aed:33c5:: with SMTP id v63mr74723221qtd.298.1578406998300; Tue, 07 Jan 2020 06:23:18 -0800 (PST) X-Received: by 2002:a0d:f185:: with SMTP id a127mr81662777ywf.206.1578406998064; Tue, 07 Jan 2020 06:23:18 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin.stu.neva.ru!aioe.org!peer02.am4!peer.am4.highwinds-media.com!news.highwinds-media.com!tr2.eu1.usenetexpress.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g89no8925788qtd.0!news-out.google.com!w29ni121qtc.0!nntp.google.com!g89no8925784qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Tue, 7 Jan 2020 06:23:17 -0800 (PST) In-Reply-To: <qv1sgp$t9s$1$PiotrGalka@news.chmurka.net> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=159.205.34.176; posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj NNTP-Posting-Host: 159.205.34.176 References: <f55958c3-26d2-42da-b677-ad2bc3e61c22@googlegroups.com> <5e11fa14$0$540$65785112@news.neostrada.pl> <9519b70b-f91d-4b8a-83d6-38412be2113e@googlegroups.com> <qv1sgp$t9s$1$PiotrGalka@news.chmurka.net> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <adf17bb9-8221-45bb-b6ed-b812aa3ac91f@googlegroups.com> Subject: Re: Generator liczb pseudolosowych bezpieczny kryptograficznie From: "M.M." <mmarszik@gmail.com> Injection-Date: Tue, 07 Jan 2020 14:23:18 +0000 Lines: 124 X-Received-Bytes: 6437 X-Received-Body-CRC: 1417243220 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit