Я не до конца понял последнюю дискуссию про омофоны, но у меня есть возможно похожий вопрос. Дешифровать текст можно на основании того, что он пишется на каком-то конкретном языке, с высокой вероятностью там встречается слово "привет" и т.д. Чтобы избежать такого дешифрования, хорошим решением будет обозначить кодами все слова. Т.е. если в русском языке есть например миллион слов, то каждому слову будет соответствовать число от одного до миллиона. А для слов, не входящих в словарь, можно оставить побуквенную запись, но такое будет очень редко. Возможно, обычный zip делает именно это, когда архивирует текстовые файлы? Есть мессенджеры, которые зипуют любое текстовое сообщение перед отправкой?
Если взять современный симметричный шифр (т.е. там, где один ключ и для шифрования, и для дешифрования), то никаких частотных закономерностей не должно остаться даже если им одни пробелы шифровать. И нам не должен быть известен способ по такой шифровке восстановить ключ без брутфорса (и даже если мы знаем начальный килобайт текста в сообщении, мы не должны быть способны "расковырять" ключ). Более того, шифр, шифрующий одни пробелы, должен быть пригоден как образцовый ГПСЧ для метода Монте-Карло.
Цитата:
Мы можем перевести все буквы текста в другие буквы по любому алгоритму; но дешифратор всё равно сможет наш текст расшифровать, зная словарь русского языка. Это похоже на расшифровку древних языков - историки давно справились с этой задачей. Если же мы каждое слово в тексте закодируем числом, характеризующим номер этого слова в словаре - возможностей у дешифратора будет намного меньше.
В симметричном поточном шифре нет никаких словарей естественных языков, его можно представить себе как некую функцию с целочисленным параметром (ключом), выдающую поток бит, который должен быть неотличим от случайного известными методами. Поэтом его побитово XORят с сообщением. Т.е. он представляет собой скорее "ГПСЧ, сделанный как надо", чем классическую кодовую книгу.
-- 10.04.2026, 10:02 --Dmitriy40Допустим, я использую такой ключ, в котором русской букве "А" можно произвольно поставить один из десяти тысяч уникальных символов. Соответственно букве "Б" тоже один из 10 000 других символов. И т.д. включая пробелы, переносы строки, препинания и всё остальное. Тогда зашифрованное сообщение в, скажем, 5 000 знаков практически гарантированно будет последовательностью ни разу не повторяющихся знаков. Каким образом будут перебираться ключи в этом случае?
Даже если перехватить несколько десятков зашифрованных сообщений подобной длины.
1) В схеме получается очень длинный ключ, на порядки длиннее, чем в AES или ChaCha при сомнительной криптостойкости.
2) Пробовали ли Вы сделать двоичный аналог Вашей схемы, зашифровать 32 ТиБ одних пробелов и прогнать через PractRand? Без подобных грубых проверок криптоанализ даже обычно не начинают.
3) Само по себе "произвольно" - это уже проблема, на машине будет нужен системный криптогенератор, а живому оператору с кодовой книгой потребуется 10-15 бросков монетки на букву с последующими манипуляциями с двоичной системой счисления. Сам по себе человек как датчик случайных чисел не годится.
Вообще шифр скорее всего несколько уязвим перед Plain Text Attack, т.е. по накопленным парам "оригинал - шифровка" можно начать восстанавливать кодовую книгу, чего стойкий шифр позволять не должен. Возможно, можно ещё какие-то закономерности найти. Да, он более стоек, чем шифры Цезаря и Виженера, но если есть компьютер - то есть AES или ChaCha, а если нет - то одноразовые блокноты. Если монетку всё равно надо бросать, то чего бы заранее не наделать именно что случайных последовательностей?