Điểm:0

Làm cách nào để tạo khóa riêng số nguyên lớn để tạo thử thách CTF?

lá cờ ch

Tôi đang cố tạo thử thách RSA CTF, phơi bày $n$, $e$, $c$, và $d$.

tôi đã thiết lập $e=65537$$n = p * q$ ở đâu $p$$q$ là các số nguyên tố lớn mỗi số có 300 chữ số.

tôi đã xác định $c=m^e \mod n$

Nhưng tôi vẫn chưa xác định được một cách tốt để sản xuất $d=e^{(-1)} \mod [(p-1)*(q-1)]$. Tôi đã thử tính toán đúng như thông qua mã, nhưng

từ thập phân nhập Thập phân

in(Số thập phân(e**(-1)) % phi)

trả về một cái gì đó như $0.00001525855623540900559906297040$, và tôi muốn một số tự nhiên. một cách hiệu quả để sản xuất một số lượng lớn là gì $d$? Có công cụ/trang web/phần mềm/thuật toán/máy tính/v.v. để tạo ra một lượng lớn $d$?

TLDR: Một cái gì đó giống như Trang web này nhưng hoạt động với số lượng khá lớn.

Perseids avatar
lá cờ na
Nhân tiện, mã python tính toán `e**(-1)` trên các số thực, vì vậy nó giống như những gì bạn sẽ nhận được khi sử dụng máy tính và nhập `1/e`. Vì kết quả nằm trong khoảng từ 0 đến `phi` nên thao tác modulo `% phi` không làm gì cả. Điều bạn thực sự cần ở đây là modulo nghịch đảo nhân $\varphi(n)$, vì vậy bạn cần tìm $d$ sao cho $e\cdot d\equiv 1\mod{\varphi(n)}$. (Đó là ý nghĩa của $e^{(-1)}$ trong $d=e^{(-1)}\mod{((p-1)\cdot (q-1))}$.)
lá cờ ch
À vâng, tôi chỉ nghĩ rằng `Số thập phân` sẽ thực hiện một số tính toán hay cho tôi.
Điểm:2
lá cờ na

Bạn có thể dùng thuật toán Euclide mở rộng tính toán $d$. Trích dẫn Wikipedia, đưa ra $a$$b$, thuật toán Euclide mở rộng cung cấp cho bạn $x$$y$ như vậy mà

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

Từ $e$ là nguyên tố, $\gcd{(e, \varphi(n))}=1$, vì vậy thuật toán cung cấp cho bạn $x$$y$ với

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

nghĩa là

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

và do đó bạn có thể sử dụng $x$ như $d$.


Đối với ứng dụng thực tế của bạn, thư viện chuẩn Python thực sự tuyệt vời có một chức năng pow tam cấp xây dựng trong đó có thể tính toán nghịch đảo nhân mô-đun bắt đầu với Python 3.8

>>> p=17125458317614137930196041979257577826408832324037508573393292981642667139747621778802438775238728592968344613589379932348475613503476932163166973813218698343816463289144185362912602522540494983090531497232965829536524507269848825658311420299335922295709743267508322525966773950394919257576842038771632742044142471053509850123605883815857162666917775193496157372656195558305727009891276006514000409365877218171388319923896309377791762590614311849642961380224851940460421710449368927252974870395873936387909672274883295377481008150475878590270591798350563488168080923804611822387520198054002990623911454389104774092183
>>> pow(3,-1,p)
5708486105871379310065347326419192608802944108012502857797764327214222379915873926267479591746242864322781537863126644116158537834492310721055657937739566114605487763048061787637534174180164994363510499077655276512174835756616275219437140099778640765236581089169440841988924650131639752525614012923877580681380823684503283374535294605285720888972591731165385790885398519435242336630425335504666803121959072723796106641298769792597254196871437283214320460074950646820140570149789642417658290131957978795969890758294431792493669383491959530090197266116854496056026974601537274129173399351334330207970484796368258030728
>>>
lá cờ ch
Tôi đã làm một số điều tra sau khi đăng. Thuật toán đó tiếp tuyến với thuật toán sẽ tìm $d$/$x$ cho tôi: https://en.wikipedia.org/wiki/Modular_multiplicative_inverse Cảm ơn bạn tho!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.