Главная » Delphi » Приемы простейшего шифрования и стеганографии

0

В заголовок главы вынесено слово "любительская" сразу по двум причинам. Во-первых, потому что профессиональная криптография — специальная дисциплина с использованием самых абстрактных разделов аысшей математики и одновременно искусство, которое требует серьезной практической подготовки. Все эти детские забавы с решеткой Кардано1 в настоящее время преодолеваются одним щелчком мыши. Обычно, когда я слышу призывы "доверять только специалистам", я отношусь к этому с изрядной долей скепсиса — в подавляющем большинстве жизненных ситуаций "специалиста" вполне заменяет здравый смысл, небольшая эрудиция и руки, растущие из нужного места. Но серьезная криптография — одно из немногих исключений из этог о правила. Если вам действительно нужно что-то засекретить— не жалейте денег и приглашайте лучших специалистов, не пользуйтесь услугами малоизвестных "контор" и патентованными "ширпотребовскими" решениями. Пример того, какие "ляпы" могут таиться в широко разрекламированных общедоступных криптографических технологиях, приведен далее.

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

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

Ручные шифры, изобретенные еще в средние века, несколько, правда, усовершенствованные, применяли вплоть до 20-х годов XX века. Сейчас эго все происходит не так. Ключевым изобретением, положившим начало современной цифровой криптографии, стали "одноразовые блокноты" американского инженера Гилберта Вернама, сотрудника секции безопасности телеграфной связи корпорации AT&T. Вернам ввел а обиход основную операцию цифрового шифрования— поразрядное "исключающее ИЛИ"— и обнаружил, что при длине ключа, большей длины текста, и истинно случайной последовательности символов, составляющих ключ, шифр становится принципиально невскрываемым. При одном, правда, условии — если каждый ключ применять только один раз, потому ключевые последовательности Вернама и былн названы "одноразовыми блокнотами". Этот факт объясняется просто: при шифровании ключ складывается с текстом через операцию XOR (см. далее). Если взять два таких текста, преобразованных одинаковым ключом, и сложить их друг с другом той же операцией, го ключ просто-напросто вычтется, и останется сумма битов исходных текстов. Восстановить исходные тексты из такой суммы тоже может быть непросто, но все же принципиально проще, чем из зашифрованного текста. Забавно, что в MS Office средства шифрования допускают как раз именно эту ошибку: если вы что-то зашифруете, сохраните на диске, потом внесете исправления и сохраните в другом месте, то формально разные файлы окажутся зашифрованными одним и тем же ключом.

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

Так что первая причина, по которой я назвал криптографию, которой мы займемся, любительской— то, что никаких таких "стойких алгоритмов" мы применять не будем и самостоятельно что-то тут изобретать нет никакого смысла, т. к. соответствующие средства и без того имеются и вполне доступны любому. В том числе существуют и специальные CryptoAPI для разработки приложений, но это специальная тема, к которой собственно программирование и тем более Delphi отношение имеют лишь косвенное. И на примере MS Word (см. врезку) хорошо видно, почему получается однозначно лучше, когда все эти методы используют специалисты.

Ну, а вторая причина наличия слова "любительское" — то, что любые средства шифрования всегда — за исключением профессиональных надобностей—• шутка сама по себе очень на любителя. Прежде чем применять их, задайте себе вопрос — зачем? И когда ответите на него, то примите во внимание еще и следующее соображение. Любое, даже самое стойкое шифрование, не сможет устоять перед двумя вещами: горячим утюгом и безалаберностью пользователя. Это научно— я не смеюсь — зафиксированный факт, в "официальной" формулировке он звучит так: любые средства шифрования хороши, если они применяются в комплексе прочих мер защиты. Если вы приклеили бумажку с паролем на монитор, или используете один и тот же пароль для доступа к порносайту и к саоему счету в системе WebMoney, то никакое шифрование вам не поможет. Кроме того, любой детективной конторе сейчас доступны средства электронной разведки — чтобы перехватить нажатия клавиш, программный "клавиатурный шпион", типа, как мы сооружали в главе б, не обязателен, их вполне можно записать дистанционно2. Точно так же можно записать и излучение кабеля, соединяющего компьютер и монитор. Для защиты от этого нужно ставить компьютер в экранированное помещение, что само по себе обойдется много дороже любой криптографии. Отметим также, что одной из важнейших задач в этом комплексе является обеспечение обмена ключами так, чтобы их не перехватили по дороге. Ну, и т. д.

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

Playboy. Такоиа психология человека, как стадного животного. Мораль: скрывать следует, прежде всего, сам факт наличия секретного текста. И это одна из самых эффективных мер в том комплексе защиты, о котором говорилось ранее.

Но прежде, чем мы перейдем к необходимому минимуму общих принципов, которые мы будем использовать для шифрования текстов, несколько слов об одной широко обсуждаемой теме, имеющей прямое касательство к ирод- мету нашего разговора, а именно — к защите программ. Автор этих строк является принципиальным противником каких-либо программных защит, но подробное обсуждение этого вопроса мы оставим за рамками книги. Мнения своего я никому не навязываю и хочу лишь заметить по этому поволу следующее. Если вы уж собрались защищать свою программу, делайте это, по крайней мере, квалифицированно. Нет ничего глупее защиты, которая взламывается, как говорится, "с полгпшка" любым юным читателем журнала "Хакер", такая защита на практике никаких последствий, кроме приступа раздражения у пользователей, иметь не будет. Берите пример с компании ABBYY, которая снабдила свои продукты такой защитой, что вряд ли ны сможете купить у пиратов нормально взломанный Fine Reader за преслои}- тые три доллара. Защита программ — это вопрос хитрости п умело расстан- ленных ловушек. Самый хитрый криптографический код ничего не даст, если оп представляет собой единственное препятствие— "крякер" почтет за честь его "распечатать" просто из принципа. Полсотни относительно простых, но разнообразных ловушек, расставленных по всей программе. буд>т куда эффективнее. С другой стороны, если кому-то это очень понадобится, любой код все равно будет взломан (тот же Fine Reader все же на пиратском рынке имеется, правда, не за три доллара). И об этом никогда забывать не следует. Для иллюстрации приведу историю из жизни.

Однажды у меня в квартире заклинило замок в металлической двери. Псе мы оказались снаружи, так что даже сломать его окончательно было невозможно, не ломая дверь. Для любителя без инструментов это нереальная ад- дача— даже пожарные ломают хорошую металлическую дверь не в пять минут (сам был свидетелем такого случая). Пришлось вызывать службу спасения. Удостоверившись в наличии у меня паспорта с пропиской, они споро принялись за дело и не более чем через три с половиной минуты замок был открыт, при этом на двери не осталось ни единой царапины. Единственными инструментами, которые применили спасатели, были три маленьких отвертки: один человек орудовал двумя, а второй помогал ему третьей, держа в другой руке фонарик. Когда после их ухода мне удалось поднять с пола п пристроить на место отвалившуюся нижнюю челюсть, я задал риторический вопрос в пространство: если замок (причем заклинивший. не забудьте) можно открыть за три минуты отвертками из детского конструктора, какой смысл ставить металлические двери? Ответ простои: от спланированного профессионалами ограбления квартиры никакие замки с металлическими дверями не спасут. Возможно, туг может помочь только бронированная комната-сейф, и то не во всех случаях. Зато от мелких жуликов и простых хулиганов — спасут обязательно, те кто не умеет работать отвертками на уровне упомянутых ранее спасателей поковыряются — к пойдут в другое место. Тут действует простой закон, когда-то сформулированный относительно автомобилей: "если вы не хотите, чтобы вашу машину взломали, поставьте ее в лужу". То есть любая защита должна основываться не на математике, программировании пли точной механике, а на психологии. Когда вы тщательно обдумаете в этой связи цели, которые вы преследуете установкой защиты на свои программы, саму целесообразность этого мероприятия, и после этого придете к выводу, что все же это требуется, для общего образования советую прочесть статью [37].

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии