Упрощенное трио: трое из множества мушкетеров, сражающихся во имя простоты

Опубликовано: 12 Апреля, 2023

Простота может принимать разные формы в контексте криптографии, но мы рассмотрим три «акта простоты», которые связаны с эффективностью криптографии на практике. В заключение — и я знаю, что довольно часто повторяю это — я расскажу об использовании MAC; он будет коротким, милым и достаточно содержательным, чтобы донести суть. Мое объяснение простое (каламбур) следующее: обдумав эти три акта простоты, я начал видеть корреляцию между ними всеми и то, как все это указывало на то, что я иногда называю криптографическим консерватизмом, то есть просто (здесь я иди снова), философия находчивости и позитивной паранойи. Кто-то из этого образа мыслей будет проектировать с учетом безопасности, в первую очередь, путем устранения ненужных сложностей и использования примитива для того, для чего его можно безопасно использовать (т. е. использовать блочный шифр как в ваших схемах шифрования, так и в схемах аутентификации)., без введения дополнительных примитивов, где это применимо. Кроме того, этот тип криптографа не будет спешить сбрасывать со счетов кажущиеся «маловероятными» модели атак; они позволят криптографии обращаться к таким моделям атак и узнать, что инсайдер (подразумеваемый «союзник») иногда более потенциально опасен, чем внешний (подразумеваемый «противник»). Хорошая паранойя — та, которая не вызвана некомпетентностью — наденьте шляпу из фольги — это важный шаг на пути к построению полноценного криптографического решения. Будьте благоразумны, но не скудно одеты. Сведите к минимуму предположения, которые вы должны сделать, где это возможно. Это в основном суммирует то, что вы прочитаете в остальной части этой статьи.

Держите своих уток в ряду и их перья при себе

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

Это довольно простая концепция, которая совпадает с тем, чтобы держать уток в ряд; легче учитывать каждую из них, если вы это сделаете, чтобы у вас не было уток, сбивающих с пути других уток. Хотя могут быть случаи зависимости между модулями, в некоторых сценариях стрессовая — и я имею в виду стрессовая — независимость между модулями. (Это разумно; это не всегда тот случай, когда мы можем полностью исключить зависимости, но мы можем свести их к минимуму.) В идеале они должны быть безопасными сами по себе, так что небезопасность будет локальной внутри этого модуля. Такое разделение «уток» на соответствующие им модули значительно упрощает анализ. Упрощение взаимодействия модуля с системой является краеугольным камнем того, почему модульность хороша; то есть, если это сделано правильно, как и все в криптографии. Модульность очень окупается.

Вторичная переработка касается не только алюминиевых банок

Второй акт простоты — переработка примитивов. Для начала — и я здесь объективен — большая часть криптографического программного обеспечения, которое вы обнаружите, является загрязнением. Либо чего-то не хватает (например, MAC), либо ужасно реализовано то, что он включает. Иногда я нахожу конкретную реализацию, предлагающую десятки примитивов, от блочных шифров до потоковых шифров, хеш-функций и т. д. и т. п.; это создает сложности, которые могут повлиять на безопасность как на криптографическом уровне, так и на уровне реализации. Помните, чем больше опций вы добавляете, тем больше сложностей вносите. Большинство пользователей, вероятно, не являются криптографами, поэтому не обременяйте их множеством возможных конфигураций, которые могут или не могут оказаться безопасными. Перерабатывайте примитивы там, где это возможно; во многих случаях мы можем использовать один и тот же примитив в нескольких схемах, таких как, например, AES. Рассмотрим схему шифрования, использующую AES в режиме CTR, и схему проверки подлинности, использующую CMAC-AES. Установите конфигурацию, которая является безопасной по умолчанию. Либо позволяйте им быть в безопасности, либо нет. Ограничьте их выбор как можно меньшим числом, чтобы последствия их выбора были очевидны; то есть «это безопасно; это не." Криптографу достаточно сложно разработать безопасные криптографические примитивы, а программисту, соответственно, сложно их реализовать; если пользователю предоставляется возможность небезопасно настроить такую реализацию, на практике мы снижаем потенциальную эффективность криптографии. Это основная цель практической криптографии — разработка полезных и безопасных систем.

О, да ладно. Каковы шансы, что это когда-либо произойдет?

Третий акт простоты — моделирование угроз. Теперь я не могу обобщать это, так как это зависит от сценария, но я могу предложить некоторые консервативные способы думать об этом, которые могут быть обобщены во многих случаях. Пусть криптография сделает свою работу; то есть сведите к минимуму доверие и не берите на себя слишком много, когда в этом нет необходимости. Часто вы можете думать о безопасности в контексте инсайдеров и аутсайдеров, где первая группа состоит из ваших друзей (доверяющих друзей), а вторая группа состоит из ваших врагов. Тем не менее, давайте взглянем на эту модель на мгновение. История показала, что для предполагаемых инсайдеров нет ничего странного в том, чтобы предавать доверие в своем кругу; на самом деле, поскольку им безоговорочно доверяют, они имеют легкий доступ к тому, что скрыто от посторонних. Как решить эту проблему? Не обязательно сразу доверять даже тем, кто внутри. Это может быть немного параноидально, но, учитывая, что инсайдеры потенциально более вредны, чем аутсайдеры, это сводит к минимуму доверие, которое мы оказываем; следовательно, это хорошая паранойя. Будьте консервативным «аналитиком угроз». Не сбрасывайте со счетов кажущиеся отдаленными практические аспекты. Я бы предпочел сделать ставку на криптографическую защиту, а не предположить, что злоумышленника, достаточно умного, чтобы использовать это, учитывая способности и ресурсы, не существует. Угрозы будут различаться в зависимости от сценария, но этот принцип применим практически к любой из них.

Как эти акты простоты связаны

Что общего у этих «поступков»? Что ж, они разделяют роль вещей, которые упрощают анализ, сводя к минимуму такие вещи, как зависимости, сложности, доверие и так далее. Всякий раз, когда в криптографической системе происходит сбой, это, как правило, не связано с ошибкой математики; это, очевидно, ошибка реализации, которая приводит к некоторой незащищенности, которую можно использовать. Модульность помогает сохранить независимое разделение, а повторное использование примитивов снижает сложность, возникающую в результате введения ненужных примитивов. Бывают даже ситуации, когда они ("архитекторы" системы) правильно реализовали, но были слишком небрежны со своими политиками безопасности и не устранили угрозы, которые должны были быть устранены. Таким образом, даже если в реализации нет уязвимостей, которые можно было бы использовать, реализация может не обеспечивать в достаточной степени безопасность, необходимую для данного сценария и требуемой модели угроз. Консервативное моделирование угроз помогает гарантировать, что этого не произойдет.

Краткий обязательный призыв к использованию MAC

О, и я не могу забыть свою речь о MAC. Это связано с моделированием угроз, которое некоторые могут назвать консервативным, но на самом деле в большинстве случаев это необходимо; то есть это не дополнительная безопасность, а в первую очередь жизненно важный компонент. Я хотел бы сказать, что в большинстве сценариев, где требуется сохранение конфиденциальности, также необходимо сохранение целостности. На самом деле, если вы не сохраните целостность, это также может привести к потере конфиденциальности. Как я часто сталкивался при анализе системы, шифрование — единственная предоставляемая услуга; это то, что вы могли бы назвать «сохранением конфиденциальности». Однако система не защищает от возможности злоумышленника манипулировать информацией, что зачастую более вредно, чем просто возможность ее разглашения. Это реальная угроза, и в большинстве случаев ее следует прямо устранять. Это крах многих моделей угроз; это зияющая дыра, которую слишком часто не замечают. Сохраняйте целостность посредством аутентификации сообщений. Используйте МАК.

Подводя итоги немного

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