Клон вихря
Задание 1Введение
Цель: Клонировать Mersenne Twister — генератор модуля random Python.
Сервер выдаёт «случайные» 32-битные токены из стандартного генератора Python (random, MT19937). Вы собрали 624 подряд идущих токена. Предскажите следующий. Флаг — CTF{число}.
Задание 2Теория и инструменты
Внутреннее состояние MT19937 — 624 32-битных слова. Каждый выход — слово состояния после обратимого «закаливания» (tempering): несколько сдвигов и XOR с масками.
Обратив tempering для 624 выходов подряд, получаем полное состояние. Загружаем его в свой генератор — и он выдаёт те же следующие числа.
Инструменты
- Python:
random.Random().setstate((3, tuple(state + [624]), None)) - Библиотека randcrack (для сравнения)
Больше теории — в разделе «Обучение: Криптография».
Задание 3Практика: найдите флаг
4034218852,220107765,3521951154,3684073453,950137558,3109211524,1617650516,632851678,1197165765,2839485473,894685629,2013843974,1740648888,2223030367,1976481226,2279429604,3471951619,2962897980,3989145670,347523608,360163257,351260798,1456074925,2206651110,33981791,3709566032,1361241455,3353675989,4012055263,3671919181,1492194988,2299231457,2904399381,3084061917,3178177116,1653422132,1152072423,2118905617,4235479649,2815694854,3406275183,4092031301,513908748,3494061396,4226209354,1038345919,2182761316,3325465416,2232329375,2359293667,3319340006,484852031,1494207484,1279081641,554885225,2235085032,388558626,774823825,446117302,2508022231,2786591333,3155376309,2401523469,2844757663,1361953378,4276737026,3660450467,2979155408,3571143444,2248473474,2859803082,459378516,921351816,223277570,1813623853,247270511,2043452990,2493425677,503079633,1637018708,2579311600,2625784975,4194943523,3994285996,325451940,509783140,1243194464,90938636,916231643,3560140666,1587638976,106148524,3013272800,1822452126,2335686609,3388442487,3689931595,3998380486,631719327,2223675494,982329771,3519424488,3300512858,3214635613,2680882539,3943768169,3663333816,1444974549,500424098,2055571982,3797504232,1593907820,2768224319,3387495073,705345222,148536492,675359779,1631554156,287433208,1070727875,1949786675,1733906104,2279022046,3088036193,4186529630,1922131195,4003927169,4219207219,2132492056,2129343642,632046799,3211400825,3472734137,2965443360,3183394872,1092775480,2128142202,1727779789,4066265660,785486420,47400347,2091881465,1878521224,859720272,1456542360,4220978739,2434134779,320139533,566373939,3161863433,393537329,4274389797,3865848520,1387818883,207302671,1230167236,1477199345,3251379462,1291000941,2335112828,235604667,1648767337,3589411885,1102002857,1442060688,1156250695,705716342,3599169541,2899355525,2381653607,2121041942,1950460707,3707301841,2718552755,2944274780,112774814,2082609881,2195709198,4236503830,2234033659,3400717923,3074219099,1462613468,482134761,800269805,1746171022,2320301569,2568076687,245171899,3222423187,52082741,980490675,1932729672,2772393477,2179113755,2387674047,2534949713,566270228,2039644517,1664357548,2669645079,2942001345,3353795310,3982022297,3951900635,2716476976,1017733943,3873672544,174693727,634019214,3743800798,813814863,3056141747,2735104917,3934030427,2719604084,3781060479,757743392,2770602980,2846058368,2804494954,1365416184,3874606821,4207386687,4278162323,1639018685,1003790778,3705251170,1192590232,2427306242,2087285406,1276731380,3106501490,262236165,3797952294,3337807712,3619928414,3579451393,2142544839,2746755654,91490430,598822968,1902453739,4222495528,3611284916,102211028,361326633,905091298,437037607,4258328211,219481727,1466968713,3509721596,971600368,2442656732,228456502,4129722904,395677164,1166009072,2481749794,259674055,424045052,819952094,1986636263,3933574863,3474868555,2566810267,2052987781,2735956925,2666866970,3623731959,4042283422,3872278153,989294318,2490718858,1652078792,3855132684,2370421777,1084122958,715950383,1448572178,4180068072,3034721787,958585317,2471872512,869456888,1845239659,3548867624,2960598280,164447168,3716944295,4160924813,61028907,1772442231,3963006712,2670124291,3340158396,1437158456,3928688073,2296037872,3915292706,1040215001,1870425787,1768629022,1025591578,2709570457,276845353,1465404951,4250269882,2245680593,2841613528,835543225,801797490,1650626902,988161993,4274084610,887218751,3420655515,990007615,4236143302,2282159454,1949223016,2991718597,1993258299,390971276,3781548667,192845723,1931213491,3952383199,2494569715,1408175762,2911992101,1861844796,2162687956,1908152214,2019856032,3632772089,2918416088,2328738938,2320115679,3318613033,2234893458,3483180795,1618567324,2447379005,2910623833,2359353224,3552081860,1000197618,2271225055,2992194980,383775057,3628067273,2292009280,186427723,3676434014,1235191498,1834775792,3149901475,2544621638,2201139366,1178900205,78332164,4010544472,833037129,880265950,4284978928,2171856323,739162667,3612241622,2165638367,3718737495,1352758558,1183603994,1250847937,3260580401,992716746,2475973406,149352190,3272673578,2251278281,1918484834,1034735248,4092939183,3826892753,2299133155,1508965936,641211789,187930772,3090913351,3166016780,877985435,511533421,1309662126,3587424740,2940296231,1394511685,482243917,1938697454,2276041698,41697182,3642549118,98337993,1563501635,1400811252,1324933928,3141629732,4209910666,4199005728,3736241022,1568371775,1227127917,1003410935,1900882025,3980410969,633878086,3236772524,2597890787,725479088,1096524138,1054909812,3991221653,1862047187,2546616074,2172881782,1910691934,4022226150,1635546157,2529599726,3435119247,1323791511,1538731131,70345557,2651438977,2622972774,2524518579,1929758339,1292182647,3096525082,2753475554,4145612125,3302632377,2078920638,3289130262,1814753220,202359270,1677976866,4031637189,2579666514,2149563315,2935725444,1666372253,1773075852,862152118,994280895,1755996620,980095081,3159891027,144529041,1174512601,3121555816,2240426782,3301035265,1779835188,2570618053,2396216879,4061598212,3267183054,3718966497,2776380068,2430433176,1896610601,21469168,2421159296,2064388862,724030118,598822794,4211760245,2195942712,945086088,2722649983,1990887623,2391525975,1924257683,1174882572,2269642459,750267794,3203104459,3719868985,592501948,3586991983,1624829535,1408501164,3497413561,2777064592,869463121,1874818857,2659825147,565971903,1685044027,1928558286,847040814,4059164649,931907488,471590589,2040789181,307361014,352855272,3116062149,231094834,3125073393,3689987699,3478832094,3847078770,4172274410,3087845062,3902212235,4032392870,889813789,1065395780,2147719542,2369253740,974459981,4249574702,1299068132,1798780339,2150135854,1947063017,1661873848,3049931769,1347495035,3614058108,3449519941,3703142683,526007099,2938862413,1520832841,662528358,36433629,2611309204,1664754598,2359576193,3063187354,3286836190,3585335991,371539198,3104041812,4098109689,2063618858,2682360971,4124727759,283809697,2942880059,3586175952,3250230971,2835036041,3062930953,1476917574,4277717510,702247883,338523081,2659065283,1190442676,2019164731,2614360927,406956908,2246545994,3592105988,1992737980,4117645913,1581531124,2801370546,806356300,2103681712,1652314349,3915265107,235503002,4176126739,1134118214,2985334854,1641179439,851031908,239263887,1671854015,2587463480,625586446,172443241,4143492918,689867180,676365637,1227658237,2290785899,3189257745,969609284,3180584963,923925603,1845702360,1586784016,375419382,3160595289,2735415336,77129781,3834938124,1446797170,1440870925,2294229126,1515562885,2006041111,2469687978,4050218261,1327441446,1404552751,470794348,1875436412,1953401332,3578483707,4209998795,2508869990,482890509,3356220633,2576577467,3728048878,2348502649,3441979188
Пошаговый план — открывайте по одному шагу
- 1Выпишите операции tempering MT19937:
y ^= y >> 11; y ^= (y << 7) & 0x9D2C5680; y ^= (y << 15) & 0xEFC60000; y ^= y >> 18. - 2Напишите обратную функцию untemper, обращая операции в обратном порядке. Сдвиги с XOR обращаются итеративно.
- 3Примените untemper к каждому из 624 выходов — это состояние.
- 4Загрузите состояние в
random.Randomчерезsetstateс индексом 624. - 5Вызовите
getrandbits(32)— это следующее число.
Подсказки — каждая до решения стоит −100 очков
Задание 4Как защититься
random не для безопасности. Токены, пароли, ключи — только secrets / os.urandom.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.