🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310056

Re: Generator liczb pseudolosowych bezpieczny kryptograficznie

#310056
From: M.M.
Date: Tue, 07 Jan 2020 14:23
84 lines
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-mail
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>

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