I understand that PRNG are Random Number Generators that uses a deterministic algorithm based off of a seed.
I also understand that CSRNG are PRNG that are cryptographic-ally safe to use for generating random numbers.
And by cryptographic-ally safe, I believe this means that even if an attacker knows the deterministic algorithm and the seed, they would not be able to predict the next random number. I understand this is due to CSRNG also making use of some internal states.
If there are any errors in the above, I will appreciate a clarification because my questions depends on them being accurate.
So my main question is, when do you need a PRNG? and when must you use a CSPRNG?
My initial answer to that was that CSPRNG should be used when generating keys, but when I searched for "what are prng used for", one of the pages I found was this which states that:
In cryptography, PRNG’s are used to construct session keys and stream ciphers
Which leaves me a bit confused, why should PRNG, that is not cryptographically strong be that is used for keys? I would expect CSPRNG to be used instead.
This makes me realise that perhaps I do not fully understand PRNG's and CSPRNG's yet and how they are used. Hence this question: In Cryptography, When exactly are PRNG used and when are CSPRNG used?
Such pseudorandomness can be cryptographically secure, or not. It is cryptographically secure if nobody can reliably distinguish the output from true randomness, even if the PRNG algorithm is perfectly known (but not its internal state). A non-cryptographically secure PRNG would fool basic statistical tests but can be distinguished from true randomness by an intelligent attacker.
$\endgroup$