Skąd wziąć losowy ciąg bajtów

0

@msm popełni bardzo interesujący i pouczający wpis:
https://tailcall.net/blog/cracking-randomness-lcgs/
To wszystko prawda, tylko, załóżmy, ze potrzebujemy generować klucze symetryczne, np. 32 bajtowe. Jak robić to bezpiecznie? Wzięcie bajtów z /dev/random jest ok?
Bo każdy wie, że PRNG mają swoje zagrożenia, tylko ciężko stwierdzić jak sobie z tym poradzić

0

Programy szyfrujące biora entropię z dev/random albo dev/urandom.

0

Jako że zostałem wywołany do tablicy (dzięki za pochwałę! :P) to odpiszę też.

Otóż jest dokładnie jak @lion137 napisał. PRNG nie są bezpieczne, ani nawet nie są projektowane pod takie coś. Nawet użycie CSPRNG (czyli "bezpiecznego" PRNG) to tylko przesunięcie problemu, bo dalej trzeba go seedować czymś mocnym :P. (fun fact z doświadczenia: nie wiedzą o tym twórcy ransomware, którzy czasami seedują rzeczy za pomocą jakiegoś rand()...).

Dobre rozwiązanie na linuxie to czytanie /dev/urandom. Bajty przeczytane z tego urządzenia dają wyniki które sa nieprzewidywalne w żaden sposób dla atakującego.
@Mokrowski nie ma racji - /dev/random też ujdzie, ale pod każdym praktycznym względem jest gorsze od /dev/urandom. W zasadzie wszystkie popularne argumenty za /dev/random to FUD. W skrócie - /dev/urandom to CSPRNG (Cryptographically Secure PRNG) który jest seedowany i reseedowany ciągle tą samą entropią z której korzysta /dev/random (który też jest "tylko" CSPRNG!).
Dobre rozwiązanie na Windowsie to CryptGenRandom

1 użytkowników online, w tym zalogowanych: 0, gości: 1