Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #28808 > unrolled thread

Prawdziwie losowe liczby

Started byBorneq <borneq@antyspam.hidden.pl>
First post2016-09-22 22:35 +0200
Last post2016-09-22 23:31 +0200
Articles 10 — 4 participants

Back to article view | Back to pl.comp.programming


Contents

  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

#28808 — Prawdziwie losowe liczby

FromBorneq <borneq@antyspam.hidden.pl>
Date2016-09-22 22:35 +0200
SubjectPrawdziwie 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]


#28809

Frombartekltg <bartekltg@gmail.com>
Date2016-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]


#28810

FromBorneq <borneq@antyspam.hidden.pl>
Date2016-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]


#28811

FromBorneq <borneq@antyspam.hidden.pl>
Date2016-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]


#28815

Frombartekltg <bartekltg@gmail.com>
Date2016-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]


#28813

Frombartekltg <bartekltg@gmail.com>
Date2016-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]


#28816

FromBorneq <borneq@antyspam.hidden.pl>
Date2016-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]


#28817

Frombartekltg <bartekltg@gmail.com>
Date2016-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]


#28812

Fromgrapeli23 <grapeli23@googlemail.com>
Date2016-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]


#28814

Fromslawek <fake@fakeemail.com>
Date2016-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