eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Prawdziwie losowe liczby
Ilość wypowiedzi w tym wątku: 10

  • 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



strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: