
- •Министерство цифрового развития, связи и массовых коммуникаций российской федерации
- •Московский технический университет связи и информатики
- •Введение
- •1. Формирование технического задания на составную часть эскизного проекта
- •2. Краткие теоретические основы
- •2.1 Математический аппарат
- •2.2 Распространение ключей в симметричных криптосистемах по алгоритму Диффи-Хелмана
- •3. Разработка и описание функциональной схемы микропроцессорного устройства
- •4. Разработка программного обеспечения микропроцессорного устройства
- •4.1 Генерация ключей
- •4.2 Программный код генерации ключей
- •4.3 Вывод программы генерации ключей
- •4.4 Разработка подпрограммы передачи ключей для абонента c
- •4.5 Программный код для Диффи-Хелмана 3 абонента
- •Программный код 2 – Программный код передачи ключей по потоку e1
- •4.6 Вывод программы Генерации ключей:
- •5. Анализ результатов работы программного обеспечения микропроцессорного устройства
- •Список использованной литературы
- •Приложение 1
- •2 Цель разработки, наименование и обозначение изделия
- •2.1 Цель разработки
- •3 Технические требования к изделию
- •4 Технико-экономические требования
- •5 Требования к видам обеспечения
- •11 Этапы выполнения эскизного проекта
- •12 Порядок выполнения и приемки этапов эскизного проекта
- •Приложение 2
4. Разработка программного обеспечения микропроцессорного устройства
В данном разделе приводятся блок-схемы алгоритмов программы на рисунках 5 - 21, а также программный код 1 - 2.
Рисунок 5 – Блок – схема основной программы
Рисунок 6 – Блок-схема прерывающих подпрограмм SPORT0 для передачи
Рисунок 7 – Блок-схема прерывающих подпрограмм SPORT0 для приёма
4.1 Генерация ключей
Рисунок 8 – Блок-схема подпрограммы Генерации ключей
Рисунок 9 – Блок-схема подпрограммы генерации ключа n
Рисунок 10 – Блок-схема подпрограммы генерации ключа z
Рисунок 11 – Схема передачи ключей между абонентами
4.2 Программный код генерации ключей
import random from math import * import math
n = 106513 n2 = 65536
z = int(random.uniform(1,n2))
print('n = ', n ,' - является полиномом')
print('z = ', z , ' - является индивидуальным ключом абонента B')
|
Программный код 1 – Подпрограмма генерации ключей
4.3 Вывод программы генерации ключей
Рисунок 12 – Вывод подпрограммы генерации ключей
4.4 Разработка подпрограммы передачи ключей для абонента c
Рисунок 13 – Блок-схема подпрограммы возведения в степень
Рисунок 14 – Блок-схема возведение в степень
Рисунок 15 – Блок-схема умножения
4.5 Программный код для Диффи-Хелмана 3 абонента
.SECTION/DM vars;
// Переменные для обработки сигнала .var t; .var k; .var z = 62023; .var n = 40977; .var sd; .var otvet; .var/circ bank[16]; //
.var got_fl = 0; .var i2_soh ; .var i3_soh ; .var l2_soh ; .var l3_soh ; .var ar_soh ;
.var/circ rx_buf[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
.var/circ tx_buf[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; .var/circ vhod[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; .var/circ vihod[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
.SECTION/PM varsp;
.SECTION/PM program;
jump start; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; jump peredacha; rti; rti; rti; jump priem; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti;
//----------------Подпрограмма обработки информации -----------//
//Генерация ключей по алгоритму Диффи-Хелмана в расширенных полях Галуа
//-----------------------------------------------------------//
def:
ena m_mode; dis ar_sat;
//Возведение сообщения в степень z ax0 = dm(i4,m4); dm(t) = ax0; ax0 = dm(z); dm(k) = ax0; call stepen; dm(i5,m4) = ar;
//----------------------------------------------------------------// // Банк степеней(заполнение) //----------------------------------------------------------------// stepen: I0 = bank; L0 = length(bank); m1 = 1; ar = dm(t); mr0 = dm(t); dm(I0,m1) = ar; cntr = 15; do ms until ce; call umn; dm(I0,m1) = ar; ms: mr0 = ar; //----------------------------------------------------------------// // Банк степеней(возведение) //----------------------------------------------------------------// ax0 = dm(k); sr0 = 1; dm(sd) = sr0; se = 1; mr0 = 1; dm(otvet) = mr0; ar = 1; cntr = 16; do p1 until ce; ar = dm(I0,m1); mr0 = dm(otvet); ay0 = dm(sd); none = ax0 and ay0; if ne call umn; sr0 = dm(sd); sr = lshift sr0(lo); dm(sd) = sr0; p1: nop; rts; //----------------------------------------------------------------// // Умножение в расширенных полях Галуа //----------------------------------------------------------------// umn: ay0 = 0; se = 1; af = pass ay0; ay1 = dm(n); sr0 = 1; se = 1; ay0 = sr0; none = mr0 and ay0; if NE af = pass ar;
CNTR = 15; do cicle until CE; sr = lshift sr0 (lo), ay0 = ar; ar = ar + ay0; ay0 = sr0; if ac ar = ar xor ay1; none = mr0 and ay0; cicle: if ne af = ar xor af; ar = pass af; dm(otvet) = ar;
RTS;
//------Программа передачи потока E1 c помощью SPORT0---------// //------------------------------------------------------------//
start: ar = dm(0x3fff); ar = clrbit 0xc of ar; //отключение SPORT0 Для настройки dm(0x3fff) = ar;
ar = B#001010000111; //Включение ПМ и ПД автобуфирирования //Шаг пприём - M1 dm(0x3ff3) = ar; //I0 -> к приёму
i0 = rx_buf; l0 = length(rx_buf);//привязка i1 = tx_buf; l1 = length(tx_buf); m1 = 1;
i4 = vhod; l4 = length(vhod); i5 = vihod; l5 = length(vihod); m4 = 1;
ar = B#1000001000000111; /*настройка порта - длина слова = 8 бит слева нули RFS0,TFS0 - активный уровень - высокий RFS0 - внешний сигнал */
dm(0x3ff6) = ar;
ar = 0x0200; //активация младших и старших регистров приёмника и передатчика SPORT0 dm(0x3ff7) = ar; dm(0x3ff9) = ar;
ar = dm(0x3fff); ar = setbit 0xc of ar; //включение SPORT0 для сохранения настроек dm(0x3fff) = ar;
ifc = 0x00ff; //сброс прерываний nop;
imask = B#0001100000;// маскирование прерывание - разрешение SPORT0 ПД и ПМ nop;
//------------Подпрограмма обработки информации ----------------//
//-----------------------------------------------------------//
z1: ar = dm(got_fl); ar = pass ar;
// Запись rx call z_rx;
//rx ->vhod call zac1; if eq jump z1;
//ПРОГРАММА ОБРАБОТКИ СИГНАЛА cntr = 31; do s2 until ce; call def; s2: nop;
//vihod ->tx call zac2;
//передача c tx call z_tx;
ar = 0; dm(got_fl) = ar; jump z1;
//------------ПОДПРОГРАММА ПРЕРЫВАНИЙ ПЕРЕДАЧИ------------------------//
//--------------------------------------------------------------------// peredacha: dm(i2_soh) = i2; dm(i3_soh) = i3; dm(l2_soh) = l2; dm(l3_soh) = l3; dm(ar_soh) = ar;
i2 = tx_buf; l2 = length(tx_buf); i3 = vihod; l3 = length(vihod); //vihod -> tx_bf на передачу cntr = 31; do vic1 until ce; ar = dm(i3, m1); vic1: dm(i2, m1) = ar; //восстановление значение используемых в регистре ar = dm(ar_soh); i2 = dm(i2_soh); i3 = dm(i3_soh); l2 = dm(l2_soh); l3 = dm(l3_soh); rti;
//------------ПОДПРОГРАММА ПРЕРЫВАНИЙ ПРИЁМА------------------------//
//------------------------------------------------------------------// priem: dm(i2_soh) = i2; dm(i3_soh) = i3; dm(l2_soh) = l2; dm(l3_soh) = l3; dm(ar_soh) = ar; //приём rx_bf -> vhod i2 = rx_buf; l2 = length(rx_buf); i3 = vhod; l3 = length(vhod);
cntr = 31; do vic2 until ce; ar = dm(i2, m1); vic2: dm(i3, m1) = ar; //восстановление значение используемых в регистре ar = dm(ar_soh); i2 = dm(i2_soh); i3 = dm(i3_soh); l2 = dm(l2_soh); l3 = dm(l3_soh); //установка флага готовности ar = 0x55; dm(got_fl) = ar; rti;
//------------------------------------------------------------------// //Форсирование прерываний //------------------------------------------------------------------//
zac1: ax0 = dm(got_fl); ar = pass ax0; if eq ar = setbit 13 of ar; ifc = ar; nop; rts;
zac2: ax0 = dm(got_fl); ar = pass ax0; if ne ar = setbit 14 of ar; ifc = ar; nop; rts;
//------------------------------------------------------------------// //Заполнение информации с входа и на выход //------------------------------------------------------------------//
z_rx: cntr = 31; do r until ce; ax0 = io(0); r: dm(i0,m1) = ax0; rts;
z_tx: cntr = 31; do t2 until ce; ax0 = dm(i1,m1); t2: io(1) = ax0; rts;
|