load('WS3.mat'); samples = 1000; analyzed_traces = 'traces_noDummy'; %analyzed_traces = 'traces_withDummy'; byte_to_attack = 1; 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 K = uint8(0:255); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TASK 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Calculate hypothetical intermediate values V = SubBytes(bitxor(repmat(D, 1, length(K)), repmat(K, samples, 1)) + 1); % 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))] ); R(key_idx, k) = r(1, 2); end end clear key_idx k r % Plot correlation traces %show_plots(R, 1, 256, 4) %octave_plot2(R, 1, 256, 2, 2) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TASK 6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Preprocess traces with windowing traces_pre = int16(traces(:, 1:end-delta)) + int16(traces(:, 1+delta:end)); % Calculate correlation with preprocessed traces tr_length = size(traces, 2); R_win = zeros(length(K), tr_length-delta); for key_idx = uint16(K)+1 fprintf('Working on key guess = %d\n', K(key_idx)); for k = 1:tr_length-delta r = corrcoef( [double(H(:,key_idx)) double(traces_pre(:,k))] ); R_win(key_idx, k) = r(1, 2); end end clear key_idx k r % Plot correlation traces %show_plots(R_win, 1, 256, 4) %octave_plot2(R_win, 1, 256, 2, 2)