Современная криптография - Венбо Мао
ISBN 5-8459-0847-7
Скачать (прямая ссылка):
50
Часть I. Введение
С момента появления первой успешной работы, использующей схему случайного заполнения (randomized padding scheme) для усиления алгоритма шифрования с открытым ключом [24], стойкость популярных "учебных" алгоритмов стали повышать, используя широко распространенные примитивы, такие как хэш-функции и датчики псевдослучайных чисел. Усиленные схемы шифрования вполне практичны, поскольку они используют практичные примитивы. Следовательно, их эффективность сравнима с эффективностью "учебных" аналогов. Благодаря этому обстоятельству некоторые алгоритмы, построенные на основе практичных примитивов, стали стандартами шифрования с открытым ключом и цифровой подписью. Некоторые из этих схем будут рассмотрены в главах 15 и 16.
Кроме того, криптографические схемы, протоколы и системы защиты информации, использующие широко распространенные примитивы, становятся все более стойкими, поскольку они привлекают внимание все более широкого круга специалистов.
1.2.5 Ясность
В конце 1960-х годов программное обеспечение стало очень крупным и сложным. Разразился так называемый "кризис программного обеспечения". Сложное программное обеспечение становилось все более подверженным ошибкам, а стоимость отладки программ стала превышать стоимость их разработки. Вскоре специалисты в области компьютерных наук обнаружили несколько причин возникшего кризиса, которые присущи плохому стилю программирования. К этим причинам относятся следующие факторы.
• Неограниченное использование оператора GOTO (переходы из одной точки программы в другую казались программистам очень удобными).
• Избыточное применение глобальных переменных (что приводит к неконтролируемым изменениям их значений, т.е. к неожиданному поведению программ во время выполнения).
• Использование переменных без объявления их типа (например, в языке Fortran переменные можно вводить, не указывая их тип, следовательно, действительное число может округляться до целого без ведома программиста).
• Неструктурированные и неорганизованные порции кода, предназначенные для одновременного решения многих задач (количество строк в таких порциях может достигать нескольких тысяч).
• Недостаточное комментирование программ (ведь комментарии не выполняются!)
Приемы, описанные выше, удобны для программиста, однако они создают трудности при отладке, поддержке и дальнейшем совершенствовании программы. Программное обеспечение, написанное в таком стиле, слишком запутанно
Глава 1. Защита информации в игре "орел или решка"
51
и непонятно. Довольно часто программист не понимал программы, написанной им же несколько месяцев и даже недель назад.
Осознав опасность плохого стиля программирования, специалисты в области компьютерных наук занялись выработкой методологии проектирования программ (program design methology), выдвинув на первый план требование ясности. Они ограничили использование оператора GOTO и глобальных переменных (порекомендовав не применять их совсем), потребовали включать в программы явное объявление типа любой переменной, что позволило компилятору осуществлять систематическую и автоматическую проверку типов, создали технологию модульного программирования (разделив большие программы на более мелкие части, каждая из которых предназначена для решения отдельной задачи) и настоятельно рекомендовали программистам включать в тексты программ и сопровождающую документацию подробные и как можно более ясные комментарии.
Системы защиты информации (криптографические алгоритмы и протоколы) включают в себя программное и аппаратное обеспечение. В рамках протокола разные части программы выполняются на большом количестве отдельных компьютеров, образующих сеть, причем многие программы выполняются в параллельном и интерактивном режимах. Принцип ясности по умолчанию распространяется и на разработку систем защиты информации (в особенности это касается протоколов). Однако, поскольку предполагается, что система защиты информации функционирует во вражеском окружении, в котором даже законный пользователь может иметь злой умысел, ее разработчик должен иметь в виду многие дополнительные факторы. Перечислим три важных аспекта, которые можно считать основными руководящими принципами разработки и реализации систем защиты. (В книге описаны многочисленные атаки на алгоритмы и протоколы, ставшие возможными вследствие неясностей, присущих структуре или спецификации систем защиты.)
1. Следует ясно формулировать все необходимые предположения.
Система защиты информации взаимодействует с окружением, и, следовательно, это окружение должно удовлетворять определенным условиям. Эти условия называются предположениями (или предпосылками), обеспечивающими функционирование системы. Нарушение предположений, на основе которых создан протокол, делает его уязвимым для атак и может разрушить систему защиты. Особенно трудно проверить нарушение предположения, которое не было сформулировано явно (скрытое допущение). Таким образом, все предположения, на которых основана система защиты информации, должны быть явно указаны.