DPA--差分能量分析初试

(详细内容参考: http://www.cnblogs.com/backahasten/p/7812010.html
DPA BOOK: Power Analysis Attacks - Revealing the Secrets of Smartcards

www.dpabook.org 上有完整的能量轨迹数据和matlab代码


下面仅介绍相关代码:
load('WS3.mat');
    % 加载工作区WorkSpace数据,有三个矩阵:
    % aes_plaintexts:
    %  明文输入值,大小为1000*16。1000表示1000个明文
    %  由于每次分析8bits,因此128bits明文拆为每列8bits*16列
    % traces_noDummy:
    %  实测轨迹,没有插入Dummy保护。大小1000*25000
    %  对1000个明文,每个采样25000个能量泄露点
    % traces_withDummy:
    %  实测轨迹,插入Dummy保护。大小1000*25000
    
samples = 1000;
    % 1000个明文即1000条采样轨迹数
    
analyzed_traces = 'traces_noDummy';
%analyzed_traces = 'traces_withDummy';

byte_to_attack = 1;
    %选择攻击的位置,第1个byte。共16个byte

delta = 9441-6729;

more off
    %禁用分页输出

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Prepare plaintexts
D = aes_plaintexts(1:samples, byte_to_attack);
clear aes_plaintexts byte_to_attack

% Prepare traces
eval(sprintf('traces = %s(1:samples, :);', analyzed_traces));
clear analyzed_traces
    % eval(str):将括号内的字符串str视为可执行语句,并运行
K = uint8(0:255);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TASK 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Calculate hypothetical intermediate values
V = SubBytes(bitxor(repmat(D, 1, length(K)), repmat(K, samples, 1)) + 1);
    % repmat函数见最后
% Calculate hypothetical power consumption
H = HW(V+1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Calculate correlation
tr_length = size(traces, 2);
R = zeros(length(K), tr_length);

for key_idx = uint16(K)+1
    fprintf('Working on key guess = %d\n', K(key_idx));
    
    for k = 1:tr_length
        r = corrcoef( [double(H(:,key_idx)) double(traces(:,k))] );
            % corrcoef计算两个列向量相关系数,返回协方差矩阵矩阵r
        R(key_idx, k) = r(1, 2);
            % r(1, 2)为两个向量的相关系数(协方差)
    end
end
clear key_idx k r

[rmax,rn]=max(max(R'));
    % 返回R中最大值rmax及其行号rn,可得猜测密钥K(rn) ;max函数见最后
% fprintf('Key byte is most likely: %d\n', K(rn));
% plot(R(rn,:));

 

显示相关系数图像 show_plots函数

 

exist()

  检查变量、脚本、函数、文件夹或类的存在情况

 

 

 

 

 

 

MATLAB的repmat函数

B = repmat(A,r,c)
将A向下(行方向)复制n次,向右(列方向)复制c次。(中间填充的也是矩阵A)
如:
A = 1:4;
B = repmat(A,4,1)
B = 

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

  

 MATLAB的max函数

C = max(A)
如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最大元素。
[C,I] = max(...)
找到A中那些最大值的索引位置,将他们放在向量I中返回。如果这里有多个相同最大值时,返回的将是第一个的索引。

 

转载于:https://www.cnblogs.com/Hey-dgf/p/8637970.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值