Entropy in the Linux Kernel: Difference between revisions
m wording |
visualization |
||
| Line 14: | Line 14: | ||
{{Highlight|lang=bash|code= | {{Highlight|lang=bash|code= | ||
cat /proc/sys/kernel/random/entropy_avail | cat /proc/sys/kernel/random/entropy_avail | ||
}} | |||
== Visualizing Randomness == | |||
The following PHP script will let you generate bitmap from data piped to the script. You can also use the commented out line to visualize PHP's {{code|rand}} function. | |||
{{highlight|lang=php|code= | |||
<?php | |||
header("Content-type: image/png"); | |||
// Requires the GD Library | |||
$img = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream"); | |||
$white = imagecolorallocate($img, 255, 255, 255); | |||
$fp = fopen('php://stdin', 'r'); | |||
for ($x = 0; $x < 512; $x++) { | |||
for ($y = 0; $y < 512; $y++) { | |||
// $data = rand(0, 1) | |||
$data = ord(fread($fp, 1)); | |||
if ($data % 2 == 0) { | |||
imagesetpixel($img, $x, $y, $white); | |||
} | |||
} | |||
} | |||
fclose($fp); | |||
imagepng($img); | |||
imagedestroy($img); | |||
}} | }} | ||
Revision as of 07:26, 23 November 2015
Entropy is required to generate good random numbers. Modern operating systems will use physical hardware as sources for entropy and the 'randomness' goes into an entropy pool for future use.
On Linux, /dev/random and /dev/urandom are pseudo devices that provide random numbers. Both devices are supplied by the kernel's PRNG, though /dev/random will block when the entropy pool is depleted while /dev/urandom will continue to generate random numbers.
Linux Entropy Pool
You can see the size of the entropy pool size in linux by running:
cat /proc/sys/kernel/random/poolsize
The number of 'bits' of entropy can be seen at:
cat /proc/sys/kernel/random/entropy_avail
Visualizing Randomness
The following PHP script will let you generate bitmap from data piped to the script. You can also use the commented out line to visualize PHP's rand function.
<?php
header("Content-type: image/png");
// Requires the GD Library
$img = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($img, 255, 255, 255);
$fp = fopen('php://stdin', 'r');
for ($x = 0; $x < 512; $x++) {
for ($y = 0; $y < 512; $y++) {
// $data = rand(0, 1)
$data = ord(fread($fp, 1));
if ($data % 2 == 0) {
imagesetpixel($img, $x, $y, $white);
}
}
}
fclose($fp);
imagepng($img);
imagedestroy($img);