Взлом шифра Вернама(одноразовый блокнот). Как сделать?

Привет!
Есть несколько шифротекстов в hex, где Ci- шифротекст, Mi - сообщение, K- ключ, Ci= Mi xor K.
если сделать xor между C1 xor C2= M1 xor M2. А как можно получить ключ в итоге?
Вроде что-то с энтропией связано. как?
  • Вопрос задан
  • 11082 просмотра
Пригласить эксперта
Ответы на вопрос 3
kumaxim
@kumaxim
Web-программист
Я знаю только один метод вскрытия таких систем...

Ссылка 1 | Ссылка 2
Ответ написан
Комментировать
Mrrl
@Mrrl
Заводчик кардиганов
Предполагаем, что известно, на каком языке сообщения, и статистика распределения символов (а также сочетаний по 2, 3 символа...)
Зависит от того, сколько у нас сообщений.
Если их достаточно много, то строим статистику символа с каждым порядковым номером по всем сообщениям (символ k встретился P[k] раз). Эта статистика должна получаться из стандартной статистики L для языка как P[k]=L[k^c], где c - искомый символ. Для каждого c считаем вероятность того, что на этом месте оказался именно он, и дальше начинаем искать наиболее вероятный текст для какого-нибудь сообщения.
Если сообщений только два, то придётся использовать распределение групп символов, смотреть, из каких сочетаний наиболее вероятно получится фрагмент из C1^C2, и дальше распутывать их с помощью каких-нибудь цепей Маркова. Не знаю, получится ли.
Сильно облегчит дело, если сообщения - фрагменты обычных ASCII-файлов, со всеми знаками пунктуации и переводами строк. Можно воспользоваться тем, что перевод строки имеет код 0D,0A, пробел - 20, другие знаки пунктуации - от 21 до 3F, большие буквы - от 41 до 5A, маленькие - от 61 до 7A (это если текст английский. Для русского ещё лучше). Смотрим на поведение битов 40 и 20. Если в каком-то месте в разных закодированных сообщениях значения бита 40 различны, значит в некоторых это буква, в остальных - знак пунктуации. Причём, буква вероятнее в тех, в которых более частое значение. Немного похимичив, получаем разделение текстов на слова, строки и предложения. Заодно в части сообщений проявляются некоторые буквы. Дальше работаем с распределением одно-, двух- и трёхбуквенных слов. Может быть, повезёт.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Правильно закодированное шифром Вернама (длина гаммы не меньше длины сообщения; гамма получена случайным, а не псевдослучайным образом; гамма используется только один раз) сообщение не декодируется в принципе, доказано математически. Этот шифр считается самым безопасным в криптографии.
Подумайте сами, из одного исходного сообщения "АААААААААААААААА" применением разных гамм можно получить и "Добро пожаловать!" и "Вход воспрещён!!!".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы