Истечение срока действия ключа и отказ от него
Когда повстанцы приближаются ко второй «Звезде смерти» на украденном шаттле, их просят предъявить код допуска. Адмирал Пиетт говорит Дарту Вейдеру: «Это старый код, сэр, но он действует». Этого достаточно, чтобы гранд-мофф рвал на себе волосы. Ключи уязвимы для кражи, поэтому нужен механизм управления сроком их действия. После того как срок действия истечет, вы не захотите им доверять, но должны. Например, если вы меняете ключи ежегодно, то для проверки цифровой подписи, созданной много лет назад, необходимо использовать ключ с истекшим сроком действия. Для расшифровки старых магнитных лент резервных копий используются ключи с истекшим сроком действия. По своей природе эти старые ключи не могут быть отброшены, но их также не следует использовать для нового материала. Истечение срока действия аналогично отказу: мы хотели бы развода по согласию сторон, но, возможно, нам придется подчиниться решению суда.
Трудности с получением, распространением наборов ключей и управлением ими привели к тому, что советские шпионы стали повторно использовать одноразовые блокноты для ключей. Одноразовый блокнот использует ключи, которые имеют такую же длину, как и сообщения, и при правильном использовании являются «информационно-теоретически безопасными». Отправитель и получатель, каждый, выполняют операцию XOR (исключающее «или»), используя сообщение и ключ как аргументы. При повторном использовании ключа результат XOR двух зашифрованных сообщений является XOR открытого текста. (Ключ фактически XOR-ится с самим собой, в результате чего его эффект аннулируется, и то, что остается, – это открытый текст после XOR.) Соединенные Штаты воспользовались этой неудачей в проекте «Венона». Использование украденных или неправильно используемых ключей не ограничивается спецслужбами; злоумышленники, похищающие данные, регулярно просматривают конфигурационные файлы, папки с кодом и все, до чего они могут добраться, чтобы получить копии ключей для данных, которые вы пытаетесь защитить. Когда ключи используются для шифрования, то результатом является нарушение конфиденциальности. При использовании цифровых подписей результатом может быть отказ или атаки на целостность.
Блокчейны
Одним из наиболее примечательных аспектов блокчейнов является их полное отвержение механизмов отказа. Ключевым технологическим новшеством биткоина стал способ создания и поддержания распределенного реестра консенсуса. Данные, которые находятся в блокчейне, находятся там до тех пор, пока поддерживается блокчейн. У биткоина нет возможности отказаться от транзакции, что является либо ошибкой, либо функцией (bug or feature), в зависимости от того, кого вы спросите.
Вы увидели множество способов, с помощью которых может произойти отказ, и теперь я хотел бы помочь вам организовать их в более полезную структуру. Мы рассмотрим отрицание и дезориентацию, разрушение, социальные сети и конкретный случай, который специалисты по реагированию на инциденты называют «потерей обзора».
Отрицание и дезориентация
Первым шагом в отказе является некое утверждение о том, что событие Х не произошло или произошло что-то, чего не должно было произойти. Делаются заявления, и кто-то в конце концов выносит какое-то суждение. Конкретные шаги сильно зависят от сценария, но обычно они начинаются с вопроса «Где электронное письмо/посылка/деньги, которые я ожидал?». (Они редко продолжаются сообщением: «Скажи Джаббе, что его деньги у меня!»)
Разрушение
Уничтожение журналов или доказательств может быть важной частью отказа и обычно, хотя и не всегда, осуществляется злоумышленником, а не деловым партнером или клиентом. Это может быть физическое уничтожение путем разрушения носителя, логическое уничтожение путем удаления или перезаписи файлов или уничтожение понимаемости путем удаления криптографического ключа.
Социальные сети
Все чаще люди используют возможности социальных сетей для того, чтобы выразить свое неприятие или повысить уровень обслуживания клиентов. Это кажется несправедливым по отношению к людям, разрабатывающим механизмы обслуживания клиентов, которые разумно оптимизируют расходы, заставляя клиентов ждать на линии в течение получаса, чтобы поговорить с человеком, не имеющим полномочий. Уменьшая сарказм, можно сказать, что социальные сети используются для восстановления баланса между властью и восприятием власти, и, когда вы думаете о бизнес-процессах для управления отказом, бывает полезно спросить: «Что мы будем делать, если знаменитость класса B со 100 000 подписчиков пожалуется на это?»
Потеря обзора
Один из подходов к отрицанию заключается в том, чтобы вызвать потерю обзора: неспособность увидеть состояние системы или предшествующие состояния. Это делается злоумышленниками по отношению к тем, кто должен реагировать на инциденты. Злоумышленники могут вмешиваться в работу инструментов мониторинга или анализа, кроме того, они могут уничтожать журналы, вмешиваться в работу журналов или системы анализа журналов. Уничтожение доказательств – это более узкое понятие, чем понятие «потеря обзора». Доказательства могут присутствовать во многих различных системах с временны´ми метками, которые не имеют смысла. Это можно рассматривать как «неспособность сформировать обзор».
Потеря обзора – это термин, обычно используемый группами реагирования на инциденты для описания ситуации, в которой у них возникают проблемы с выяснением того, что происходит. Потеря обзора происходит на техническом уровне и, что более важно, на эксплуатационном уровне. Когда на «Аполлоне-13» взорвался кислородный баллон, индикатора «Кислородный баллон взорвался» не было. Прошло почти 15 минут, прежде чем кто-то выглянул наружу и заметил облако газа, и еще больше времени, прежде чем Центр управления полетами принял доклад астронавтов.
Эти неудачи в наблюдении или неспособность поверить, вероятно, не поднимаются до уровня отказа, но глава об отказах может быть удобным местом для их рассмотрения.
Защита
Ключом к защите является умение понять, что произошло в прошлом, и быть в состоянии использовать доказательства, чтобы убедить других в своей точке зрения. Это может быть криптографическое доказательство, журналы или другие инструменты. «Звездные войны» хранят такие доказательства в «голокронах» и предлагают рыцарям-джедаям искать ответы в своих чувствах. Получается не очень хорошо, и я рекомендую более современные средства защиты.
Одним из первых применений криптографии с открытым ключом является создание цифровых подписей: проверяемых привязок между неким криптографическим ключом и некоторым документом. Подпись – это математическая операция, выполняемая с документом и закрытой частью пары ключей. Любой, у кого есть публичная часть пары ключей, может проверить, что подпись соответствует документу. Есть ряд предостережений: документ обычно представлен криптографическим хэшем из соображений эффективности. Подпись создается и тестируется программным обеспечением, которое может лгать.
Цифровые подписи – не единственный способ использования криптографии для проверки подлинности битов. Хэш-деревья – это специфическое подмножество классической древовидной структуры данных, где каждый лист дерева содержит хэши документов; родители – это хэш детей. Таким образом, для вставки нового узла требуется только вычисление хэшей, равных логарифму размера дерева. Это дерево было изобретено криптографом Ральфом Мерклом, и его часто называют деревом Меркла. Если вы храните журналы изменений и публикуете корень дерева в надежном месте (например, в физической газете), то вы можете продемонстрировать, что определенные хэши в то время были в дереве и, таким образом, документы, связанные с этими хэшами, существовали тогда же.
На противоположном конце спектра эффективности различные блокчейны обеспечивают распределенный консенсус и способы гарантировать, что все стороны придут к единому мнению. Механизмы помечены как «майнинг» и включают в себя некоторые сложные в выполнении и вознаграждаемые вычисления. Эти вычисления могут заключаться в нахождении частичной коллизии хэшей нового блока и предыдущего блока. Эту коллизию трудно обнаружить, так как для этого требуются, возможно, миллиарды вычислений хэша, но их легко проверить, так как требуется всего одно. Блок представляет собой набор хэшей документов, часто трактуемых как транзакции. Хэш «приписывает» блок, состоящий из этого набора транзакций, к цепочке. Любой, кто проверяет цепочку, может увидеть, что блок и связанные с ним хэши были зафиксированы в определенное время.
Ведение журналов невероятно полезно для многих целей, включая отладку, обработку отказов и обнаружение атак. Если вы пишете код, убедитесь, что включили параметры ведения журнала. Если вы работаете с кодом, убедитесь, что включили журналирование. Без журналов трудно установить, что происходило в прошлом. Итак, вам нужны журналы.
Много-много журналов. Но большого количества журналов недостаточно. Вам нужны правильные журналы, чтобы справиться с проблемами, с которыми вы столкнетесь. Эта глава, наряду с некоторыми примерами моделирования угроз и случаев использования во благо и во вред, поможет вам продумать множество ситуаций, в которых могут иметь место атаки с отказом. Протестируйте их и посмотрите, достаточно ли журналов, чтобы найти атаки и убедиться в том, что произошло. Эта глава в основном посвящена отказам, но журналы также используются при реагировании на атаки. Когда вы проектируете создание журналов, их анализ и доступ к ним, полезно подумать и о том и о другом, поэтому здесь я рассмотрю и то, и другое.
Что журналировать?
Несмотря на то что важно иметь много-много журналов, также важно, чтобы журналы были полезными, а «записывать все» – бесполезный совет. Сигнал потеряется в шуме. Таким образом, выбрать, что записывать в журнал, когда вы пишете программное обеспечение, сложно. Наилучшее ведение журнала, как правило, связано с кодом со странными ошибками или очевидными режим