IT
January 30, 2019

Чтобы скрыть что-либо, надо сделать так, чтобы его не было видно

Шифры, шифры, шифры!

Хоть и популярностью не особо пользуется, но все же есть такое явление, как использование шифров в переписке. По моему опыту пользования сторонними клиентами ВКонтакте, я могу привести в пример такие шифры:

  • MP3 (Шифр из VK MP3 MOD, похож на Base64 внешне ради "читаемости")
  • VK CO FF EE (ВЫ ГЛ ЯД ИТ КА КТ ОТ АК VK CO FF EE)
  • Inviz (Пользователь видит чисто пустое сообщение, которое вроде как чем-то наполнено, но оно не отображается)
  • ЖъжЪъжЪЖъж 🐝 (этот шуточный, но существует в узких кругах)

Есть у этих шифров один минус: они выделяются из толпы своим "синтаксисом", привлекают к себе внимание (Кроме ЖЪЖЪЖЪ 😃). Это, естественно, провоцирует на поиск соответствующего алгоритма декодирования и такого всякого.

Компьютер — главный лжец

Unicode невероятно богат. В него все еще не завезли всяких нужных эмоджи, но самых разнообразных символов навалом. Существует в Unicode и такое понятие как zero-width symbols. Буквально: у них нулевая длина. Если их выделять, то выделения нет. Они невидимы в тексте, ведь эти символы являются сервисными для облегчения обработки текста машиной. Пользуясь громадностью таблицы Unicode, я подобрал 4 символа, которые не фильтруются ВКонтакте, Телеграмом и Твиттером одновременно. При этом на абсолютном большинстве систем они сохраняют свои zero-width свойства. Эти символы и кодируют строку, образовывая сам шифр. При отправке сообщение будто и вправду не содержит контента — длина закодированной строки равняется нулю, какой бы текст она не содержала.

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

Утверждение выше черт возьми верно. Но мы ведь с вами не машины, и у нас здесь существенную роль все еще играет человеческий фактор. Кто бы что не говорил, а компьютер всегда обманывает человека, скрывая от последнего информацию, которая, по его мнению, нерелевантна. "Тайное" содержание нужно маскировать. Вот, к примеру, публично известен факт из истории открытия алмазов в советской России о том, что сообщение о успехе разработки месторождения замаскировали под, грубо выражаясь, обычное «Закурили трубку мира, табак отличный». Явно ведь не о алмазах речь.

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

Косо, криво, лишь бы было

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

Так как используется принцип маркеров, результат команды "ENCRYPT!" нельзя просто присоеденить к обычному тексту ввиду того, что эта команда не проставляет данные маркеры с целью экономии количества символов.

Также один из символов отображается в Microsoft Edge. В принципе, можно перейти на шифрование двумя символами, но тогда, естественно, длина закодированного текста станет в разы длиннее. Edge и так уже умирает и переходит на Chromium, так что "известно, исправлять не собираемся".

Метод скрытия и шифрования информации сугубо цифровой и, увы, на принтере его не распечатать, но в этом и лежит специфичность метода.

Где и как заценить вживую я покажу позже, на моем канале @dilongs.

Я все. 😌