






السمعة:
- إنضم17 يونيو 2023
- المشاركات 522
- الحلول 10
- مستوى التفاعل 1,111
- النقاط 93

CryptoHack – Public-Key Cryptography - Salty

يمكن حل التحدي باكثر من طريقة سأشرح طريقتين
معطينا 3 قيم
كود:
e = 1
ct = 44981230718212183604274785925793145442655465025264554046028251311164494127485
n = 110581795715958566206600392161360212579669637391437097703685154237017351570464767725324182051199901920318211290404777259728923614917211291562555864753005179326101890427669819834642007924406862482343614488768256951616086287044725034412802176312273081322195866046098595306261781788276570920467840172004530873767
الطريقة الاولى
عند الرجوع الى قوانين ال Rsa
من هذا القانون يمكن استنتاج ان قيمة d = قيمه e
كود:
d = e⁻¹ (mod φ)
تصبح المعادلة
كود:
d = 1 (mod φ)
كود:
1 < φ
صغير mod كبير يرجع نفس قيمة الصغير
لذا
كود:
1 mod φ = 1 = d
هيك في 4 متغيرات وبأمكاننا حل التحدي عن طريق الكود التالي

كود:
from Crypto.Util.number import long_to_bytes
d = 1
ct = 44981230718212183604274785925793145442655465025264554046028251311164494127485
n = 110581795715958566206600392161360212579669637391437097703685154237017351570464767725324182051199901920318211290404777259728923614917211291562555864753005179326101890427669819834642007924406862482343614488768256951616086287044725034412802176312273081322195866046098595306261781788276570920467840172004530873767
print(long_to_bytes(pow(ct, d, n)).decode())
الطريقه الثانية
حسب قانون التشفير
كود:
ct ≡ pt ^ e (mod N)
عندما تكون قيمة الـ e = 1
تصبح ( أي رقم مرفوع للقوة 1 يكون هو نفسه )
كود:
ct ≡ pt (mod N)
معناها أن باقي قسمة الـ ct على N سوف تعطي نفس باقي قسمة pt على N
كود:
ct mod N == pt mod N
حيث ≡ هي Congruent وليست =
كود:
a ≡ b (mod N)
هذا لا يعني بالضرورة أن القيمة الفعلية لل ct ان تكون نفس القيمة الفعلية لل pt.
في حالة e = 1 في نظام RSA، تصبح عملية التشفير ضعيفة، وال ct يحصل على باقي عند قسمته على N نفس قيمة باقي ال pt عند قسمته على N.
نستنتج انه قيمة ال ct = pt
فيمكن حل التحدي بالكود التالي

كود:
from Crypto.Util.number import long_to_bytes
ct = 44981230718212183604274785925793145442655465025264554046028251311164494127485
print(long_to_bytes(ct).decode())
التعديل الأخير بواسطة المشرف: