Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #28808 > unrolled thread
| Started by | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| First post | 2016-09-22 22:35 +0200 |
| Last post | 2016-09-22 23:31 +0200 |
| Articles | 10 — 4 participants |
Back to article view | Back to pl.comp.programming
Prawdziwie losowe liczby Borneq <borneq@antyspam.hidden.pl> - 2016-09-22 22:35 +0200
Re: Prawdziwie losowe liczby bartekltg <bartekltg@gmail.com> - 2016-09-22 23:03 +0200
Re: Prawdziwie losowe liczby Borneq <borneq@antyspam.hidden.pl> - 2016-09-22 23:23 +0200
Re: Prawdziwie losowe liczby Borneq <borneq@antyspam.hidden.pl> - 2016-09-22 23:28 +0200
Re: Prawdziwie losowe liczby bartekltg <bartekltg@gmail.com> - 2016-09-22 23:33 +0200
Re: Prawdziwie losowe liczby bartekltg <bartekltg@gmail.com> - 2016-09-22 23:30 +0200
Re: Prawdziwie losowe liczby Borneq <borneq@antyspam.hidden.pl> - 2016-09-22 23:37 +0200
Re: Prawdziwie losowe liczby bartekltg <bartekltg@gmail.com> - 2016-09-22 23:53 +0200
Re: Prawdziwie losowe liczby grapeli23 <grapeli23@googlemail.com> - 2016-09-22 21:29 +0000
Re: Prawdziwie losowe liczby slawek <fake@fakeemail.com> - 2016-09-22 23:31 +0200
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Date | 2016-09-22 22:35 +0200 |
| Subject | Prawdziwie losowe liczby |
| Message-ID | <ns1fal$fdq$1@node2.news.atman.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_sprzetowy_generator_liczb_losowych_dostepny_on-line_dla_kazdego-39533.html
[toc] | [next] | [standalone]
| From | bartekltg <bartekltg@gmail.com> |
|---|---|
| Date | 2016-09-22 23:03 +0200 |
| Message-ID | <ns1gu7$k68$1@node1.news.atman.pl> |
| In reply to | #28808 |
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/random_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/random_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
[toc] | [prev] | [next] | [standalone]
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Date | 2016-09-22 23:23 +0200 |
| Message-ID | <ns1i4s$hv6$1@node2.news.atman.pl> |
| In reply to | #28809 |
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ł?
[toc] | [prev] | [next] | [standalone]
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Date | 2016-09-22 23:28 +0200 |
| Message-ID | <ns1idi$hv6$2@node2.news.atman.pl> |
| In reply to | #28810 |
W dniu 22.09.2016 o 23:23, Borneq pisze: > Potem z dwa razy po 10 tys. Zwróciła mi funkcja gen()
[toc] | [prev] | [next] | [standalone]
| From | bartekltg <bartekltg@gmail.com> |
|---|---|
| Date | 2016-09-22 23:33 +0200 |
| Message-ID | <ns1ino$ih1$1@node2.news.atman.pl> |
| In reply to | #28811 |
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
[toc] | [prev] | [next] | [standalone]
| From | bartekltg <bartekltg@gmail.com> |
|---|---|
| Date | 2016-09-22 23:30 +0200 |
| Message-ID | <ns1ii0$lql$1@node1.news.atman.pl> |
| In reply to | #28810 |
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
[toc] | [prev] | [next] | [standalone]
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Date | 2016-09-22 23:37 +0200 |
| Message-ID | <ns1iv0$m8v$1@node1.news.atman.pl> |
| In reply to | #28813 |
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ść.
[toc] | [prev] | [next] | [standalone]
| From | bartekltg <bartekltg@gmail.com> |
|---|---|
| Date | 2016-09-22 23:53 +0200 |
| Message-ID | <ns1jt3$jkg$1@node2.news.atman.pl> |
| In reply to | #28816 |
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
[toc] | [prev] | [next] | [standalone]
| From | grapeli23 <grapeli23@googlemail.com> |
|---|---|
| Date | 2016-09-22 21:29 +0000 |
| Message-ID | <ns1ig8$fbl$1@dont-email.me> |
| In reply to | #28808 |
Dnia 22.09.2016 Borneq <borneq@antyspam.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_sprzetowy_generator_liczb_losowych_dostepny_on-line_dla_kazdego-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_randomness 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
[toc] | [prev] | [next] | [standalone]
| From | slawek <fake@fakeemail.com> |
|---|---|
| Date | 2016-09-22 23:31 +0200 |
| Message-ID | <almarsoft.1631526297610051274@news.v.pl> |
| In reply to | #28808 |
On Thu, 22 Sep 2016 22:35:40 +0200, Borneq <borneq@antyspam.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ą).
[toc] | [prev] | [standalone]
Back to top | Article view | pl.comp.programming
csiph-web