Резюме ИИ:В этой статье объясняется, как использовать китайскую теорему об остатках.(CRT)эффективно выполнятьRSAРасшифровать。первый,Обзор основных принципов шифрования RSA,Включая генерацию пары ключей и процесс дешифрования шифрования. затем,Подробно объясняется концепция китайской теоремы об остатках и ее применение в расшифровке RSA., включая часть открытого текста, вычислить модуль $p$и модуль $q$, решая $q$модель$p$Обратный element$q_{\text{inv}}$ и как объединить эти результаты, чтобы получить окончательный открытый текст $m$. В статье также представлена полная Реализация Python, показывает, как Рассчитать модуль$n$, использование обратной функции, вычислить инверсию, использование быстрого мощного алгоритма, вычислить частичный открытый текст, и как объединить результаты, получить открытый текст。проходитьCRT,Процесс расшифровки RSA становится более эффективным при вычислении,Потому что это позволяет вычислить на меньших модельных номерах.
Расшифровка RSA с использованием китайской теоремы об остатках (CRT)
В шифровании RSA, если мы знаем факторы закрытого ключа p 、 q 、 dp 、 dq и зашифрованный текст c , можно эффективно расшифровать с помощью китайской теоремы об остатках (CRT). В этой статье подробно объясняются принципы CRT и представлена полная реализация Python.
Китайская теорема об остатках — это метод решения систем конгруэнтных уравнений, когда модули не являются взаимно простыми. В частности, если у нас есть два относительно простых целых числа p и q и два уравнения сравнения:
$$ \begin{cases} x \equiv a \pmod{p} \ x \equiv b \pmod{q} \end{cases} $$
Согласно китайской теореме об остатках, эти две системы уравнений имеют единственное решение. x В плесени pq значение.
В RSA у нас есть следующие известные параметры:
Наша цель — расшифровать зашифрованный текст c , получить простой текст m 。
Подробные шаги
рассчитать:
Его можно рассчитать с помощью расширенного алгоритма Евклида.
Вычислите окончательный открытый текст:
Ниже приведен полный код Python с подробными комментариями:
from Crypto.Util.number import inverse, long_to_bytes
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
n = p*q
phi_n = (p - 1) * (q - 1)
q_inv = inverse(q, p) # вычислить q форма p Обратный элемент
m1 = pow(c, dp, p) # вычислить c^dp mod p
m2 = pow(c, dq, q) # вычислить c^dq mod q
h = (q_inv * (m1 - m2)) % p # вычислить h
m = (m2 + h * q) % n # Объединить результатыполучить открытый текст m
print(long_to_bytes(m))
объяснить код
таким образом,Процесс расшифровки RSA становится более эффективным,Потому что плесени небольшое количество( p и q ) под вычислить, чем непосредственно В плесени n Расчет происходит гораздо быстрее. Китайская теорема об остатках делает эту оптимизацию возможной.
Авторские права принадлежат: Хитоми тоже
Ссылка на эту статью:https://cloud.tencent.com/developer/article/2427653
Все статьи на этом сайте, которые не воспроизводятся, являются оригинальными и заимствованы. CC BY-NC-SA 4.0 Авторизационный договор, при перепечатке указывайте источник, спасибо!