| ▲ | strenholme an hour ago | ||||||||||||||||||||||
Yes, /dev/(u)random is supposed to do that, but what if there’s a bug in the kernel which causes /dev/(u)ramdom to be less than secure? There’s also issues where, for example, it may no longer be possible to read /dev/(u)random after putting the process in a chroot() sandbox (chroot() isn’t defined in POSIX so its behavior is not guaranteed to be consistent across multiple operating systems). getrandom() is often times suggested, but alas isn’t a standardized function, i.e. it’s not part of the POSIX specification. Considering how the C23 changes to the C specification caused a lot of perfectly good C code to no longer compile, I’m very anal about sticking to specs; I use '-std=C99' for my code these days (even though it can compile as C23 code) and stick to POSIX functions (except chroot() and setgroups(), but both of those predate POSIX, and even here I have a compile-time option to compile my code without those non-POSIX syscalls). The code using a secure XOF (the algorithm was developed by the same team which later on made SHA-3, and includes people who helped make AES) has been around for nearly two decades (the code where I roll my own RNG to make secure random numbers has been around for over 25 years, but used AES before XOFs existed) and not one security problem has found with the RNG code has ever been found. [1] “Don’t roll your own RNG” is a suggestion, but it is possible to do so securely if one knows what they are doing (i.e. they have read Applied Cryptography and keep current with cryptographic developments). For anything vibe coded (my code is 100% human written, for the record), rolling one’s own RNG is a really bad idea. [1] There was a theoretical issue with cache timing attacks over two decades ago, so I put mitigations in place, and then chose to use an XOF for newer code. [2] There was an issue where a separate implementation I made of this XOF would generate incorrect test vectors in clang, but only at some optimization levels. I now test the XOF in both GCC and clang at multiple optimization levels to make sure it acts correctly. | |||||||||||||||||||||||
| ▲ | boltzmann64 33 minutes ago | parent | next [-] | ||||||||||||||||||||||
i remember some linux kernel dev got ousted by the community because he/she wanted to not implement a backdoor that would compromise the results of /dev/urandom. | |||||||||||||||||||||||
| |||||||||||||||||||||||
| ▲ | sltkr 32 minutes ago | parent | prev | next [-] | ||||||||||||||||||||||
> getrandom() is often times suggested, but alas isn’t a standardized function The POSIX standard function is getentropy(), which internally calls getrandom() on Linux. > what if there’s a bug in the kernel which causes /dev/(u)ramdom to be less than secure? It's often the other way around: the Linux kernel contains thousands of workarounds for buggy hardware, while the buggy hardware itself doesn't always get patched. Linux developers take this stuff very seriously. As a result it's often safer to rely on kernel APIs than to access the hardware directly. The kernel code involving random number generation receives an exceptionally high amount of scrutiny because of its security implications, so I'd trust it to do the right thing over a naked call to RDRAND which nobody knows how exactly it's implemented in proprietary hardware or a handrolled solution to mix the RDRAND output with other entropy sources. Remember the Debian openssl disaster from 2008? That happened exactly because someone had handrolled their entropy mixing solution, then someone else broke it. | |||||||||||||||||||||||
| |||||||||||||||||||||||
| ▲ | NooneAtAll3 43 minutes ago | parent | prev [-] | ||||||||||||||||||||||
> but what if there’s a bug in the kernel which causes /dev/(u)ramdom to be less than secure? so instead you suggest trusting your own untested unlooked at implementation more? | |||||||||||||||||||||||
| |||||||||||||||||||||||