مضى على الشبكة و يوم من العطاء.

تحدي Mind your Ps and Qs

3b0-0d3b0-0d is verified member.

{ || مشرف قسم CTF || }
.:: طاقم المشرفين ::.

السمعة:

Mind your Ps and Qs
يحتوي الملف (values) على القيم التاليه:
c= 62324783949134119159408816513334912534343517300880137691662780895409992760262021
n= 1280678415822214057864524798453297819181910621573945477544758171055968245116423923
e= 65537
خوارزمية RSA يمكن فك تشفيرها من المعطيات عن طريق القوانين التالية :
كود:
m = c^d (mod n)

d = e⁻¹ (mod φ)

φ = ( p - 1 ) * ( q - 1 )

n = p * q
حيث
p و q : هما عددان أوليان يتم اختيارهما بشكل عشوائي.

m : هي الرسالة التي ترغب في تشفيرها أو فك تشفيرها (plaintext).

c : هو النص المشفر ,الرسالة التي تم تشفيرها باستخدام مفتاح.

d : هو المفتاح الخاص (Private exponent).

e : هو المفتاح العام (Public exponent).

يمكن ايجاد قيم p و q من n عن طريق الموقع التالي factor db

image


p = 1899107986527483535344517113948531328331

q = 674357869540600933870145899564746495319033

يمكن ايجاد القيم عن طريق كود بايثون لكن اولا يجب معرفه كيفيه كتابه القوانين داخل بايثون وهي كالتالي

m = c^d (mod n) = in python ( m = pow(c, d, n))
كود:
d = e⁻¹ (mod φ) = in python (inverse(e,φ)

لكن inverse قبل استخدامها يجب التأكد من تثبيت مكتبه pycryptodome عن طريق الكود التالي:

كود:
pip install pycryptodome

ويجب استخدام داله long_to_bytes لاخراج النص الصحيح للحل
ويجب قبل وضعها بالكود استدعاء المكتبه عن طريق السطر التالي:

كود:
from Crypto.Util.number import inverse

وتستخدم داله .decode(‘utf-8’) لطباعه النص فقط بترميز “utf-8”

يمكن حل التحدي عن طريق الكود التالي
كود:
from Crypto.Util.number import inverse, long_to_bytes
p = 1899107986527483535344517113948531328331
q = 674357869540600933870145899564746495319033
c = 62324783949134119159408816513334912534343517300880137691662780895409992760262021
e = 65537
n = p * q
phi = ( p - 1 ) * ( q - 1 )
d = inverse(e,phi) m = pow(c, d, n)
message_bytes = long_to_bytes(m)
message = message_bytes.decode('utf-8')
print(message)

🚩 picoCTF{sma11_N_n0_g0od_05012767}
 
التعديل الأخير:

آخر المشاركات

عودة
أعلى