В последнее время довольно широкое распространение получили различные программно-аппаратные системы защиты информации, предназначенные для шифрования данных, хранящихся на жестких дисках. В качестве примеров можно привести известные PGPdisk и BestCrypt, российские разработки Индис от ЛАН-Крипто, StrongDisk, производимый компанией «Физтехсофт», Zdisk и Zserver от SecurIT, и т. д.
Кроме этого, существуют стоящие особняком системы шифрования отдельных файлов и каталогов, наиболее известная и распространенная из которых — EFS (Encrypted File System), входящая в состав MS Windows, начиная с Windows 2000.
Все эти системы отличаются друг от друга способом шифрования, алгоритмами, возможностями и т. д. до такой степени, что потенциальный их пользователь порой теряется и не всегда может понять, какие именно возможности предоставляет та или иная система и зачем ему все это нужно.
Несмотря на массу различий, все современные системы шифрования данных работают по принципу «прозрачного» шифрования. Суть этого принципа заключается в том, что шифрование данных не является отдельной операцией, которую должен выполнять пользователь в процессе работы, а осуществляется одновременно с работой пользователя автоматически, при чтении и записи данных. Пользователь только должен включить шифрование, введя при этом какой-то пароль или ключ.
Рассмотрим ряд вопросов, которые встают перед пользователем, выбирающим систему шифрования данных; ответы на них влияют на стратегию информационной безопасности в целом.
1. Зачем нужно шифрование данных, от чего оно защищает и от чего не защищает?
2. Какой алгоритм шифрования и длину ключа шифрования выбрать?
3. Использовать ли аппаратные электронные ключи для хранения ключей шифрования?
4. Какие объекты шифровать — отдельные файлы или диск целиком?
5. Шифрование дисков — использовать файл-контейнер или шифрование раздела.
Зачем нужно шифрование данных
Первый вопрос, который возникает у потенциального пользователя такой системы, — зачем оно мне нужно? У него стоит вполне надежная в плане разграничения доступа операционная система Windows 2000 или Windows XP, пароль длиной десять символов представляет собой имя любимого кота или абракадабру типа dF2$%oHn9=, подобрать его практически невозможно, и зачем еще морочиться с каким-то шифрованием?
В принципе глупо отрицать необходимость использования «сильных» паролей, файловой системы NTFS и грамотно настроенных правил разграничения доступа. Это все необходимые условия, чтобы обрести уверенность в том, что доступ к важной информации не получит любой желающий. Однако, как выясняется, совершенно не достаточные.
В наших российских условиях легко представить себе ситуацию, когда из компьютера, хранящего конфиденциальную информацию, извлекается жесткий диск и подключается к другому компьютеру. А там желающий ознакомиться с информацией знает свой пароль и имеет права администратора. С учетом такой возможности полагаться на один только пароль довольно легкомысленно.
Вместе с тем шифрование бессильно против различных программных и аппаратных закладок, «троянов», сетевого взлома и других атак, которым может подвергнуться работающий компьютер с загруженными ключами шифрования, когда пользователь или администратор может просто не знать, что в систему проник посторонний. В этом случае злоумышленник тем или иным способом притворяется легальным пользователем и получает доступ к информации. К сожалению, шифрование не умеет проверять права доступа пользователей.
Поэтому, шифрование данных — это лишь один из важных элементов системы информационной безопасности. Необходимо наличие грамотно настроенной системы разграничения доступа, контроля целостности операционной среды, средств обнаружения проникновений, антивирусной и «антитроянской» защиты и т. д.
Выбор алгоритма и ключа шифрования
Какой алгоритм шифрования использовать при защите своих данных — вопрос во многом «религиозного» характера, типа «какой язык программирования или операционная система лучше?».
Естественно, это должен быть известный алгоритм шифрования, признанный мировым криптографическим сообществом и, желательно, выбранный каким-либо государством в качестве национального стандарта.
Однозначно должны настораживать заявления производителей системы защиты о том, что у них используется алгоритм шифрования собственной конструкции, поскольку очень небольшое количество людей и коллективов в мире обладают интеллектуальным и научным потенциалом, необходимым для изобретения собственного стойкого алгоритма шифрования.
Единственное, что имеет смысл, — это длина ключа шифрования. Для симметричных алгоритмов применяется длина ключа шифрования не менее 128 бит. Считается, что при нормальных размерах сообщений и такой длине ключа расшифровка статистическими методами на современной технике за разумное время невозможна.
Стоит порекомендовать воздержаться от использования алгоритма DES и его модификаций (Triple DES) для шифрования данных. Безусловно, это один из самых заслуженных алгоритмов шифрования, который более двадцати лет был национальным стандартом США, и по инерции, в силу консерватизма, многие используют его и по сей день. Однако этот алгоритм имеет неудовлетворительную на сегодняшний день длину ключа шифрования — 56 бит; кроме того, он крайне медленный.
Зачем нужны электронные ключи
После того как была затронута тема алгоритмов шифрования, нельзя не сказать о ключах шифрования что-то более определенное, кроме того, что его длина должна быть не менее 128 бит.
Для ключа шифрования важна не только его длина, но и такой параметр, который можно назвать криптографическим качеством. Как известно, идеальный ключ — это последовательность совершенно случайных бит, т. е. каждый последующий бит в этой последовательности невозможно предсказать, исходя из предыдущих.
При этом желательно, чтобы у криптоаналитика было как можно меньше информации о ключе шифрования или об исходном материале — данных, из которых получен ключ. Например, если в качестве ключа используется пароль, вводимый пользователем с клавиатуры, это дает криптоаналитику дополнительную информацию о том, как создается ключ, и, вполне возможно, эта информация может быть использована для существенного сокращения множества ключей для перебора.
Также очень скептически следует относиться к ключам шифрования, полученным на основе встроенных в стандартные библиотеки языков программирования функций типа rand(), поскольку эти функции выдают лишь псевдослучайные, а на самом деле вполне определенные последовательности чисел.
Самый лучший способ генерации случайных чисел — физический датчик, который регистрирует какие-то непредсказуемые события, например счетчик Гейгера или радиоприемник, принимающий атмосферные шумы.
Однако на практике такие приборы редко встречаются среди стандартной периферии для компьютеров, поэтому для генерации ключа шифрования часто прибегают к более оригинальному способу. Пользователю предлагается нажимать клавиши на клавиатуре или двигать мышью в течение определенного времени, в зависимости от длины ключа. При этом для генерации одного бита ключа шифрования измеряется время между соседними нажатиями, с точностью до миллисекунды. Если число миллисекунд четное, то в ключ шифрования добавляется ноль, если нечетное — единица.
После генерации такого ключа возникает вполне резонный вопрос, как же его хранить. Для современных пользователей ПК запомнить даже 16 байт, каждый из которых может принимать значения от 0 до 255, — задача нетривиальная.
Поэтому использование специальных электронных устройств типа смарт-карт или USB-ключей для хранения ключей шифрования — вполне логичное решение. Рассказ о таких устройствах — тема для отдельного обзора, здесь стоит лишь упомянуть, что ключ шифрования в смарт-карте или USB-ключе должен быть защищен персональным PIN-кодом пользователя, чтобы избежать возможных проблем в случае утери или хищения такого носителя.
Шифрование файлов или шифрование диска
В разных системах могут использоваться различные способы шифрования данных. Это может быть шифрование на уровне файлов или шифрование на уровне секторов диска.
Шифрование на уровне файлов обладает большей гибкостью для пользователя, чем шифрование на уровне диска. Гораздо удобнее выбрать на диске несколько файлов или каталогов и объявить их шифрованными, чем возиться с созданием виртуальных дисков либо переразмечать жесткий диск, чтобы создать на нем отдельный шифрованный раздел.
Однако такая гибкость таит в себе подводные камни. Во-первых, возникают сложности, когда необходимо, чтобы к каким-то файлам был обеспечен доступ более одного пользователя. Во-вторых, существует потенциальная опасность утечки данных при создании временных файлов за пределами зашифрованных каталогов; это может делать любая программа, не ставя в известность пользователя. Наконец, не надо забывать о человеческом факторе: пользователь может забыть о том, что необходимо сохранять все файлы строго в шифруемом каталоге, и конфиденциальная информация окажется на диске в открытом виде.
Файл-контейнер или блочное шифрование раздела
Если говорить о шифровании на уровне диска, то его тоже можно реализовывать по-разному.
Первый способ — это файл-контейнер. Его суть в том, что на жестком диске компьютера создается файл большого размера, который специальным драйвером «проецируется» в системе как еще один диск. Все, что записывается на этот виртуальный диск, на самом деле зашифровывается и записывается в файл. Обратная операция происходит при чтении. Все программы, системные утилиты, пользователи видят этот виртуальный диск так, как если бы он был обычным жестким диском.
Второй способ — блочное шифрование раздела жесткого диска. При этом никаких файлов-контейнеров и дополнительных виртуальных дисков не создается, а шифруется один или несколько существующих разделов жесткого диска. Эта функциональность обеспечивается специальным драйвером-фильтром диска, информация при этом шифруется посекторно, в процессе чтения-записи.
Очевидные плюсы первого подхода — гибкость и удобство. Во-первых, пользователю не надо заранее заботиться о том, чтобы на его жестком диске было больше одного раздела, поскольку шифровать загрузочный и системный разделы таким образом невозможно. Во-вторых, можно не заботиться о размере шифруемого диска, так как большинство систем, работающих по принципу файла-контейнера, реализуют функциональность «резинового диска», когда размер виртуального диска можно увеличить в процессе работы, по мере его заполнения. Наконец, упрощается процедура резервного копирования. Можно просто скопировать файл-контейнер в любое подходящее место (сетевой диск, CD-ROM, лента и т. д.), совершенно не заботясь при этом о защищенности резервной копии — в файле-контейнере все данные уже зашифрованы.
Однако системы типа «файл-контейнер» имеют один весьма существенный недостаток, заключающийся в гораздо большем падении производительности при чтении-записи, по сравнению с системами блочного шифрования раздела, и теоретически в меньшей надежности таких систем.
Для иллюстрации этого утверждения достаточно взглянуть на схему.
Видно, что при блочном шифровании раздела в цепочку обработчиков дискового ввода-вывода добавляется всего лишь одно звено. Система же типа файл-контейнер увеличивает цепочку обработки дискового ввода-вывода более существенно, поскольку в ней запрос ввода-вывода проходит файловую систему дважды!
Очевидно, что такое увеличение ведет к снижению как производительности системы, так и ее надежности, поскольку файловая система — сложный системный компонент, состоящий, как правило, из трех—пяти модулей (менеджер кэша, драйверы файловых систем и т. д.)
Тем не менее не все так страшно, как может показаться. Снижение производительности и надежности проявляется, как правило, только при повышенных нагрузках на систему. При этом снижение производительности можно компенсировать более мощным оборудованием, а снижение надежности — более частым резервным копированием.
Несколько практических советов
Резюмируя вышесказанное, можно рекомендовать использовать файл-контейнер для защиты данных отдельных пользователей на их компьютерах; в этом случае нагрузка не слишком высока и падение производительности не так заметно. Более простая процедура установки и управления такой системой даже в какой-то мере компенсирует эти недостатки.
Для защиты же корпоративных серверов, к которым предъявляются более высокие требования по производительности и надежности, рекомендуется использовать блочное шифрование разделов диска. В этом случае дополнительные, к тому же, как правило, разовые, работы по инсталляции и настройке системы защиты вполне оправдываются более высокой степенью надежности и меньшим падением производительности.
Кроме того, не стоит забывать о человеческом факторе. Как известно, любую защиту проще всего сломать в самом ее слабом месте, и довольно часто самым слабым звеном в системе обработки информации являются не компьютеры, а люди, с ними работающие. Очевидно, что использование суперкомпьютера для взлома ключа шифрования методом грубой силы несравнимо по затратам с подкупом или иными методами «работы» с менеджером, секретаршей или системным администратором для получения необходимой информации.
Однако возможные уязвимости в «человеческом» компоненте информационных систем не избавляют нас от необходимости заботиться о повышении надежности компьютерных и программных компонентов, тем более что и с человеческим фактором тоже можно и нужно бороться. Нельзя забывать, что информационная безопасность — это проблема комплексная, многофакторная и заниматься этой проблемой надо постоянно.