Криптоrрафия и безопасность в.NET Введение
Криптография и безопасность Нечасто вы встретите книгy, в которой вопросы криптографии обсуждались бы одновременно с вопросами безопасности и при этом с одинаковым вниманием. Эти две темы, на первый взгляд, принадлежат к совершенно разным областям и обычно рассматриваются по отдельности. Книги по криптографии, как правило, отличаются обилием математики и основываются на теоретических подходах. В противоположность им, книги по безопасности компьютерных систем ориентированы не на программиста, они посвящены практическим рецептам выполнения таких, например, операций, как установка сервера сертификатов, создание учетных записей и тому подобное. Между этими двумя крайностями мы видим программиста.NET, озабоченного проблемами, которые по своей природе не относятся ни к математике, ни к системному администрированию.
Криптография и безопасность В этой главе мы рассмотрим вопросы криптографии и безопасности в технологии.NET и получим общее представление о том, как эти две темы связаны между собой с точки зрения.NET программирования. Эта книга реализует смешанный подход к освещению предмета, сочетающий в себе основы теории криптографии и вопросы aдминистрирования систем с точки зрения безопасности на платформе.NET. В первой главе мы начнем с обзора наиболее важных концепций безопасности и криптографии на платформе.NET, приведя примеры тoгo, как реализуется система безопасности в приложениях.NET. В главе 2 мы рассмотрим теоретические основы криптографии, начиная с устройства шифра и принципов криптоанализа простейших шифровальных систем, известных с древних времен.
Криптография и безопасность Далее в главах 3, 4 и 5 мы продвинемся дальше, изучив технику программирования.NET применительно к трем ОСНОВНЫМ криптографическим системам, используемым в наше время: симметричные и асимметричные системы, а также цифровая подпись. В этих трех главах приводятся развернутые примеры npoгpaммнoгo кода, реализующегo все эти системы при помощи классов.NET Security. В главе 6 продолжится исследование вопросов, связанных с шифрованием и цифровой подписью, но уже в контексте технологии XML. Главы 7 и 8 продемонстрируют основные техники программирования, реализующие такие концепции.NET, как управление доступом на основе механизма ролей и управление доступом кода к ресурсам на основе свидетельств в программах.NET. Разумеется, реалии распределенных приложений и среды Internet дeлают особенно важными, с точки зрения безопасности, многие специфические аспекты программ, и в главах 9 и 10 мы рассмотрим вопросы безопасности технологии ASP.NET и Wеb сервисов, основанных на.NET.
Природа криптографии и других средств обеспечения безопасности Главные вопросы, касающиеся самой природы криптографии и средств обеспечения безопасности: - Почему криптография и средства обеспечения безопасности так важны? - Что возможно и что невозможно сделать с их помощью? Первый вопрос. в сущности, это вопрос типа «зачем нам это нужно?», а второй – это вопрос типа «что мы можем сделать при помощи этогo?».
Почему криптография и средства обеспечения безопасности так важны Существует четыре основных аспекта, в которых рассматривается безопасность данных: секретность, аутентификация, целостность и подтверждение обязательств (nonrepudiation). Очевидно, что секретность во многих случаях может иметь большое значение. Понятно, что секретность необходима в ситуациях, когда критическую информацию необходимо скрыть от противника. Вы без труда также представите себе ситуацию, когда очень важно точно знать с кем именно вы имеете дело (проблема аутентификации). Не менее важно иногда увериться в том, что информация, которую вы получили от кого-то или кому-то отослали, не может быть изменена злонамеренным третьим лицом (проблема целостности). Наконец, вам может потребоваться yвepeнность в том, что некто, с кем вы договорились о чем то, не откажется от своих слов (подтверждение обязательств).
Проблемы безопасности Рассмотрим общие категории, на которые можно разбить проблемы безопасности. Вам обязательно придут на ум из сообщений новостей или даже из собственной практики примеры каждой из этих категорий: утечки интеллектуальной собственности, нарушенные контракты, сорванные сделки; созданный злоумышленником программный код: почтовые вирусы, логические бомбы, обычные программные вирусы и троянские программы; программные техники несанкционированного доступа такие, как например, техника переполнения буфера; фальшивые сообщения; нарушение договорных обязательств; ошибки в коде, угрожающие безопасности данных. При надлежащем планировании и применении функциональные возможности платформы.NET в плане криптографии и безопасности способны в огромной мере упростить решение всех этих проблем.
ЧТО МОЖНО СДЕЛАТЬ при помощи криптографии и других средств обеспечения безопасности данных Средства, которые предоставляет платформа.NET, позволяют реализовать следующие разновидности защиты: обеспечение конфиденциальности информации; аутентификация пользователей; целостность информации; противодействие нарушению договорных обязательств; контроль доступа к ресурсам; доступность служб.
ЧТО НЕЛЬЗЯ СДЕЛАТЬ при помощи криптографии и других средств обеспечения безопасности данных Человеческий фактор! Вот примерный список тех угроз для безопасности системы, которые связаны непосредственно с «человеческим фактором: недостаточная подгoтовка, низкая дисциплина персонала; небрежность разного рода, например, плохой выбор пароля, компрометация ключей или пересылка нешифрованных данных; излишняя доверчивость, неопытность и наивность; атаки, основанные на «социальной инженерии и артистизме; взятки, запугивание, шантаж; плохое качество прогpамм, ошибки в коде.
Безопасность в ОС: Безопасность данных и криптогpафия с caмoгo начала рассматривались как важный фактор при работе в многoпользовательской среде. Уже в самых ранних системах, «мейнфреймах» (больших ЭВМ) середины 60x гoдов таких, как System/360, многопользовательская среда строилась с большим вниманием к аутентификации пользователей и изоляции задач друг от друга. Симметричные криптографические алгoритмы такие, как DES (Data Encryption Standard - Стандарт шифрования данных), активно применялись в банковских и правительственных приложениях уже в конце 70x. Системы семейства UNIX на всем протяжении своей истории учитывали проблемы безопасности как фактор первостепенной важности. В начале 90x в UNIХ системах уже была внедрена симметричная в асимметричная криптография в различных протоколах и технологиях, как, например, в протоколе сетевой идентификации Kerberos.
Безопасность в Windows: В противоположность всему этому, история системы Windows начиналась с явногo недостатка средств обеспечения безопасности. До некоторой степени это можно понять, учитывая тот факт. что в начале cвoeгo пути (особенно, еще в 16-разрядной версии), система Windows использовалась в качестве однопользовательского инструмента для некритичных приложений или вообще как игpовая платформа. Но прошло время, и система Windows выросла, став целой отраслью промышленности и обеспечив мир эффективными и удобными приложениями. К досаде компьютерных профессионалов старых времен, развитие Windows было сопряжено с проблемами надежности и безопасности, с утечками информации и уязвимостями различного рода. К счастью, теперь ситуация меняется, и тому есть ряд причин:
пользователи персональных компьютеров стали гораздо опытней, они нуждаются в большей надежности и безопасности; корпорации осознали всю важность проблем безопасности данных в сети Internet; в Мicrosoft с недавнего времени проблемы безопасности и надежности стали рассматриваться, как проблемы стратегической важности; многие вычислительные задачи, требующие выcoкoгo уровня безопасности, переместились с «мейнфреймов» на персональные компьютеры; прогpаммный интерфейс Win32 обеспечивает мощную, но не слишком прозрачную поддержку функций, связанных с безопасностью; платформа.NET обеспечивает мощную и удобную поддержку всех задач, связанных с криптографией и иными средствами обеспечения безопасности;
многие эксперты в этой области, включая Брюса Шнайера, провели большую работу по разъяснению всей важности обеспечения безопасности данных; снижение стоимости аппаратного обеспечения и рост производительности делают «накладные расходы» на обеспечение безопасности более приемлемыми; в январе 2000 года экспортные ограничения США на технологии, связанные с криптографией, были серьезно ослаблены; общественность теперь гораздо больше знает от таких опасностях, как вирусы, уязвимости, связанные с переполнением буфера, и тому подобным; увеличение объема критически важных служб, функционирующих в Web, делает проблемы безопасности по-настоящему жгyчими.
Среда разработки.NET Framework и «виртуальная машина» CRL Следующие функциональные черты платформы.NET обеспечивают наиболее важные аспекты безопасности данных: возможность конфигурирования политики безопасности и контроля (административный контроль); CAS (контроль выполнения кода, основывающийся на конфигyрации политики безопасности и контроля); концепция безопасности, основывающаяся на разделении ролей (управление доступом на основе идентификации пользователя и роли, к которой он принадлежит); управляемая в процессе выполнения верификация кода (проверка диапазонов адресов и контроль типов); домены приложений (изоляция приложений при выполнении); криптографические классы (доступ к мощным криптографическим алгоритмам).
Надежность и платформа.NET Framework проверка границ в процессе выполнения кода делает невозможным переполнение стека или разрушение данных в памяти; проверка соответствия типов в процессе выполнения кода делает нeвозможными намеренные или случайные изменения типов; при вызове кода полномочия вызывающего кода верифицируются при помощи механизмов стека; автоматическая сборка мусора эффективно решает проблему утечек памяти; обработка исключений позволяет корректно обрабатывать все нeштатные ситуации; выполнение кода. основанное на механизме разрешений, регулируется политикой безопасности, основывающейся на свидетельствах.
Программирование с использованием криптографии в.NET В.NET Framework доступно несколько криптографических классов. Эти классы поддерживают все основные криптографические алгоритмы, используемые в наше время. симметричные алгоритмы шифрования DES, 3DES и RC2; криптографические потоки; асимметричный алгоритм RSA; цифровая подпись на основе RSA и DSA; хеш алгоритмы, включая MD5, SНA1, SНA256 и другие; коды аутентификации сообщений (МАС); алгоритм хеша с ключом; ХМL шифрование; ХМL подписи; гeнepaтopы псевдослучайных последовательностей; безопасность в ASP.NEТ; безопасность Wеb-служб.