Розв'язник вправ по дискретній математиці/Кодування/Алгоритм RSA

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

Для розв'язання будемо використовувати Алгоритм RSA.

Також важливо розуміти такі речі:

  1. Взаємно прості числа - не мають жодного спільного дільника, окрім 1;
  2. Розуміти, що результатом amodb буде остача від цілочисленного ділення числа a на число b.

Приклад №1

  1. Оберемо два простих числа: p = 5, q = 11.
  2. Тоді n = p * q = 5 * 11 = 55.
  3. Згідно з властивістю функції Ейлера φ(n)=(p1)(q1)=(51)(111)=40.
  4. Оберемо число, взаємно просте з φ(n) — частину ключа для шифрування. Візьмемо e=3. Воно задовольняє умові НСД(3,φ(n))=1.
  5. Обчислимо d=1e(modφ(55))=13=1403=393=13=27(mod40).

Таким чином, ми отримали публічний ключ (3,55) для шифрування, та приватний ключ (27,55) для розшифрування. Візьмемо якесь значення слова S та зашифруємо і розшифруємо цим ключем.

Нехай S=15. Отримання значення кодованого слова C, яке відповідає слову S відбувається за правилом

C=Se(modn).

Отже C=153(mod55)=15215=22515=515=75=20.

Розшифруємо C. Для цього скористаємось правилом

S=Cd(modn).
S=2027(mod55)=(45)27=(22)27527=254527.

Зауважимо, що 26(mod55)=64=9=32, та 53(mod55)=125=15.

Підставимо у вираз:

254527=(26)9(53)9=(32)9(15)9=(3)18(15)9.

Зауважимо, що ми вже обчислювали 153(mod5)5=20, та обчислимо степені числа 3.

34(mod55)=81=26.
35(mod55)=343=263=78=23.
36(mod55)=353=233=69=14.

Підставимо у вираз:

(3)18(15)9=(36)3(153)3=143203=(144)353=56315=1315=15.

Тим самим розшифроване значення співпадає з початковим значенням.

Приклад №2

  1. Оберемо два простих числа: p = 7, q = 13.
  2. Тоді n = p * q = 7 * 13 = 91.
  3. Згідно з властивістю функції Ейлера φ(n)=(p1)(q1)=(71)(131)=612=72.
  4. Оберемо число, взаємно просте з φ(n) — частину ключа для шифрування. Візьмемо е = 5. Воно задовольняє умові НСД(5,φ(n))=1.
  5. Обчислимо d=1e(modφ(91))=15=1+2725=1455=29(mod72).

Таким чином, ми отримали публічний ключ (5,91) для шифрування, та приватний ключ (29,91) для розшифрування. Візьмемо якесь значення слова S та зашифруємо і розшифруємо цим ключем.

Нехай S=11. Отримання значення кодованого слова C, яке відповідає слову S відбувається за правилом

C=Se(modn).

Отже C=115(mod91).

Зауважимо, що 112(mod91)=12191=30(mod91).

Тоді 115(mod91)=(112)211=30211.

Зауважимо, що 302(mod91)=900919=81(mod91).

Тоді 30211=8111=891991=72, отримуємо C=72(mod91)

Розшифруємо C. Для цього скористаємось правилом

S=Cd(modn).
S=7229(mod91).

Зауважимо, що 722(mod91)=(89)2=6481=(6491)(8191)=2710=270291=8891=3(mod91).

Тоді S=7229(mod91)=72(722)14=72(3)14=72314=89314=8316=8(34)4.

Зауважимо також те, що 34(mod91)=8191=10(mod91).

Отримаемо 8(34)4=8(10)4=810103=801000.

Та врахувавши, що 1000(mod91)=10001191=1(mod91).

Матимемо 801000=80+91=11.

Тим самим розшифроване значення співпадає з початковим значенням.