криптография — Попаданцев.нет http://popadancev.net.s3-website-us-east-1.amazonaws.com база данных в помощь начинающему попаданцу Mon, 29 Aug 2016 16:38:28 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.0.3 Rasterschlüssel 44 http://popadancev.net.s3-website-us-east-1.amazonaws.com/rasterschlussel-44/ http://popadancev.net.s3-website-us-east-1.amazonaws.com/rasterschlussel-44/#comments Fri, 19 Aug 2016 22:46:37 +0000 http://popadancev.net.s3-website-us-east-1.amazonaws.com/?p=6208 Одноразовый шифроблокнот, будучи идеальным шифром, который никто и никогда не сможет взломать — это очень хорошо, но весьма трудоемко и в докомпьютерную эпоху крайне избыточно. Однако чем его заменить?

Напомню, что если вам в голову пришла идея придумать свой шифр и вы не являетесь профессиональным криптографом, то это плохая идея. Вашу гениальную шифровку с [...]]]> Одноразовый шифроблокнот, будучи идеальным шифром, который никто и никогда не сможет взломать — это очень хорошо, но весьма трудоемко и в докомпьютерную эпоху крайне избыточно. Однако чем его заменить?

Напомню, что если вам в голову пришла идея придумать свой шифр и вы не являетесь профессиональным криптографом, то это плохая идея. Вашу гениальную шифровку с большой вероятностью вскроет какой-нибудь клерк из «черных кабинетов» или средневековый математик (напомню, частотный анализ текста в реальной истории — это 9 век). Вдобавок большинство известных и популярных шифров из категории «карандаш и бумага» не менее трудоемки, чем тот же одноразовый шифроблокнот…

Однако шифр, удовлетворяющий одновременно требованиям и к стойкости в докомпьютерную эпоху и к простоте использования существует. Во время второй мировой войны он стал большой проблемой для союзников. Шифр, который вскрывался с большим трудом и только при наличии не менее 40 символов уже известного текста в шифровке. Шифр, требовавший всего лишь заполнить клетки специальной таблицы по горизонтали и прочитать по вертикали, без каких либо расчетов. Знакомьтесь: Rasterschlüssel 44.

Да, кстати, на всякий случай. Если вы сейчас захотите написать «да это ж говно, это ж поворотная решетка!», можете не трудиться. Данный шифр из совсем другой весовой категории.

Во-первых, имеется решетка из белых и черных квадратов, 24 строки на 25 колонок. В каждой строке в случайном порядке расположены 10 белых квадратов и 15 черных. Колонки и строки решетки обозначаются случайными и уникальными для каждой строки и колонки двухсимвольными обозначениями: aa, ab, ac, ad, ae, ba, bb и т.д., кроме того, колонки пронумерованы в случайном порядке:

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

Цифры и пунктуация записываются словами. Сообщение должно быть не короче 60 символов и не длиннее 200. Если оно длиннее, то его надо разбить на две шифровки. Если сообщение короче 60 символов, то до него и после надо добавить случайных слов. Чтобы отличить случайные слова от шифровки, надо повторить последние две буквы в «заголовке» и первые две в «хвосте». Например: «поведениеторговлляяотступлениеввосемнадцатьнольнольллиимонад».

Берем тонкий лист бумаги и накладываем на решетку. Черные квадраты просвечивают сквозь бумагу, так, что видно, где надо писать. Вначале надо выбрать стартовую колонку и строку, ее надо выбрать случайным образом, после чего зачеркнуть на решетке (не на верхнем листе бумаги) их обозначения одной чертой наискосок. Если она зачеркнута один раз, то можно второй раз по другой диагонали, если колонка или строка зачеркнута уже крестиком, то ее использовать в качестве начальной НЕЛЬЗЯ. Далее надо
случайно выбрать колонку, с которой начнется шифровка, ее надо зачеркнуть крестиком, использовать ее потом в качестве начальной тоже НЕЛЬЗЯ.

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

Если мы начинаем писать открытый текст начиная с колонки bb и строки ae, то закодировать их данной таблицей можно например так: tuzd (два разных символа выбрали из колонки «b», один из колонки «a», один из колонки «e». Шифровать по вертикали мы начнем с колонки ee, это можно закодировать например как ny. Время 17:21, используется таблица номер 64: «1721-64-tuzd-ny». Это начало шифровки.

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

Затем списывается шифровка по вертикали, следуя нумерации колонок (если мы начали списывать шифр с колонки 23, то следующая колонка шифра 24, потом 25, потом 1,2 и т.д.). Используя решетку на иллюстрации списываем по вертикали начиная с 19 колонки dian, далее с 20й колонки m, с 21й колонки rq, с 22 tvfn и т.п.:

1721-64-tuzd-ny
dianm rqtvf nnris …

Расшифровка происходит обратным образном: вначале определяется начальная клетка. Затем отсчитывается по белым квадратам количество символов в шифровке и отчеркивается все остальное неиспользованное сообщением пространство снизу и сверху, записывается по вертикали шифровка в соответствии с нумерацией колонок, а затем горизонтально читается сообщение. Все.

Любопытно, что данный шифр нельзя взять в лоб даже современными вычислительными мощностями. Он конечно не годится в качестве серьезного шифра на сегодняшний день, т.к. у него имеются определенные слабости, которые в принципе можно использовать — при наличии компьютера. Ну или при наличии 40 символов уже известного текста. Или если немцы сделают типичную ошибку, когда текст не удастся расшифровать, а передающая сторона тот же самый текст зашифрует еще раз той же решеткой. А решетку полагалось менять каждый день, ага. Как следствие, союзники расшифровывали только радиообмен полиции Берлина, чтобы понимать происходящее в самом конце войны.

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

История же появления этого шифра у немцев не менее интересна и поучительна — шифр изобрел британский криптограф Джон Тилтман (впоследствии взломавший шифр немецкой машины Lorenz SZ, что позволило читать общение Гитлера с его генералами). Шифр был внедрен под названием «Cysquare» и британцы его попытались использовать. Все было бы замечательно, но исполнение подкачало. Вместо тонкой, полупрозрачной бумаги предлагалось писать карандашом сразу на решетке, а потом стирать ластиком и так много, много раз. В полевых условиях в Африке белые клетки быстро становились черными и шифровальщики наотрез отказались пользоваться этим шифром. А потом Роммель захватил вместе с трофеями и шифровки с инструкциями, в результате чего у немцев появился серьезный шифр. Который они так и не оценили по большому счету, да и внедрили к самому концу обеда.

]]> http://popadancev.net.s3-website-us-east-1.amazonaws.com/rasterschlussel-44/feed/ 41
Одноразовый шифроблокнот http://popadancev.net.s3-website-us-east-1.amazonaws.com/odnorazovyj-shifrobloknot/ http://popadancev.net.s3-website-us-east-1.amazonaws.com/odnorazovyj-shifrobloknot/#comments Tue, 17 Nov 2015 13:30:48 +0000 http://popadancev.net.s3-website-us-east-1.amazonaws.com/?p=5606 Несколько лет назад одного британского айтишника надолго посадили за сотрудничество с террористами, с которыми он переписывался посредством самопального шифра, запрограммированного в Экселе. Несмотря на то, что ему вполне была доступна современная криптография, некомпетентность его подвела и легко вскрытая правоохранительными органами переписка была использована против него же в суде. Oops…

В криптографии есть несколько эмпирических [...]]]> Несколько лет назад одного британского айтишника надолго посадили за сотрудничество с террористами, с которыми он переписывался посредством самопального шифра, запрограммированного в Экселе. Несмотря на то, что ему вполне была доступна современная криптография, некомпетентность его подвела и легко вскрытая правоохранительными органами переписка была использована против него же в суде. 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. При этом, достав шар и записав его номер, его необходимо положить обратно и перемешать всю кучу, иначе опять же возникнут проблемы с распределением.

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

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

]]> http://popadancev.net.s3-website-us-east-1.amazonaws.com/odnorazovyj-shifrobloknot/feed/ 107