问题标签 [entropy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2479 浏览

security - 可预测的随机数生成器如何(如果有的话)在对其输出进行 SHA-1 处理后变得更安全?

这篇文章指出

尽管 Mersenne Twister 是一个非常优秀的伪随机数生成器,但由于一个非常简单的原因,它本身在密码学上并不安全。可以根据生成器在任何给定时间的状态来确定生成器的所有未来状态,并且 624 个 32 位输出或 19,937 个一位输出足以提供该状态。建议在 Mersenne Twister 的输出上使用加密安全的散列函数,例如 SHA-1,作为获取密码学中有用的密钥流的一种方法。

但是没有关于为什么消化输出会使其更安全的参考资料。老实说,我不明白为什么会这样。Mersenne Twister 的周期为 2^19937-1,但我认为我的推理也适用于任何周期性 PRNG,例如线性同余生成器。由于安全单向函数 h 的属性,可以将 h 视为单射函数(否则我们可能会产生冲突),因此只需将值从其域以一对一的方式映射到其范围。

考虑到这一点,我认为散列值将产生与原始 Mersenne Twister 完全相同的周期性行为。这意味着如果您观察一个时期的所有值并且这些值开始重现,那么您完全能够预测所有未来值。

我认为这与基于密码的加密(PKCS#5)中应用的相同原理有关 - 因为密码域没有提供足够的熵,简单地散列密码不会增加任何额外的熵 - 这就是你需要的原因在散列密码之前对密码进行加盐。我认为同样的原则也适用于此。

一个最终说服我的简单例子:假设你有一个非常糟糕的 PRNG,它总是会产生一个“随机数”1。那么即使 SHA-1 是一个完美的单向函数,将 SHA-1 应用于输出也会总是产生相同的值,从而使输出的可预测性不亚于以前。

尽管如此,我还是愿意相信那篇文章是有道理的,所以我肯定忽略了一些东西。你能帮我吗?在很大程度上,我从我的论点中遗漏了种子值——也许这就是魔法发生的地方?

0 投票
1 回答
423 浏览

entropy - 熵池生成器

好的,所以我想开始为 linux 编写一个熵池生成器。我一直在阅读熵生成的来源,但似乎最强大的熵源来自阅读硬件。我什至可以访问我需要的资源,还是操作系统阻止我这样做?另外,如果可以的话,我将如何开始与这些设备进行通信。我将尝试了解更多信息,但如果有人能指出我正确的方向,我将不胜感激。

0 投票
3 回答
8450 浏览

graph - 如何计算图的熵?

我有一组随机生成的形式图,我想计算每个图的熵。同一个问题,不同的话:我有几个网络,想计算每个网络的信息内容。

以下是包含图熵正式定义的两个来源:
http ://www.cs.washington.edu/homes/anuprao/pubs/CSE533Autumn2010/lecture4.pdf (PDF) http://arxiv.org/abs/0711.4175v1

我正在寻找的代码将图形作为输入(作为边列表或邻接矩阵)并输出一些位或其他信息内容的度量。

因为我在任何地方都找不到它的实现,所以我打算根据正式定义从头开始编写代码。如果有人已经解决了这个问题并愿意分享代码,将不胜感激。

0 投票
4 回答
3594 浏览

linux - 如何禁用 Linux 熵池源

如何禁用熵源?

这是我正在尝试做的一些背景。我正在构建一个通过 USB 与我的 PC 通信的小型 RNG 设备。我希望它成为使用的唯一熵源。我将使用rngd将我的设备添加为熵源。

0 投票
1 回答
364 浏览

compression - 计算数据压缩的熵

我对他们如何计算“每个符号的平均位数”有点困惑。这是通过获取每个字符的概率并将其乘以 lg(1/probability) (如常规熵)还是以其他方式计算的?

此外,如果这是真的,他们如何确定一个字母的平均出现次数是多少?

0 投票
1 回答
438 浏览

linux - 如何从熵池中停止 /dev/random 人口。我可以卸载一个模块来做吗?

我正在制作一个 TRNG,它通过 USB 作为 CDC 设备与我的 PC 通信。我想阻止 /dev/random 完全从熵池中获取熵,并改用我的数据。该理论认为,由于当前收集熵的方式,池可能会中毒。

我知道如何删除熵源,但这需要在内核中进行修改。这是一个选项,但我宁愿只卸载将数据写入 /dev/random 的模块。我已经尝试过 rmmod 和 modprobe 的东西,但无法弄清楚模块的名称。有可能我只是遗漏了一个扩展或其他东西,但我对搞乱内核模块的整个业务都是新手,所以我真的不知道。

只是给了我一个 hw_random 东西的列表和

什么都没有给我。

所以我不确定我是否真的走在正确的轨道上。

任何指针将不胜感激。

0 投票
2 回答
2229 浏览

php - 基于种子的洗牌数组以获得始终相同的结果?

我需要根据种子编号对数组进行洗牌,以便在需要时获得相同的洗牌。

例如:

  1. 和 3. 将显示相同的洗牌数组,但与 2 不同。

我发现这个功能谷歌搜索:

它在我的电脑上使用 php-cli 运行良好,我总是为我使用的每个不同的 sort_seed 获得相同的数组,但是当我将它上传到服务器时,即使我使用相同的 sort_seed,我每次都会得到不同的数组。

使用相同的 sort_seed 时,如何始终获得相同的洗牌数组?

顺便提一句。我需要保留键或对多维数组进行排序,以便可以将键存储在那里。

0 投票
9 回答
3132 浏览

algorithm - 如何使用 random()={0..1} 生成任意范围内的数字,保持均匀性和密度?

在 [x..y] 范围内生成一个随机数,其中 x 和 y 是任意浮点数。使用函数 random(),它从 P 个均匀分布的数字中返回一个范围为 [0..1] 的随机浮点数(称为“密度”)。必须保持均匀分布,并且 P 也必须按比例缩放。

我认为,对于这样的问题没有简单的解决方案。为了简化一点,我问你如何在区间 [-0.5 .. 0.5] 中生成一个数字,然后在 [0 .. 2] 中,然后在 [-2 .. 0] 中,保持均匀性和密度?因此,对于 [0 .. 2],它必须从 P*2 均匀分布的数字中生成一个随机数。

显而易见的简单解决方案random() * (x - y) + y不会生成所有可能的数字,因为所有abs(x-y)>1.0情况下的密度都较低。许多可能的值将被遗漏。请记住,random() 仅返回 P 个可能数字中的一个数字。然后,如果你将这个数字乘以 Q,它只会给你 P 个可能的值之一,按 Q 缩放,但你也必须将密度 P 缩放 Q。

0 投票
1 回答
212 浏览

php - 创建一个双射以获得具有已知最大值的无序计数器

我有一个已知最大值的计数器(称为max)。max可以很大(实际上它会是36^40 - 1or 62^40 - 1)。

我想要一个具有以下属性的b[0..max]到双射:不容易从.[0..max]b(n+1)b(n)

不是在寻找加密安全的功能,我只是想要尽可能多的熵来混淆一点计数器的输出。

该函数必须在 PHP 中是可行的。这允许 PHP 的所有功能。

0 投票
1 回答
10582 浏览

matlab - 熵函数的使用

我试图在 MATLAB 中找到某个概率分布的熵。对于 p,我尝试做

Echeck = entropy(p)

E和Echeck不应该相同吗?

matlab 关于熵的帮助确实说熵被定义为 -sum(p.*log2(p)) 其中 p 包含从 imhist 返回的直方图计数。但是,熵也将逻辑以外的任何类转换为 uint8 以进行直方图计数计算,因为它实际上是在尝试计算灰度图像的熵,因此希望像素值是离散的。所以我想将这个功能用于我的目的是不正确的?有没有好的选择?