我正在为高安全性应用程序(以及潜在的数据中心)设计和构建量子随机数生成器。作为其中的一部分,我想将我的设备生成的随机数输入到其中,/dev/random/
以便最终用户不需要修改他们的应用程序来使用新的 RN 源。他们只需将其插入并提高“/dev/random/”中的熵即可。
显然,我必须编写一个设备驱动程序来处理通过 USB 或 PCI-E 从我的设备获取随机数据(尚未决定使用哪个接口)。但是,我不知道如何才能将这些随机数据添加到/dev/random/
任何想法可用的熵池中?
另一种选择(我认为)是替换/dev/random/
为我的设备驱动程序并确保它具有所有必要的行为,但这似乎不是一个好主意......
答案1
替换
/dev/random
为我的设备驱动程序
这非常难以实现,因为您还必须复制所有当前和未来的界面,否则会破坏很多东西。也许采取看一下源代码以获得对其的印象(在源代码注释中详细记录了输出和输入接口)。
我必须编写一个设备驱动程序
这取决于。例如,有一些“随机生成器”,只是假装是 USB 键盘,并通过该通道发送随机数据(或密码、加密密钥、一次一键记事本……),因此不需要专用的设备驱动程序,相反,它只是附带的到现有的驱动程序上。
一般来说,系统熵会受到用户空间的影响,请参阅systemd-random-seed.service
或RNDADDENTROPY
ioctl哈吉德以及其他此类工具的使用。
然而,使用所有这些方法,内核仍然可以控制设备返回的数据/dev/[u]random
。你无法预测它。如果您希望它真正使用您自己生成的随机数据,则必须直接从您的设备读取它,而无需通过内核随机设备。