var osn:Number = 0;M:String;arr_o:Array = new Array();_hesh.addEventListener(MouseEvent.CLICK, get_hesh)get_hesh(e:MouseEvent):void
{= otkritii.text;(var ind_1:Number = 0; ind_1 < M.length; ind_1++)
{ arr_o.push(M.charCodeAt(ind_1)); }
//РЕАЛИЗАЦИЯ ФУНКЦИИ ХЕШИРОВАНИЯ(var ind_2:Number = 0; ind_2 < M.length; ind_2++)
{ arr_o.pop(); }
}
В следующей части программы я реализовал объявление переменных в области от 1381 до 3989.
Теперь я приступил к реализации самой электронной цифровой подписи:
for(var gli:Number = 1; gli > 0; gli++)
{
//ГЕНЕРАЦИЯ ПАРАМЕТРОВ P И G= Math.floor(Math.random()*330);= prostie_chisla[ind];_1 = (P - 1);_2 = (P - 3);pre_3:Number = 0;pre_4:Number = 0;( G = 1; G < P - 1; G++)
{(var i_on1:Number = 0; i_on1 < (P - 1); i_on1++)
{_G1 = on_G1 * G;_G1 = on_G1 % P;
}( on_G1 == 1)
{_3 = 1;
}( on_G1 != 1)
{_3 = 0;
}_G1 = 1;(var l:Number = 1; l < P - 2; l++)
{(var i_on2:Number = 0; i_on2 < l; i_on2++)
{_G2 = on_G2 * G;_G2 = on_G2 % P;
}( on_G2 == 1)
{_4 = 0;;
}( on_G2 != 1)
{_4 = 1;
}_G2 = 1;
}( pre_3 == 1 && pre_4 == 1)
{;
}
}
//ГЕНЕРАЦИЯ X И К И ВЫЧИСЛЕНИЕ Y
X = Math.floor(Math.random()*gua_2) + 2;(var i_Y:Number = 0; i_Y < X; i_Y++)
{_Y = on_Y * G;_Y = on_Y % P;
}= on_Y % P;(var l_1:Number = 1; l_1 > 0; l_1++)
{= Math.floor(Math.random()*gua_2) + 2;_a = P - 1;_b = K;(var l_2:Number = 1; l_2 > 0; l_2++)
{((nod_a != 0) || (nod_b != 0))
{(nod_a > nod_b)
{_a = nod_a % nod_b;
}nod_b = nod_b % nod_a;
}((nod_a == 0) || (nod_b == 0))
{= nod_a + nod_b;
break;
}
}(nod == 1)
{;
}}
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ПОДПИСИ
for(var i_a:Number = 0; i_a < K; i_a++)
{_a = on_a * G;_a = on_a % P;
}= on_a % P;(var b:Number = 1; b > 0; b++)
{_b1 = X*a + K*b;_b2 = on_b1 % (P - 1);(m == on_b2)
{;
}}(var i_par1:Number = 0; i_par1 < a; i_par1++)
{_par1 = on_par1 * Y;_par1 = on_par1 % P;
}_1 = on_par1 % P;(var i_par2:Number = 0; i_par2 < b; i_par2++)
{_par2 = on_par2 * a;_par2 = on_par2 % P;
}_2 = on_par2 % P;
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ
on_A1 = par_1*par_2;_1 = on_A1 % P;(var i_A2:Number = 0; i_A2 < m; i_A2++)
{_A2 = on_A2 * G;_A2 = on_A2 % P;
}_2 = on_A2;(b < 0)
{= (b + (P - 1));
}(((b % 1) == 0) && (b > 5) && (a > 5) && (b != a) && (A_1 == A_2))
{;
}_a = 1;_Y = 1;_par1 = 1;
on_par2 = 1;_A2 = 1;}
Далее я реализовал режим проверки подлинности цифровой подписи:
function on_pr(e:MouseEvent):void
{
//РЕЖИМ ПРОВЕРКИ
//ПРИНЯТИЕ ПАРАМЕТРОВ= Number(proverka.P_znach.text);
G = Number(proverka.G_znach.text);= Number(proverka.Y_znach.text);= Number(proverka.a_znach.text);= Number(proverka.b_znach.text);(P + " " + G + " " + Y + " " + a + " " + b);(var i_par1:Number = 0; i_par1 < a; i_par1++)
{_par1 = on_par1 * Y;_par1 = on_par1 % P;
}_1 = on_par1 % P;(var i_par2:Number = 0; i_par2 < b; i_par2++)
{_par2 = on_par2 * a;_par2 = on_par2 % P;
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ
on_A1 = par_1*par_2;_1 = on_A1 % P;(var i_A2:Number = 0; i_A2 < m; i_A2++)
{_A2 = on_A2 * G;_A2 = on_A2 % P;
}_2 = on_A2;
//ВЫВОД В ИНТЕРФЕЙС
proverka.A_1_znach.text =
String(A_1);.A_2_znach.text = String(A_2);
3.2 Электронная цифровая подпись по DSS/DSA
Для получения рабочей электронной цифровой подписи по DSS/DSA мне было необходимо реализовать в программе хеширование. В алгоритме программы функция хеширования описывается подобным образом:m:Number = 0;
var osn:Number = 0;M:String;arr_o:Array = new Array();_hesh.addEventListener(MouseEvent.CLICK, get_hesh)get_hesh(e:MouseEvent):void
{
//ВЗЯТИЕ ТЕКСТА ДЛЯ ХЕША= otkritii.text;
for (var ind_1:Number = 0; ind_1 < M.length; ind_1++)
{ _o.push(M.charCodeAt(ind_1));
}
//ХЕШИРОВАНИЕ(var ind_2:Number = 0; ind_2 < M.length; ind_2++)
{= Math.pow(arr_o[ind_2], m) % 256;= ((osn + arr_o[ind_2]) % 30) + 2;
}.text = String(m);(var ind_3:Number = 0; ind_3 < M.length; ind_3++)
{ _o.pop();
}
}
В слудующей части программы я реализовал объявление переменных в диапазоне от 1381до 3989.
Теперь я приступил к реализации самой электронной цифровой подписи:
{
//РЕЖИМ ПОДПИСИ(var gli:Number = 1; gli > 0; gli++)
{
//ГЕНЕРАЦИЯ ПАРАМЕТРОВ P, Q И G
for(var kil:Number = 1; kil > 0; kil++)
{= Math.floor(Math.random()*330);= prostie_chisla[ind];_1 = (P - 3);= Math.floor(Math.random()*20);= prostie_chisla2[kon]((P - 1) % q == 0)
{(P + " " + q);_2 = (q - 3);;
}
}(var ali:Number = 1; ali > 0; ali++)
{= Math.floor(Math.random()*gua_1) + 2;(var i_on1:Number = 0; i_on1 < ((P - 1)/q); i_on1++)
{_G = on_G * h;_G = on_G % P;
}= on_G;(G > 1)
{(G);
break;
}}
//ГЕНЕРАЦИЯ X И K, ВЫЧИСЛЕНИЕ Y, A И B
X = Math.floor(Math.random()*gua_2) + 2;(var i_on1:Number = 0; i_on1 < X; i_on1++)
{_Y = on_Y * G;_Y = on_Y % P;
}= on_Y;= Math.floor(Math.random()*gua_2) + 3;(var i_on1:Number = 0; i_on1 < K; i_on1++)
{_a = on_a * G;_a = on_a % P;
}= (on_a % q);(a);_b = (m + a*X)/K ;= (on_b % q);= (1 / b);_1 = (m*W);_2 = (a*W);_1 = Math.pow(G, U_1);_2 = Math.pow(Y, U_2);_V = ((par_1)*(par_2)) % P;= on_V % q;(V);_par1 = 1;_par2 = 1;_V = 1;_G = 1;_Y = 1;_a = 1;_b = 1;(((b % 1) == 0) && (a > 5) && (b > 5) && (a != b) && ((V % 1) == 0) && (a == V))
{;
}}
Следующей частью кода я вывожу электронную цифровую подпись в интерфейс.
podpis.P_znach.text = String(P);.P_znach.text = String(P);.G_znach.text = String(G);.G_znach.text = String(G);.q_znach.text = String(q);.q_znach.text = String(q);.X_znach.text = String(X);.Y_znach.text = String(Y);.Y_znach.text = String(Y);.K_znach.text = String(K);.a_znach.text = String(a);.a_znach.text = String(a);.b_znach.text = String(b);.b_znach.text = String(b);
Далее я реализовал режим проверки подлинности цифровой подписи:
function on_pr(e:MouseEvent):void
{
//РЕЖИМ ПРОВЕРКИ ПОДПИСИ
//ПРИНЯТИЕ ПАРАМЕТРОВ= Number(proverka.P_znach.text);
G = Number(proverka.G_znach.text);= Number(proverka.q_znach.text);= Number(proverka.Y_znach.text);= Number(proverka.a_znach.text);= Number(proverka.b_znach.text);
//ВЫЧИСЛЕНИЕ ПАРАМЕТРОВ ДЛЯ ПРОВЕРКИ= (1 / b);
U_1 = (m*W);_2 = (a*W);_1 = Math.pow(G, U_1);_2 = Math.pow(Y, U_2);_V = ((par_1)*(par_2)) % P;= on_V % q;_par1 = 1;
on_par2 = 1;_V = 1;
//ВЫВОД В ИНТЕРФЕЙС
proverka.U_1_znach.text = String(U_1);.U_2_znach.text = String(U_2);.V_znach.text = String(V);
}
4. РЕЗУЛЬТАТЫ
.1 Интерфейс
программы реализующей ЭЦП по ЕGSА
Интерфейс моей программы состоит из трёх
основных режимов работы: хеширования сообщения, формирования подписи и проверки
подписи.
Рисунок 4.1.1 - Интерфейс программы реализующей
ЭЦП по ЕGSА
Интерфейс программы реализующей ЭЦП по DSS/DSA
Интерфейс моей программы состоит из трёх основных режимов работы: хеширования сообщения, формирования подписи и проверки подписи.
Рисунок 4.2.1 - Интерфейс программы реализующей
ЭЦП по DSS/DSA
ВЫВОДЫ
Научно-техническая революция в последнее время приняла грандиозные масштабы в области информатизации общества на базе современных средств вычислительной техники, связи, а также современных методов автоматизированной обработки информации. Применение этих средств и методов приняло всеобщий характер, а создаваемые при этом информационно-вычислительные системы и сети становятся глобальными как в смысле территориальной распределенности, так и в смысле широты охвата в рамках единых технологий процессов сбора, передачи, накопления, хранения, поиска, переработки информации и выдачи ее для использования.
Электронная цифровая подпись - эффективное решение для всех, кто хочет идти в ногу с новыми требованием времени. Если у Вас нет времени ждать прихода фельдъегерской или курьерской почты за многие сотни километров, чтобы проверить подтвердить заключение сделки или подлинность полученной информации. Преимущества ЭЦП очевидны - документы, подписанные электронной цифровой подписью, могут быть переданы к месту назначения в течение нескольких секунд. Все участники электронного обмена документами получают равные возможности независимо от их удаленности друг от друга. Границы благодаря новым технологиям стираются в 21 веке.
Подделать ЭЦП невозможно - для этого требуется
огромного количества вычислений, которые не могут быть реализованы при
современном уровне вычислительной техники и математики за приемлемое время, то
есть пока информация, содержащаяся в подписанном документе, сохраняет
актуальность.
ИСТОЧНИКИ ДАННЫХ
Беляев А.В. "Методы и средства защиты информации".
Баричев С.Г. Основы современной криптографии - Москва, Горячая линия - Телеком, 2001.
Петров А.А. Компьютерная безопасность. Криптографические методы защиты. ДМК Москва, 2000 г.
Столлингс В. Криптография и защита сетей: теория и практика. М: Вильямс. 2001.
Терехов А.Н. "Программирование РАН", N 5 (сентябрь-октябрь), 1994, стр. 17--22 .
Криптографические алгоритмы с открытым ключом (http://argosoft.webservis.ru/Base/RSAintro.html#Криптографические алгоритмы с открытым ключом)