Рейтинг:2

Факторинг модуля RSA с учетом частей Factor

флаг vn

Даны e, N, c и около 2/3 p, и мне нужно получить все p для расшифровки c.

N: 8319209622572147564013826542514259498682642243858419574823720424163091461701501360015982209990033336520746744572035014978885083880306655150878826112698449183627604378591045476163815683140601440141181336500755042065319357073688047689369842069576880590382907166998622533395350509313527264108988375924505750514907811200521771091619671861896277515872762861803861776874814818759550176763409337645914659855794895018341028254707583446748584671147839997360735893784761893682319714306096295255392779139228496862261602629668021770766403895493829479280751919607803462139336221636202936115853250410851992088076115853781819064537
е: 65537
c: 4953284236047971172578832583499377493178200304479143209550787249372461101728658773670930238470955483017914105971816965742510454042292225833646213980243990906909055183035487729211063154361995845063984656265718117973811054592839102686638618059351593068564821438986641302188691512194069434490636627580791763494578169497869477621620646090488263145323524094255076603309311346040499379850098705597815946140397825326676093352260642665202907180660054018022276329942694463490417145273018047785653000749283804947161814490990395826461165462311565059508939959327500584807568342952319675042226613334756078721555811790191840438113
р: 4657466126792836973364876345509106305470210556754730583762574018947035473615496183374863999868029162???????????????????????????????????????????????????? ?????????????????????????????????????????????????????? ???509718954507298459183080086410468930318128642354235212531127396991917151481316220676314043160415859389810007

"?" это пропущенные цифры. Я уже пробовал использовать этот сайт: https://latticehacks.cr.yp.to/rsa.html но я получаю только ошибки (для этого использовал SageMath) с этими числами, но пример работает.

Что я делаю не так, и может ли кто-нибудь помочь мне найти весь фактор, чтобы получить ключ?

флаг et
Отвечает ли это на ваш вопрос? [Факторизация модуля RSA с учетом старших битов фактора] (https://crypto.stackexchange.com/questions/35829/factoring-an-rsa-modulus-given-high-bits-of-a-factor)
xXLeoXxOne avatar
флаг vn
Это не решает проблему, поскольку этот метод/алгоритм работает только в том случае, если у вас больше половины фактора, как я думаю (первая половина). В моем случае мне не хватает середины множителя, поэтому у меня есть треть начальных цифр и треть конечных цифр.
Myria avatar
флаг in
Что такое число $c$?
xXLeoXxOne avatar
флаг vn
c - зашифрованное сообщение
флаг cn
Вы можете взглянуть на очень хороший учебник [Восстановление криптографических ключей из частичной информации на примере] (https://ia.cr/2020/1506) Габриэль Де Мишели и Нади Хенингер.
xXLeoXxOne avatar
флаг vn
Спасибо! Это немного помогает, но все еще довольно трудно читать... Мое дело должно быть в пользу многомерного метода Копперсмита, верно?
флаг cn
Я ожидаю, что вы можете использовать метод Копперсмита напрямую, поскольку неизвестны только один фрагмент битов. Многовариантность нужна только для нескольких чанков. Я не прорабатывал детали, но был бы удивлен, если бы адаптация идей из разделов 4.2.2 и 4.2.3 к вашему случаю оказалась бы невозможной.
Рейтинг:6
флаг pe

Проблема здесь в том, что у вас есть делитель $р$ из $n$ формы $$ p_h \cdot 10^{208} + p_m\cdot 10^{108} + p_l\,, $$ откуда ты знаешь $p_h$ и $p_l$, но нет $p_m < 10^{100} \lessприблизительно п^{0,16}$.

Ясно, что полином $f(x) = x\cdot 10^{108} + p_h \cdot 10^{208} + p_l$ будет $0$ по модулю $р$ за право $х = p_m$, который, как известно, мал. Таким образом, мы можем применить здесь обобщение НОД теоремы Копперсмита с $\бета\около 0,5$:

мудрец: p_h = 4657466126792836973364876345509106305470210556754730583762574018947035473615496183374863999868029162
шалфей: p_l = 509718954507298459183080086410468930318128642354235212531127396991917151481316220676314043160415859389810007
sage: n = 8319209622572147564013826542514259498682642243858419574823720424163091461701501360015982209990033336520746744572035014978885083880306655150878826112698449183627604378591045476163815683140601440141181336500755042065319357073688047689369842069576880590382907166998622533395350509313527264108988375924505750514907811200521771091619671861896277515872762861803861776874814818759550176763409337645914659855794895018341028254707583446748584671147839997360735893784761893682319714306096295255392779139228496862261602629668021770766403895493829479280751919607803462139336221636202936115853250410851992088076115853781819064537
мудрец: P.<x> = Zmod(n)[]
мудрец: f = x*10^108 + p_h*10^208 + p_l
sage: f = (x*10^108 + p_h*10^208 + p_l)/10^108 # Сделать полином моническим
шалфей: f.small_roots (бета = 0,49)
[4555790634870609108348440239954454001363406634260834115187291781797769149826662476501530037286859856]

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

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