fpga-systems-magazine

Это интересно: Шифровальная машина Enigma M3 в FPGA Intel MAX10

marsohod4you
02.10.2020 12:01
1045
0
0.0

Шифровальная машина имела систему роторов, которые по некоторому закону делали многократную замену букв:

Электрический сигнал проходил через один ротор к другому, контакты справа от каждого ротора - исходная буква, а слева - буква после подмены.

Ротор шифровальной машины Enigma
На языке Verilog HDL такое действие можно было бы описать, например, вот так:

module ring(
 input wire [25:0]f_in,
 output reg [25:0]f_out,
 input wire [25:0]b_in,
 output reg [25:0]b_out
 );
parameter TRANSLATION = "BDFHJLCPRTXVZNYEIWGAKMUSQO";

always @*
begin
 f_out[ ((TRANSLATION>>(25*8) )&8'hFF) - 8'h41 ]= f_in[0 ];
 f_out[ ((TRANSLATION>>(24*8) )&8'hFF) - 8'h41 ]= f_in[1 ];
 f_out[ ((TRANSLATION>>(23*8) )&8'hFF) - 8'h41 ]= f_in[2 ];
 f_out[ ((TRANSLATION>>(22*8) )&8'hFF) - 8'h41 ]= f_in[3 ];
 f_out[ ((TRANSLATION>>(21*8) )&8'hFF) - 8'h41 ]= f_in[4 ];
 f_out[ ((TRANSLATION>>(20*8) )&8'hFF) - 8'h41 ]= f_in[5 ];
 f_out[ ((TRANSLATION>>(19*8) )&8'hFF) - 8'h41 ]= f_in[6 ];
 f_out[ ((TRANSLATION>>(18*8) )&8'hFF) - 8'h41 ]= f_in[7 ];
 f_out[ ((TRANSLATION>>(17*8) )&8'hFF) - 8'h41 ]= f_in[8 ];
 f_out[ ((TRANSLATION>>(16*8) )&8'hFF) - 8'h41 ]= f_in[9 ];
 f_out[ ((TRANSLATION>>(15*8) )&8'hFF) - 8'h41 ]= f_in[10];
 f_out[ ((TRANSLATION>>(14*8) )&8'hFF) - 8'h41 ]= f_in[11];
 f_out[ ((TRANSLATION>>(13*8) )&8'hFF) - 8'h41 ]= f_in[12];
 f_out[ ((TRANSLATION>>(12*8) )&8'hFF) - 8'h41 ]= f_in[13];
 f_out[ ((TRANSLATION>>(11*8) )&8'hFF) - 8'h41 ]= f_in[14];
 f_out[ ((TRANSLATION>>(10*8) )&8'hFF) - 8'h41 ]= f_in[15];
 f_out[ ((TRANSLATION>>( 9*8) )&8'hFF) - 8'h41 ]= f_in[16];
 f_out[ ((TRANSLATION>>( 8*8) )&8'hFF) - 8'h41 ]= f_in[17];
 f_out[ ((TRANSLATION>>( 7*8) )&8'hFF) - 8'h41 ]= f_in[18];
 f_out[ ((TRANSLATION>>( 6*8) )&8'hFF) - 8'h41 ]= f_in[19];
 f_out[ ((TRANSLATION>>( 5*8) )&8'hFF) - 8'h41 ]= f_in[20];
 f_out[ ((TRANSLATION>>( 4*8) )&8'hFF) - 8'h41 ]= f_in[21];
 f_out[ ((TRANSLATION>>( 3*8) )&8'hFF) - 8'h41 ]= f_in[22];
 f_out[ ((TRANSLATION>>( 2*8) )&8'hFF) - 8'h41 ]= f_in[23];
 f_out[ ((TRANSLATION>>( 1*8) )&8'hFF) - 8'h41 ]= f_in[24];
 f_out[ ((TRANSLATION>>( 0*8) )&8'hFF) - 8'h41 ]= f_in[25];
end

С каждым нажатием на клавиши роторы поворачивались и выходило, что нажатие одной и той же буквы выдавало каждый раз новый результат.

Более подробно о проекте для FPGA Intel MAX10 платы M02mini можно прочитать здесь.

В той статье даже есть видео демонстрация работы шифровальной машины выполненной на FPGA.

 

1045
0
0.0

Всего комментариев : 0
avatar

FPGA-Systems – это живое, постоянно обновляемое и растущее сообщество.
Хочешь быть в курсе всех новостей и актуальных событий в области?
Подпишись на рассылку

ePN