Смекни!
smekni.com

Файловая система NTFS Механизм EFS (стр. 2 из 4)

NTFS поддерживает механизм Encrypting File System (EFS), с помощью которого пользователи могут шифровать конфиденциальные данные. EFS полностью прозрачен для приложений. Это означает, что данные автомати­чески расшифровываются при чтении их приложением, работающим под учетной записью пользователя, который имеет права на просмотр этих дан­ных, и автоматически шифруются при изменении их авторизованным приложением.

NTFS не допускает шифрования файлов, расположенных в корневом ката­логе системного тома или в каталоге \Winnt, поскольку многие находящиеся там файлы нужны в процессе загрузки, когда EFS ещё не активна.

EFS использует криптографические сервисы, предоставляемые Windows 2000 в пользовательском режиме, и состоит из драйвера устройства режима ядра, тесно интегрированного с NTFS и DLL5-модулями пользовательского режима, которые взаимодействуют с подсистемой1 локальной аутентифика­ции и криптографическими DLL.

Доступ к зашифрованным файлам можно получить только с помощью за­крытого ключа из криптографической пары EFS (которая состоит из закры­того и открытого ключей), а закрытые ключи защищены паролем учетной за­писи. Таким образом, без пароля учетной записи, авторизированной для про­смотра данных, доступ к зашифрованным EFS файлам на потерянных или краденных портативных компьютерах нельзя получить никакими средст­вами, кроме грубого перебора паролей.

Механизм EFS

EFS использует средства поддержки шифрования, введенные Microsoft ещё в Windows NT 4. При первом шифровании файла EFS назначает учетной записи пользователя, шифрующего этот файл, криптографическую пару – за­крытый и открытый ключи. Пользователи могут шифровать файлы с помо­щью Windows Explorer; для этого нужно открыть диалоговое окно Свойства применительно к нужному файлу, щелкнуть кнопку Другие и установить флажок Шифровать содержимое для защиты данных. Пользователи также могут шифровать файлы с помощью утилиты командной строки cip­ber.Windows 2000 автоматически шифрует файлы в каталогах, помеченных зашифрованными. При шифровании файла EFS генерирует случайное число, называемое шифровальным ключом файла (file encryption key, FEK8). EFS ис­пользует FEK для шифрования содержимого файла по более стойкому вари­анту DES3 (Data Encryption Standard) – DESX4. EFS сохраняет FEK вместе с самим файлом, но FEK шифруется по алгоритму RSA-шифрования на основе открытого ключа. После выполнения EFS этих действий файл защищен: дру­гие пользователи не смогут расшифровать данные без расшифрованного FEK файла, а FEK они не смогут расшифровать без закрытого ключа пользователя – владельца файла.

Для шифрования FEK используется алгоритм криптографической пары, а для шифрования файловых данных – DESX, алгоритм симметричного шиф­рования (в нем применяется один и тот же ключ для шифрования и дешиф­рования). Как правило, алгоритмы симметричного шифрования работают очень быстро, что делает их подходящими для шифрования больших объе­мов данных, в частности файловых. Однако у алгоритмов симметричного шифрования есть одна слабая сторона: зашифрованный ими файл можно вскрыть, получив ключ. Если несколько человек собирается пользоваться од­ним файлом, защищенным только DESX, каждому из них понадобится дос­туп к FEK файла. Очевидно, что незашифрованный FEK – серьезная угроза безопасности. Но шифрование FEK все равно не решает проблему, поскольку в этом случае нескольким людям приходится пользоваться одним и тем же ключом расшифровки FEK.

Защита FEK сложная проблема, для решения которой EFS использует ту часть своей криптографической архитектуры, которая опирается на техноло­гии шифрования с открытым ключом. Шифрование FEK на индивидуальной основе позволяет нескольким лицам совместно использовать зашифрованный файл. EFS может зашифровать FEK файла с помощью открытого ключа каж­дого пользователя и хранить их FEK вместе с файлом. Каждый может полу­чить доступ к открытому ключу пользователя, но никто не сможет расшиф­ровать с его помощью данные, зашифрованные по этому ключу. Единствен­ный способ расшифровки файла заключается в использовании операционной системой закрытого ключа, который она. Как правило, хранит в безопасном месте. Закрытый ключ помогает расшифровать нужный FEK файла. Windows 2000 хранит закрытые ключи на жестком диске, что не слишком безопасно, но в следующих выпусках операционной системы пользователи смогут хра­нить закрытые ключи на компактных носителях вроде смарт-карт. Алго­ритмы на основе открытого ключа обычно довольно медленные. Поэтому они используется EFS только для шифрования FEK. Разделение ключей на открытый и закрытый немного упрощает управление ключами по сравнению с таковым в алгоритмах симметричного шифрования и решает дилемму, свя­занную с защитой FEK.

Функциональность EFS опирается на несколько компонентов, как видно на схеме архитектуры EFS (см. рисунок).


Пользовательский режим

LPC Режим ядра

EFS реализована в виде драйвера устройства, работающего в режиме ядра и тесно связанного с драйвером файловой системы NTFS. Всякий раз, когда NTFS встречает зашифрованный файл, она вызывает функции из драйвера EFS, зарегистрированные им в NTFS при инициализации EFS. Функции EFS осуществляют шифрование и расшифровку файловых данных по мере обра­щения приложений к шифрованным файлам. Хотя EFS хранит FEK вместе с данными файла, FEK шифруется с помощью открытого ключа индивидуаль­ного пользователя. Для шифрования или расшифровки файловых данных EFS должна расшифровать FEK файла, обращаясь к криптографическим сер­висам пользовательского режима.

Подсистема локальной аутентификации (Local Security Authentication Sub­system, Lsass13)(\Winnt\System32\Lsass.exe) не только управляет сеансами ре­гистрации, но и выполняет рутинные операции, связанные с управлением ключами EFS. Например, когда драйверу EFS требуется расшифровать FEK для расшифровки данных файла, к которому обращается пользователь, драй­вер EFS посылает запрос Lsass через вызов локальной процедуры (local procedure call или LPC11).

Драйвер устройства KsecDD9 (\Winnt\System32\Drivers\Ksecdd.sys) экспортирует функции, необходимые драйверам для посылки Lpc-сообщений Lsass. Компонент Lsass, сервер ло­кальной аутентификации (Local Security Authentication Server, Lsasrv12) (\Winnt\System32\Lsasrv.dll), ожидает запросы на расшифровку FEK через вызов отдаленной процедуры (remote procedure call или RPC16); расшифровка выполняется соответствующей функцией EFS. Которая также находится в Lsasrv. Для расшифровки FEK, получаемого от драйвера EFS в зашифрованном виде, Lsasrv использует функции Microsoft CryptoAPI, или сокращенно CAPI1.

CAPI состоит из DLL компонентов доступа к криптографическим серви­сам (шифрованию, дешифрованию и хэшированию). Например, эти DLL управляют получением открытого и закрытого ключей пользователя, что по­зволяет Lsasrv не заботиться о деталях защиты ключей и об особенностях ра­боты алгоритмов шифрования. Расшифровав FEK, Lsasrv возвращает его драйверу EFS в ответном LPC-сообщении. Получив расшифрованный FEK, EFS с помощью DESX расшифровывает данные файла для NTFS.

Регистрация функций обратного вызова

Присутствие драйвера EFS(\Winnt\System32\Drivers\EFS.sys) не является необходимым условием для работы NTFS, но без него шифрованные файлы будут недоступны. NTFS предусматривает интерфейс для подключения драйвера EFS, поэтому при инициализации драйвер EFS может сам подключится к NTFS. Драйвер NTFS экспортирует несколько функций, используемых драйвером EFS, включая те, которые EFS вызывает для уведомления NTFS о своем присутствии и связанных с ним API-функциях.

Первое шифрование файла

Обнаружив шифрованный файл, драйвер NTFS вызывает функции, зарегистрированные EFS. О состоянии шифрования файла сообщают его атрибуты. NTFS и EFS имеют специальные интерфейсы для преобразования файла из незашифрованной в зашифрованную форму, но этот процесс протекает в основном под управлением компонентов пользовательского режима. Windows 2000 позволяет шифровать файлы двумя способами: утилитой командной строки cipber или с помощью Windows Explorer. Windows Explorer и cipber используют Win32-функцию EncryptFile экспортируемую Advapi32.dll (Advance Win32 API DLL). Чтобы получить доступ к API, который нужен для LPC-вызова интерфейсов EFS в Lsasrv, Advapi32 загружает другую DLL, Feclient.dll (File Encryption Client DLL).

Получив LPC-сообщение c запросом на шифрование файла от Feclient, Lsasrv использует механизм олицетворения Windows 2000 для подмены собой пользователя, запустившего программу, шифрующую файл (cipber или Windows Explorer). Это заставляет Windows 2000 воспринимать файловые операции, выполняемые Lsasrv, как операции, выполняемые пользователем, желающим зашифровать файл. Lsasrv обычно работает под учетной записью System. Если бы Lsasrv не олицетворял пользователя, то не получил бы прав на доступ к шифруемому файлу.

Далее Lsasrv создает файл журнала в каталоге System Volume Information, где регистрирует ход процесса шифрования. Имя файла журнала, обычно EFS0.log, но, если шифруется несколько файлов , 0 заменяется числом, которое последовательно увеличивается на 1, до тех пор, пока не будет получено уникальное имя журнала для текущего шифруемого файла.

CryptoAPI полагается на информацию пользовательского профиля, хранящуюся в реестре, поэтому следующий шаг Lsasrv – загрузка в реестр профиля олицетворяемого пользователя вызовом функции LoadUserProfile из Userenv.dll (User Environment DLL). Обычно профиль пользователя к этому моменту уже загружен, поскольку Winlogon загружает его при входе пользователя в систему. Но если пользователь регистрируется под другой учетной записью с помощью команды RunAS, то при попытке обращения к зашифрованному файлу под этой учетной записью соответствующий профиль может быть не загружен.