信息隐藏浅学

1. 伪随机序列生成算法

真正的随机数符合正态分布且其生成不能重现。但如果一个随机数能够被重现的几率很小,由此可以认为其为伪随机数。常见的伪随机序列生成算法主要有:

1.1 线性同余发生器

随机数序列产生公式为:

$$
X_{n+1}=(aX_n + c)mod\;m\qquad 其中,m,a,c,X_0\,\in \mathbb{Z}
$$

参数取值需要满足三个标准:函数在重复前应该产生0-m之间的所有数;产生的序列应该显得随机;生成函数可以用计算机方便地实现。

满足条件的参数选择如下:

  • m一般取素数,且要求很大,对于32位机一般取值为2^{31}-1;

  • a的可取值不多,当a=7^5 = 16807时满足以上标准。

该算法的缺点是,在参数确定后,伪随机序列只与X_0有关,容易被破解,有一种改进的办法就是每隔N个数就以时钟值对m取模作为新的种子来产生新的序列;还有一种方法就是直接将随机数加上时钟值再对m取模。

使用matlab仿真模拟此算法:

function [x,u] = linear_mod_random(a, c, m, x0, iterMax)
    x = [];
    u = [];
    x(1) = x0;
    u(1) = x(1) / m;
    for i = 2 : iterMax
        x(i) = a * x(i-1) + c;
        x(i) = mod(x(i), m);
        u(i) = x(i) / m;
    end
    
    hold on;
    subplot(1,2,1);
    plot(x(2:end), '*-');
    sTitle = sprintf('线性同余随机数发生器 (a=%d, c=%d, m=%d, x0=%d)', a, c, m, x0);
    title(sTitle);    
    
    subplot(1,2,2);
    histogram(u(2:end));
    title('随机数直方图分布');
    hold off;
end

产生20个随机数的结果:

结果表明,本伪随机数生成器生成的序列符合均匀性与随机统计特性。


1.2 BBS发生器

产生过程如下:

首先,选择两个大素数p和q,且要求p\equiv q\equiv 3(mod \,4),令n=p*q,接着选择一个随机数s,要求s与n互素,然后按照以下算法产生位B_i序列:

X_0 =s^2\;mod \;n

for \; i=0\;to\,\infty

X_i=(X_{i -1})^2\,mod \,n

B_i=X_i\,mod\;2

BBS发生器是产生安全伪随机数的普遍算法,是特意构造算法中密码强度有最强公开证明的一个,被称为密码安全伪随机数发生器。

BBS的安全性是基于对n的因子分解困难性上的(大整数难分解问题)。

matlab实现BBS伪随机序列生成器核心代码:

function [x,b] = BBS(p,q,s,iterMax)
    x = [];
    b = [];
    n = p * 

你可能感兴趣的:(matlab,算法,开发语言)