چالش brainrot13¶

تحلیل اولیه دادههای چالش¶
در ابتدا چالش کد زیر همراه را با خروجی آن به ما داده است:
chall.py | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
n = 96685821958083526684938680238271304286887980859392922334047044570819254535637534763165507014186569373580269436562287115575895071477094697751185058766474544708343165263644182297048851208627306861544906558700694910255483830223450427540731613986917757415247541102253686241820221043700623282515147528145504812161
ct1 = 31415617614942980419493801728329478459882170524654275330189702271291172239569974917796230082992620119324013322311500280165046115132115888952730272833129650105740565501270236988682510607126061981801996717672566496111413558704046446132351270004211376270714769910968931266620926532143617027921568831958784579911
ct2 = 72563774621694978528581466712845934115989091233025298416607646944054938010207983336599181951465053976617135146411342652500844040957885351294246597514830545442455636203961703603515841401653220929094734409672423770927867923227749902813163411103868690480354808090999202815188200468063383568781761012284874177390
اولین نکته که به چشم می خورد مقدار کوچک e=3
است . سپس میبینیم که مقدار فلگ و مقدار با(rotated) آن یک مقدار ثابت "OAEP" اصطلاحا pad می شود سپس رمز میشود. به عنوان مثال برای پرچم فرضی 'UMDCTF{helloooooooooooooooo}' دو پیام زیر قبل از رمز شدن به صورت زیرهستند.
b1=b'UMDCTF{helloooooooooooooooo}OAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEP'
b2=b'HZQPGS{uryybbbbbbbbbbbbbbbb}OAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEPOAEP'
حل چالش¶
پس مقادیر رمز را به صورت زیر خواهد بود:
که در آن مقدار pad یعنی P برای هردو ثابت و یکسان است.این سوال شبیه به سوال Redundancy است که در آن یک مقدار ثابت به عنوان pad به متن فلگ چسبیده است. به خاطر همین در این سوال بدون در نظر گرفتن ct_2 فلگ رو بدست می آوریم. برای نمایش ریاضی و تبدیل فلگ به مرتبه ای با اندازه pad از مقدارK=256^{92} استفاده می کنیم و
نکته
مقدار K براساس طول pad یعنی 92 و تعداد حالات بیت یک کاراکتر 8 بیتی یعنی 256 حالت تعیین میشود.
پس رابطه ریاضی آن به شکل زیر است که در آن x مجهول و مقدار فلگ است
طبق Coppersmith اگر در رمزنگاری RSA مقدار e=3 و مقدار pad رندم اضافه شده متن کوچک باشد با f نسبت به n به اندازه کافی کوچک باشد، میتوانیم ریشه صحیح F را از معادله پیدا کنیم. پس براساس معادله درجه سه
در آن
حال می توانیم مقدار ریشه معادله که همان فلگ خواهد بود بدست بیاوریم.
solve.py | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
FLAG 
UMDCTF{shouldverotatedtwice}
نویسنده