|
23 / 20 / 4
Регистрация: 15.12.2018
Сообщений: 152
|
|||||||||||
Взломать детский шифр17.12.2018, 17:21. Показов 5758. Ответов 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 по соответствующему заданию: шифр Атбаш + шифр Цезеря Шифр Полибия. Программа выводит шифр в разной последовательности.
Детский сад Детский вопрос: Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|