首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新启动/关机时保存随机种子,并在系统启动期间恢复该种子

在重新启动/关机时保存随机种子,并在系统启动期间恢复该种子
EN

Security用户
提问于 2016-09-13 19:12:02
回答 3查看 2.8K关注 0票数 6

在Debian (我猜在其他linux发行版上也是如此)上,有一个init脚本/etc/init.d/urandom,它的功能是:

代码语言:javascript
复制
"Save and restore random seed between restarts"

在我的例子中,这个文件被保存到/var/lib/urandom/random-seed中。

我想知道将随机种子保存到磁盘上的文件有多明智,因为密码学中随机种子的全部假设都是保密的。

为什么要这么做,首先。我们需要“保存”重启之间的随机种子吗?如果我们不这么做会怎么样?计算机在启动时会有0的随机性吗?

EN

回答 3

Security用户

回答已采纳

发布于 2016-09-13 19:36:33

为什么要这么做,首先。我们需要“保存”重启之间的随机种子吗?如果我们不这么做会怎么样?计算机在启动时会有0的随机性吗?

事实证明,这是一个比你可能意识到的更深的问题。我会在不写教科书的情况下公正地对待这件事。

基本上:计算机对随机性很差;当你有一些真正的随机性(也称熵)时,保持它是个好主意。

假设您的计算机没有硬件随机数生成器。(现在的英特尔芯片有rdrand指令,可以进入硬件内核,但出于政治原因,Linux内核不使用它。)

在引导时,内核从哪里获得纯粹的随机性?根据维基百科维基百科的说法:

Linux内核从键盘计时、鼠标移动和IDE时间中生成熵,并通过特殊文件/dev/随机和/dev/urandom使其他操作系统进程可以使用随机字符数据。这个功能是在Linux版本1.3.30中引入的。

所以鼠标,键盘,和时间的硬盘IO事件。假设您在操作系统启动期间需要熵(例如,启动sshd需要在其第一次启动时生成键),您还没有加载鼠标和键盘驱动程序,而且在启动周期的早期,您不会发出太多的磁盘IO调用--当然,在引导过程中,内核仍然运行在一个RAM FS中,即使在启动之后,您也可能在具有非常可预测的IO时间的SSD或闪存驱动器上运行。

所以回到你的问题:

如果我们不这么做会怎么样?计算机在启动时会有0的随机性吗?

这是可能的。

在小型嵌入式linux设备上,比如从闪存启动的路由器(无论是小型家庭设备,还是为互联网提供动力的大型数据中心设备),这实际上是一个严重的问题。

有关这一主题的令人敬畏的阅读,请参阅2012年的报纸“挖掘您的Ps和Qs:检测网络设备中广泛存在的弱密钥”,其中有一个令人震惊的发现

0.75%的在互联网上证书由于密钥生成过程中的熵不足而共享密钥。

票数 6
EN

Security用户

发布于 2016-09-13 19:31:18

仅在您引用的Short-Description下面几行,/etc/init.d/urandom注意到了一些关于保密的假设:

代码语言:javascript
复制
## Assumption 1:  We assume [/var/lib/urandom/random-seed] is a file (or a symlink
## to a file) that resides on a non-volatile medium that persists
## across reboots.
## Case 1a: Ideally, it is readable and writeable.  Its is unshared,
## i.e. its contents are unique to this machine.  It is protected so
## that its contents are not known to attackers.
## Case 1b: Less than ideally, it is read-only.  Its contents are
## unique to this machine and not known to attackers.

在该文件的后面,将种子写入磁盘,其中有一个注释:

代码语言:javascript
复制
# see documentation in linux/drivers/char/random.c

值得一读,但包括:

代码语言:javascript
复制
* When any operating system starts up, it will go through a sequence
* of actions that are fairly predictable by an adversary, especially
* if the start-up does not involve interaction with a human operator.
* This reduces the actual number of bits of unpredictability in the
* entropy pool below the value in entropy_count.  In order to
* counteract this effect, it helps to carry information in the
* entropy pool across shut-downs and start-ups.

... Even with
* complete knowledge of the start-up activities, predicting the state
* of the entropy pool requires knowledge of the previous history of
* the system.
票数 5
EN

Security用户

发布于 2016-09-14 13:40:14

在重新启动之间保存熵是解决启动时间熵短缺的一个不完美的解决方案。为什么不完美?首先,因为保存的熵是可以发现的,如果潜在的攻击者能够获得保存的种子,他们也会破坏所有随机数生成器的种子。第二,因为当系统从备份或多个VM实例中恢复时,使用相同保存的种子生成,它们都会重用相同的保存熵。

尽管如此,这样的灾难仍然比系统没有启动时间熵更好。

请记住,如果您配置为保存熵,您的解决方案将是不可认证的,因为FIPS和几乎任何其他密码和信息相关的标准禁止这种做法。

票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/136728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档