LINUX.ORG.RU
ФорумTalks

Примитивная криптография

 , , , ,


0

3

Давным давно, в далёкой галактике энциклопедии для детей от Аванты, кажется, по Математике, я наткнулся на вот такой зашифрованный простой заменой текст:

Т ЭВЧОРКХЬЬ ТЫЬЪК Т ОЬРЫЬОЗПЬЧНРУ НЫЗЕОРФЫВЦЗЗ ЗЧЕРДШБЩСОЧК ЕРЭКОЗК З ЫЬБЩДШОВОИ ЪЭРФЗЙ ЫВБЛЬДРТ ЪВОЬЪВОЗНЗ: ВДФЬАЫИ, ОЬРЫЗЗ ПЗЧЬД, ОЬРЫЗЗ ТЬЫРКОЭРЧОЬУ, ОЬРЫЗЗ ЧДРГЭРЧОЗ ВДФРЫЗОЪРТ З ТИПЗЧДЬЭЗУ З ОВН ЛВДЬЬ. ЕРЮОРЪЩ ЛДК ЧРТЫЬЪЬЭЭРФР НЫЗЕОРФЫВЦВ ЕЫЬГЛЬ ТЧЬФР ТВГЭВ ЙРЫРМВК ЪВОЬЪВОЗПЬЧНВК ЕРЛФРОРТНВ.

Пару раз я пытался его расшифровать, но не получилось. Текст я кстати выкладывал на этот форум 12 с лишним лет назад.

Сегодня я на него наткнулся снова, перебирая старые фотографии и расшифровал. В своё время я использовал неправильный подход, в основном благодаря фразе из статьи, где этот текст был приведён:

Данные подсчетов встречаемости букв незаменимы при дешифровке текста, если при его составлении пользовались шифром замены

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

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

Команда sed 'y/АБВГ/абвг/' где я заменял угаданные буквы по порядку на те же буквы в нижнем регистре очень помогла. Одновременно сразу видно, какие буквы угаданы, какие нет и не нужно возиться с ручной заменой буквы.

Интересно, кто-нибудь ещё сможет расшифровать? И да, ответ на это гуглится. Кто-то отгадывал раньше меня, но вы же понимаете, что это будет неспортивно?

★★★★★

Последнее исправление: Xenius (всего исправлений: 5)

Слово математическая (предпоследнее слово текста) нашёл в словаре https://github.com/danakt/russian-words по шаблону

egrep '^(.)(.)(.)(.)\1\2\3..\4..\2.$'

Полная замена:

sed 'y/ЪВОЬЪВОЗПЬЧНВК ТЫ РУ ЕФЦ ЭХ ДШБЩС ИЙЛАГЮМ/математическая вр ой пгф нщ льзую ыхдбжэш/'
iliyap ★★★★★
()

Можно в словаре найти слово ЪВОЬЪВОЗНЗ:

grep -E '^(.)(.)(.)(.)\1\2\3(.)(.)\5$' russian.txt

Дальше аналогично предыдущему.

ivlad ★★★★★
()

БНОПНЯ МЕ ВХРЮК, ЯПЮГС НРБЕВЮК. РЮЙНБ ОСРЭ.

Smacker ★★★★★
()

Коммунизм - пыздыр максымардыш пыж!

Ну и, конечно, нетленка Карла нашего Гаусса про математику, что она — «ғылымдар патшасы».

Bass ★★★★★
()
Ответ на: комментарий от Bass

«Монгол феpмеpийн коллежи нь мал аж ахуй болов хураагч байна үйлчилгээ 702 килогpам ногоохуйц»

Smacker ★★★★★
()

Не понял смысла выложенной темы, но, на всякий случай, оставлю это здесь.

shTigrits ★★★
()
Последнее исправление: shTigrits (всего исправлений: 1)

Скжем так, это выглядит, как перекодировка koi8 в windows-1251. Но нет. Скажем так, я с такой фигнёй сталкивался лишь однажды -когда перекодировал базу библиотеки Мошкова, lib.ru. И я совершенно, не шучу. Там буквально, треть базы - на транслите.

Ну, я всё раскодировал. У мну вся база с адресами, 20 000 книг, типо.

Надо, кому? Приложение. Линуксовое. И Виндовое, кстати тоже. На Lazarus написано. кроссплатфомно.

Исходники, ясное дело, в комплекте. Давние разработки, не жалко.

cadaber ★★
()
Последнее исправление: cadaber (всего исправлений: 3)

Есть такой офигенный развлекательный рассказ Эдгара По «Золотой жук» (немного необычный для По). Там был подробно рассмотрен процесс расшифровки такого текста. Буквально через небольшое время батя купил журнал с кроссвордами и головоломками, а там зашифрованный текст. Мне понадобился целый выходной день, чтобы его расшифровать. Это было в докомпьютерную эпоху. В русском языке много зацепок: предлоги, союзы, окончания. Но придётся очень много считать и записывать.

rechnick ★★★
()
Последнее исправление: rechnick (всего исправлений: 1)
Ответ на: комментарий от rechnick

Ага, и ещё пляшущие человечки у Конана Дойла. Что такие рассказы есть я читал ещё тогда, когда читал эту книгу или какую-то другую по истории криптографии.

Но одно дело прочитать книгу, а другое — самому разгадать.

53‡‡†305))6*;4826)4‡.)4‡);806*;48†8¶
60))85;1‡(;:‡*8†83(88)5*†;46(;88*96*
?;8)*‡(;485);5*†2:*‡(;4956*2(5*—4)8¶
8*;4069285);)6†8)4‡‡;1(‡9;48081;8:8‡
1;48†85;4)485†528806*81(‡9;48;(88;4(
‡?34;48)4‡;161;:188;‡?;

Вот кстати криптограмма из золотого жука. Взято отсюда

Кстати, странно вообще, что в таблице посчитанных знаков нет 10 открывающих скобок. Но в остальном таблица правильная, в чём можно убедиться с помощью команды:

echo -n '53‡‡†305))6*;4826)4‡.)4‡);806*;48†8¶60))85;1‡(;:‡*8†83(88)5*†;46(;88*96*?;8)*‡(;485);5*†2:*‡(;4956*2(5*—4)8¶8*;4069285);)6†8)4‡‡;1(‡9;48081;8:8‡1;48†85;4)485†528806*81(‡9;48;(88;4(‡?34;48)4‡;161;:188;‡?;' | sed 's/./&\n/g' | sort | uniq -c | sort -rn

Переводы строк убраны, в том числе конечный.

Вообще, надо попробовать воспроизвести методику.

Судя по https://en.wikipedia.org/wiki/Most_common_words_in_English и https://en.wikipedia.org/wiki/Letter_frequency букв E действительно на треть больше чем второй по частоте T и тем более AOINSHR, хотя тут опять порог и R на треть чаще чем D.

В криптограмме много 8, ;, 4, и ), видимо они относятся к каким-то из этих букв. В качестве двойных, которые находятся командой egrep -o '(.)\1' встречаются 88, )) и ‡‡. Так как ee в английском бывает довольно часто, можно предположить, что 8 и правда e и поискать слово the (для экономии места часть echo -n ‘шифротекст’ пропущена):

egrep -o '..8' | sort | uniq -c | sort -n | tail -2
      1 ‡*8
      7 ;48

Действительно, ;48 похоже на the. Ну и далее постепенным добавлением букв можно разгадать всё. Особенно учитывая, что я видел уже ответ:

sed 'y/;48 ( ‡?3 † 6* 9 )5 10 2.: ¶—/the r oug d in m sa fl bpy vc/'
agoodglassinthebishopshostelinthedevilsseatfortyonedegreesandthirteenminutesnortheastandbynorthmainbranchseventhlimbeastsideshootfromthelefteyeofthedeathsheadabeelinefromthetreethroughtheshotfiftyfeetout

Теперь можно и на слова разбить:

a good glass in the bishop’s hostel in the devil’s seat forty-one degrees and thirteen minutes northeast and by north main branch seventh limb east side shoot from the left eye of the death’s head a beeline from the tree through the shot fifty feet out

А после этого можно сделать получить таблицу соответствия букв и знаков:

$ echo {a..z} | tr -d ' ' | sed 'y/the r oug d in m sa fl bpy vc/;48 ( ‡?3 † 6* 9 )5 10 2.: ¶—/'
52—†81346jk09*‡.q();?¶wx:z

Ну и записать одно под другим:

a b c d e f g h i j k l m n o p q r s t u v w x y z
5 2 — † 8 1 3 4 6     0 9 * ‡ .   ( ) ; ? ¶     :  

Видно, что буквы j, k, q, w, x, z не используются в тексте и потому кодировка для них не найдена.

Получается, что частоты опять не особо помогли, кроме знания, что буква e и слово the самые частые. Хотя вторые по частоте t и ; тоже совпали, частоты остальных букв из википедии и в тексте не совпадают, да и я их всё равно не использовал.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 3)
Ответ на: комментарий от Xenius

Ну вот, заспойлерил весь рассказ. Теперь Эдгару Аллану По придётся всё заново переписывать с более криптостойким шифром.

Smacker ★★★★★
()

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

Barracuda72 ★★
()
Ответ на: комментарий от Shadow

Оно же на русском апаче изначально лежало, со встроенной перекодировкой...

Ну, не скажи... Изначально, оно лежало, с кодировкой koi-8r, частично, а уж потом уже, с кодировкой windows-1251, в продолжении. Разница большая. Ну, грубо говоря, половина так - половина эдак И в базе, ну то-есть, в банальном теекстовом файле, охрененного размера - это явно отражено.

Я, кстати, немеряное количество времени потратил, чтобы перекодировать.

cadaber ★★
()
Последнее исправление: cadaber (всего исправлений: 1)

ЫВБЛЬДРТ

Всё в точности так и есть.

Nervous ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)