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

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

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

Ротор шифровальной машины 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.

 

Просмотров: 162 | Добавил: marsohod4you | Теги: intel, FPGA, марсоход | Рейтинг: 0.0/0
Всего комментариев : 0
avatar