Score:0

จะสร้างคีย์ส่วนตัวจำนวนเต็มขนาดใหญ่สำหรับสร้างความท้าทาย CTF ได้อย่างไร

ธง ch

ฉันกำลังพยายามสร้างความท้าทาย RSA CTF เปิดเผย $n$, $e$, $ค$, และ $d$.

ฉันได้ตั้งค่า $e=65537$ และ $n = p * q$ ที่ไหน $p$ และ $คิว$ เป็นจำนวนเฉพาะขนาดใหญ่ที่มี 300 หลัก

ฉันตั้งใจไว้แล้ว $c=m^e \mod n$

แต่ฉันยังไม่ได้กำหนดวิธีการที่ดีในการผลิต $d=e^{(-1)} \mod [(p-1)*(q-1)]$. ฉันพยายามคำนวณสิทธิ์ตามที่เป็นอยู่ผ่านรหัส แต่

จากทศนิยมนำเข้าทศนิยม

พิมพ์(ทศนิยม(e**(-1)) % phi)

ส่งคืนสิ่งที่ต้องการ $0.00001525855623540900559906297040$และฉันต้องการจำนวนธรรมชาติ วิธีที่มีประสิทธิภาพในการผลิตขนาดใหญ่คืออะไร $d$? มีเครื่องมือ/เว็บไซต์/ซอฟต์แวร์/อัลกอริทึม/เครื่องคิดเลข/อื่นๆ หรือไม่ เพื่อสร้างความใหญ่โต $d$?

TLDR: บางอย่างเช่น เว็บไซต์นี้ แต่ใช้งานได้กับตัวเลขที่ค่อนข้างมาก

Perseids avatar
na flag
อีกอย่าง โค้ดหลามคำนวณ `e**(-1)` เหนือจำนวนจริง ดังนั้นมันจึงเหมือนกับที่คุณจะได้รับเมื่อใช้เครื่องคิดเลขและพิมพ์ `1/e` เนื่องจากผลลัพธ์อยู่ระหว่างศูนย์ถึง `phi` การทำงานของโมดูโล `% phi` จึงไม่ทำอะไรเลย สิ่งที่คุณต้องการจริง ๆ ที่นี่คือโมดูโลผกผันการคูณ $\varphi(n)$ ดังนั้น คุณต้องหา $d$ ในลักษณะที่ $e\cdot d\equiv 1\mod{\varphi(n)}$ (นั่นคือความหมายของ $e^{(-1)}$ ใน $d=e^{(-1)}\mod{((p-1)\cdot (q-1))}$.)
ch flag
อ่าใช่ ฉันแค่คิดว่า 'ทศนิยม' จะช่วยคำนวณที่ดีสำหรับฉัน
Score:2
ธง na

คุณสามารถใช้ อัลกอริทึมแบบยุคลิดแบบขยาย ในการคำนวณ $d$. อ้างวิกิพีเดียที่ได้รับ $a$ และ $ข$อัลกอริทึมแบบยุคลิดแบบขยายจะช่วยให้คุณได้ $x$ และ $y$ ดังนั้น

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

เนื่องจาก $e$ เป็นนายก $\gcd{(e, \varphi(n))}=1$ดังนั้นอัลกอริทึมจึงให้คุณ $x$ และ $y$ กับ

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

ซึ่งหมายความว่า

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

และทำให้คุณสามารถใช้ $x$ เช่น $d$.


สำหรับการใช้งานจริงของคุณ ไลบรารีมาตรฐาน Python ที่ยอดเยี่ยมอย่างแท้จริงมี ฟังก์ชันพลังตรี บิลด์อินที่สามารถคำนวณค่าผกผันการคูณแบบโมดูลาร์ที่ขึ้นต้นด้วย Python 3.8

>>> p=17125458317614137930196041979257577826408832324037508573393292981642667139747621778802438775238728592968344613589379932348475613503476932163166973813218698343816463289144185362912602522540494983090531497232965829536524507269848825658311420299335922295709743267508322525966773950394919257576842038771632742044142471053509850123605883815857162666917775193496157372656195558305727009891276006514000409365877218171388319923896309377791762590614311849642961380224851940460421710449368927252974870395873936387909672274883295377481008150475878590270591798350563488168080923804611822387520198054002990623911454389104774092183
>>> ธาร(3,-1,p)
5708486105871379310065347326419192608802944108012502857797764327214222379915873926267479591746242864322781537863126644116158537834492310721055657937739566114605487763048061787637534174180164994363510499077655276512174835756616275219437140099778640765236581089169440841988924650131639752525614012923877580681380823684503283374535294605285720888972591731165385790885398519435242336630425335504666803121959072723796106641298769792597254196871437283214320460074950646820140570149789642417658290131957978795969890758294431792493669383491959530090197266116854496056026974601537274129173399351334330207970484796368258030728
>>>
ch flag
ฉันได้ตรวจสอบบางอย่างหลังจากโพสต์ อัลกอริทึมนั้นสัมผัสกับอัลกอริทึมที่จะหา $d$/$x$ ให้ฉัน: https://en.wikipedia.org/wiki/Modular_multiplicative_inverse ขอบคุณ tho!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา