|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|||||||||||
Взломать детский шифр17.12.2018, 17:21. Показов 5975. Ответов 58
Метки cryptandcod (Все метки)
Всем доброго времени суток, товарищи программеры. Перед тем, как приступить непосредственно к делу, мне хотелось бы поведать небольшую предысторию. Учусь в общеобразовательной школе в 11-м классе (физмат). Со мной есть еще несколько типов, с которыми мы по фанчику постепенно учим криптографию и называем друг друга нумерологами
Мы решили составить свой шифр (на программной основе), который имел бы достаточную стойкость (на уровне 11 класса). (ДЛЯ ЕДКИХ - Я ПРЕКРАСНО ПОНИМАЮ, ЧТО НЕ НАДО ПРИДУМЫВАТЬ НИЧЕГО ИЗ ОБЛАСТИ КРИПТОГРАФИИ, ПОКА У ТЕБЯ НЕТ ХОТЯ БЫ ДОКТОРСКОЙ СТЕПЕНИ ПО МАТЕМАТИКЕ) Но суть в том, чтобы придумать самим, а не использовать уже готовые решения (что-то вроде развития мозгов). Это задание решили отдать мне, т.к. я представляю, как работает сеть Фейстеля. Что касается ключа, было решено, что он должен обладать небольшой длиной, но все же достаточной для того, чтобы малолетки его не перебрали. В качестве идеального варианта взяли 64 бита. Дальше я уже додумывал сам. Это должна быть функция, желательно вызываемая из dll-библиотеки. Шифровать она должна линейный массив байтов, т.к. любой тип данных можно представить массивом байтов. Выдавать для удобства тоже желательно массив байтов. Ключ, как ни странно тоже проще задавать массивом байтов. И для приличия ввел нечто напоминающее iv - массив байтов , равный размеру блока, который тупо ксорится с первым блоком, публикуется открыто и не дает возможности понять, что одним и тем же ключом 2 раза шифровался один и тот же открытый текст. Длина блока 8 байт (как у ключа), шифр целиком представляет собой сеть Фейстеля "в лоб", и с этими мыслями приступил к кодингу (на паскале). Получил следующий код:
- скорость на моем пентиуме порядка 18 Кб/с в обе стороны, что позволяет шифровать текст адекватного размера, но и фотку сожрать тоже может, однако придется подождать - время обработки данных как функция от длины массива возрастает +- линейно, как и должно быть Для самой непосредственной реализации шифрования начеркал такой код (особо не заморачивался):
- шифротекст архиватор не сжимает вообще (так я проверил его на избыточность) - в среднем всех байтов в шифротексте примерно поровну (нормальное распределение) - после шифрования размер массива не увеличивается больше, чем на длину блока (просто разметка дополняет открытый текст нулями до длины, кратной 8, а при расшифровке их выбрасывает) - изменение хотя бы одного байта шифротекста в любой позиции губит весь открытый текст при расшифровке (избыточность каждого байта открытого текста перераспределяется на весь шифротекст) - изменение хотя бы одного байта ключа, как ни странно тоже сказывается плачевноЭтот шифр приняли. Исходник служит одновременно релизом и описанием. Если релиз написан нерационально, прошу не пинать, т.к. писал с нуля и не исключаю, что что-то сделал криво (багов там вроде нет). Пока никто из наших его не взломал. Лично я тоже не представляю, как это можно сделать на практике, и пишу это все для того, чтобы узнать, что по этому поводу скажут прошаренные бородатые дядьки-программеры. Для того, чтобы не вызывать каких-то абстрактных рассуждений, предлагаю дешифровать конкретный файл (зашифрованная фотография .jpg - файл binarnik.bin - прикрепляю в архиве вместе со всеми исходниками). Если кому-то надо, там и SHA256 для расшифрованного файла. iv тоже прилагается. И на всякий случай, фотки в интернете нету - она отснята моим фотоаппаратом и после дешифровки, разумеется, становится общественным достоянием. На адекватные вопросы обязательно отвечу. Всем заранее спасибо.
0
|
|||||||||||
| 17.12.2018, 17:21 | |
|
Ответы с готовыми решениями:
58
Взломать шифр двойной перестановки Взломать шифр Виженера методом частотного анализа |
|
461 / 201 / 80
Регистрация: 14.12.2017
Сообщений: 433
|
|||
| 24.12.2018, 17:34 | |||
|
Картинка в jpg:
0
|
|||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
||||||
| 24.12.2018, 19:57 [ТС] | ||||||
|
Добавлено через 15 минут https://ru.wikipedia.org/wiki/ГОСТ_28147-89 Там вроде тоже все довольно просто. Кстати, функция для сети фейстеля оттуда нормальная? Если взять что-то на нее похожее? А если имеют место небезосновательные опасения, что из организаций https://www.veracrypt.fr/en/Downloads.html Добавлено через 2 минуты Ну а если очень хочется самому кодить, то в .NET - платформе есть System.Security.Cryptography
0
|
||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
||||||
| 26.12.2018, 16:02 [ТС] | ||||||
|
Вот вчера слепил такое:
Работает быстрее, чем предыдущий, но насколько именно - не проверял. (для On18 - кроме сложения 32-битных чисел по разным модулям там ничего и нету ). На баги особо не проверял, но по крайней мере запустилось. Тест нулей прошел нормально. Кто что может сказать по этому коду?Архив с исходниками:
0
|
||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 26.12.2018, 16:04 [ТС] | |
|
И еще блоки брались случайные, так чтобы 1 байт встречался ровно 1 раз, и чтобы значение каждого байта не совпадало с его индексом в таблице.
0
|
|
|
461 / 201 / 80
Регистрация: 14.12.2017
Сообщений: 433
|
|
| 27.12.2018, 18:36 | |
|
Выглядит на много лучше.
Сойдет.
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 27.12.2018, 20:12 [ТС] | |
|
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|||||||||||
| 29.12.2018, 17:19 [ТС] | |||||||||||
|
хотя рано радоваться....
![]() нашел потенциальную какашку:
Добавлено через 3 минуты есть еще идея увеличить для ЧСВ размер ключа и блока до 128 бит. стоит?
0
|
|||||||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 01.01.2019, 21:24 [ТС] | |
|
С новым годом!
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
||||||||||||
| 03.01.2019, 14:08 [ТС] | ||||||||||||
|
К стати, функцию расширения ключа
Добавлено через 1 час 34 минуты ![]() к случайному ключу [67, 58, 109, 198, 22, 192, 208, 39] у меня вручную получилось вычислить эквивалентный: [73, 64, 115, 204, 16, 186, 202, 33] правда стоит заметить, что этот ключ эквивалентный только для 1 блока, и судя по всему не будет работать для шифра целиком, т.к. там идет цепочка перексориваний, но этого достаточно для того, чтобы функцию без раздумий кинуть в топку ![]() Добавлено через 2 минуты код для проверки чтоб другие не писали себе заново:
вот собсно расчет: берем случайный ключ: [67, 58, 109, 198, 22, 192, 208, 39] выбрасываем подстановку из массива и перексоривания, т.к. там биекция и один хрен ничего не поменяется. разбиваем исходный ключ на 2 таблицы: [67, 58, 109, 198] [22, 192, 208, 39] и для более общего вида нумеруем эти числа: [A, B, C, D] [E, F, G, H] составляем таблицу подстановок: [A + E] [A + F] [A + G] [A + H] [B + E] [B + F] [B + G] [B + H] [C + E] [C + F] [C + G] [C + H] [D + E] [D + F] [D + G] [D + H] [E + A] [E + B] [E + C] [E + D] [F + A] [F + B] [F + C] [F + D] [G + A] [G + B] [G + C] [G + D] [H + A] [H + B] [H + C] [H + D] теперь берем любое число из этого списка и присваиваем ему любое значение: A = 73 отсюда уже ясно, что эквивалентных ключей может быть дохера. теперь считаем: (a + e) mod 256 = (67 + 22) mod 256 = 89 (e + 73) mod 256 = 89 e = (89 + 256 - 73) mod 256 = 16 это у нас число под номером e в эквивалентном ключе. аналогично получаем: (b + e) mod 256 = (22 + 58) mod 256 = 80 (b + 16) mod 256 = 80 b = (80 + 256 - 16) mod 256 = 64 (c + e) mod 256 = (22 + 109) mod 256 = 131 (c + 16) mod 256 = 131 c = (131 + 256 - 16) mod 256 = 115 (d + e) mod 256 = (22 + 198) mod 256 = 220 (d + 16) mod 256 = 220 d = (220 + 256 - 16) mod 256 = 204 (a + f) mod 256 = (67 + 192) mod 256 = 3 (f + 73) mod 256 = 3 f = (3 + 256 - 73) mod 256 = 186 (d + g) mod 256 = (198 + 208) mod 256 = 150 (g + 204) mod 256 = 150 g = (150 + 256 - 204) mod 256 = 202 (d + h) mod 256 = (198 + 39) mod 256 = 237 (d + 204) mod 256 = 237 h = (237 + 256 - 204) mod 256 = 33 вот и выходит эквивалентный ключ: [73, 64, 115, 204, 16, 186, 202, 33]
0
|
||||||||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
||||||||||||||||
| 06.01.2019, 16:45 [ТС] | ||||||||||||||||
|
вот немного помозговал и сделал так:
Еще заметил, что раундовые ключи и результаты образующей функции нет смысла передавать в виде чисел - в самом деле, вот мы в образующей функции все делаем, делаем, делаем над массивом из байтов, переводим его в беззнаковое целое... НАХ?!! чтобы перексорить его с правым блоком и в следующем раунде обратно разложить на 8 байт? так проще сразу передать его массивом. ну а что до сложения по модулю 2^64 можно просто попарно складывать байты по модулю 256, один хер ничего не поменяется. результат вычислений конечно поменяется но суть - нисколько. с раундовыми ключами то же самое. для функции расширения ключа вроде получилось показать, что эквивалентных ключей у нее нет, и что для каждого ключа не существует такого второго, что при расширении этого второго получится тот же ключ, что и для первого, только в обратном порядке.Кто что может сказать по этому коду? Какие перспективы его стойкости? архив с исходниками:
0
|
||||||||||||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 06.01.2019, 16:52 [ТС] | |
|
байты для табличек брал отсюда:
https://www.random.org опять же каждая табличка содержит 1 байт только 1 раз и значение каждого байта не совпадает с его индексом в таблице. больше никакие критерии к табличкам не предъявлялись
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
||||||||||||||||
| 14.01.2019, 16:32 [ТС] | ||||||||||||||||
|
вот еще напоследок составил такой код (по ходу самый нормальный)
таблица подстановок для него:
архив:
0
|
||||||||||||||||
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 15.01.2019, 17:16 [ТС] | |
|
вы что, уснули все?
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 21.01.2019, 17:01 [ТС] | |
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 26.01.2019, 16:10 [ТС] | |
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 29.01.2019, 19:02 [ТС] | |
интересно, сколько здесь будет смайликов?
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 09.02.2019, 17:56 [ТС] | |
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 19.02.2019, 17:19 [ТС] | |
0
|
|
|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|
| 11.04.2019, 21:11 [ТС] | |
0
|
|
| 11.04.2019, 21:11 | |
|
Составить программу шифрования и расшифровки в Delphi по соответствующему заданию: шифр Атбаш + шифр Цезеря Шифр Полибия. Программа выводит шифр в разной последовательности.
Детский сад Детский вопрос: Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|