модификация "xor"
Доброго времени суток. Хочу поинтересоваться насчёт обычного полиалфавитного шифра. Пусть у нас есть некоторый текст, который "ксорится" с ключом и получается шифротекст. Насколько я понял, по шифротексту он вскрывается так же как шифр Виженера[link1]. Стойкость в основном зависит от длины гаммы. Тогда получается, что если пароль из 8 символов разбить на две части(5+3) и зашифровать текст сначала одним, а затем другим, то длина гаммы сильно увеличится(почти в два раза). Может ли криптоаналитик как-то использовать информацию о последовательном применении двух ключей(кроме как при полном переборе)?
Ссылки
[link1] http://ru.wikipedia.org/wiki/Шифр_Виженера#.D0.9A.D1.80.D0.B8.D0.BF.D1.82.D0.BE.D0.B0.D0.BD.D0.B0.D0.BB.D0.B8.D0.B7
[link2] http://www.pgpru.com/faq/kriptografijaobschievoprosy#h37247-13
[link3] http://www.pgpru.com/faq/kriptografijaobschievoprosy#h37247-12
[link4] http://www.pgpru.com/comment35924
[link5] http://www.pgpru.com/biblioteka/statji/kriptoanalizljubiteljskihshifrov
[link6] https://github.com/ThomasHabets/xor-analyze
[link7] http://www.pgpru.com/novosti/2012/swapornotprostejjshieblochnyeshifrypretendujutnastojjkostj
Чтобы шифр XOR был стойким, нужно, чтобы это был одноразовый блокнот (one time pad), а длина ключа совпадала с длиной зашифровываемого текста. Это делает XOR непрактичным. Ни про какие безопасные модификации XOR'а не слышал, современные шифры строятся так, что они далеки от исходного XOR.
Длина гаммы не изменится. Это эквивалентно проксориванию с третьим паролем, который есть XOR ваших двух паролей (при одинаковой их длине). Проблемы те же, что и с одноразовым XOR'ом. Ломается частотным анализом и т.п.
Длина изменилась с 8 на 15, пароли не просто не одинаковой длины, а взаимнопросты. Современные шифры не интересуют, интересует именно возможность использования криптоаналитиком этого свойства гаммы.
Шифртекст = Текст ⊕ Пароль1 ⊕ Пароль 2 = Текст ⊕ (Пароль1 ⊕ Пароль2) = Текст ⊕ Пароль3, где Пароль3 = Пароль1 ⊕ Пароль2, причём имеет ту же длину, что и Пароль1 и что Пароль2. Я правильно вашу схему понял?
В чём цель? Изучение криптоанализа на простейших нестойких слабых шифрах? В институте задали задачу? Или взлом шифра какого-то Васи Пупкина?
Понимаете, есть некоторое утверждение, которое является по сути теоремой. Если вы не соблюдаете условия теоремы, вы получаете слабый небезопасный шифр, не удовлетворяющий современным критериям безопасности шифров. И в чём тогда смысл его анализировать? Ознакомьтесь с FAQ для начала:
Похоже нет. Давайте на примере. Шифруем сообщение "000000000000000000000000000000"(тридцать символов '0') паролем "12345678". Получаем "\1\2\3\4\5\6\7\8\1\2\3\4\5\6\7\8\1\2\3\4\5\6\7\8\1\2\3\4\5\6"(где \d – это символ с кодом d). Теперь разобъём тот же пароль на несколько частей, так чтобы НОК произведения длин этих частей был наибольшим, таким образом гамма увеличивается до НОК(5,3)=15. Получаем шифровку: "00022>1?<31?>3=00022>1?<31?>3=".
Дизассемблировал программу в которой трафик так шифровался двумя взаимнопростыми ключами, вот и стало интересно. Очевидно, что это усложняет описанный в википедии способ вскрытия, поэтому я попытался придумать другой, но не смог.
Получается:
Шифртекст = Текст ⊕ (Пароль (длина = p / n) || Пароль (длина = q / n) ), где "||" — это конкатенация (объединение),
n = p • q – НОК.
Т.е. длина увеличивается за счёт того, что две половинки пароля ещё и частично совпадают (перекрываются)?
эм... я тут ничего не понял, из второй строки следует, что n>=p, а в первой p делится на n, т.е. длина получается не больше единицы.
Более того – только за счёт этого. Для пароля из восьми символов операция шифрования на языке си будет выглядеть так:
Хорошо, обозначение неудачное, с длиной не получилось, это просто относительная величина: доли, проценты. К тому же простые p и q перепутались, то ли это модули, то ли сами значения, да и ещё буква p с открытым текстом совпадает.
Методом перебора по скачкам в статистике подберём значение первого периода, в котором будет сокращаться в ноль второй период по ксору:
Каждая третья пара шифртекстов будет давать вот такое:
c(1) ⊕ c(3) = p(1) ⊕ p(3) ⊕ ( k1(1) mod 5) ⊕ ( k1(3) mod 5)
И так можно проверить все статистические предположения о парах, кратных тройке, всё больше подтверждая гипотезу об одном значении периода.
Дальше можно подобрать и второй период.
И вообще, информация или догадка о каждом pn, k1(n), k2(n), mod (X), mod (Y) приближает к разгадке. А уж про наличие возможности криптоанализа с использованием известных или подобранных открытых текстов даже напоминать смешно. Не может линейная функция считаться шифром.
Шифр — всё, что превращает текст в (обратимую) абракадабру. В народе считают как-то так.
Ну раз так:
Не может линейная функция считаться стойким шифром.
Из нестойкости шифра не следует лёгкость его взлома в абсолютно всех ситуациях, из-за чего обывательски считается, что нестойкие шифры имеют право на жизнь. И дело здесь в том, что показать нестойкость шифра намного лечге, чем написать исчерпывающее руководство по оптимальному его взлому во всех возможных ситуациях с чёткими оценками на требование к ресурсам, к количеству нужных пар {текст,шифртекст} и т.д. Т.е. пусть система явно дефектная, но вот как воспользоваться дефектом?[link4] В современном мире эта проблема решается просто: «нам пофигу на дефектные «шифры», т.к. всюду рекомендуется использовать современные и стойкие, каковые слишком далеки от практичного взлома; тот же, кто использует дефектные, т.е. от практического взлома недалёкие, — ССЗБ».
Криптоанализ любительских шифров[link5].
Периоды и так известны, это же часть алгоритма шифрования. Вопрос в том как этим воспользоваться. Что толку от этой информации, если мы всё равно будем действовать как при обычном "ксоре" с паролем в 15 символов.
Действуйте[link6]. :)
При перексоривании символов шифртекстов можно сокращать части эти половинок ключа, т.е. будет видно, что каждый 3-ий фрагмент открытого текста будет эффективно ксориться только одним фрагментов из одной половинки пароля, а каждый 5-ый — только одним из второй половинки.
Пусть открытый текст, который мы хотим зашифровать — вывод ГСЧ. Мы ксорим этот вывод каждый раз с одним и тем же фиксированным паролем (да пусть хоть даже ксорим каждый бит с единицей). Может ли по шифртексту атакующий получить какую-то частичную информацию об открытом тексте? Насколько я понимаю, нет.
И ещё: если считать, что высокоэнтропийные данные непредсказуемы для противника, то ситуация похожа, а высокоэнтропийными они будут после архивации, сжатия и т.д. Получается, что все атаки на XOR в конечном счёте сводятся к связыванию шифртекста с открытым текстом. Конечно, для любого архиватора связь между открытым текстом и архивированным есть (а, следовательно, и между открытым и зашифрованным, по транзитивности), но, чем она сложнее, тем тяжелее анализировать/взламывать такой «шифр». Unknown, как далёк я от понимания?
Это верно, но криптография — это не только шифрование. В реальных протоколах можно пропихнуть известный и подобранный открытый текст. Есть даже криптоанализ с известным ключом — когда шифр используется для проверки целостности или как элемент хэш-функции. Если он не может быть стойким в такой конструкции (с определёнными ограничениями), то считается, что он нестоек вообще.
Берёте огромный словарь не только со словами, но и с часто встречающимися фрагментами тэгов HTML, разметки файловых систем и пр. Архивируете, перебираете.
В общем случае да. Но это такая сложность, которая не имеет совсем никакой теоретической базы, кроме запутывания. Даже строгую криптографию зачастую справедливо упрекают в плохой теоретической обоснованности. А с более наивным подходом может получиться, что то, что считалось сложным, кто-то легко упростит.
Вот ваш тезис примерно таков: "Пусть XOR — слабый шифр, но простейшее преобразование позволяет вычислительно увеличить гамму из ключа в два раза". Без каких-либо теоретических обоснований.
Вам контртезис с примером: "XOR фрагментов шифртекста по известным (или вычисленным) периодам позволяет сократить гамму обратно".
Насколько это эффективно, другой вопрос. Но для доказательства отсутствия продуманной теории — достаточно. Подозреваю, исходя из общих соображений (но не утверждаю, т.к. не выводил строго для вашего случая), что возможно написать систему линейных уравнений и свести взлом к обычному сокращённому XOR-ключу так, что взлом будет лишь чуть сложнее на несколько операций. В линейном криптоанализе и более сложные задачи решаются.
Согласен, но я не топикстартер. :)
Просто решил слегка уточнить ваши ответы, адресованные ему.
Да человеку коннкретный шифр взломать надо, а вы его теориями кормите :)
А вдруг автор хочет чего-то наподобие этого[link7]. :)