Woo*_*ock 6 filesystems devices random unix-philosophy
dev/urandom
使用 sayhead
或读取时,dd
当然期望输出总是随机且不同的。
UNIX 如何在低级别处理这种情况?文件是在读取时自然截断,还是文件实际上是对称密码或等价物的接口,因此“读取”实际上是执行密码的行为。
Ste*_*itt 13
/dev/urandom
是字符设备,而不是常规文件。打开它为驱动程序提供了一个接口,通常在内核中,它处理读取;每次程序从 读取时/dev/urandom
,都会调用驱动程序,驱动程序确定如何提供适当的内容(与任何其他字符设备相同—— /dev/null
,/dev/zero
...)。
在 Linux 上,这是在drivers/char/random.c
. 它维护一个“熵池”,从各种随机数据源中播种,并在读取时使用 ChaCha 流密码处理池数据以构造要返回的数据。
/dev/urandom
不是“常规文件”(是的,这是 POSIX 命名),它是一个设备。就像 /dev/ 上的大多数“文件”一样,那里有很多神奇的行为。
/dev/null
,无论你写多少,它永远不会填满/dev/tty
(和同事)与终端交互的地方/dev/full
对于任何写入尝试,您总是返回“设备上没有剩余空间”/dev/zero
返回无限组的空字节还有很多。
这些文件实际上是与内核模块交互的接口。因此,当您“读取”它时,它实际上是在执行一个函数,该函数被要求读取程序(head、dd 等)请求的字节数(/dev/urandom
是字符设备)。这个函数然后在内部处理它(基于几个熵池)以填充该缓冲区(在这种情况下,以便您获得伪随机内容)。
归档时间: |
|
查看次数: |
939 次 |
最近记录: |