ctf-crypto-tasks
ctf-crypto-tasks copied to clipboard
Lecture and exercises on CTF crypto tasks
Криптография - 1
Формат занятия: несколько маленьких тем, сначала обсуждаем немного теории, потом самостоятельно решаем одну-две практические задачи. По каждой теме есть дополнительные задачи (отмечены звездочкой), который можно решать дома или на занятии, если вы всех обгоняете.
Кодировки
1.1.
01100010 01101001 01100111 01011111 01100010 01110010 01101111 01110100 01101000 01100101 01110010 01011111 01101001 01110011 01011111 01110111 01100001 01110100 01100011 01101000 01101001 01101110 01100111 01011111 01111001 01101111 01110101
1.2. А поворотись-ка, сынку
Разбейте строку на группы по восемь символов, в каждой группе разверните строку. Запишите байты с такими двоичными номерами в файл. Какой формат у этого файла?
1.3.
5647686c636d56666257463558324a6c58323168626e6c666333526c63484d3d
Классические шифры
2.1. Wkh_Txlfn_Eurzq_Ira_Mxpsv_Ryhu_Wkh_Odcb_Grj
2.2. 2_2_task.txt
2.3. vigenere. Флаг - это ключ.
2.4. (*) RuCTF 2014 Quals, Crypto 200. Флаг - произведение года рождения и года смерти автора
2.5. (*) 2_5_task.txt
Одноразовый блокнот
3.1. Задача взята с http://ufologists.ictis.sfedu.ru/:
Самый надежный шифр - это одноразовый блокнот, но мне лень придумывать много...
2426d6c3ef1a29652be80311a82c031d3ba564992d2fbf1d3bb3bee6cb523187e64ecb1af636b0a492571de1ac693ca10483736ee37912ccf544233c5507f14a14a8da2877a2b0d16a8cb90ce91bc0192fe733b4b254e834b943bf41278cf922314c9f8433
242193b0cf1d236520ff145ce339140b69ec65dc2c2fbe0f77abf0f08e502885e759db1af62bf1bc834154f0e97b3ae445897d71f965128df456232e5210f15615be8e3460b8e5cc65d8a35eff0d94153aec22b0b54aba20b90ba24d2796f4226559879571
2921c6c3c11c2a683dba081fb769050672a27c992e2eba0c77b3f1e18e563f80ee4f8f4af836e3b9985e44a3a8743bf600923075fe721589ba53762d4e16b84d13a88e306caff89e7fc3fa12f91fc01a2db537bcaa42bb34bb06eb5a68c5f939741c87872b
2726d68d8c0c227569f60311b127510f3ba076d73d33ba1f32e6bef8c7462490ec42c15dbb65e3a09f5356eaa77d68e00b843076e47e1285f44523294f07f14b10abc13571bafeca208cb80be44bc61329f13baabd0dab20a743aa42748aad33741c9c832d
316ec08ac105216569ee0308b769170777a937d73f23bf0b77a4f1b4cf51349cf642c054f629b0bd9f465ce7a86e29a1118f3060e5640f9fee0277205842a3471cbfcb3525b2fe9e65c2ae1be21bc6133cf426adb543e461a80daf0e738de823745a85943a
2426d6c3ca07286569ec0302b0201e0035ec5ecd7a25b41623abf7fadd1531d5e144c257f62bf4f0965b53e6e97326f500927660f5724accfc4e622f4610e2161184cd357cabe48e53eeb330f75beb2e07c72fe4bf5da42ea017aa5a6e8ae37170528ec632
3c2fc786de553a693df24604ab2c510d74a076c92923fb1731eacce1dd463994ec0bea57e72ce2b5da4655e6e96f26e813856272ff631fcced4370685303bc4719fbea286ba8fbd1758c8f10f91dd1043bfc26bdfa4cae35ac11deb5a6f80ad23745b838931
3.2. (*) VolgaCTF 2014 Quals, Crypto 200
Асимметричное шифрование
4.1. (picoCTF: RSA, 70 points) Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm. Problem
4.2. {"c": 2151755227352155628689133334816, "e": 7, "n": 4698616511411820332781170272631, "hint_for_last_step": "hex"}
4.3. Задача взята с http://ufologists.ictis.sfedu.ru/:
Моя веселая ФЕРМА
Играя в свою любимую игру, я наткнулся на данные ниже. Помогите разобраться с этим! Я хочу купить новый хвост для коровы.
{"n":55730048063717018374316281207573259125944928596988375563008761242928555444475159973323697033529485947694144334157841984089222608221659443869403243311377775287940043976050079897679344195429140671152006335092107296007295641129810127120597697958505609557108821553087048650668127879505133240481364133955404508724801433652620134539765901833015644832323224073360418288546329260222548709056388931692867087156683666545959017505300012887342748040633895056662119255382438961050252741419077501234468618586586761527436899702065013210399451488547753808782146177428317609036251342347553017178247158741715583011215815698806579497027,
"e":65537,
"enc_data":25234514147851501650928728210405740434891970671488428405196440434538180451319426356822060051035053769070087646943825115802785624107829588035763512660763770355863470442359006751937231446693677756587159506517057107545904847781133985450962418304405156723626987851757046221296000186129919558271304842917074255645894198513219579694940888303668954853572211412406774298397963087228995608199961416160365961933944487096937024121738220372895375686782970385612792024930159117151472088279156003279742341584430863692287750584160827079689586790181031407137862737274577936446435723045268025310178271959285118689249074803904304795181}
4.4. (*) (picoCTF: Broken RSA, 180 points) This RSA service seems to be broken. They encrypt the flag and send it to you each time... but they throw out the private key and you never get to see it. Any ideas on how to recover the flag?
Running on vuln.picoctf.com
Hint: Connect from the shell with 'nc vuln.picoctf.com 6666'. Read up on RSA and try to figure out why this might be bad... Good luck!
4.5.
Алиса и Боб сидят в чате.
Алиса: Боб, давай я тебе скажу кое-что секретное?
Боб: Алиса, окей. Только все остальные же узнают, если ты прямо здесь это напишешь.
Алиса: Давай использовать Диффи-Хеллмана для генерации секретного ключа. Я зашифрую на нём сообщение алгоритмом Rijndael-256 в режиме CBC. Расшифруешь вот тут: http://www.tools4noobs.com/online_tools/decrypt/
Боб: Окей.
Алиса: g = 5, g ** a = 3552713678800500929355621337890625.
Боб: g ** b = 100974195868289511092701256356196637398170423693954944610595703125.
Алиса: Зашифровала: AumkSsHF/eKNSQUMqt4FG8A7pTmTsYTDW/YHH9iC5mY=
Боб: А нам точно не нужен простой модуль p?
4.6.
Боб: Боюсь, предыдущее сообщение легко расшифровали. Давай заново, и теперь с простым модулем. Смотри не накосячь!
Алиса: Постараюсь. g = 5, p = 19208302915743920857294037403209473409509, pow(g, a, p) = 10986351755751103712777758371696540996168
Боб: pow(g, b, p) = 4737807098550297950358929203191827188641
Алиса: 0lWsaNo9FfhFpnD3RqIe+DfNnDVQicTsW/1SRDuVmgM=
Хеширование
5.1. Гриша был зарегистрирован на одном сайте, базу паролей которого недавно взломали и выложили. Хэш его пароля: 3517c55f3ffdd3322ccbe12039e33758. В каком году он родился?
5.2. Пароль был зашифрован с использованием соли:
>>> salt = 'sI8dM1B9sWx'
>>> password = '...'
>>> print(hashlib.sha256((salt + password).encode('ascii')).hexdigest())
43bececd0a23d46a4fce57cdace3831d85b2745787ab28df56e5dfc96a284ca9
Какой это был пароль?
5.3. (*) Сообщение подписывается ключом:
>>> key = '...'
>>> len(key)
12
>>> message = 'Miss me?'
>>> print(hashlib.md5((key + message).encode('ascii')).hexdigest())
beab1b8075966ac4d1cfd89141684c79
Подпишите ещё какое-нибудь сообщение тем же ключом. Пришлите его мне, и я выдам вам флаг.
5.4. (*) Создайте два исполняемых файла ELF для 32-битного Линукса с совпадающим md5-хешем.
Один из файлов должен выводить при запуске строку MD5 is insecure
, а второй - Use SHA-3 whatever that means
.
Пришлите обе программы мне, и я выдам вам флаг.
Разное
6.1. Задача взята с http://ufologists.ictis.sfedu.ru/: 6_1_encrypt.py
Вот это вывод: "[138, 155, 26][173, 38, 76][100, 496, 87][179, 308, 52][19, 470, 14][9, 460, 4][310, 71, 40][1, 452, 85][172, 496, 85][174, 498, 87][298, 59, 28][147, 246, 4][158, 482, 71][306, 67, 36][261, 92, 7][75, 286, 6][169, 325, 3][55, 537, 63][162, 510, 70][6, 457, 1][94, 38, 0][141, 465, 54][126, 352, 65][162, 403, 20][260, 91, 6][122, 534, 25][269, 204, 10][159, 483, 72][185, 171, 60][181, 310, 54][260, 438, 31][8, 420, 0][260, 91, 6][203, 296, 39][123, 541, 47][67, 363, 22][183, 339, 17][300, 146, 54][79, 290, 10][184, 283, 41][123, 541, 47][260, 438, 31][245, 246, 39][147, 91, 53][177, 248, 76]"
6.2. Похоже, файл dest.jpg в папке jpeg зашифрован. Может, в нём был записан флаг?
6.3. Зайдите в папку symmetry_1. Там вы увидите скрипт encrypt.py, которым было зашифровано сообщение, и файл message.encrypted - результат работы скрипта на некотором ключе. Откройте файл message.encrypted, выберите режим Raw,нажмите Ctrl+S и сохраните файл на диске. Копировать содержимое файла из окна браузера бессмысленно: файл содержит двоичные данные, которые браузер некорректно отображает. Подберите ключ и расшифруйте сообщение. Оно и является флагом.
6.4. symmetry_2. Hint: откройте любую гифку в блокноте.