| ²é¿´: 876 | »Ø¸´: 0 | ||
Çá̾12321гæ (³õÈëÎÄ̳)
|
[ÇóÖú]
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; |
» ²ÂÄãϲ»¶
Сľ³æÃ»ÂäÁË£¬³ýÁËÆíµ»Ìû×Ó£¬¼¸ºõ¿´²»µ½ÓмÛÖµµÄÌû×Ó
ÒѾÓÐ15È˻ظ´
ÃæÉϵÄË®ºÜÉî
ÒѾÓÐ18È˻ظ´
¹úÉç¿ÆÍ¨Ñ¶ÆÀÉó
ÒѾÓÐ5È˻ظ´
5¸ö%2F£¬·Ç¹Ì¶¨¶Î22¸ö×Öĸ
ÒѾÓÐ9È˻ظ´
ÉúÃü¿ÚC13ÃæÉÏ»áÆÀʱ¼ä
ÒѾÓÐ11È˻ظ´
ÄÚÐÄØÑ·¦
ÒѾÓÐ16È˻ظ´
ÉúÃü¿ÚÃæÉÏ»áÆÀ½áÊøÁËÂð´ó¼ÒÓÐÖªµÀ½á¹ûÂð£¿ÏÖÔÚ»¹Ã»Óнá¹ûÕý³£²»£¿
ÒѾÓÐ9È˻ظ´
ͶӢÎÄÆÚ¿¯ÈçºÎ²éÖØ
ÒѾÓÐ6È˻ظ´
²»ÒªÔÙÊý¹ú×ÔÈ»ÉêÇëÊéµÄ filecode µÄ·Ö¸ô·û¸öÊýÁË
ÒѾÓÐ21È˻ظ´
²®°·Éϼ׻ùÇóÖú
ÒѾÓÐ7È˻ظ´











;
blockSize/4)
»Ø¸´´ËÂ¥
10