Hi, David Christensen wrote: > $ time dd if=/dev/urandom bs=8K count=128K | wc -c > [...] > 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.30652 s, 249 MB/s
This looks good enough for practical use on spinning rust and slow SSD. Maybe the "wc" pipe slows it down ? ... not much on 4 GHz Xeon with Debian 11: $ time dd if=/dev/urandom bs=8K count=128K | wc -c ... 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.13074 s, 260 MB/s $ time dd if=/dev/urandom bs=8K count=128K of=/dev/null ... 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.95569 s, 271 MB/s Last time i tested /dev/urandom it was much slower on comparable machines and also became slower as the amount grew. Therefore i still have my amateur RNG which works with a little bit of MD5 and a lot of EXOR. It produces about 1100 MiB/s on the 4 GHz machine. No cryptographical strength, but chaotic enough to avoid any systematic pattern which could be recognized by a cheater and represented with some high compression factor. The original purpose was to avoid any systematic interference with the encoding of data blocks on optical media. I am sure there are faster RNGs around with better random quality. > $ time perl -MMath::Random::ISAAC::XS -e > '$i=Math::Random::ISAAC::XS->new(12345678); print pack 'L',$i->irand while 1' > | dd bs=8K count=128K | wc -c > 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 82.6523 s, 13.0 MB/s Now that's merely sufficient for shredding the content of a BD-RE medium or a slow USB stick. > I suggest using /dev/urandom and tee(1) to write the same CSPRN > stream to all of the devices and using cmp(1) to validate. I'd propose to use a checksummer like md5sum or sha256sum instead of cmp: $random_generator | tee $target | $checksummer dd if=$target bs=... count=... | $checksummer This way one can use unreproducible random streams and does not have to store the whole stream on a reliable device for comparison. Have a nice day :) Thomas