You are on page 1of 6

ПРИКЛАД ШИФРУВАННЯ І РОЗШИФРУВАННЯ

В КРИПТОСИСТЕМІ RSA
RSA - криптографічний система з відкритим ключем, що забезпечує такі механізми
захисту інформації, як шифрування і цифровий підпис (аутентифікація - встановлення
автентичності). Криптосистема RSA розроблена в 1977 році і названа на честь її розробників
Ronald Rivest, Adi Shamir і Leonard Adleman.
Безпека алгоритму RSA побудована на принципі складності факторизації цілих
чисел. Алгоритм використовує два ключі— відкритий (public) і секретний (private), разом
відкритий і відповідний йому секретний ключі утворюють пари ключів (keypair). Відкритий
ключ не потрібно зберігати в таємниці, він використовується для шифрування даних. Якщо
повідомлення було зашифровано відкритим ключем, то розшифрувати його можна тільки
відповідним секретним ключем.
Генерування ключів:
 Для того, щоб згенерувати пари ключів виконуються такі дії:
 Беруться два досить великих простих числа p і q;
 Обчислюється їх добуток n = p * q, n називається модулем;
 Обчислюється функція Ейлера φ(n)=(p-1) • (q-1);
 Вибираємо відкритий ключ e, як довільне число (0<e<n) взаємно просте зі
значенням функції Ейлера φ(n);
 За допомогою розширеного алгоритму Евкліда знаходиться число d таке, що
𝑒 • 𝑑 ≡ 1 (𝑚𝑜𝑑 𝜑 𝑛 );
Відкритий (public) ключ визначається числами n і e , а секретний (private) ключ – n
і d.
Подільники (фактори) p і q можна або знищити або зберегти разом з секретним
(private) ключем.

Таблиця - Приклад створення ключів

№ Операція Приклад
1 Вибираємо два простих числа p і q P=7 і q=13
332 Обчислюємо добуток ( модуль) n = p * q n=91
3 Обчислюємо функцію Ейлера φ(n)=(p-1) • (q-1) φ(n)=(7-1) • (13-1)=72
Вибираємо відкритий ключ e, як довільне число
4 (0<e<n) взаємно просте зі значенням функції Ейлера e=5
φ(n)
Обчислюємо закритий ключ d, як зворотне число до e за
5 (d *5)mod 72=1, d=29
модулем φ(n), з співвідношення (d *e)mod φ(n)=1
Примітки.
1) Просте число - це натуральне число, більше одиниці яке не має інших натуральних
дільників, окрім самого себе і одиниці.
2) Результат розрахунку функція Ейлера ((n) дорівнює кількості позитивних чисел, не
перевершуючих n і взаємно простих з n.
3) Взаємно прості числа - числа, що не мають загальних дільників, окрім 1, тобто
найбільший загальний дільник яких дорівнює 1.
4) Слід також зазначити, що ключі e і d рівноправні, тобто повідомлення можна
шифрувати як ключем e, так і ключем d, при цьому розшифровка повинна бути проведена за
допомогою іншого ключа.
Процедури шифрування і дешифрування виконуються згідно наступних формул:
e
C = Т mod n , Т = C d mod n.
де Т, C - числові еквіваленти символів відкритого і шифрованого повідомлення.
Приклад шифрування та розшифрування згідно алгоритму RSA повідомлення
«PRESIDENT» ( e=5, n=91, d=29 ) наведений в наступній таблиці. Коди літер відповідають
їх положенню в англійському алфавіті (починаючи з 1).

Буква Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj
№ 1 2 3 4 5 6 7 8 9 10
Буква Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt
№ 11 12 13 14 15 16 17 18 19 20
Буква Uu Vv Ww Xx Yy Zz
№ 21 22 23 24 25 26

Таблиця - Приклад шифрування згідно алгоритму RSA

Відкрите Символ P R E S I D E N T
повідомлення
Код 16 18 05 19 09 04 05 14 20
Зашифроване
повідомлення
74 44 31 80 81 23 31 14 76
Розшифроване
P R E S I D E N T
повідомлення

Слід зазначити, що p і q вибираються так, щоб n було більше коду будь-якого символу
відкритого повідомлення. У автоматизованих системах початкове повідомлення
переводитися в двійкове представлення, після чого шифрування виконується над блоками біт
рівної довжини. При цьому довжина блоку має бути менше, ніж довжина двійкового
представлення n.

e
Закодуємо літеру P. Код літери Т(Р)=16, тоді C(Р) = Т mod n =165 mod 91=
1 048 576 mod 91=74.

При розшифруванні знаходимо Т = Cd mod n= 7429 mod 91


=1,6133176020903638121095314039273e+54 mod 91 =16,
ДОДАТОК

Таблиця простих чисел


2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541
547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069

Приложение 1

Расширенный алгоритм Евклида


https://www.e-olymp.com/ru/blogs/posts/18

Алгоритм вычисления наибольшего общего делителя (НОД) был открыт древнегреческими


математиками и известен как алгоритм ―взаимного вычитания‖. И хотя упоминание об этом
алгоритме имеется еще у Аристотеля, впоследствии его стали называть алгоритмом Евклида.
Что такое наибольший общий делитель, его свойства и методы вычисления рассмотрены в
[1].

Напомним, что НОД двух чисел можно вычислить согласно следующей рекуррентности:

На языке Си процедура вычисления НОД имеет вид:

int gcd(int a, int b)

if (b == 0) return a;

return gcd(b, a % b);

Алгоритм Евклида можно расширить для нахождения по заданным a и b таких целых x и y,


что ax + by = d, где d – наибольший общий делитель a и b.
Лемма. Пусть для положительных целых чисел a и b (a > b) известны d = НОД(a, b) =
НОД(b, a mod b), а также числа x’ и y’, для которых

d = x’ · b + y’ · (a mod b)

Тогда значения x и y, являющиеся решениями уравнения ax + by = d, находятся из


соотношений

x = y’, y = x’ – y’ · (2)

Через здесь обозначена целая часть числа a/b.

Доказательство. Поскольку a mod b = a – · b, то

d = x’ · b + y’ · (a – · b) = y’ · a + (x’ – y’ · ) · b = x · a + y · b,

где обозначено x = y’, y = x’ – y’ · .

Функция gcdext(int a, int b, int *d, int *x, int *y), приведенная ниже, по входным числам a и b
находит d = НОД(a, b) и такие x, y что d = a · x + b · y. Для поиска неизвестных x и y
необходимо рекурсивно запустить функцию gcdext(b, a mod b, d, x, y) и пересчитать значения
x и y по выше приведенной формуле. Рекурсия заканчивается, когда b = 0. При b = 0 НОД(a,
0) = a и a = a · 1 + 0 · 0, поэтому полагаем x = 1, y = 0.

void gcdext (int a, int b, int *d, int *x, int *y)

int s;

if (b == 0)

*d = a; *x = 1; *y = 0;

return;

gcdext(b,a % b,d,x,y);

s = *y;

*y = *x - (a / b) * (*y);
*x = s;

Для ручного выполнения расширенного алгоритма Евклида удобно воспользоваться


таблицей с четырьмя столбцами (как показано ниже в примере), соответствующих значениям
a, b, x, y. Процесс вычисления разделим на три этапа:

а) Сначала вычислим НОД(a, b), используя первые два столбца таблицы и соотношение (1).
В последней строке в колонке а будет находиться значение d = НОД(a, b).

б) Занесем значения 1 и 0 соответственно в колонки x и y последней строки.

в) Будем заполнять последовательно строки для колонок x и y снизу вверх. Значения x и y в


последнюю строку уже занесены на этапе б). Считая, что в текущей заполненной строке уже
находятся значения (x’, y’), мы при помощи формул (2) будем пересчитывать и записывать
значения (x, y) в соответствующие ячейки выше стоящей строки.

1. Расширенный алгоритм Евклида. Найдем решение уравнения 5x + 3y = 1. Вычисление


НОД(5, 3) и нахождение соответствующих x, y произведем в таблице:

Порядок и направление вычислений указаны стрелками и буквами.

Из таблицы находим, что НОД(5, 3) = 5 · (-1) + 3 · 2 = 1, то есть x = -1, y = 2.

Рассмотрим, например, как получены значения (x, y) для первой строки. Со второй строки
берем значения (x’, y’) = (1, -1). По формулам (2) получим:

x = y’ = -1,

y = x’ – y’ · = 1 – (-1) · =1+1=2

Линейным сравнением называется уравнение вида ax = b (mod n). Оно имеет решение
тогда и только тогда, когда b делится на d = НОД(a, n). Если d > 1, то уравнение можно
упростить, заменив его на a’x = b’ (mod n’), где a’ = a / d, b’ = b / d, n’ = n / d. После такого
преобразования числа a’ и n’ являются взаимно простыми.

Алгоритм решения уравнения a’x = b’ (mod n’) со взаимно простыми a’ и n’ состоит из


двух частей:
1. Решаем уравнение a’x = 1 (mod n’). Для этого при помощи расширенного алгоритма
Евклида ищем решение (x0, y0) уравнения a’x + n’y = 1. Взяв по модулю n’ последнее
равенство, получим a’x0 = 1 (mod n’).

2. Умножим на b’ равенство a’x0 = 1 (mod n’). Получим a’(b’x0) = b’ (mod n’), откуда
решением исходного уравнения a’x = b’ (mod n’) будет x = b’x0 (mod n’).

Лемма. Если НОД(k, m) = 1, то равенство ak = bk (mod m) эквивалентно a = b (mod m).

Доказательство. Из ak = bk (mod m) следует, что (a – b) · k делится на m. Но поскольку k и


m взаимно просты, то a – b делится на m, то есть a = b (mod m).

Пример. Решить уравнение 18x = 6 (mod 8).

Значение d = НОД(18, 8) = 2 является делителем 6, поэтому решение существует. После


упрощения получим уравнение 9x = 3 (mod 4). Что согласно лемме эквивалентно 3x = 1 (mod
4). Решая уравнение 3x + 4y = 1 с помощью расширенного алгоритма Евклида, получим x = -
1, y = 1. Откуда x = -1 (mod 4) = 3. То есть x = 3 будет как решением уравнения 3x = 1 (mod 4),
так и 18x = 6 (mod 8).

Приложение 2

Ссылки на источники, содержащие описание расширенного алгоритма


Евклида:

1. См. тут

2. Расширенный алгоритм Евклида находит мультипликативные инверсии

You might also like