| 查看: 842 | 回复: 0 | ||
[求助]
AES CPA
|
|
编写了AES加密算法的利用汉明距离模型的CPA攻击代码,现在仅可以攻击出第一,第五,第九,第十三字节的正确密钥(攻击位置为最后一轮S盒的输入),其余字节的密钥有错,求助大神到底哪里出错,改了好几天了,万分感谢~全部代码附上,其中original_data是利用另一段代码获得的功耗所做的表格。 keySize=8; expectKey=17; blockSize=128; traceNum=1000; startPoint=1; endPoint=148002; traceDir='..\mat'; matName='original_data'; % mat文件名 T3259_for_hspice_cf.mat txtName='cipher1.txt'; % 明文或者密文文件名 load('../InvSbox.mat'); load('../HW8.mat'); %% % % 装载功率曲线, 生成有效功耗矩阵NxT % disp('Loading the power trace to generate NxT matrix ...'); eval(strcat('load(''',traceDir,'/',matName,''');')); eval(strcat('AxT=',matName,';')); eval(['clear ',matName,';']); NxT=AxT(1:traceNum,startPoint:endPoint);%在所有的功耗曲线中取出我们要观测的矩阵,即实测能量迹 clear AxT; %% % % 装载明文输入, 生成有效明/密文矩阵NxB % disp('Loading the plaintext to generate NxB matrix ...'); eval(strcat('fp = fopen(''',traceDir,'/',txtName,''',''r'');')); db = fscanf(fp, '%s', 1); FSIZE = length(db); frewind(fp); db = fscanf(fp, '%s'); fclose(fp); NFILE = length(db) / FSIZE; db = reshape(db,FSIZE,NFILE)'; NxB=zeros(traceNum,blockSize); for i=1:traceNum FILELIST=db(i, ; POS = 1; for j=1 blockSize/4)NxB(i,j*4-3:j*4) = bitget(hex2dec(FILELIST(POS+j-1)), [4 3 2 1]); end end clear db; %% % % 建立汉明距离或重量模型, 生成猜测功耗矩阵NxK % disp('Building the hypothetical power model to generate NxK matrix ...'); [N,T] = size(NxT); K=2^keySize; HD=zeros(N,K); for candidate=1:K for trace_index=1:N DFFt2=NxB(trace_index,9:16); preXOR=bitxor(bitget((candidate-1),keySize:-1:1), NxB(trace_index,9:16)); preSBOX=InvSbox(preXOR*[128 64 32 16 8 4 2 1]'+1);%转换成10进制,因为matlab从1开始,所以此处要加1 DFFt1=bitget(preSBOX,keySize:-1:1); HD(trace_index,candidate)=bitxor(DFFt1,DFFt2)*[128 64 32 16 8 4 2 1]'; end end NxK=HW8(HD+1); clear HD; %% % % 计算Pearson相关系数, 生成相关系数矩阵KxT % disp('Calculating the correlation to generate KxT matrix ...'); KxT=zeros(K,T); chunksize=50; chunks=T/50; first=1; last=K; for i=first:last % 遍历密钥搜索空间 for j=1:chunks cmatrix= corrcoef([NxT(:,1+(j-1)*chunksize:j*chunksize) NxK(:,i)]); KxT(i,1+(j-1)*chunksize:j*chunksize) =cmatrix(chunksize+1,1:chunksize); end end %clear NxK; %% % % 进行统计分析 % TxK=KxT'; clear KxT [max_corr_each_key,max_index_each_key]=max(TxK); [max_corr,max_index]=max(max_corr_each_key); point_of_max_corr=max_index_each_key(max_index); %% % % 打印结果 % fprintf('\n--------------- RESULT @%d TRACES FROM %s --------------\n',traceNum,matName); fprintf('RK = %d%d%d%d_%d%d%d%d\n',bitget(max_index-1,8:-1:1)); fprintf('Max correlation = %d\n',max_corr); fprintf('The index of point sequence of max correlation = %d\n',point_of_max_corr+startPoint-1); fprintf('Percentage = %d %%\n',(point_of_max_corr/T)*100); toc; |
» 猜你喜欢
全日制(定向)博士
已经有5人回复
假如你的研究生提出不合理要求
已经有10人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
实验室接单子
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复












;
blockSize/4)
回复此楼