Google таблицы

Google таблицы

Google таблицы

Google таблицы

Google таблицы

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

В криптографии есть несколько эмпирических законов, самый главный из которых формулируется очень просто: никогда не изобретайте собственный шифр! Шифры изобретают либо новички-дилетанты, либо специалисты по криптографии. В первом случае шифр легко ломается специалистом или даже просто более-менее соображающим дилетантом, во втором… бывает по-разному, особенно с учетом бурного роста производительности компьютеров. Но некоторые шифры выдерживают испытание временем. Об одном таком шифре и пойдет речь.

Для применения большинства современных надежных шифров требуется наличие более-менее приличной ЭВМ. Но, к счастью, есть шифр, который доступен в любые века и времена и не требует серьезных вычислительных мощностей, оставаясь принципиально невзламываемым. Более того, это единственный на сегодняшний день шифр, невзламываемость которого доказывается математически (это доказал Клод Шеннон в 1945 году). Знакомьтесь: шифр Вернама, или, как его еще называют в бумажном варианте, одноразовый шифроблокнот.


Но, прежде, чем речь пойдет о самом шифре, следует вспомнить историю криптографии. На эту тему очень рекомендую книгу «Взломщики кодов» Дэвида Кана, в ней хорошо показано как на протяжении многих столетий шифр и дешифровка всегда шли ноздря к ноздре, причем пресловутые «черные кабинеты» чаще всего опережали примитивную криптографию, а последствия зачастую имели серьезнейшие масштабы: достаточно вспомнить печально известную телеграмму Циммермана. И, несмотря на то, что тот же шифр Виженера в реальной истории взломали достаточно поздно, кто знает — не попадет ли ваша шифровка в руки какого-нибудь местного Блеза Паскаля и не торкнет ли его от простой идеи переписать сообщение колонкой шириной в предполагаемую длину ключа и анализировать колонки? А если от безопасности ваших сообщений зависит ваша жизнь, не лучше ли использовать то, что не взломает ни гений из прошлого, ни АНБ из настоящего, ни пришельцы из будущего? Ну, при дОлжном соблюдении технологии шифрования? А?

Кстати, о соблюдении технологии. В ней кроется и ахиллесова пята одноразового шифроблокнота. Нарушение правил ведет к тому, что абсолютно надежный шифр превращается в достаточно легко взламываемый. Пример тому — советская переписка, небольшой процент которой американцам удалось вскрыть благодаря тому, что в результате раздолбайства НКВД в сороковые годы часть случайных последовательностей использовалась неоднократно (см. проект VENONA). Как следствие, вскрытие шпионской сети Розенбергов, укравших для СССР секрет атомной бомбы.

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

Вначале надо превратить ваш текст в цифры. Для этого используется сжимающая таблица (straddling checkerboard). В каком-то смысле это аналог алгоритмов, лежащих в основе zip, rar и т.п., только таблица сжатия у нас фиксированная. Нет, вы конечно можете и просто сопоставить буквам цифры по принципу А=1, Б=2 и т.д, но из-за избыточности языка вы будете вынуждены потом шифровать где-то на треть больше. Просидев несколько часов с карандашом за тупой арифметикой, вы быстро оцените достоинства сжимающей таблицы…

Для создания сжимающей таблицы запоминаем: А И ТЕСНО. Тут задействовано семь самых часто встречающихся букв в русском языке. Для английского берем скажем AT ONE SIR (в английском языке меньше букв и можно обойтись только двумя доп. строками) и т.п. Составляем таблицу, в первой строке которой идут часто встречающиеся символы, а в остальных остатки алфавита. Обратите внимание, что в первой строке не задействованы цифры 8, 9 и 0, и они же обозначают, что буква (реже встречающаяся) кодируется не одной цифрой, а двумя. Итак, для кодирования буквы ищем ее, если она находится в первой строке, то мы выбираем номер ее колонки (например Т=3), если она в остальных колонках, то мы вначале выбираем номер ее строки, а потом номер колонки, например Б=81, а ?=07:

1 2 3 4 5 6 7 8 9 0 А И Т Е С Н О 8 Б В Г Д Ж З К Л М П 9 Р У Ф Х Ц Ч Ш Щ Ъ Ы 0 Ь Э Ю Я . , ?

Можно добавить еще-что-то полезное в оставшиеся три ячейки в последней строке (в реальности кроме букв часто использовались специальные коды для начала передачи цифр, начала передачи специальных кодов из кодовых таблиц и т.п.). Итак, нам надо зашифровать короткое сообщение:

ПОБЕГ ЗАВТРА

Первая буква сообщения находится во второй строке таблицы, так что берем номер строки, а потом номер колонки: 80. Далее вторая буква имеет высокую частоту и находится в первой строке, поэтому берем только ее колонку: 7. Получаем последовательность цифр. Добиваем нулями последнюю группу до пяти цифр:

80781 48386 18239 11000

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

Но ПОКА ЧТО это еще не шифр! Закодированный вышеприведенным способом текст уже заметно сложнее взять в лоб простым частотным анализом, но все равно на шифр оно никак не тянет. Теперь выдираем страницу из одноразового шифроблокнота, приведенного на иллюстрации и начинаем с ней работать. Внимание! Никогда нельзя в шифровке указывать номер страницы шифроблокнота, чтобы не дать возможность проанализировать последовательность шифровок или угадать время ее отправки (что может оказаться не менее критичным, чем ее содержимое)! Вместо этого для идентификации страницы используется первая группа, ее не следует использовать для шифрования, а записать как есть. Под цифрами шифровки записываем цифры одноразового кода начиная со второй группы, после чего складываем цифры в каждой колонке, всегда отбрасывая возникающий перенос:

80781 48386 18239 11000 + 14358 89753 24133 40169 26799 = 14358 69434 62419 58398 37799

Вот это уже и есть шифровка:

14358 69434 62419 58398 37799

Теперь осталось сжечь страницу, с помощью которой мы шифровали, и отправить нашу шифровку по назначению. Получатель достанет свою копию шифроблокнота, найдет нужную страницу по первой группе и произведет вначале обратную операцию, вычитая из каждой цифры шифровки цифру с шифроблокнота, всегда отбрасывая минус. Затем возьмет сжимающую таблицу и с помощью нее уже окончательно раскодирует текст. Точно так же — берем 8, ага, это вторая строка, 0 колонка, значит первая буква П., и так далее. А потом тоже сожжет свою копию и больше никто и никогда не сможет расшифровать перехваченное сообщение. А если шифроблокнот будет вовремя уничтожен, то и терморектальный криптоанализ не поможет в расшифровке: ни один человек не в состоянии вспомнить хотя бы полстраницы шифроблокнота со случайными числами.

Ну, а теперь самое главное (и самое трудоемкое): как сгенерировать достаточное количество случайных чисел. Ведь одноразовый шифроблокнот предполагает уничтожение каждой страницы после расшифровки, и для передачи определенного объема текста надо такое же количество случайных данных! Это и является вторым недостатком одноразового шифроблокнота: создание шифроблокнотов занятие длительное и трудоемкое, причем надо суметь создать реально случайную последовательность. Первое, что приходит в голову, это взять кости и накидать набор чисел, вот только на обычных игральных костях всего лишь цифры от 1 до шести, а кидать пару костей и складывать цифры нельзя, т.к. распределение суммы уже подчиняется вполне понятной закономерности и у вас выйдет не совсем случайная последовательность цифр. Можно конечно попробовать сделать кость на d10, как на иллюстрации справа, но попробуйте ее выточить напильником с достаточной точностью!

Если же использовать обычные игральные кости, то надо составить таблицу и уже использовать ее для генерации случайных чисел, кидая кость для каждого числа два раза, игнорируя последовательности, начинающиеся с шестерки:

11 = 0 21 = 6 31 = 2 41 = 8 51 = 4 12 = 1 22 = 7 32 = 3 42 = 9 52 = 5 13 = 2 23 = 8 33 = 4 43 = 0 53 = 6 14 = 3 24 = 9 34 = 5 44 = 1 54 = 7 15 = 4 25 = 0 35 = 6 45 = 2 55 = 8 16 = 5 26 = 1 36 = 7 46 = 3 56 = 9

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

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

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

Ноябрь 17th, 2015 | Автор: Grue | Метки: криптография, шифр, шифроблокнот | Категории: Математика, Наука



Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку

Как в экселе сделать перенос на другую строку