Автор: Пользователь скрыл имя, 23 Апреля 2013 в 23:32, курсовая работа
Под гаммированием понимают процесс наложения по определенному закону гаммы шифра на открытые данные. Гамма шифра - это псевдослучайная последовательность, выработанная по заданному алгоритму для зашифрования открытых данных и расшифрования зашифрованных данных.
Процесс зашифрования заключается в генерации гаммы шифра и наложении полученной гаммы на исходный открытый текст обратимым образом, например с использованием операции сложения по модулю два.
Следует отметить, что перед зашифрованием открытые данные разбивают на блоки одинаковой длины, обычно по 64 бита. Гамма шифра вырабатывается в виде последовательности блоков аналогичной длины.
ИСХОДНЫЕ ДАННЫЕ 4
ВВЕДЕНИЕ 5
1 АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ 6
1.1 Общее описание алгоритма криптографического преобразования ГОСТ 28147-89 6
1.2 Описание режима работы алгоритма ГОСТ 28147-89 в режиме гаммирования 9
2 РЕАЛИЗАЦИЯ АЛГОРИТМА В СРЕДЕ ALTERA 12
3. ОПИСАНИЕ ИСПОЛЬЗУЕМОЙ ПЛИС 16
ЗАКЛЮЧЕНИЕ 18
СПИСОК ЛИТЕРАТУРЫ 19
На выходе «cle_test» гамма шифра, которая так же, как и синхропосылка, выглядит как шум. Выход «otext» - открытые данные, выход «shifr» - зашифрованные данные, «m_out» - восстановленные данные.
Видно, что восстановленные данные совпадают с открытыми.
Рисунок
2.5 - Результат работы программы после
генерации гаммы шифра
После очередного цикла шифрования
видно, что при одинаковом открытом
тексте зашифрованный текст
Для реализации данного устройства была выбрана ПЛИС «EP1K30QC208-1». Схематическое изображение которой представлено в приложении Б.
Было использовано 90% входов/выходов и 38% логических ячеек. Видно, что 62% логических ячеек ПЛИС остаются неиспользованными при 10% использованных входов/выходов.
Для предотвращения чрезмерного увеличения задержки и во избежание выхода устройства из строя при нагреве ПЛИС, рассчитаем частоту тактового генератора, исходя из данных симуляции.
Частота тактового генератора будет равняться:
Где T – период тактов генератора.
Учитывая, что за 32 такта обрабатывается 64 бита информации, рассчитаем скорость работы устройства:
Описание входов/выходов:
«TCK» – контакт для программирования и тестирования ПЛИС, если не используется, то подключается на землю;
«CONF_DONE», «nCEO», «DATA0», «DCLK», «nCE», «MSEL0», «MSEL1», «nCONFIG», «nSTATUS» - в данном устройстве не используются, подключаются на питание 2.5 В;
«TDI», «TMS» - контакты для программирования и тестирования ПЛИС, если не используются, то подключены на питание 2.5 В;
«TDO», «TRST» - контакты для программирования и тестирования;
«VCCIO», «VCCINT» - контакты питания ПЛИС (2.5 В);
«shifr0..shifr63» - выходные контакты микросхемы, содержат шифрованные данные (нулевой уровень : 0 В, единичный уровень: 2.5 В);
«otext0..otext63» - выходные контакты микросхемы, содержат открытые данные (нулевой уровень : 0 В, единичный уровень: 2.5 В);
«GND» - подключается на землю;
«RESERVED» - неиспользуемые входы/выходы, не подключаются.
«VCC_CKLK» - не используется, подключается на питание (2.5 В);
«GND_CKLK» - не используется, подключается на землю;
«clk» - вход тактого генератора(нулевой уровень : -0.5..0.8 В, единичный уровень: 1.7..5.75 В, частота 5 МГц);
«prn» - установка начальных значений счетчиков (нулевой уровень : -0.5..0.8 В, единичный уровень: 1.7..5.75 В);
«cycle_switch» - осуществляет переключение начального цикла рандомизации синхропосылки и дальнейших циклов генерации гаммы шифра (нулевой уровень : -0.5..0.8 В, единичный уровень: 1.7..5.75 В);
«main_load» - осуществляет загрузку синхропосылки в устройство генерации гаммы (нулевой уровень : -0.5..0.8 В, единичный уровень: 1.7..5.75 В);
«mem_load» - осуществляет загрузку данных суммирования с константами C1 и C2 в регистр (нулевой уровень : -0.5..0.8 В, единичный уровень: 1.7..5.75 В);
В данной работе было исследовано устройство, основанное на алгоритме ГОСТ 28147-89 в режиме гаммирования. Была выявлена нецелесообразность реализации данного алгоритма на ПЛИС вследствие недостатка входных и выходных контактов, а так же необходимости использования одинаковой синхропосылки и ключа, что сильно ухудшает криптостойкость алгоритма (передача ключевых данных вместе с зашифрованными данными также снижает криптографические свойства и вызывает необходимость расширять устройство, что усугубляет первый недостаток).
[1] Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. ГОСТ 28147-89 – М. : Филиал ИПК Издательство стандартов, 1996. – 26с.
[2]. RSDN [Электронный ресурс]. – Электронные данные. – Режим доступа : http://www.rsdn.ru
[3] Язык описания цифровых устройств Altera HDL. Практический курс. – М.: ИП Радио Софт, 2001. – 224 с.: ил.
(Обязательное)
Листинг программы блока «gen_otext»
Subdesign gen_otext
(c_in[4..0] : input;
otext[63..0] : output)
Begin
if c_in[] == b"00000" then
otext[] =
b"
end if;
end;
Листинг программы блока «Do_Xor»
SubDesign Do_Xor
(in_otext[63..0], in_gamma[63..0] : input;
out[63..0] : output;)
Begin
out[] = in_otext[] xor in_gamma[];
end;
Листинг программы блока «main_cycle»
Subdesign main_cycle
(in[63..0],K[0..31],load: input;
out[63..0], out_n1[31..0], out_n2[31..0] : output;)
variable
ff[63..0]:dff;
a[31..0]:node;
b[31..0]:node;
c[31..0]:node;
d[31..0]:node;
e[31..0]:node;
f[31..0]:node;
h[31..0]:node;
g[31..0]:node;
Ha[15..0][3..0]:node;
Hb[15..0][3..0]:node;
Hc[15..0][3..0]:node;
Hd[15..0][3..0]:node;
He[15..0][3..0]:node;
Hf[15..0][3..0]:node;
Hg[15..0][3..0]:node;
Hh[15..0][3..0]:node;
begin
ff[].clk=load;
b[]=in[0..31];
d[]=in[32..63];
out_n1[] = d[];
out_n2[] = b[];
f[] = b"
g[] = b"
if d[] + K[] < f[] + g[] then
a[] = d[] + K[];
else a[] = d[] + K[] - f[];
end if;
Ha[][]=(b"0100",b"1010",b"
Hb[][]=(b"1110",b"1011",b"
Hc[][]=(b"1010",b"1000",b"
Hd[][]=(b"0111",b"1101",b"
He[][]=(b"0110",b"1100",b"
Hf[][]=(b"0100",b"1011",b"
Hg[][]=(b"1101",b"1011",b"
Hh[][]=(b"0001",b"1111",b"
for i in 0 to 15 generate
if a[3..0] == i then c[3..0]= Ha[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[7..4] == i then c[7..4]= Hb[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[11..8] == i then c[11..8]= Hc[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[15..12] == i then c[15..12]= Hd[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[19..16] == i then c[19..16]= He[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[23..20] == i then c[23..20]= Hf[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[27..24] == i then c[27..24]= Hg[i][];
end if;
end generate;
for i in 0 to 15 generate
if a[31..28] == i then c[31..28]= Hh[i][];
end if;
end generate;
e[]=(c[20..0],c[31..21]);
h[] = e[] xor b[];
ff[].d=(h[], d[]);
out[]=ff[].q;
end;
Листинг программы блока «summ232»
SubDesign summ232
(in[63..0], load : input;
out[63..0], out_dff[63..0] : output;)
variable
ff[63..0] : dff;
a[31..0] : node;
b[31..0] : node;
c[31..0] : node;
d[31..0] : node;
e[31..0] : node;
f[31..0] : node;
o1[31..0] : node;
o2[31..0] : node;
begin
c[] = b"
d[] = b"
e[] = b"
f[] = b"
a[] = in[32..63];
b[] = in[0..31];
if a[] + e[] < c[] + d[] then
o1[] = a[] + e[];
else o1[] = a[] + e[] - c[];
end if;
if b[] + f[] < c[] + d[] then
o2[] = b[] + f[];
else o2[] = b[] + f[] - c[] + d[];
end if;
out[] = (o2[], o1[]);
ff[].clk = load;
ff[].d = (o2[], o1[]);
out_dff[] = ff[].q;
end;
Листинг программы блока «kzy»
Subdesign kzy
(in[4..0] : input;
out[31..0] : output;)
variable
a[31..0]:node;
b[31..0]:node;
c[31..0]:node;
d[31..0]:node;
e[31..0]:node;
f[31..0]:node;
g[31..0]:node;
h[31..0]:node;
begin
a[] = b"
b[] = b"
c[] = b"
d[] = b"
e[] = b"
f[] = b"
g[] = b"
h[] = b"
if in[] == b"00000" then
out[] = a[]; end if;
if in[] == b"00001" then
out[] = b[]; end if;
if in[] == b"00010" then
out[] = c[]; end if;
if in[] == b"00011" then
out[] = d[]; end if;
if in[] == b"00100" then
out[] = e[]; end if;
if in[] == b"00101" then
out[] = f[]; end if;
if in[] == b"00110" then
out[] = g[]; end if;
if in[] == b"00111" then
out[] = h[]; end if;
if in[] == b"01000" then
out[] = a[]; end if;
if in[] == b"01001" then
out[] = b[]; end if;
if in[] == b"01010" then
out[] = c[]; end if;
if in[] == b"01011" then
out[] = d[]; end if;
if in[] == b"01100" then
out[] = e[]; end if;
if in[] == b"01101" then
out[] = f[]; end if;
if in[] == b"01110" then
out[] = g[]; end if;
if in[] == b"01111" then
out[] = h[]; end if;
if in[] == b"10000" then
out[] = a[]; end if;
if in[] == b"10001" then
out[] = b[]; end if;
if in[] == b"10010" then
out[] = c[]; end if;
if in[] == b"10011" then
out[] = d[]; end if;
if in[] == b"10100" then
out[] = e[]; end if;
if in[] == b"10101" then
out[] = f[]; end if;
if in[] == b"10110" then
out[] = g[]; end if;
if in[] == b"10111" then
out[] = h[]; end if;
if in[] == b"11000" then
out[] = h[]; end if;
if in[] == b"11001" then
out[] = g[]; end if;
if in[] == b"11010" then
out[] = f[]; end if;
if in[] == b"11011" then
out[] = e[]; end if;
if in[] == b"11100" then
out[] = d[]; end if;
if in[] == b"11101" then
out[] = c[]; end if;
if in[] == b"11110" then
out[] = b[]; end if;
if in[] == b"11111" then
out[] = a[]; end if;
end;
Листинг программы блока «gen_synchro»
Subdesign gen_synchro
(send_out[63..0] : output;)
begin
send_out[]= b"
end;
Схематичное изображение ПЛИС «EP1K30QC208-1»:
Принципиальная схема устройства: