Статья опубликована в рамках: CVII Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 21 декабря 2020 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
РЕАЛИЗАЦИЯ МЕТОДА ШИФРОВАНИЯ RSA НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ C#
IMPLEMENTATION OF THE RSA ENCRYPTION METHOD IN THE PROGRAMMING LANGUAGE C#
Irina Romanova
Student, College of Infrastructure Technologies, "North-Eastern Federal University named after M.K. Ammosov",
Russia, Yakutsk
Matrena Buskarova
Scientific supervisor, lecturer in Engineering, College of Infrastructure Technologies, "North-Eastern Federal University named after M.K. Ammosov",
Russia, Yakutsk
АННОТАЦИЯ
Данная статья написана для создания и привлечения интереса людей к шифрованию, что позволит заинтересованным людям просмотреть в этой статье базовые понятия и пример реализации одного из методов шифрования: RSA. Она широко используется в настоящее время. И возможно даст ответы на некоторые вопросы, которые ищет, тот или иной читатель.
ABSTRACT
This article is written to create and attract people's interest in encryption, which will allow interested people to view in this article the basic concepts and an example of the implementation of one of the encryption methods: RSA. It is widely used now. and perhaps it will give answers to some of the questions that this or that reader is looking for.
Keywords: cryptography, RSA cryptographic method, RSA algorithm.
Ключевые слова: криптография, криптографический метод RSA, алгоритм RSA.
Основные задачи и принципы криптографической защиты
С давних времен человечество использует коды, для защиты своих данных от третьих лиц. В наше время этот метод имеет большую актуальность, так как мы живем мире, где хранятся большие данные. И для их защиты и конфиденциальности, необходим «сторожевой пес», который будет отгонять и не подпускать к хранимым данным злоумышленников.
С поколения в поколение коды и пороли постепенно превращались шифры, состоящие из разных методов скрытия данных. Шифры (криптограмма) – это методы и способы преображения информации с целью ее защиты от незаконных пользователей.
Криптография — это наука о способах преобразования(шифрования) информации с целью защиты от незаконных пользователей. Другими словами, под криптографией понимается наука, занимающаяся изучением и разработкой методов преобразования информации
Для защиты своих данных люди придумали самые различные методы шифрования. Но все методы шифрования данных можно взломать. Так сказать, невзломаемых методов как таковых не существует, поэтому люди придумывая собственные методы шифрования проверяют их на прочность, что называется криптоанализом. Криптоанализ – это наука, изучающая методы вскрытия и взлома шифрования.
Криптографический алгоритм RSA
RSA (аббревиатура от фамилий создателей: Rivest, Shamir и Adleman) – криптографическая система открытого ключа, обеспечивающая такие механизмы защиты как шифрование и цифровая подпись. Криптосистема RSA разработана в 1977 году и названа в честь ее разработчиков.
Алгоритм RSA работает следующим образом: берутся два достаточно больших простых числа и вычисляется их произведение.
Скорость работы алгоритма RSA в практических приложениях для открытого ключа обычно выбирается относительно не большой показатель, а зачастую группы пользователей используют один и тот же открытый показатель, но каждый с различным модулем. Если открытый показатель изменен, то вводятся некоторые ограничения на главные сомножители модуля. При этом шифрование данных идет быстрее расшифрования, а проверка подписи, чем подписание.
Взлом криптосистемы RSA
Существует несколько способов взлома RSA. Наиболее эффективная атака – найти секретный ключ, соответствующий необходимому открытому ключу. Что позволит нападающему читать все сообщения, найдя главные множители общего модуля. Основная сложность в поиске главных сомножителей, второй способ, атака по предполагаемому открытому тексту, где нападающий имея зашифрованный текст, предполагает, что сообщение имеет какой-то определенный текст, затем шифрует предполагаемый текст открытым ключом получателя и сравнивает полученный текст с имеющимся зашифрованным текстом
Безопасность RSA зависит от разложения на сомножители, что является трудной задачей, не имеющей эффективных способов решения, второй способ состоит в том, что найти метод вычисления корня степени из остатка
Шаги реализации алгоритма RSA:
Теперь опишем последовательность шагов алгоритма RSA:
- выбрать два больших простых числа p и q;
- вычислить: n = p ⋅ q, m = (p – 1) ⋅ (q – 1);
- выбрать случайное число d, взаимно простое с m;
- определить такое число e, для которого является истинным выражение: (e ⋅ d) mod (m) = 1;
- числа e и n – это открытый ключ, а числа d и n – это закрытый ключ;
На практике это означает следующее: открытым ключом зашифровывают сообщение, а закрытым – расшифровывают. Пара чисел закрытого ключа держится в секрете.
- разбить шифруемый текст на блоки, каждый из которых может быть представлен в виде числа M(i);
Обычно блок берут равным одному символу и представляют этот символ в виду числа – его номера в алфавите или кода в таблице символов (например ASCII или Unicode).
- шифрование алгоритмом RSA производится по формуле: C(i) = (M(i)e) mod n;
- расшифровка сообщения производится с помощью формулы: M(i) = (C(i)d) mod n.
Алгоритм RSA. Программная реализация на языке программирования C#.
Для создания программы шифрования создали форму примерно такого вида как:
Рисунок 1. Интерфес «Метод шифрования RSA»
В программе было использован следующий алфавит:
Число M(i) для конкретной буквы будет равно её номеру в массиве characters[].
Для начала подключили библиотеку:
using System.Numerics;
Привели код для кнопки “Зашифровать” данного вида:
private void buttonEncrypt_Click(object sender, EventArgs e)
if ((textBox1.Text.Length > 0) && (textBox2.Text.Length > 0))
{ long p = Convert.ToInt64(textBox1.Text);
long q = Convert.ToInt64(textBox2.Text);
if (IsTheNumberSimple(p) && IsTheNumberSimple(q))
{ string s = "";
StreamReader sr = new StreamReader("in.txt");
while (!sr.EndOfStream)
{ s += sr.ReadLine(); }
sr.Close();
s = s.ToUpper();
long n = p * q;
long m = (p - 1) * (q - 1);
long d = Calculate_d(m);
long e_ = Calculate_e(d, m);
List<string> result = RSA_Endoce(s, e_, n);
StreamWriter sw = new StreamWriter("out1.txt");
foreach (string item in result)
sw.WriteLine(item);
sw.Close();
textBox3.Text = d.ToString();
textBox4.Text = n.ToString();
Process.Start("out1.txt");
}
else MessageBox.Show("p или q - не простые числа!");
} else MessageBox.Show("Введите p и q!");
Далее написали код для кнопки «Расшифровать»
private void button1_Click(object sender, EventArgs e)
{ if ((d.Text.Length > 0) && (n.Text.Length > 0))
{ long d = Convert.ToInt64(this.d.Text);
long n = Convert.ToInt64(this.n.Text);
List<string> input = new List<string>();
StreamReader sr = new StreamReader("out1.txt");
while (!sr.EndOfStream)
{ input.Add(sr.ReadLine()); }
sr.Close();
string result = RSA_Dedoce(input, d, n);
StreamWriter sw = new StreamWriter("out2.txt");
sw.WriteLine(result);
sw.Close();
Process.Start("out2.txt");}
else MessageBox.Show("Введите секретный ключ!");}
После записали метод, реализующий шифрование строки алгоритмом RSA.
private List<string> RSA_Endoce(string s, long e, long n)
{ List<string> result = new List<string>();
BigInteger bi;
for (int i = 0; i < s.Length; i++)
{ int index = Array.IndexOf(characters, s[i]);
bi = new BigInteger(index);
bi = BigInteger.Pow(bi, (int)e);
BigInteger n_ = new BigInteger((int)n);
bi = bi % n_;
result.Add(bi.ToString());}
return result;}
Разобрали метод, выполняющий расшифровку строки алгоритмом RSA:
private string RSA_Dedoce(List<string> input, long d, long n)
{ string result = "";
BigInteger bi;
foreach (string item in input)
{ bi = new BigInteger(Convert.ToDouble(item));
bi = BigInteger.Pow(bi, (int)d);
BigInteger n_ = new BigInteger((int)n);
bi = bi % n_;
int index = Convert.ToInt32(bi.ToString());
result += characters[index].ToString();}
return result;}
Метод, для проверки чисел на простоту введенных чисел:
private bool IsTheNumberSimple(long n)
{ if (n < 2)
return false;
if (n == 2)
return true;
for (long i = 2; i < n; i++)
{ if (n % i == 0)
return false; }
return true;}
Вычисление параметра d (d должно быть взаимно простым с m)
private long Calculate_d(long m)
{ long d = m - 1;
for (long i = 2; i <= m; i++)
if ((m % i == 0) && (d % i == 0)) //если имеют общие делители
{ d--;
i = 1;}
return d;}
Метод, вычисляющий значение параметра e
private long Calculate_e(long d, long m)
{ long e = 10;
while (true) {
if ((e * d) % m == 1)
break;
else
e++; }
return e;}
Перед тем как запустить программу необходимо, сперва, в файле in.txt ввести данные, которые мы хотим зашифровать и расшифровать для проверки данного кода шифрования.
Результат работы данной разработанной формы такова:
Открываем текстовый файл “in.txt” и ввели предложение:
Рисунок 2. Заполнение файла in1.txt
И запустили программу в окне ввели любые взаимно простые числа:
Рисунок 3. Ввод данных
Шифруем закрытые ключи и получаем открытые ключи:
Рисунок 4. Ввод данных
В общем получилось:
Рисунок 5. Результат шифрования RSA
Заключение
В данной статье мы рассмотрели теоретическое и объективное представление метода шифрования и реализовали методов шифрования – RSA.
Список литературы:
- В.Н. Салий. Криптографические методы и средства защиты информации. Саратов – 2017;
- Иван Ефишов. Таинственные страницы. Занимательная криптография. 2016;
- Клири Стивен. Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование. 2-е межд. изд. — СПб.: Питер, 2020. — 272 с;
- Эндрю Троелсен. Язык программирования C# 5.0 и платформа .NET 4.5, 6-ое издание, 2015;
дипломов
Оставить комментарий