Как стать автором
Обновить

Комментарии 18

Это если не использована гамма (ключ) длиной в текст.
Что с учетом "средневековости" вполне можно реализовать, договорившись заранее использовать, например, стих из Библии с определенным номером, соответствующим дню написания или конкретному получателю.
Получится не такой уж и плохой метод шифрования...

А если дело очень важное для очень важных людей, то можно напрячь население какого-нибудь уединённого монастыря недельку покидать игральные кости и произвести полностью случайные ключи, таким образом "взгромоздив" на шифрование Виженера режим OTP (одноразовый блокнот). Тогда вскрытие шифра вообще исключается полностью, принципиально, хотя и возникают присущие такому режиму неудобства менеджмента ключей.

Это плохой метод шифрования, потому что реальный ключ здесь -- именно номер стиха из Библии. Это как надеяться, что никто не догадается, что текст написан русским языком с использованием корейской хангыли в качестве алфавита или как пароль memento mori:) В средние века поискать ключ в Библии было бы первой же мыслью дешифровщика.

На самом деле - это очень интересная тема: методы шифрования без использования компьютера. Несколько лет назад я изучал вопрос и, насколько я понял, ответ криптографов примерно следующий: не майтесь ерундой используйте компьютер.

Интересный вариант предложил Шнайер для книги Криптономикон.

Я вообще не криптограф, но мне показалось возможным улучшить шифр Виженера используя в качестве ключа открытый текст сообщения, чтобы не было повтора, в стиле autokey, но и добавить какой-то счетчик, который зависит от предыдущих символов ключа, чтобы защититься от частотного анализа и от атаки на предсказуемый ключ.

Но тогда нужно как-то передать принимающей стороне ключ, который и есть само зашифрованное сообщение. Но тогда зачем его шифровать :) или я не правильно понял?

Есть начало ключа, которое надо передать заранее, безопасными способом, а оставшейся ключ получим по мере расшифровки сообщения.

О компьютерах и криптографии :

...насколько я понял, ответ криптографов примерно следующий: не майтесь ерундой используйте компьютер.

Играя против компьютера без компьютера - мы то и дело будем в проигрыше. А сейчас добровольно никто в поддавки играть не собирается. Хотя период наивной криптографии очевидно более романтичен и интересен для обывателя, но имеем что имеем.

Проблема в том, что не используя компьютер мы жертвуем вычислительной мощностью. Вручную с ECC или RSA не поиграешься. У нас есть строгое ограничение, всё же человеческий ресурс использовать по части простых вычислений крайне неэффективно.

От того хоть какие-то криптостойкие алгоритмы без компьютера мы имеем лишь в случае шифра Вернама, если, конечно, не хотим создавать человеко-компьютеры как в «Задаче Трёх Тел».

Говоря о Вашей идее :

Исходя из пункта выше уже ясно, что мы сильно ограничены вычислительными мощностями, от того упомянутый счётчик сложным быть не может, если мы, конечно, не хотим месяцами расшифровывать послание. Так же не думаю, что стоит упоминать о ключевой слабости симметричных систем ввиду своей сути. Но, впрочем, будучи реалистами нельзя отрицать то, что и ассиметричные алгоритмы не то чтоб качественно защищены от Мэллори.

Глядя на саму идею - она в самом деле делает шифр Виженера лучше, но не исправляет его уязвимостей, а, скорее, усложняет их эксплуатацию. В конце концов мы не защищены от анализа k-грамм, и даже взломав малую часть текста мы сможем расшифровать всё то, что стоит после. Далее же - уже работа не вычислений, а банальной логики, в чём человек крайне хорош.

Но играя с возможными алгоритмами пришёл к такой идее :

  1. Выбираем несколько простых чисел (p1, p2, p3...).

  2. Начинаем со счетчика, который представляет собой произведение простых чисел в степенях.

    C = p1^a * p2^b

  3. Для каждого символа ключа (K_i) символ преобразуем в индекс простого числа (например, "A" p1, "B" p2). Параллельно этому увеличиваем степень соответствующего простого числа в счетчике C.

  4. Используем значение счетчика (C / const) для модификации текущего символа ключа.

    K'_i = K_i + (C / const) mod N.

Я думал за столько лет совсем не пойму , я даже кодить не забыл оказывается , да и разложили как для аборигена , простите но любой немного вникнув все поймет кроме откуда маттформулы и код

Не могу не напомнить. Чарльз Уэзерелл, "Этюды для программистов", М. "Мир", 1982, глава 24 "Секрет фирмы или Математический подход к раскрытию шифров".

Читать, например, здесь -- https://royallib.com/read/uezerell_charlz/etyudi_dlya_programmistov.html#535594

Я на плюсах не сильно работаю, поэтому многих особенностей не знаю.
Для этой задачи перешил взять именно плюсы, т.к. низкий уровень и скорость.
Про auto я слышал, но в программе не делается акцент на самый "красивый" и современный плюсовый код. Тут главное было реализовать алгоритм и получить результат.

Ну, для скорости у вас есть ещё пространство для оптимизаций. А вот использование длинющего синтаксиса вместо современного вызывает некоторые вопросы - кажется писать меньше на малознакомом языке закономерное желание. Не смертельно конечно, но подозрительно.

Кстати, Вы определяете индекс символа относительно алфавита в "естественном" порядке букв в нем. Однако, это может быть не так. Алфавит изначально может быть "перетасован" случайным образом и тогда процедура шифрования немного усложняется. Ну тут долго описывать словами, проще на примере. А то больно много причастий получается.
Выписываем исходный алфавит в одну строку, под ним пишем смешанный. Буква исходного текста меняется на букву смешанного алфавита, стоящую под ней в естественном алфавите.

Ну и далее по тексту.

В этом случае, Вам придется после вычисления индексов совпадения еще и алфавит восстанавливать.

Согласен.
Семейства таких шифров называются шифрами простой перестановки. К нему есть отдельные подходы.
Я планирую позже описать методы криптоанализа и для таких шифров.

Шифр Виженера -- это изначально перестановка со сдвигом.
А, собственно, у Уэзерелла и в "партии переводчика" к соответствующей главе и описан полный криптоанализ "квадрата Виженера". В качестве задачи, собственно, предлагается написать программу для расшифрования криптограммы из текста книги. Я, кстати, спрашивал у редактора перевода (мы были лично знакомы на одной из моих работ), что же написано в криптограмме. Он со смехом сказал, что это отрывок из какой-то их статьи что-ли... Нужно же было расшифровать английский пример из книги и сделать "то же самое", но на русском.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории