-
1. Data: 2016-09-22 22:35:40
Temat: Prawdziwie losowe liczby
Od: Borneq <b...@a...hidden.pl>
Chodzi mi o sposób generowania przez zdarzenia związane z klawiaturą i
myszką. W Linuxie jest zbiornik losowości, ale po pierwsze chcę użyć w
Windows a po drugie generować na bieżąco.
Jest zdarzenie, odczytujemy najmłodsze bity licznika instrukcji rdtsc.
Pojawia się pierwszy problem - w Windows i Linuxie nie ma bezpośredniej
możliwości odczytu z przerwania sprzętowego w trybie użytkownika. Trzeba
odczytać rdtsc po jakimś czasie z obsługi biblioteki graficznej. W C++
może to być np. OpenCV. Teraz najmłodsze bity będą zupełnie losowe, jest
to problem matematyczny - do którego bitu jest losowo? A może losowość
zmniejsza się stopniowo - co to znaczy? Na pewno bity zmieniające się co
godzinę nie są losowe, bo przez jedną godzinę będą same zera a za
godzinę same jedynki. Myślę że do bębnienia w klawiaturę wystarczy
granica niemierzalna przez człowieka 1/30 s. Choć z drugiej strony
przerwania myszki mogą być częstsze (?) i wtedy kolejne zdarzania będą
miały te same a nie losowe bity rzędu 1/30 s.
Zegar ma 3 GHz, 1 30 s to 100 mln, czyli dało by radę 26 bitów z jednego
klepnięcia z klawiaturę, lub może przyjąć 24 bity czyli 3 bajty z
jednego zderzania np. tez mousemove myszki.
Inna sprawa. Zapowiadane były procesory ze sprzętową generacją liczb
losowych które mogły by generować ich wielką ilość. Jak się sprawy mają.
A co z pudełkami dołączanymi przez USB ze sprzętowym generatorem?
Nigdzie o nich też nie słychać.
Tu mam jakiś link:
http://www.benchmark.pl/aktualnosci/Najszybszy_sprze
towy_generator_liczb_losowych_dostepny_on-line_dla_k
azdego-39533.html
-
2. Data: 2016-09-22 23:03:02
Temat: Re: Prawdziwie losowe liczby
Od: bartekltg <b...@g...com>
On 22.09.2016 22:35, Borneq wrote:
> Chodzi mi o sposób generowania przez zdarzenia związane z klawiaturą i
> myszką. W Linuxie jest zbiornik losowości, ale po pierwsze chcę użyć w
> Windows a po drugie generować na bieżąco.
Biblioteka standardowa, nagłowek <random>,
klasa random_device.
http://en.cppreference.com/w/cpp/numeric/random/rand
om_device
Sprawdź, czy w Twojej implementacji działa metoda entropy();
Powinna informować, czy dostałeś "prawdziwie losowe" dane,
ale z implementacją różnie bywa.
> Jest zdarzenie, odczytujemy najmłodsze bity licznika instrukcji rdtsc.
> Pojawia się pierwszy problem - w Windows i Linuxie nie ma bezpośredniej
> możliwości odczytu z przerwania sprzętowego w trybie użytkownika. Trzeba
> odczytać rdtsc po jakimś czasie z obsługi biblioteki graficznej. W C++
> może to być np. OpenCV. Teraz najmłodsze bity będą zupełnie losowe, jest
> to problem matematyczny - do którego bitu jest losowo? A może losowość
> zmniejsza się stopniowo - co to znaczy? Na pewno bity zmieniające się co
> godzinę nie są losowe, bo przez jedną godzinę będą same zera a za
> godzinę same jedynki.
Jeśli odczytujesz w równych odstępach, w nawet najmłodszy bit nie
będzie losowy!
Losowość musi przyjść albo od użytkownika, albo ze sprzętowego
generatora.
> Myślę że do bębnienia w klawiaturę wystarczy
> granica niemierzalna przez człowieka 1/30 s. Choć z drugiej strony
> przerwania myszki mogą być częstsze (?) i wtedy kolejne zdarzania będą
> miały te same a nie losowe bity rzędu 1/30 s.
> Zegar ma 3 GHz, 1 30 s to 100 mln, czyli dało by radę 26 bitów z jednego
> klepnięcia z klawiaturę, lub może przyjąć 24 bity czyli 3 bajty z
> jednego zderzania np. tez mousemove myszki.
Użyj gotowca.
Random device pod linuxem gada /dev/urandom, /dev/random
lub sprzętowym https://en.wikipedia.org/wiki/RdRand
http://en.cppreference.com/w/cpp/numeric/random/rand
om_device/random_device
VS też obiecuje "non-deterministic and cryptographically secure"
https://msdn.microsoft.com/library/bb982250.aspx
> Inna sprawa. Zapowiadane były procesory ze sprzętową generacją liczb
> losowych które mogły by generować ich wielką ilość. Jak się sprawy mają.
Dwa linki do tyłu.
Podsumowując, użyj gotowca. Podałem namiary na c++, ale jeśli
nie piszesz w COBOLU, będziesz miał do tego dostęp.
A i dobrze się zastanów, czy aby na pewno potrzebujesz "prawdziwych"
liczb losowych. Poza kryptografią nie są takie konieczne.
pzdr
bartekltg
-
3. Data: 2016-09-22 23:23:48
Temat: Re: Prawdziwie losowe liczby
Od: Borneq <b...@a...hidden.pl>
W dniu 22.09.2016 o 23:03, bartekltg pisze:
> VS też obiecuje "non-deterministic and cryptographically secure"
> https://msdn.microsoft.com/library/bb982250.aspx
Użyłem pod VStudio.
random_device gen;
gen.entropy() zwróciło mi 32.
Potem z dwa razy po 10 tys.
Więc nie wiem, czy to są pseudolosowe czy w jakiś sposób generowane?
Jakby były z zasobnika to by się zasobnik chyba wcześniej skończył?
-
4. Data: 2016-09-22 23:28:26
Temat: Re: Prawdziwie losowe liczby
Od: Borneq <b...@a...hidden.pl>
W dniu 22.09.2016 o 23:23, Borneq pisze:
> Potem z dwa razy po 10 tys.
Zwróciła mi funkcja gen()
-
5. Data: 2016-09-22 23:29:44
Temat: Re: Prawdziwie losowe liczby
Od: grapeli23 <g...@g...com>
Dnia 22.09.2016 Borneq <b...@a...hidden.pl> napisał/a:
> Chodzi mi o sposób generowania przez zdarzenia związane z klawiaturą i
> myszką. W Linuxie jest zbiornik losowości, ale po pierwsze chcę użyć w
> Windows a po drugie generować na bieżąco.
> Jest zdarzenie, odczytujemy najmłodsze bity licznika instrukcji rdtsc.
> Pojawia się pierwszy problem - w Windows i Linuxie nie ma bezpośredniej
> możliwości odczytu z przerwania sprzętowego w trybie użytkownika. Trzeba
> odczytać rdtsc po jakimś czasie z obsługi biblioteki graficznej. W C++
> może to być np. OpenCV. Teraz najmłodsze bity będą zupełnie losowe, jest
> to problem matematyczny - do którego bitu jest losowo? A może losowość
> zmniejsza się stopniowo - co to znaczy? Na pewno bity zmieniające się co
> godzinę nie są losowe, bo przez jedną godzinę będą same zera a za
> godzinę same jedynki. Myślę że do bębnienia w klawiaturę wystarczy
> granica niemierzalna przez człowieka 1/30 s. Choć z drugiej strony
> przerwania myszki mogą być częstsze (?) i wtedy kolejne zdarzania będą
> miały te same a nie losowe bity rzędu 1/30 s.
> Zegar ma 3 GHz, 1 30 s to 100 mln, czyli dało by radę 26 bitów z jednego
> klepnięcia z klawiaturę, lub może przyjąć 24 bity czyli 3 bajty z
> jednego zderzania np. tez mousemove myszki.
>
> Inna sprawa. Zapowiadane były procesory ze sprzętową generacją liczb
> losowych które mogły by generować ich wielką ilość. Jak się sprawy mają.
> A co z pudełkami dołączanymi przez USB ze sprzętowym generatorem?
> Nigdzie o nich też nie słychać.
> Tu mam jakiś link:
> http://www.benchmark.pl/aktualnosci/Najszybszy_sprze
towy_generator_liczb_losowych_dostepny_on-line_dla_k
azdego-39533.html
Pod linuxem z czysto użytkowego widzenia przystępnie ujęte jest to
zagadnienie choćby tu.
https://wiki.alpinelinux.org/wiki/Entropy_and_random
ness
W najnowszym kernelu - 4.8 zawitał nowy, ulepszony RNG.
https://lwn.net/Articles/686033/
https://github.com/sandy-harris/maxwell/blob/master/
doc/Maxwell.pdf
-
6. Data: 2016-09-22 23:30:39
Temat: Re: Prawdziwie losowe liczby
Od: bartekltg <b...@g...com>
On 22.09.2016 23:23, Borneq wrote:
> W dniu 22.09.2016 o 23:03, bartekltg pisze:
>> VS też obiecuje "non-deterministic and cryptographically secure"
>> https://msdn.microsoft.com/library/bb982250.aspx
>
> Użyłem pod VStudio.
> random_device gen;
> gen.entropy() zwróciło mi 32.
> Potem z dwa razy po 10 tys.
entropy() zwróciło Ci 10000?
Bez sensu.
> Więc nie wiem, czy to są pseudolosowe czy w jakiś sposób generowane?
> Jakby były z zasobnika to by się zasobnik chyba wcześniej skończył?
Jeśli losowosć się skończy, entropy powinno dac 0.
Ale z tym różnie bywa, patrz uwagi w linkach.
pzdr
bartekltg
-
7. Data: 2016-09-22 23:31:11
Temat: Re: Prawdziwie losowe liczby
Od: slawek <f...@f...com>
On Thu, 22 Sep 2016 22:35:40 +0200, Borneq
<b...@a...hidden.pl> wrote:
> Inna sprawa. Zapowiadane były procesory ze sprzętową generacją
liczb
> losowych które mogły by generować ich wielką ilość. Jak się sprawy
mają.
1. Nie da się generować liczb losowych, bo nie da się udowodnić że
istnieje wolna wola, przypadek, niedeterminizm itd. itp.
2. Dla przykładu: bity z wiszącego pinu Arduino nie są losowe w
sensie "są przewidywalne".
3. Płyty główne Intel 815EB do Pentium 1 miały hardwareowy
generator... tyle że tylko te sprzedawane w USA. Teoretycznie zrobić
generator na mechanice kwantowej jest łatwo (szumy elektroniczne
powstałe w zjawiskach z nieoznaczonością).
-
8. Data: 2016-09-22 23:33:43
Temat: Re: Prawdziwie losowe liczby
Od: bartekltg <b...@g...com>
On 22.09.2016 23:28, Borneq wrote:
> W dniu 22.09.2016 o 23:23, Borneq pisze:
>> Potem z dwa razy po 10 tys.
>
> Zwróciła mi funkcja gen()
Próbuj dalej, po dziesięciu poprawkach,
jeśli ktokolwiek jeszcze będzie czytać, może
zawrzesz całą potrzebną informcję, logicznie
i jednoznacznie:)
Możesz też spróbować zrobić to od razu, pełnym zdaniem;>
pzdr
bartekltg
-
9. Data: 2016-09-22 23:37:43
Temat: Re: Prawdziwie losowe liczby
Od: Borneq <b...@a...hidden.pl>
W dniu 22.09.2016 o 23:30, bartekltg pisze:
> entropy() zwróciło Ci 10000?
Źle napisałem, wołałem gen() 20 tys razy, czyli już 640 tys. bitów a
entropy cały czas 32.
W programach do szyfrowania pokazuje się czasem prostokąt, na którym
trzeba ruszać myszą. W ten sposób generowane są liczby losowe
użytkownika. Ale teraz nie wiem, bo przerwania sprzętowe nie działają w
trybie użytkownika, a regularny zegar może popsuć losowość.
-
10. Data: 2016-09-22 23:53:39
Temat: Re: Prawdziwie losowe liczby
Od: bartekltg <b...@g...com>
On 22.09.2016 23:37, Borneq wrote:
> W dniu 22.09.2016 o 23:30, bartekltg pisze:
>> entropy() zwróciło Ci 10000?
>
> Źle napisałem, wołałem gen() 20 tys razy, czyli już 640 tys. bitów a
> entropy cały czas 32.
Nie masz w zwyczaju czytać linków?
Notes
This function is not fully implemented in some standard libraries. For
example, GNU libstdc++ and LLVM libc++ always return zero even though
the device is non-deterministic. In comparison, Microsoft Visual C++
implementation always returns 32, and boost.random returns 10.
> W programach do szyfrowania pokazuje się czasem prostokąt, na którym
> trzeba ruszać myszą. W ten sposób generowane są liczby losowe
> użytkownika. Ale teraz nie wiem, bo przerwania sprzętowe nie działają w
> trybie użytkownika, a regularny zegar może popsuć losowość.
I dlatego takich liczb dostarcza system.
I tych liczb najcześciej (patrz linki podane przez grapeli23)
niewiele. U mnie cat /dev/random daje kilka linijek.
Dlatego w pierwszym poście pyrałem, czy na pewno potrzebujesz
liczb losowych. Wczytywanie 20 tysięcy liczb sugeruje, że
nie do końca (albo nie będzie to proste:)
pzdr
bartekltg