我有基于采样噪声的发生器(反向偏置晶体管-实际上是ChaosKey,但这并不重要)。
噪声源被输入ADC并以16位分辨率(2字节)采样。问题是,信号电平不够高,不足以涵盖整个模数转换器的范围,所以我得到的是0-65535,我得到的大约是0-4096。
如果我绘制这些数据的直方图,我会看到正态分布,并且信号的频谱或多或少是平坦的(在图上白噪声看起来很好)。
但是,当我把它写到一个文件或者使用它作为比特流时,我有很大的偏见。这是可以理解的--从上字节到4位总是为零,所以保证文件中有更多的零(至少12.5%,甚至更多)。因此,这些数据中的熵值非常低。
现在,考虑到NISTSP800-90B对熵源的监视要求,我应该监视原始输出,以检查生成器是否发生故障(停留在某个值等)。我仍然希望能得到更多的熵和更少的偏见。
我的想法很简单--从每个样本中删除每个较高的字节(其中大部分为零),只留下情人的一个。问题是,这样行吗?我还能把这样的溪流当作没有条件的吗?
顺便说一下,在原始比特流上使用NIST测试,我得到了min(H_original, 8 X H_bitstring): 2.527848。
发布于 2019-02-15 17:36:56
我还能把这样的溪流当作没有条件的吗?
这种“有条件的”想法基本上是一种“红鲱鱼”,主要是一种语义上的区别。熵发生器就是它的样子。如果删除高字节,则低字节是信号。有了12位的峰值信号,下面的8位将为你提供大量的熵。我更喜欢理智的用于随机数生成器的AIS 20 / AIS 31功能类,而且“条件”这个词甚至没有出现。
我通常只测量用于监测的信号的均值和标准差。如果信号直接来自诸如ADC这样的物理设备,那将是一个足够的质量控制。请记住,在这一点上,你有效地考虑了一个简单的量化模拟信号和随机波方法是很好的。RMS水平计算也可能是合适的。还请记住,热效应将改变标准偏差/RMS。而且你必须读反向偏置晶体管稳定吗?晶体管不会工作很长时间。它们会永久分解,噪音也会改变。这是一个常见的问题,预算USB类型的TRNG,长期漂移可能是很难诊断。
我有很大的偏见
这也很不相干。随着偏倚的增加,相关性增加,熵减小,所以当你测量熵率时,所有的偏倚/correlations都会被考虑在内。最终,它将被处理在随机抽取机制中,表现为简单的输出率降低。
所以是的,放弃高的部分是可以的。实际上,比特下降是非常常见的,几乎所有的大型快速TRNG都是出于各种原因才这么做的。
发布于 2019-02-15 16:20:46
抛出最上面的字节听起来像是一个很好的起点(或者仅仅是前四位),但是我会对结果进行测试,看看会发生什么。在较低的位元中也可能存在偏差,这一点现在还不明显。
另一种选择是使用随机抽取器。这样,即使存在偏见,您也应该能够对数据进行按摩,使其成为可用的RNG。
https://crypto.stackexchange.com/questions/67334
复制相似问题