Ваш учитель дал вам:
Открытый ключ: (10142789312725007, 5)
, что означает
n = 10142789312725007
e = 5
, где n - модуль, а e - открытый показатель.
Кроме того, вам дано
Закрытый ключ: (10142789312725007, 8114231289041741)
означает, что
d = 8114231289041741
где d - показатель дешифрования, который должен оставаться в секрете.
Вы можете «разбить» RSA, зная, как разложить «n» на его простые множители «p» и «q»:
n = p * q
Самый простой способ - это проверить все нечетные числа, начиная чуть ниже квадратного корня из n:
Floor[Sqrt[10142789312725007]] = 100711415
Вы получите первый фактор за 4 попытки:
10142789312725007 mod 100711415 = 100711367
10142789312725007 mod 100711413 = 100711373
10142789312725007 mod 100711411 = 100711387
10142789312725007 mod 100711409 = 0 <-- Winner since it evenly divides n
Итак, у нас есть
p = 100711409
Теперь
q = n / p
= 10142789312725007 / 100711409
= 100711423
Почему это важно? Это потому, что d - это специальный номер, такой что
d = e^-1 mod phi(n)
= e^-1 mod (p-1)*(q-1)
Мы можем это проверить
d * e = 40571156445208705 = 1 mod 10142789111302176
Это важно, потому что если у вас есть текстовое сообщение m , то зашифрованный текст будет
c = m^e mod n
и вы расшифровываете его
m = c^d = (m^e)^d = (m^(e*d)) = (m^(e*e^-1)) = m^1 (mod n)
Например, я могу «зашифровать» сообщение 123456789, используя открытый ключ вашего учителя:
m = 123456789
Это даст мне следующий зашифрованный текст:
c = m^e mod n
= 123456789^5 mod 10142789312725007
= 7487844069764171
(Обратите внимание, что "e" должно быть намного больше на практике, потому что для малых значений "m" вы даже не превышаете n)
В любом случае, теперь у нас есть «c» и мы можем изменить его на «d»
m = c^d mod n
= 7487844069764171^8114231289041741 mod 10142789312725007
= 123456789
Очевидно, что вы не можете вычислить "7487844069764171 ^ 8114231289041741" напрямую, потому что он имеет 128 808 202 574 088 302 цифр, поэтому вы должны использовать модульное возведение трюк.
В «реальном мире» n , очевидно, намного больше. Если вы хотите увидеть реальный пример того, как HTTPS использует RSA под крышками с 617-значным n и e , равным 65537, см. Мой пост в блоге " Первые несколько миллисекунд HTTPS-соединения . "