Автор книги: Кит Мартин
Жанр: Компьютеры: прочее, Компьютеры
Возрастные ограничения: +12
сообщить о неприемлемом содержимом
Текущая страница: 3 (всего у книги 17 страниц) [доступный отрывок для чтения: 6 страниц]
Рецепты безопасности
Криптографические ключи – это секретные данные, которые никогда не «выдаются», а только «используются». Как же это происходит?
Вернемся к механизмам безопасности материального мира. Здесь напрашивается аналогия с дверным замком, в которой фигурирует физический ключ. Предположим, что у вас на двери установлен традиционный замок без какой-либо электронной магии (если у вас цифровой замок, вы практически наверняка открываете свою дверь с помощью криптографии). Чтобы открыть дверь, ключ недостаточно показать. Вы должны вставить его в замочную скважину, повернуть и, если все прошло удачно, войти. Что именно при этом происходит, зависит от типа вашего замка.
Замочный механизм – штука очень точная, но почти невидимая. Например, когда вы поворачиваете ключ по часовой стрелке, он в определенном порядке нажимает внутри замка несколько цилиндров, которые вращают рычаг и, если все правильно настроено, открывают затвор, который физически запирает дверь. Здесь важен тот факт, что в цепочке событий участвует ключ. Если ключ подходит, замок открывается. Если же вставить неправильный ключ, он не сможет открыть затвор, и дверь останется запертой.
Самого наличия физического ключа недостаточно. Ключ должен быть интегрирован в процесс, который в конечном счете приводит к открытию замка. Этот процесс состоит из последовательности отдельных, но точных действий, которые в совокупности отпирают затвор. Выполнено должно быть каждое из этих действий, иначе войти не удастся. Если вставить ключ в замок не до конца, или повернуть его не в том направлении, или если хотя бы один из металлических цилиндров внутри замка не нажат, процесс не увенчается удачей. Больше того, эти действия должны быть выполнены в правильном порядке. Цилиндры не откроют затвор, если ключ не был повернут, а повернуть его можно только после того, как он вставлен в замок.
Обратите внимание: ключ от двери и процесс открытия играют отдельные роли в защите вашего дома. Процесс открытия во многом стандартизован, все замки одной модели открываются одинаково. А вот дверной ключ уникален, у всех замков одной модели должны быть разные ключи.
Поскольку криптографические ключи – это числа, любой процесс, в котором они используются, неизбежно состоит из последовательности математических операций, таких как сложение, умножение, перемешивание или перестановка. Такой вычислительный процесс я далее называю алгоритмом. В сущности, это просто рецепт, содержащий набор действий-ингредиентов и порядок их выполнения. Сделай то, сделай это, затем то, затем это и т. д. и т. п. Число, которое мы получаем в результате, называется выводом алгоритма.
Получение корректного вывода зависит от успешного выполнения каждого шага алгоритма в предусмотренном порядке.
Чтобы приготовить ужин по рецепту, вам понадобятся все ингредиенты. Алгоритм работает похожим образом: вы не получите вывод, пока не подадите что-то на вход. Конкретный ввод алгоритма зависит от того, для каких задач этот алгоритм был создан. У большинства криптографических алгоритмов ввод состоит из данных, которые нужно защитить, и криптографического ключа.
Основная идея заключается в том, что криптографический алгоритм создается общим для всех пользователей системы (например, он может быть реализован на каждом мобильном телефоне, подключенном к сети), но каждый пользователь обладает уникальным ключом. Мы вводим данные и свой ключ в криптографический алгоритм, который затем вычисляет на их основе вывод (и любые изменения данных или ключа приведут к получению другого вывода). Этот вывод представляет собой значение, которое необязательно скрывать (например, его можно передавать по беспроводной сети в ходе телефонного звонка). Он свидетельствует о том, что тот, кто его вычислил, сумел ввести в алгоритм ключ пользователя. При этом сам ключ не раскрывается. Это краткое описание того, как обычно работает шифрование. В следующих главах я покажу, как с помощью этого процесса можно обеспечивать целый спектр разных аспектов безопасности.
Числовые миксеры
Алгоритмы – это рецепты, а ключи – особые и чаще всего секретные ингредиенты. Поскольку вывод криптографического алгоритма путешествует по киберпространству без какой-либо защиты, мы должны позаботиться о том, чтобы тот, кто его прочитает, не смог получить из него ключ. Иными словами, мы с радостью дадим отведать результаты нашей готовки, но не хотим, чтобы кто-нибудь смог определить ингредиенты.
Если просто высыпать все на сковороду и обжарить, возникнет проблема: ингредиенты, несмотря на перемешивание, почти не изменяются. Нам нужно, чтобы криптографический алгоритм уничтожил все признаки исходного ввода. Возможно, более подходящей аналогией будет фруктовый коктейль, ингредиенты которого измельчаются настолько сильно, что от их первоначального вида почти ничего не остается (хотя иногда подсказкой может служить цвет коктейля). Мы хотим перемешать входные значения настолько эффективно, чтобы вывод не содержал никаких признаков того, какими они были. Хороший криптографический алгоритм должен выдавать однородный и бесцветный коктейль.
Цифровым эквивалентом «однородности и бесцветности» является случайность. Этому понятию на удивление сложно дать формальное определение, поэтому я не стану вникать в подробности[59]59
Замечательным введением является книга Деборы Дж. Беннетт Randomness (Harvard University Press, 1998).
[Закрыть]. Тем не менее ваше интуитивное понимание случайности наверняка в целом верно. Суть случайности в непредсказуемости. У случайно сгенерированных чисел нет очевидных закономерностей. Что важно, связь между случайностью и непредсказуемостью чисел должна сохраняться на протяжении большого количества повторений. Например, если вы подбросите монету пять раз и во всех случаях выпадет орел, результат не покажется вам случайным. Вы можете даже подумать, что монета нарочно разбалансирована. Но, если выпадет орел, решка, орел, орел, решка, в случайности результата не будет сомнений.
На самом же деле эти два исхода одинаково вероятны (если предположить, что монета сбалансирована); шансы на получение каждого из них составляют один к тридцати двум. Настоящей странностью было бы получать пять орлов (или те же орел, решку, орел, орел, решку) при каждых пяти подбрасываниях. На самом деле, если вы будете подбрасывать монету достаточно долго, и на протяжении эксперимента любая последовательность орел-решка будет выпадать заметно чаще, чем один раз из тридцати двух, это означает, что процесс не случайный. Если монета сбалансирована, то для каждой новой серии из пяти подбрасываний ни один исход не окажется вероятнее другого.
Понятие случайности тесно связано с криптографией в двух важных аспектах. Во-первых, секретные криптографические ключи должны генерироваться случайно. В противном случае некоторые из них будут генерироваться с большей вероятностью, чем другие, что поможет тем, кто пытается их подобрать. Именно случайность в сочетании с большой длиной настолько затрудняет угадывание и запоминание криптографических ключей. С другой стороны, пароли редко бывают случайными, поскольку они составлены из запоминающихся слов (например, BatMan1988 или даже B@tM@n1988) намного чаще, чем из бессмысленных сочетаний символов вроде 8zuHmcA4&$. Из-за краткости и недостатка случайности пароли намного уступают криптографическим ключам в плане обеспечения безопасности.
Второй, не менее важный аспект состоит в том, что хороший криптографический алгоритм должен вести себя, словно генератор случайных чисел[60]60
Действительно, одним из самых распространенных методов случайной генерации ключей для дальнейшего их использования в криптографических алгоритмах является использование (других) криптографических алгоритмов.
[Закрыть]. Если вы шифруете какие-то данные, результат должен выглядеть «бессмысленным» и не включать значимых закономерностей. Эту случайную, на первый взгляд, информацию можно послать через Интернет, и любой посторонний наблюдатель увидит лишь облако нолей и единиц.
Процесс смешивания, необходимый для защиты нашей деятельности в киберпространстве, еще более требователен. Представьте, что у шеф-повара есть рецепт бесцветного и однородного фруктового коктейля (это лишь аналогия, не судите строго). Он неплох на вкус и перемешан настолько хорошо, что от каждого отдельного ингредиента не осталось и следа. Теперь представьте, что шеф-повар перечисляет вам ингредиенты и тайно готовит новый коктейль, самую малость изменив рецепт (например, чуть больше моркови и меньше яблок). Вы снова пробуете. Тоже неплохо; в общем-то вкус почти такой же, как у предыдущего. А теперь шеф-повар предлагает вам назвать ингредиенты во втором коктейле.
Разумно предположить, что рецепты почти не различаются. Вы можете немного ошибаться, но такой ответ будет близок к истине. Знание состава первого коктейля действительно поможет при вычислении ингредиентов второго. Однако в криптографии такого рода связь очень нежелательна, и аналогия теряет свою наглядность.
Представьте, к примеру, что криптографический алгоритм используется для шифрования похожих балансов на двух банковских счетах. Мы не хотим, чтобы владелец одного счета смог догадаться о балансе другого по их внешнему сходству. Таким образом хороший криптографический алгоритм будет эквивалентом рецепта, настолько чувствительного к ингредиентам, что даже малейшее изменение (один кусочек моркови вместо одного кусочка яблока) приведет к радикальному изменению вкуса коктейля. Иными словами, небольшое изменение ввода криптографического алгоритма должно вызывать непредсказуемые изменения в его выводе. Следовательно, если одному и тому же криптографическому алгоритму подать на вход два почти одинаковых ключа или банковских баланса, должны получиться два никак не связанных между собой вывода. Тот, кто на них посмотрит, не получит ни малейшего представления о том, что два исходных ключа или баланса почти одинаковы.
На этом мы пока что завершим тему перемешивания. Сейчас вам достаточно понимать, что хорошие криптографические алгоритмы не позволяют установить связь между вводом и выводом без знания ключа[61]61
Типичное формальное требование к хорошему криптографическому алгоритму состоит в том, что между его выводом и результатами работы генератора случайных чисел не должно быть никакой видимой разницы.
[Закрыть].
Лучшие повара и секретные рецепты
Получить сносный ужин, поджарив накрошенные продукты на сковороде, довольно легко. Но составить рецепт, который удивит кулинарных критиков – совсем другое дело. В высокой кулинарии созданием рецептов занимаются лучшие повара.
В криптографии все обстоит похожим образом. Алгоритм, который, на первый взгляд, работает хорошо, но на самом деле небезопасен, создать легко, тогда как разработка хороших криптографических алгоритмов, которые выдерживают проверку временем, чрезвычайно сложна. К сожалению, некоторые создатели новых технологий предпочитают собирать криптографические алгоритмы на коленке. Уязвимости таких самоделок обычно обнаруживаются уже в первые месяцы после развертывания и порой оборачиваются катастрофой для разработок, которые их используют[62]62
Продукты для обеспечения безопасности, основанные на самопальных криптографических алгоритмах, относятся к категории, которую некоторые криптографы называют snake oil (бесполезное лекарство): Брюс Шнайер, «Snake Oil», Crypto-Gram, 15 февраля 1999 года, https://www.schneier.com/crypto-gram/archives/1999/0215.html#snakeoil.
[Закрыть]. Создание криптографических алгоритмов, пригодных для широкого применения в современных условиях, требует изрядного опыта и умений.
Но допустим, вы уже тщательно спроектировали хороший криптографический алгоритм. Какую информацию о нем стоит раскрывать? В конце концов, выдающийся шеф-повар вполне может хранить свои лучшие рецепты в тайне.
В пользу секретности криптографических алгоритмов можно привести как минимум один довод. Представьте, что хакер взломал компьютерную систему и обнаружил базу данных, содержимое которой зашифровано. Ему нужно подобрать секретный ключ. Если в системе использовался хороший криптографический алгоритм, получить ключ из одной только базы данных невозможно. Но знание алгоритма уже может послужить отправной точкой для попытки угадать ключ и расшифровать БД. Шанс на то, что ему повезет, невелик, но он существует. В то же время хакер, у которого нет информации об алгоритме, не будет даже знать, с чего начать расшифровку. Таким образом секретные алгоритмы дают некоторое преимущество по сравнению с теми, о которых известны подробности.
Несмотря на этот довод, большинство криптографических технологий, которые используются для защиты повседневной цифровой деятельности, опираются на общеизвестные алгоритмы. Вся информация о принципах их работы доступна в книгах и на веб-сайтах. Открыто публикуемым алгоритмам отдают предпочтение перед хранимыми в тайне, и тому есть две причины.
Первая состоит в том внимании, которое общеизвестные алгоритмы приковывают к себе. Чем больше людей обращаются к ним, тем крепче уверенность общества в их надежности. Представьте, что вы хотите купить очень безопасный замок для сарая, который возвели в своем саду для хранения золотых слитков (мечтать не вредно). Вы обращаетесь за советом к самому известному мастеру в своем городе. Он показывает вам линейку стандартных устройств – вариаций от традиционных, качественных замков, которые он продает всю свою жизнь. У него есть стенд с разрезанными моделями, чтобы подробно объяснить, как в этих замках работает каждый затвор и стержень. Но самым дорогим экземпляром в его магазине оказывается блестящий WunderLock, только-только появившийся в ассортименте. Вы спрашиваете, как он работает, и мастер признается, что он не имеет ни малейшего понятия, поскольку внутреннее устройство механизма WunderLock засекречено. Производитель его заверил, что замок надежный и стоит своей высокой цены, но сам мастер не ручается за его качество. Покупать или нет?
Предложение может показаться заманчивым. Если это и вправду отличный замок, он обеспечит вам дополнительную безопасность. Любой грабитель будет сбит с толку загадочным сверкающим предметом на двери сарая и, если повезет, любые попытки увести ваше золото закончатся неудачей. Таким образом покупка дорогого замка может окупиться, но в то же время вы рискуете. Вы вынуждены довериться производителю и его заявлениям о том, что замок действительно очень безопасный. У вас нет возможности опереться на опыт вашего местного (или, если уж на то пошло, любого другого) мастера. Большинство специалистов, которые всю жизнь исследуют устройство и безопасность замков, не смогут вам ничего подсказать о том, насколько в действительности хороша модель WunderLock.
Необходимо понимать, что эта проблема касается не только рекомендаций перед покупкой. Ваш новенький WunderLock может отлично служить год или два, пока однажды вы не обнаружите пустой сарай. Позже в новостях вы прочитаете, как находчивые воришки обнаружили, что настойчивое постукивание по WunderLock слесарным молотком отпирает его затвор. Об этом слабом месте стало бы известно раньше, если бы все слесари знали о внутреннем устройстве этого замка. Кто-то где-то как-то заметил бы этот дефект.
Не так давно (примерно полвека назад) криптографических алгоритмов было всего несколько, и в основном их использовали для военных задач и разведки. Мало кто в целом мире имел хоть какое-то представление об их устройстве и принципах работы. Алгоритмы разрабатывались под грифом строжайшей секретности, и, скорее всего, каждый специалист в этой области так или иначе имел отношение к разработке. Более того, эти специалисты пользовались полным доверием очень узкого круга избранных людей, прямо зависящих от этих алгоритмов.
И все это имело очень опосредованное отношение к криптографии в ее нынешнем виде. Можно выделить два важных отличия. Во-первых, в наши дни существует активное глобальное сообщество исследователей и разработчиков с опытом создания криптографических алгоритмов. Все они попросту не могут быть вовлечены в разработку секретного алгоритма. Любой алгоритм, внутреннее устройство которого засекречено, немедленно привлекает к себе повышенный интерес этого сообщества и может вызвать подозрения. Если его не решились выставить на всеобщее обозрение и позволить желающим его проанализировать, может быть, с ним что-то не так? Во-вторых, мы все используем устойчивые криптографические алгоритмы, и потому нам необходимо им доверять[63]63
Для сфер деятельности, которые не находятся в общественном доступе, это не совсем так. Правительственное агентство вполне может разработать секретный алгоритм для внутреннего использования при условии, что у этого агентства достаточно знаний и опыта в области криптографии.
[Закрыть]. Криптографический эквивалент WunderLock в основе системы безопасности здорово повышает градус риска. Зачем, если нам доступны проверенные алгоритмы, пользующиеся всеобщим уважением[64]64
За последние несколько десятилетий в публичной сфере произошел заметный сдвиг от секретных криптографических алгоритмов к открытым, чему поспособствовала разработка открытых криптографических стандартов.
[Закрыть]?
Вторая причина, конечно, более основательна. В наши дни держать алгоритмы в тайне почти невозможно. Пятьдесят лет назад криптографические алгоритмы поставлялись в больших металлических ящиках с жестким ограничением доступа. Сегодня же криптография применяется в потребительских технологиях, и алгоритмы, реализованные в программном обеспечении, почти невозможно скрыть. Даже если они созданы чисто аппаратными, держать в тайне принципы их работы очень сложно, учитывая, сколько людей имеет доступ к начиненным ими устройствам. Специалисты могут проанализировать технологию и ее поведение, чтобы разобраться в работе алгоритма – этот процесс называется обратным проектированием (англ. reverse engineering[65]65
Существует достаточно случаев раскрытия принципа действия секретных алгоритмов, применяемых в публичных технологиях. Одним из таких примеров является алгоритм шифрования A5/1, который используется в стандарте GSM (глобальной системе мобильной связи).
[Закрыть]).
Любой, кто занимается внедрением секретных криптографических алгоритмов, должен исходить из того, что однажды (возможно, раньше, чем хотелось бы) они станут публичными. Об этом говорит не только свежий опыт. В конце девятнадцатого века, задолго до применения криптографии для компьютерных сетей, уважаемый датский криптограф Огюст Керкгоффс сформулировал шесть принципов проектирования криптографических алгоритмов[66]66
Аугуст Керхгофф, «La cryptographie militaire», Journal des sciences militaires 9 за январь и февраль 1883 года: 5–83 и 161–91. Английский перевод изложенных в этих статьях принципов можно найти на сайте Фабьена Птиколаса, Information Hiding Homepage: «Kerckhoffs’ Principles from ‘La cryptographie militaire’», http://petitcolas.net/kerckhoffs (по состоянию на 10 июня 2019 года).
[Закрыть]. В те времена алгоритмы (или системы, как называл их Керкгоффс) применяли вручную к письменным текстам. Керкгоффс был мудрым человеком. Вот один из этих принципов: система не должна требовать секретности, и ее попадание в руки врага не должно вызывать проблем.
Повесть о двух алгоритмах
Я убежден, что в сфере криптографии хранение рецептов в тайне не только вряд ли полезно, но и далеко не всегда возможно. В первую очередь это касается популярных рецептов, рассчитанных на широкое использование.
Давайте обсудим.
Рассмотрим два совершенно разных, но одинаково популярных во всем мире секретных рецепта. Производители Coca-Cola утверждают, что рецепт их напитка является одной из самых надежно охраняемых тайн в мире, и для его защиты предусмотрена тщательно продуманная процедура. Наличие секретной формулы для Coca-Cola чем-то похоже на попытку защитить мобильный телефон за счет использования секретного криптографического алгоритма. Сложно найти человека, который бы ни разу не пробовал Coca-Cola и не пользовался сотовой связью. Хранение в тайне алгоритмов, на которых основано то и другое, – крайне непростая задача.
Когда-то мобильные телефоны и правда были защищены секретными алгоритмами: архитекторы первых сотовых сетей считали, что это предоставляло дополнительную безопасность. Однако со временем эти алгоритмы были воссозданы и оказались не настолько безопасными, как было принято считать. Сегодня сотовые операторы согласны с тем, что преимущества глобальной известности их криптографических алгоритмов существенно перевешивают любую сомнительную пользу от их засекречивания[67]67
Алгоритмы шифрования, которые использовались для защиты средств связи, были частью стандарта GSM 1990 года и хранились в тайне, но в более новых спецификациях, таких как стандарт LTE (Long-Term Evolution – долговременное развитие), вышедшего в 2008 году, они описаны публично.
[Закрыть]. В сфере мобильной связи секретные рецепты вышли из моды.
Так как же компании Coca-Cola удается успешно хранить свой рецепт в тайне? Дело в том, что этот рецепт, строго говоря, не совсем секретный. Процесс (алгоритм) создания газированных напитков широко известен, равно как большинство ингредиентов Coca-Cola специалисты уже опознали или угадали. И в самом деле, несколько компаний сейчас производят напитки, настолько похожие по вкусу на Coca-Cola, что большинство людей не может их отличить. Тайной окутано только происхождение одного из ингредиентов в этой формуле, известного как Merchandise 7X[68]68
Похоже, что ингредиент Merchandise 7X по-прежнему остается в тайне, несмотря на заявления о противоположном: Уильям Паундстоун, Big Secrets (William Morrow, 1985).
[Закрыть]. В этом отношении секретность 7X подобна секретности криптографического ключа. Алгоритм общеизвестен, но, заменяя 7X другими ароматизаторами, можно изобрести целый спектр газированных напитков. Как и в случае с мобильными телефонами, рецепт Coca-Cola уже никто не скрывает, а уникальность напитка зависит от сохранности ключевого ингредиента.
Алгоритмы важны, но ключи принципиальны
Понимание того, что алгоритмам и ключам в криптографии отводятся разные роли – одна из действительно важных вещей.
Алгоритмы – это машинное отделение криптографии, которое определяет и проводит необходимые вычисления. С точки зрения пользователя, они работают в фоне, и на них можно не обращать внимания. Даже опытные специалисты по кибербезопасности редко работают с алгоритмами напрямую; им обычно достаточно знать, каким алгоритмом защищена система, за которую они отвечают.
Ключи – это секретные данные, на которые опираются механизмы безопасности, предоставляемые криптографией. В этом смысле они входят в состав интерфейса между технологиями и пользователями. В отличие от алгоритмов, общих для всех и вся, ключи уникальны и принадлежат отдельным пользователям или устройствам, а значит, требуют особого внимания. Криптографические алгоритмы, которые мы используем, известны всем. Но если кто-то завладеет нашими личными криптографическими ключами, все наши защитные меры в киберпространстве обнулятся.
Если говорить об использовании криптографии для обеспечения безопасности в киберпространстве, алгоритмы важны, но ключевую роль играют ключи.
Правообладателям!
Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.Читателям!
Оплатили, но не знаете что делать дальше?