我有大约 100 行的输入。我想“随机”洗牌,但我想控制它。即我想播种随机数生成器以始终产生相同的排序。
我以为我可以使用bash(1)'s
$RANDOM
变量,但这总是会产生不同的输出。怎么了?
RANDOM=1 cat myfile | while read LINE ; do echo "$RANDOM $LINE" ; done | sort
我有大约 100 行的输入。我想“随机”洗牌,但我想控制它。即我想播种随机数生成器以始终产生相同的排序。
我以为我可以使用bash(1)'s
$RANDOM
变量,但这总是会产生不同的输出。怎么了?
RANDOM=1 cat myfile | while read LINE ; do echo "$RANDOM $LINE" ; done | sort
我试图对 SSL/TLS 的工作原理有所了解,并查看了TLS 1.2 和 TLS 1.3 中的TLS 握手,以及来自服务器的随机数在哪里发挥作用。由于每个 TLS 请求都会在熵方面产生成本,因为需要派生加密密钥,我想知道为什么服务器不会很快耗尽熵。
首先,我查看了带有 RSA 密钥交换
的 TLS 1.2:根据TLS 1.2 标准第 6 节server random
,主密钥的派生源在非常情况下是32 字节长。我希望服务器从/dev/random
.
接下来,我查看了带有临时 Diffie-Hellman 密钥交换的 TLS 1.3:
客户端和服务器都生成自己的私有ECDHE 参数集。之后他们做了他们的 Diffie-Hellman 的事情并获得了一个共享的秘密。此共享密钥用于派生用于加密的对称密钥和用于计算 HMAC 以检查消息完整性的密钥。因此,我假设我的加密质量取决于 ECDHE 参数的质量。如果我使用曲线 NIST P-256,那么根据这个答案,我至少需要一个 128 位的种子。
总结:
在我的 TLS 1.2 示例中,服务器需要生成 256 位的熵,而在 1.3 示例中,服务器需要生成 128 位的熵。我假设必要的位取自/dev/random
. 与单次 TLS 握手所需的位数相比4096
,返回的熵池的最大大小似乎非常小。cat /proc/sys/kernel/random/poolsize
除非我的计算不正确,否则假设熵池没有快速重新填充,我将完全耗尽我的熵池,只有 16 个 TLS 1.2 请求。
问题:
Client Hello
如果有人在没有建立真正连接的情况下发送大量消息,他会以这种方式耗尽我的熵池吗?我会假设单个Client Hello
在熵方面并没有给我太多,但会给服务器带来很大的负担,因为它需要用Server Hello
包含 TLS 1.2 中的 32 字节随机数据的 a 来回答。我正在寻找 EJBCA 用于生成一般私钥的方法(CA、Sub-Ca、证书......)。
例如,假设您想要 RSA 2048 密钥大小。生成过程是否全部在 EJBCA 应用程序中完成?他们是否依赖基于 Java EE 的应用服务器随机生成(在我的例子中是 Jboss)?本地实现的随机数生成是否存在链接,例如在 Linux /dev/(u)random 上?
熵的水平是多少,他们保证一个吗?
我在服务器上设置了 openresty(包含 lua 模块的 nginx 包),我正在尝试创建一个脚本,该脚本具有在用户浏览器上设置 cookie 的特定几率。我的代码如下所示:
location =/index.php {
set $random_num 0;
rewrite_by_lua '
marth.randomseed(1);
nvx.var.random_num = math.random(0,3);
';
add_header Set-Cookie "random_num=$random_num; path=/; domain=...com;";
}
我知道我的随机种子函数实际上并不是非常随机,但我想我稍后会处理它。目前我只是想让 nginx 设置一个随机数,但这样做会产生这个错误:
2012/07/11 11:27:20 [error] 5492#0: *44 lua handler aborted: runtime error: [string "rewrite_by_lua"]:3: attempt to ind
ex global 'marth' (a nil value)
stack traceback:
谁能告诉我我做错了什么,以及是否有任何其他方法可以在 nginx 中获取随机数?
刚刚在我的 gentoo 服务器(强化配置文件)上配置了Munin以进行统计记录,我注意到我的“可用熵”始终在 200-300 范围内。这似乎太低了,所以我使用命令手动检查了它
$ cat /proc/sys/kernel/random/entropy_avail
3544
奇怪的。Munin 中的值始终非常低,并且在手动检查时几乎被填满。在考虑了一段时间后,我得出的结论是,问题可能是我使用了地址空间布局随机化,它在运行命令/程序时使用了熵。由于 Munin 运行了一大堆程序,所有的熵都用完了,然后 Munin 测量有多少熵,从而导致低值。
有人对这个有经验么?如何避免这种情况?