Рейтинг:0

Как сгенерировать большой целочисленный закрытый ключ для создания задач CTF?

флаг ch

Я пытаюсь создать вызов RSA CTF, раскрывая $n$, $e$, $с$, и $д$.

я установил $е=65537$ и $n = p * q$ куда $р$ и $q$ являются большими простыми числами, каждое из которых состоит из 300 цифр.

я определил $c=m^e \mod n$

Но мне еще предстоит определить хороший способ производства $d=e^{(-1)} \mod [(p-1)*(q-1)]$. Я попытался вычислить право как есть с помощью кода, но

из десятичного импорта Decimal

печать (десятичный (e ** (-1)) % phi)

возвращает что-то вроде $0.00001525855623540900559906297040$, и я хочу натуральное число. Каков эффективный способ производства большого $д$? Есть ли инструмент/веб-сайт/программное обеспечение/алгоритм/калькулятор/и т.д. для создания большого $д$?

TLDR: что-то вроде этот сайт но работает с довольно большими числами.

Perseids avatar
флаг na
Кстати, код Python вычисляет `e**(-1)` по реальным числам, так что это то же самое, что вы получили бы при использовании калькулятора и вводе `1/e`. Поскольку результат находится между нулем и `фи`, операция по модулю `% фи` ничего не делает. Что вам действительно нужно здесь, так это мультипликативное обратное значение по модулю $\varphi(n)$, поэтому вам нужно найти $d$ такое, что $e\cdot d\equiv 1\mod{\varphi(n)}$. (Это значение $e^{(-1)}$ в $d=e^{(-1)}\mod{((p-1)\cdot (q-1))}$.)
флаг ch
Ах да, я просто подумал, что `Decimal` сделает для меня неплохие вычисления.
Рейтинг:2
флаг na

Вы можете использовать расширенный алгоритм Евклида вычислять $д$. Цитируя Википедию, учитывая $а$ и $b$, расширенный алгоритм Евклида дает вам $х$ и $у$ такой, что

$$ топор+by = \gcd{(a,b)}.$$

С $е$ простое, $\gcd{(е, \varphi(n))}=1$, поэтому алгоритм дает вам $х$ и $у$ с

$$ex+\varphi(n)\cdot y=1$$

что значит

$$ex \equiv 1 \mod{\varphi(n)}$$

и, таким образом, вы можете использовать $х$ как $д$.


Для вашего практического применения поистине чудесная стандартная библиотека Python имеет тройная функция pow встроенный, который может вычислять модульную мультипликативную инверсию, начиная с Python 3.8

>>> p=17125458317614137930196041979257577826408832324037508573393292981642667139747621778802438775238728592968344613589379932348475613503476932163166973813218698343816463289144185362912602522540494983090531497232965829536524507269848825658311420299335922295709743267508322525966773950394919257576842038771632742044142471053509850123605883815857162666917775193496157372656195558305727009891276006514000409365877218171388319923896309377791762590614311849642961380224851940460421710449368927252974870395873936387909672274883295377481008150475878590270591798350563488168080923804611822387520198054002990623911454389104774092183
>>> pow(3,-1,p)
5708486105871379310065347326419192608802944108012502857797764327214222379915873926267479591746242864322781537863126644116158537834492310721055657937739566114605487763048061787637534174180164994363510499077655276512174835756616275219437140099778640765236581089169440841988924650131639752525614012923877580681380823684503283374535294605285720888972591731165385790885398519435242336630425335504666803121959072723796106641298769792597254196871437283214320460074950646820140570149789642417658290131957978795969890758294431792493669383491959530090197266116854496056026974601537274129173399351334330207970484796368258030728
>>>
флаг ch
Я провел небольшое расследование после публикации. Этот алгоритм касается алгоритма, который найдет для меня $d$/$x$: https://en.wikipedia.org/wiki/Modular_multiplicative_inverse Спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.