Добрый вечер. Сегодня хочется поговорить о шифровании текстов. Зачем нужно шифровать текст, думаю понятно. Главный вопрос — как это лучше делать?
На сегодняшний день существует огромное количество различных алгоритмов шифрования текстов: замена по матрице, шифр Цезаря, подстановки и прочие. Все алгоритмы имеют свои плюсы и недостатки. Главным же недостатком, на мой взгляд, является тот факт, что при дешифровании, большая часть из них практически со 100% точностью позволяет ответить на вопрос — смогли ли мы получить исходный текст или нет (мы, как правило, либо получаем осознанный текст (исходный) или получаем бессмысленный набор букв). Вопрос о времени дешифрования — риторический. Конечно, многие шифры имеют огромную комбинаторную сложность, но сейчас мы говорим не об этом.
Описанная выше проблема была решена достаточно просто. Решение было найдено на уровне представления информации в технике. Ведь любое сообщение — это информация. Информация — это последовательность нулей и единиц. Таким образом та или иная последовательность 0 и 1 может быть интерпретирована в виде текста (сообщения). Например (грубо говоря): 0101100101011001010010011011011101 — последовательность букв, не имеющая трактовки в русском языке, а 1101100110011100101010110110010 — строка из какого-либо известного стихотворения. Причем заметим, что для второго примера, если существуют любые другие строки такой же длины в любых других стихотворениях, то они будут представлены другой последовательностью нулей и единиц, но общее количество символов 1 и 0 будет одинаково.
Отсюда не сложно сделать вывод. Что идеальным вариантом шифрования будет замена исходных 0 и 1 на другую последовательность 0 и 1. Данную процедуру легко реализовать путем побитового сложения по модулю 2 — XOR — нашего исходного сообщение с некоторым ключем. Прямой перебор шифра, полученного такой заменой, не даст никаких результатов, так как будут получены все возможные последовательности букв, включая осознанные тексты, а следовательно мы никогда не узнаем, что именно было зашифровано.
Вроде бы все хорошо. Однако нет. Принято, что ключи (последовательность 0 и 1) должны быть случайны и не могут использоваться дважды, а это огромная проблема для современного мира. Ни одно компьютерное устройство не способно генерировать по настоящему случайные последовательности.
В итоге, как и все в нашем мире, мы знаем как что-то сделать лучше всего, но мы не знаем с помощью чего это сделать.