13.09.2014 Views

vulcan-cryptanalysis

vulcan-cryptanalysis

vulcan-cryptanalysis

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C<br />

Vulcan Decrypt Simulation<br />

%-----------------------------------------------------------<br />

% Vulcan decryption simulation<br />

% 2014-06-04 --- CJR<br />

% inputs: 128-bit SRAM array contents "sram"<br />

% 8-bit CV shift register contents "cv8"<br />

% n-bit ciphertext "cti"<br />

% outputs: n-bit plaintext "pto"<br />

% > first 31 bits of plaintext will be gibberish<br />

% decrypts ciphertext into plaintext using Vulcan cipher<br />

% requires "key schedule" to have been run prior to use<br />

%-----------------------------------------------------------<br />

% check user-supplied inputs for simple errors<br />

if((exist(’sram’) == 0)||(length(sram) != 128))<br />

error("128-bit SRAM array not found -- run key schedule")<br />

end<br />

if((exist(’cv8’) == 0)||(length(cv8) != 8))<br />

error("8-bit CV shift register not found -- run key schedule")<br />

end<br />

if(exist(’cti’) == 0)<br />

error("ciphertext input not found -- create some ciphertext")<br />

end<br />

% set up required variables<br />

last = 0; % last ciphertext input bit for differential decoder<br />

ctsr = zeros(1,31); % 31-bit ciphertext shift-register<br />

pto = zeros(1,length(cti)); % pre-allocate plaintext output<br />

% process all bits of ciphertext input<br />

for ii = 1:length(cti)<br />

% differentially decode the ciphertext input bit<br />

ct0 = bitxor(cti(ii),last);<br />

last = cti(ii);<br />

% compute the current SRAM address<br />

addr = ctsr(1:7);<br />

addr = addr*[1 2 4 8 16 32 64]’;<br />

addr = addr+1;<br />

% combine SRAM bit with CT21<br />

keyb = sram(addr);<br />

m0 = bitxor(ctsr(21),keyb);<br />

% compute the XOR tree results<br />

pt = ct0;<br />

pt = bitxor(pt,bitand(cv8(1),ctsr(22)));<br />

pt = bitxor(pt,bitand(cv8(2),ctsr(23)));<br />

pt = bitxor(pt,bitand(cv8(3),ctsr(24)));<br />

pt = bitxor(pt,bitand(cv8(4),ctsr(25)));<br />

pt = bitxor(pt,bitand(cv8(5),ctsr(26)));<br />

pt = bitxor(pt,bitand(cv8(6),ctsr(27)));<br />

pt = bitxor(pt,bitand(cv8(7),ctsr(28)));<br />

pt = bitxor(pt,bitand(cv8(8),ctsr(29)));<br />

pt = bitxor(pt,ctsr(30));<br />

% save decrypted plaintext<br />

pto(ii) = pt;<br />

% clock the ciphertext shift-register<br />

ctsr = [ct0 ctsr(1:20) m0 ctsr(22:30)];<br />

end<br />

34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!