Puncte:0

Cum se generează o cheie privată întregă mare pentru a crea provocări CTF?

drapel ch

Încerc să creez o provocare RSA CTF, expunând $n$, $e$, $c$, și $d$.

am setat $e=65537$ și $n = p * q$ Unde $p$ și $q$ sunt numere prime mari, fiecare cu 300 de cifre.

m-am hotarat $c=m^e \mod n$

Dar încă nu am stabilit o modalitate bună de a produce $d=e^{(-1)} \mod [(p-1)*(q-1)]$. Am încercat să calculez corect așa cum este prin cod, dar

de la import zecimal Decimal

print(Decimal(e**(-1)) % phi)

returnează ceva de genul $0.00001525855623540900559906297040$, și vreau un număr natural. Care este o modalitate eficientă de a produce un mare $d$? Există instrument/site web/software/algoritm/calculator/etc. pentru crearea unui mare $d$?

TLDR: Ceva de genul acest site web dar funcționează cu numere destul de mari.

Perseids avatar
drapel na
Btw., codul python calculează `e**(-1)` peste numerele reale, deci este același cu ceea ce ați obține când utilizați un calculator și introduceți `1/e`. Deoarece rezultatul este între zero și `phi`, operația modulo `% phi` nu face nimic. Ceea ce aveți nevoie de fapt aici este inversul multiplicativ modulo $\varphi(n)$, deci trebuie să găsiți un $d$ astfel încât $e\cdot d\equiv 1\mod{\varphi(n)}$. (Acesta este sensul lui $e^{(-1)}$ în $d=e^{(-1)}\mod{((p-1)\cdot (q-1))}$.)
drapel ch
Ah, da, doar m-am gândit că `Decimal` ar face un calcul frumos pentru mine.
Puncte:2
drapel na

Puteți folosi algoritm euclidian extins a calcula $d$. Citând Wikipedia, dat $a$ și $b$, algoritmul euclidian extins vă oferă $x$ și $y$ astfel încât

$$ ax+by = \gcd{(a,b)}.$$

De cand $e$ este prim, $\gcd{(e, \varphi(n))}=1$, așa că algoritmul vă oferă $x$ și $y$ cu

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

care înseamnă

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

si astfel puteti folosi $x$ la fel de $d$.


Pentru aplicația dvs. practică, biblioteca standard Python cu adevărat minunată are un funcția trinar pow build în care poate calcula inversul multiplicativ modular începând cu Python 3.8

>>> p=17125458317614137930196041979257577826408832324037508573393292981642667139747621778802438775238728592968344613589379932348475613503476932163166973813218698343816463289144185362912602522540494983090531497232965829536524507269848825658311420299335922295709743267508322525966773950394919257576842038771632742044142471053509850123605883815857162666917775193496157372656195558305727009891276006514000409365877218171388319923896309377791762590614311849642961380224851940460421710449368927252974870395873936387909672274883295377481008150475878590270591798350563488168080923804611822387520198054002990623911454389104774092183
>>> pow(3,-1,p)
5708486105871379310065347326419192608802944108012502857797764327214222379915873926267479591746242864322781537863126644116158537834492310721055657937739566114605487763048061787637534174180164994363510499077655276512174835756616275219437140099778640765236581089169440841988924650131639752525614012923877580681380823684503283374535294605285720888972591731165385790885398519435242336630425335504666803121959072723796106641298769792597254196871437283214320460074950646820140570149789642417658290131957978795969890758294431792493669383491959530090197266116854496056026974601537274129173399351334330207970484796368258030728
>>>
drapel ch
Am făcut niște investigații după postare. Acel algoritm este tangent la algoritmul care va găsi $d$/$x$ pentru mine: https://en.wikipedia.org/wiki/Modular_multiplicative_inverse Mulțumesc totuși!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.