使用马尔可夫链评估熵噪声源的 MATLAB 代码

MATLAB code for using a Markov chain for evaluating an entropy noise source

我正在尝试将此 PDF 的第 68 页集成到 MATLAB 代码中:

http://csrc.nist.gov/publications/drafts/800-90/draft-sp800-90b.pdf#page=68

我已将这些说明作为图像包含在此处:

由于我对马尔可夫链一无所知或知之甚少,所以我首先对表示 oi 的指令感到困惑。 "oi denotes the number of times that state i has occurred in the sample"。什么是状态 i?

第 4 步可能是所有步骤中最困难的。我不知道如何计算 S 或类似的东西。

这是我的开始代码:

function minEntropy = markovTest(points, bitSize)
if bitSize > 6
    err('Maximum of 6 bits are allowed for Markov test, re-map inputs as in 7.2')
end
k = 128;
alpha = 0.05;
alpha = min(alpha^(bitSize^2),alpha^k);
% Estimate the initial state probability distribution:
e = sqrt(log(1./(1-alpha))./(2*N));
N = length(points);
oi == ?
Pi = min(1, oi./N + e);
??? Hat to do next?
end

NIST 已将所有这些测试集成到一个不错的 Python 库中,可以在 GitHub 上找到该库。如果由于某种原因该库不见了,您可以尝试联系 NIST 的 Tim Hall,如果这更适合您,他也已将该库移植到 C 代码。 tim.hall@NIST.gov