Шифрование файлов в Windows


Шифрованная файловая система, или EFS, обеспечивает дополнительный уровень безопасности для файлов и каталогов. Она дает криптографическую защиту отдельных файлов на томах файловой системы NTFS с использованием системы открытых ключей.

Как правило, контроль доступа к объектам файлов и каталогов, предоставляемый моделью безопасности Windows, достаточен для защиты несанкционированного доступа к конфиденциальной информации. Однако если ноутбук, содержащий конфиденциальные данные, будет утерян или украден, то безопасность этих данных может быть нарушена. Шифрование файлов повышает безопасность.

Чтобы определить, поддерживает ли файловая система шифрование файлов и каталогов, вызовите функцию GetVolumeInformation и проверьте флаг бита FS_FILE_ENCRYPTION. Обратите внимание, что следующие элементы не могут быть зашифрованы:

  • Сжатый файл
  • Системный файл
  • Системная папка
  • Корневой каталог
  • Операции
TxF не поддерживает большинство операций с файлами зашифрованной файловой системы (EFS). Единственные операции, которые поддерживает TxF, - это операции чтения, такие как ReadEncryptedFileRaw.

Обработка зашифрованных файлов и каталогов

Программист или пользователь может пометить каталог или файл как зашифрованный. Файл, помеченный как зашифрованный, шифруется файловой системой NTFS с помощью текущего драйвера шифрования. Если позже файл помечается как не зашифрованный, он расшифровывается и остается в обычном текстовом (незащищенном) состоянии.

Каталоги сами по себе не зашифрованы. Скорее всего, по умолчанию в "зашифрованном" каталоге все новые файлы в каталоге шифруются при создании. Пользователь должен специально изменить статус нового файла на расшифрованный, если он не хочет, чтобы файл был зашифрован. Виден зашифрованный каталог. Чтобы сделать каталог недоступным для других пользователей, используйте стандартные методы контроля доступа.

Функции шифрования не могут использоваться совместно с API резервного копирования.

Чтобы зашифровать новый файл, используйте функцию CreateFile с флагом FILE_ATTRIBUTE_ENCRYPTED. Чтобы зашифровать существующий файл, используйте функцию EncryptFile. Все потоки данных в файле зашифрованы. Если файл уже зашифрован, EncryptFile ничего не делает, но возвращает ненулевое значение, которое указывает на успех. Если файл сжат, EncryptFile распаковывает файл перед его шифрованием.

Чтобы расшифровать зашифрованный файл, используйте функцию DecryptFile. Если файл не зашифрован, DecryptFile ничего не делает, но возвращает ненулевое значение, указывающее на успех.

Функция EncryptionDisable отключает или включает шифрование указанного каталога и файлов в нем. Это не влияет на шифрование подкаталогов ниже указанного каталога.

Чтобы получить статус шифрования файла, используйте функцию FileEncryptionStatus. Кроме того, вызовите функцию GetFileAttributes и проверьте флаг FILE_ATTRIBUTE_ENCRYPTED в возвращаемом значении.

CopyFile и CopyFileEx пытаются зашифровать конечный файл с помощью ключей, используемых при шифровании исходного файла. Если это невозможно сделать, обе функции пытаются зашифровать файл назначения с помощью ключей по умолчанию. Если оба этих метода не могут быть выполнены, CopyFile и CopyFileEx завершаются ошибкой ERROR_ENCRYPTION_FAILED. Если вы хотите, чтобы CopyFileEx завершил операцию копирования, даже если конечный файл не может быть зашифрован, включите флаг COPY_FILE_ALLOW_DECRYPTED_DESTINATION в значение параметра dwCopyFlags при вызове CopyFileEx.

Зашифрованные файлы и пользовательские ключи

Чтобы создать новый ключ для пользователя, используйте функцию SetUserFileEncryptionKey. Чтобы добавить пользовательские ключи в зашифрованный файл, используйте функцию AddUsersToEncryptedFile. Чтобы запросить ключи пользователя для зашифрованного файла, используйте функцию QueryUsersOnEncryptedFile. Чтобы удалить пользовательские ключи из зашифрованного файла, используйте функцию RemoveUsersFromEncryptedFile.

Резервное копирование и восстановление зашифрованных файлов

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

Это очень желательно для типичного доступа к зашифрованным файлам и обеспечивает прозрачность шифрования и дешифрования файлов. Однако это затрудняет резервное копирование зашифрованных файлов, поскольку при попытке резервного копирования с помощью стандартных вызовов ввода-вывода файлов, таких как CreateFile, ReadFile и WriteFile, резервные копии файлов будут иметь обычную текстовую версию.

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

Таким образом, вызывающий функции необработанного шифрования не нуждается в доступе к криптографическим ключам, которые расшифровывают файл. Следующие необработанные API шифрования доступны для использования с приложениями резервного копирования и восстановления:

Описание API шифрования

  • OpenEncryptedFileRaw - открывает зашифрованный файл с доступом к данным в зашифрованном формате. Если вызывающий абонент не имеет доступа к ключу для файла, вызывающему абоненту требуется SeBackupPrivilege для экспорта зашифрованных файлов или SeRestorePrivilege для импорта зашифрованных файлов.

  • CloseEncryptedFileRaw - закрывает зашифрованный файл, открытый с помощью OpenEncryptedFileRaw

  • ReadEncryptedFileRaw - считывает зашифрованный файл оставляя его данные в зашифрованном формате

  • WriteEncryptedFileRaw - записывает зашифрованный файл оставив его данные в зашифрованном формате

  • ImportCallback - определяемый приложением обратный вызов для использования с WriteEncryptedFileRaw

  • ExportCallback - определяемый приложением обратный вызов для использования с ReadEncryptedFileRaw
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, windows, файл, шифрование, файловая система




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 40. Управление битами с помощью BitArray C#
Обычное утро удаленного администратора сайта
Урок 24. Работа с Ajax в Laravel и загрузка файлов