【安全密钥】对基尔霍夫-洛-约翰逊噪声(KLJN)安全密钥交换协议的统计随机数生成器攻击(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥1 概述

文章来源:

本文介绍并演示了对 Kirchhoff-Law-Johnson-Noise(KLJN)安全密钥交换方案的四种新的统计攻击。这些攻击利用了在Alice/Bob站点的受损随机数生成器。探讨了Alice/Bob以及Eve探测噪声之间的部分相关性情况,也就是说,Eve对Alice和Bob的噪声的了解是受限的但不为零。我们探讨了Eve部分了解Alice和Bob随机数生成器的双边情况。结果表明,在这种情况下,Eve可以利用她的探测噪声和导线中测量的电压噪声之间的最高互相关来破解安全密钥比特。她还可以通过她的噪声电压和她评估的Alice/Bob噪声电压之间的最高互相关来破解安全密钥比特。然后我们探讨了Eve只对Alice的随机数生成器有部分了解的单边情况,因此只有Alice和Eve的噪声相关。在这种情况下,Eve仍然可以破解安全密钥比特,但是为了获得足够低的错误概率,她需要利用整个比特交换周期进行攻击。与其他协议类似,KLJN密钥交换方案的安全性要求随机数生成器的输出对Eve来说是真正随机的。

本文介绍并演示了针对基尔霍夫-洛-约翰逊噪声(KLJN)安全密钥交换方案的两种新攻击。这些攻击基于安全性受损的随机数生成器。首先,我们探讨了Eve知晓Alice和Bob随机数生成器的种子的情况。我们展示了在这种情况下,即使她的电流和电压测量只有单比特分辨率,Eve也能在比特交换周期的一小部分时间内破解安全密钥比特。在第二次攻击中,我们探讨了Eve只知道Alice随机数生成器种子的情况。我们展示了在这种情况下,Eve仍然可以破解安全密钥比特,但她需要利用整个比特交换周期进行攻击。详细文章见第4部分。

📚2 运行结果

 

 

部分代码:

%multimeter's bits of resolution
N = 1;
Nvector = 1:1:N;

%if key(1) == RH && key(2) == RH
%    range = max(HH)-min(HH);
%elseif key(1) == RL && key(2) == RL
%    range = max(LL)-min(LL);
%elseif key(1) == RH && key(2) == RL
%    range = max(HL)-min(HL);
%elseif key(1) == RL && key(2) == RH
%    range = max(LH)-min(LH);
%else
%    disp('Not a valid key');
%    return;
%end
%resolution = 2*range/2^N;

%let's take the n-sample average for how many times Eve guesses correctly
%for each bit of resolution
%the structure is, for a matrix of i rows and j columns, the j index will
%represent the bits of resolution, and the i index will represent the ith
%sample value. n-sample averaging will be used.
nsamples = 1000; %Occurrences

averageuesses = zeros(nsamples,N-min(Nvector)+1);
averageLL = zeros(nsamples,N-min(Nvector)+1);
averageHL = zeros(nsamples,N-min(Nvector)+1);
averageLH = zeros(nsamples,N-min(Nvector)+1);

guessrecord = zeros(N,length(nsamples));
guessrecord_twocases = zeros(N,length(nsamples));

%Why not use Shah's noise?
fileID = fopen('shah_GBLWN_Entire_RNG.txt','r');
%noise = fscanf(fileID,'%f');
%noise = noise';

for x = 1:1:N
    for j = 1:1:nsamples
        
        %set RNG noise voltages, each with a different seed
        UAH = randn(1,n)*sqrt(4*k*Teff*RH*fB);
        UBH = randn(1,n)*sqrt(4*k*Teff*RH*fB);
        UAL = randn(1,n)*sqrt(4*k*Teff*RL*fB);
        UBL = randn(1,n)*sqrt(4*k*Teff*RL*fB);
        
        %Why not use Shah's noise?
        %UAH = noise((4*n*(j-1)+1):1:(4*j-3)*n);
        %UAH = (UAH/rms(UAH))*sqrt(4*k*Teff*RH*fB);
        %UBH = noise(((4*j-3)*n+1):1:(4*j-2)*n);
        %UBH = (UBH/rms(UBH))*sqrt(4*k*Teff*RH*fB);
        %UAL = noise(((4*j-2)*n+1):(4*j-1)*n);
        %UAL = (UAL/rms(UAL))*sqrt(4*k*Teff*RL*fB);
        %UBL = noise(((4*j-1)*n+1):1:4*j*n);
        %UBL = (UBL/rms(UBL))*sqrt(4*k*Teff*RL*fB);
        
        %let's have another set of noises just for the histogram
        UAHhist = randn(1,n);
        UAHhist = (UAHhist/rms(UAHhist))*sqrt(4*k*Teff*RH*fB);
        UBHhist = randn(1,n);
        UBHhist = (UBHhist/rms(UBHhist))*sqrt(4*k*Teff*RH*fB);
        UALhist = randn(1,n);
        UALhist = (UALhist/rms(UALhist))*sqrt(4*k*Teff*RL*fB);
        UBLhist = randn(1,n);
        UBLhist = (UBLhist/rms(UBLhist))*sqrt(4*k*Teff*RL*fB);

        if key(1) == RH && key(2) == RH
            UA = UAH;
            UB = UBH;
        elseif key(1) == RL && key(2) == RL

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个用 MATLAB 实现基尔霍夫定理求解图 G 所有生成树的代码: ```matlab % 定义图G的邻接矩阵 G = [0, 2, 3, 0, 0; 2, 0, 0, 4, 5; 3, 0, 0, 1, 0; 0, 4, 1, 0, 6; 0, 5, 0, 6, 0]; % 计算图G的生成树个数 n = size(G, 1); % 节点个数 E = n - 1; % 边数 num_trees = 1; for k = 1:E num_trees = num_trees * (n - k) / k; end % 枚举所有生成树 trees = zeros(n, n, num_trees); idx = 1; for i = 1:n-1 for j = i+1:n if G(i, j) > 0 % 如果两个节点之间有边 % 计算两个节点之间的电阻值 R = 1 / G(i, j); % 构造Kirchhoff矩阵 A = diag(sum(G, 2)) - G; A(i, i) = A(i, i) + G(i, j); A(j, j) = A(j, j) + G(i, j); A(i, j) = A(i, j) - G(i, j); A(j, i) = A(j, i) - G(i, j); % 计算Kirchhoff矩阵的行列式 detA = det(A); % 构造生成树的邻接矩阵 tree = G; tree(i, j) = 0; tree(j, i) = 0; % 如果行列式不为0,则该邻接矩阵是一棵生成树 if detA ~= 0 trees(:, :, idx) = tree; idx = idx + 1; end end end end % 输出所有生成树的邻接矩阵 for i = 1:num_trees disp(trees(:, :, i)); end ``` 上述代码中,我们首先定义了图 G 的邻接矩阵,然后根据基尔霍夫定理计算出图 G 的生成树个数。接着,我们枚举所有可能的边,对于每条边,构造其对应的 Kirchhoff 矩阵并计算其行列式,如果行列式不为0,则该邻接矩阵是一棵生成树,将其保存到结果数组中。最后,输出所有生成树的邻接矩阵。 需要注意的是,上述代码中假设图 G 是连通的,如果是非连通图,需要对每个连通分量单独进行求解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值