如何使用Wasged设置云服务器的附加Entropy

熵是重要的,hasged是一个应用程序,可以为您的系统提供更多的。

熵和随机简介

Linux伪随机数发生器(PRNG)是一种从硬件中断(键盘,鼠标,磁盘/网络I / O)和其他操作系统源生成随机性的特殊设备。这种随机性主要用于加密,如SSL / TLS,但也有许多其他用途。即使像一个程序一样简单的滚动一对虚拟骰子取决于熵为良好的质量随机性。

当熵池运行干

Linux上有两个通用随机设备:/ dev / random和/ dev / urandom。最好的随机性来自/ dev / random,因为它是一个阻塞设备,并将等待,直到有足够的熵可用来继续提供输出。假设你的熵是足够的,你应该看到与/ dev / urandom相同的随机性质量;然而,由于它是一个非阻塞设备,它将继续产生“随机”数据,即使熵池用完。这可能导致较低质量的随机数据,因为重复的以前的数据更有可能。当生产服务器上可用的熵很低时,尤其是当此服务器执行加密功能时,可能会发生许多不良情况。例如,假设您有一个运行以下守护程序的云服务器(均使用SSL / TLS或块密码):
  • 网络服务器
  • 传入/传出邮件服务器
  • SSH / SFTP
如果这些守护进程中的任何一个在所有可用的熵都被耗尽时需要随机性,则它们可能会暂停等待更多,这可能会导致应用程序的延迟。更糟糕的是,由于大多数现代应用程序将使用在程序初始化时创建的自己的随机种子,或者使用/ dev / urandom来避免阻塞,您的应用程序将遭受质量较低的随机数据。这可能会影响您的安全通信的完整性,并可能增加对您的私人数据进行密码分析的机会。

用于填充熵池的Userland解决方案

Linux已经从上述硬件源获得非常好的质量随机数据,但是由于无头机器通常没有键盘或鼠标,因此产生的熵更少。磁盘和网络I / O表示这些机器的大多数熵产生源,并且这些产生非常稀疏的熵量。由于很少的无头机器如服务器或云服务器/虚拟机具有可用的任何种类的专用硬件RNG解决方案,因此存在若干用户级解决方案以使用来自比诸如视频卡之类的硬盘更“噪声”的设备的硬件中断来生成额外的熵,声卡等。这再次证明是一个问题的服务器不幸的是,因为他们通常不包含任何一个。输入hasged。基于HAVEGE原理,并且之前基于其关联的库,hasged允许基于处理器上的代码执行时间的变化来生成随机性。由于一段代码几乎不可能采用相同的精确时间来执行,即使在相同硬件上的同一环境中,运行单个或多个程序的时间也应该适合种子随机源。在重复执行循环之后,使用处理器的时间戳计数器(TSC)中的差异,哈希实现为您的系统的随机源(通常为/ dev / random)打上种子。虽然这听起来像是最终会创建可预测的数据,但您可能会惊讶地看到本文底部的FIPS测试结果。

安装在Debian / Ubuntu上

您可以通过运行以下命令轻松地在Debian和Ubuntu上安装hasged:
# apt-get install haveged
如果这个包在你的默认仓库里不可用,你将需要从源代码编译(见下面) 一旦安装了软件包,您可以简单地编辑位于/ etc / default / hasged中的配置文件,确保设置了以下选项(通常已经是默认选项):
DAEMON_ARGS="-w 1024"
最后,只是确保它配置为启动时启动:
# update-rc.d haveged defaults

安装在RHEL / CentOS / Fedora上

要在RHEL / CentOS的(跳过此步骤为Fedora)安装haveged,您需要先按照上的说明添加EPEL软件库 。 安装并启用EPEL仓库(在RHEL / CentOS上)后,可以通过运行以下命令来安装hasged:
# yum install haveged
Fedora用户可以运行上面的yum install命令,没有存储库更改。默认选项通常很好,所以只要确保它被配置为在启动时启动:
# chkconfig haveged on

从源安装

在系统上没有任何预打包的二进制文件可用于散列,您需要从源文件包构建它。这实际上比你所期望的要容易得多。首先,你将访问下载页面 ,选择最新发布的压缩包(1.7A在写这篇文章的时间)。下载tarball后,将其解压到当前工作目录中:
# tar zxvf /path/to/haveged-x.x.tar.gz
现在你编译安装:
# cd /path/to/haveged-x.x
# ./configure
# make
# make install
默认情况下,这将安装一个前缀/ usr / local,所以你应该添加类似以下内容到/etc/rc.local(或你的系统的等效),使其自动启动(必要时调整路径):
# Autostart haveged
/usr/local/sbin/haveged -w 1024
手动运行相同的命令(作为root用户)启动守护程序而不重新启动,或者只是重新启动,如果你是一个Windows类人。

测试随机数据的熵和质量的可用性

在一些非常小的安装/配置工作之后,您现在应该有一个工作安装的hasged,并且您的系统的熵池应该已经从它产生的随机性填充。安全不会是安全的,如果你盲目信任他人和他们的有效性,所以为什么不使用标准测试测试你的随机数据?对于此测试,我们将使用rngtest使用的FIPS-140方法,可在大多数或所有主要Linux发行版中使用各种包名称,如rng-tools:
# cat /dev/random | rngtest -c 1000
您应该看到类似以下的输出:
rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 1
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=1.139; avg=22.274; max=19073.486)Mibits/s
rngtest: FIPS tests speed: (min=19.827; avg=110.859; max=115.597)Mibits/s
rngtest: Program run time: 1028784 microseconds
在任何随机数生成器中都可以接受非常少量的失败,但是当使用hover时,您可以经常看到998-1000次成功。 要测试可用熵的数量,可以运行以下命令:
# cat /proc/sys/kernel/random/entropy_avail
哈希的想法是在可用位接近1024时填充这个池。因此,尽管这个数字会波动,但是它不应该下降到1000以下,除非你真的要求大量的随机性(SSH密钥生成等)。