Архітектура, ASP, Програмування, статті

Ключі та сертифікати

У EFS як посвідчень доступу використовуються стандартні сертифікати x509. Кожен захищений файл шифрується за алгоритмом симетричного шифрування за допомогою генерованого випадковим чином FEK (File Encryption Key). EFS створює “оболонку” для FEK, шифруючи його з відкритим ключем з одного або декількох EFS-сертифікатів. У користувача, який звертається до зашифрованого файлу, повинен бути закритий ключ, відповідний одному з відкритих ключів, заданих при створення “оболонки” FEK. Будь-хто, у кого є доступ до одного із закритих ключів, може звернутися до файлу, спочатку розшифрувавши “обгорнутий” FEK по закритому ключу, а потім розшифрувавши файл по поновленому FEK.

Робота

EFS виконує чотири основні операції: відкриття, читання, запис і перетворення файлів. Кожна з цих операцій розглядається в наступних розділах. Оскільки EFS – прозорий сервіс, відкриття, читання і запис зашифрованих файлів не відрізняються від операцій зі звичайними файлами: додатки використовують звичайний Win32 API. Перетворення файлів – Це шифрування текстового файлу або розшифровка зашифрованого файлу. Для перетворення потрібен спеціальний інтерфейс, що розглядається далі.

Відкриття

Для відкриття зашифрованих файлів додаток використовує стандартні Win32-функції CreateFile () або OpenFile (). При відкритті зашифрованого файлу EFS розгортає (unwraps) ключ шифрування файлу і створює контекст, необхідний для шифрування або дешифрування даних.

Читання

Для читання зашифрованих файлів додатки використовують стандартні Win32-функції ReadFile (), ReadFileEx () і ReadFileScatter (). При читанні зашифрованого файлу дані спочатку зчитуються в пам’ять, і EFS розшифровує дані “на льоту”. Розшифровані дані повертаються додатком. Коли додаток запитує проектування зашифрованого файлу в пам’ять, дані розшифровуються безпосередньо перед проектуванням в пам’ять.

Write

Для запису зашифрованих файлів додаток використовує стандартні Win32-функції WriteFile (), WriteFileEx () і WriteFileScatter (). При записи зашифрованого файлу EFS шифрує дані “на льоту”, потім зашифровані дані записуються на диск. Коли додаток запитує скасування проектування файлу в пам’ять, що проектуються дані шифруються перед їх записом назад на диск. Перетворення

Одним з головних вимог при проектуванні процесу перетворення полягала в тому, щоб дані ніколи не губилися – навіть при відключенні живлення або іншому катастрофічному збої. Тому в EFS зложен дуже обережний підхід до зберігання резервних копій розшифрованих даних, які зберігаються до тих пір, поки перетворення не завершиться повністю.

Коли EFS отримує запит на перетворення файлу, виконується кілька операцій.

Перетворення в текст виконується аналогічно: теж створюється тимчасовий файл, в який записується вихідний. Потім вихідний файл усікається, дані зчитуються з тимчасового файлу і записуються в вихідний в незашифрованому вигляді.

Примітка Побічний ефект цієї процедури полягає в тому, що, коли тимчасовий файл видаляється, частини тексту можуть залишитися в невживаному дисковому просторі. Ви можете, запустивши утиліту командного рядка cipher.exe з ключем / W, стерти вміст простору розділу, позначеного як вільне. Ця операція стирає залишилися після шифрування частини тексту файлів, що не вміщається в одну запис MFT (Master File Table). Розмір запису MFT залежить від розміру кластера диска і зазвичай становить 1024 байти. Вміститься чи файл в запис MFT, залежить від того, скільки місця залишилося в запису MFT після формування метаданих файлу. В MFT можуть міститися й інші дані, наприклад атрибути файлу або потоки. Крім того, у файлі може бути більше даних, ніж вміщує запис MFT. Додаткову інформацію про MFT см. в Microsoft Developer Network, в розділі Master File Table and
MFT Zone
документації Platform SDK.

Щоб повністю виключити ймовірність того, що на диску залишаться частини тексту, рекомендується ніколи не виконувати перетворення текстових файлів. Замість цього слід створити каталог і позначити його як зашифрований. Файл, який створюється в зашифрованому каталозі, відразу ж записується на диск в зашифрованому вигляді, а тимчасовий файл не створюється.

Очевидно, коли користувачеві потрібно зашифрувати вже існуючі файли, цей прийом не спрацює. У такому випадку рекомендується перетворити всі існуючі файли, які потрібно захистити, а потім з допомогою cipher.exe очистити весь вільний простір розділу. Після цього слід створювати всі файли, які потребують захисту, в зашифрованих каталогах.

Відновлення даних

У EFS є засоби відновлення даних. Вони застосовуються, щоб відновити зашифровані файли у випадках, коли для користувача ключі загублені або знищені. Крім того, вони дозволяють організаціям визначати і застосовувати політику доступу до даних, що зберігаються в комп’ютерах. Відновлення даних визначається політикою відновлення, автоматично активізується на комп’ютерах домену та відключається на ізольованих комп’ютерах. В домені політика відновлення поширюється з активного каталога через політику групи.

Якщо визначена політика відновлення, все FEK додатково обертаються відкритими ключами агентів відновлення. Ці загорнуті FEK утворюють DRF (Data Recovery Field), які EFS перезаписує при кожної операції, щоб гарантовано використовувалася остання версія політики відновлення.

Дуже велике значення мають закриті ключі агента відновлення. У кожного зашифрованого файлу домену є свій FEK, обгорнутий відкритим ключем відновлення. Якщо зловмисник отримає доступ до відповідному закритому ключу відновлення, він зможе звертатися до будь зашифрованого файлу домену. Захистити ці ключі вкрай важливо.

Політика відновлення

Домен

Політика відновлення, за замовчуванням використовується в домені, визначається адміністратором домену. Коли адміністратор домену першого раз входить на контролер домену, генерується EFS-сертифікат відновлення, записується у локальний профіль. Цей сертифікат додається в політику відновлення. Потім будь адміністратор домену може створити в домені агенти відновлення і згенерувати EFS-сертифікати для цих агентів. Отримані сертифікати можна додати в політику відновлення.

При завантаженні комп’ютера, що працює в домені, політика групи, у тому числі політика відновлення, зчитується з Active Directory. Потім політика відновлення, раніше визначена на цьому комп’ютері, заміщається отриманої з політики групи. Комп’ютер періодично опитує Active Directory, не змінилася політика групи, в Зокрема політика відновлення.

Політика відновлення, отримана з Active Directory, локально кешується на комп’ютері, що працює в домені. Якщо комп’ютер не може Зв’язок з Active Directory і завантажити оновлену політику, використовується кешована політика.

Адміністратор домену також може задати для домену порожню політику відновлення. Порожня політика відновлення відключає EFS для клієнтів, що працюють під Windows 2000, але не для клієнтів, що використовують XP або Windows Server 2003. Визначення порожній політики відновлення – зовсім не те ж саме, що повна відсутність політики, так як адміністратор створює політику, але не додає в неї ніякі агенти відновлення. Якщо адміністратор видалить політику, політика відновлення буде вважатися відсутньою.

Об’єкти політики групи можна створювати на декількох рівнях дерева Active Directory. Крім того, на комп’ютері, що працює в домені, можна визначити локальну політику відновлення. Однак вона ніколи не буде використовуватися, тому що політика відновлення, визначена для домену, має більш високий пріоритет. Додаткову інформацію про поширенні і пріоритети політики групи в довідці
Windows Server 2003.

Автономний комп’ютер

Спочатку на автономних комп’ютерах політики відновлення немає. Адміністратори автономних комп’ютерів можуть змінювати політику відновлення EFS, зокрема створити і додати в політику сертифікати відновлення.

Компоненти

Щоб сервіс EFS працював прозоро, його компоненти повинні бути присутнім на багатьох рівнях операційної системи. Ці компоненти діляться на дві групи: працюючі в режимі користувача і працюють в режимі ядра. На рис. 1 показані компоненти, що використовуються при зверненні до файлів. Компоненти, помічені (EFS), містять тільки код EFS, а компоненти з позначенням EFS в рамці, лише частково складаються з коду EFS. Нижче описаний кожен з компонентів, що містять код EFS.

Рис. 1. Компоненти операційної системи та їх взаємозв’язок

{Малюнок:
winlogon – winlogon
EFS – EFS
Shell – Shell
RPC – RPC
App – Додаток
Feclient – Feclient
Efsadu – Efsadu
LSA – LSA
Crypt – шифрування
CSP – CSP
Mm (Memory Manager) – Диспетчер пам’яті
I / O Manager – Диспетчер вводу-виводу
Kernel – Ядро
Cc (Cache Controller) – Контролер кеша
MUP (Multiple UNC Provider) – MUP (багатомережевий UNC-провайдер)
NTFS – NTFS
WebDAV – WebDAV
ksecdd – ksecdd
}

Компоненти режиму користувача

Код EFS міститься в п’яти компонентах користувацького режиму: LSA, Feclient, Efsadu, Shell і Winlogon. Взаємозв’язок між ними показана на рис. 1. Кожен з цих компонентів докладно розглядається в наступних розділах.

Local Security Authority

LSA (Local Security Authority) виконує більшу частину EFS-операцій користувацького режиму. LSA відповідає на які від ядра запити на створення FEK і обгортає FEK відкритими ключами користувача і агентів відновлення. FEK повертається ядру і використовується при шифруванні файлу. Крім того, LSA виконує зворотну операцію: розгортає FEK і повертає його ядру для розшифровки файлу.

При обгортанні LSA звертається до політики відновлення, щоб визначити, чи потрібно обгортати FEK відкритими ключами агентів відновлення. При розгортанні теж відбувається звернення до політики відновлення, щоб визначити, чи існують додаткові або нові сертифікати, в які потрібно заново обернути FEK. Крім того, LSA перевіряє, чи змінився EFS-сертифікат поточного користувача, оскільки в такому випадку також потрібно повторне обгортання FEK.

LSA експортує кілька RPC-інтерфейсів для взаємодії з Feclient і кілька LPC-інтерфейсів для взаємодії з Ksecdd.

Для більшої продуктивності LSA зберігає в кеші Описувачі (handles) закритих ключів, використовуваних для обгортання та розгортання FEK. Ці Описувачі вказують на закриті ключі, що залишаються в CSP, т. е. знаходяться в безпечному місці.

Feclient

Win32 API передають все пов’язані з EFS виклики бібліотеці Feclient.DLL. Потім Feclient викликає RPC-інтерфейси LSA, використовувані EFS. Причина такого дворівневого виклику EFS-процедур LSA полягає в те, що EFS підтримує віддалене зберігання зашифрованих файлів на інших серверах, що працюють під управлінням Windows Server 2003 або Windows Server 2000. Feclient визначає, на якому сервері зберігається файл, і звертається до LSA цього сервера.

Efsadu

Efsadu.DLL реалізує користувальницький інтерфейс (UI) настройки EFS-атрибутів. Ця DLL викликається, коли з діалогового вікна
Properties
користувач відкриває діалогове вікно Advanced і клацають кнопку Details, Що знаходиться поряд з Encrypt file. За клацанню цієї кнопки відкривається діалогове вікно Encryption Details, розглядається далі.

Оболонка

Імена зашифрованих файлів можуть показуватися оболонкою (у вікнах Windows Explorer) зеленим кольором. Оболонка визначає, зашифрований чи файл, викликаючи EFS-функцію, яка повертає стан файлу.

Winlogon

Winlogon по-різному працює на контролерах домену і локальних комп’ютерах. Коли адміністратор домену вперше входить в контролер домену, Winlogon створює політику відновлення за умовчанням. На локальному комп’ютері Winlogon звертається до механізму конфігурування захисту, щоб застосувати EFS-політику відновлення, одержувану з політики групи.

Компоненти режиму ядра

Три компонента режиму ядра містять код EFS: NTFS, WebDAV Redirector і Ksecdd. Взаємозв’язок між ними показана на рис. 1.

NTFS

Велика частина коду EFS режиму ядра міститься в драйвері NTFS. Цей драйвер відповідає на FSCTL-команди (file system controls), що відправляються LSA для шифрування або дешифрування файлів. При відкритті файлу драйвер передає обгорнутий FEK компоненту Ksecdd, щоб LSA розгорнув цей FEK. Потім драйвер розшифровує дані, які читаються з файлу, і шифрує дані, які записуються у файл.

EFS API в драйвері NTFS також надає ряд функцій читання і записи файлів в режимі побітового введення (raw mode). Режим побітового введення дозволяє безпосередньо читати і записувати шифрований текст. Це дозволяє Win32 API резервного копіювання файлів при відповідних операціях читати і записувати зашифровані дані, зберігаючи конфіденційність. Цей API призначений тільки для додатків резервного копіювання.

Драйвер NTFS зберігає в кеші нерозгорнуті FEK, що приймаються від LSA. Це підвищує продуктивність, коли файли кілька разів відкриваються один за іншим через невеликі проміжки часу. За замовчуванням FEK зберігаються в кеші п’ять секунд. При настройці можна задати час кешування в межах від двох до тридцяти секунд.

WebDAV Redirector

Клієнтський редиректор WebDAV управляє зашифрованими файлами в загальних каталогах WebDAV. Редиректор зчитує файл з сервера і локально кешує його на час редагування. Коли файл закривається, редиректор зберігає файл на сервері. Під час локального кешування файла редиректор викликає NTFS-драйвер для читання і запису файлу.

Коли файл записується на сервер, клієнтський редиректор викликає BackupRead () для локально кешированной файлу, отримує дані і зберігає їх на сервері. BackupRead () повертає зашифроване вміст файлу, при цьому в комп’ютері файл залишається в зашифрованому вигляді. Коли файл зчитується з сервера, редиректор викликає для кешированной файлу функцію BackupWrite (), приймаючу зашифровані дані і записуючу їх в зашифрований NTFS-файл.

Ksecdd

Ksecdd – це дуже “тонкий” компонент, який NTFS викликає, щоб обмінюватися даними з LSA. Ksecdd здійснює LPC-взаємодія з
LSA.

Використання EFS

EFS розроблений як сервіс, прозорий для користувачів і додатків. Проте користувачам для виконання деяких операцій потрібно взаємодіяти з EFS безпосередньо. До таких операцій відносяться перетворення файлів (шифрування і дешифрування), а також додавання і видалення користувачів файлів. Всі ці дії виконуються в діалоговому вікні Advanced (рис. 2), Яке викликається з вікна
Properties
, Що відкривається клацанням файлу правою кнопкою миші в Windows
Explorer.

Рис. 2. Діалогове вікно Advanced, що відкривається у вікні Properties

Шифрування

Для шифрування файлу встановіть прапорець Encrypt contents to secure
data
в діалоговому вікні Advanced і клацніть OK. Тоді EFS перетворює файл, як було описано раніше.

При шифруванні каталогу виконуються ті ж операції, що і при шифруванні файлу. Якщо каталог порожній, в заголовку каталогу встановлюється прапор шифрування (encrypted flag), що повідомляє EFS, що будь-який файл, що створюється в цьому каталозі, повинен шифруватися. Якщо каталог не порожній, відкривається ще одне діалогове вікно (рис. 3), запитуюча, чи потрібно зашифрувати лише цю папку або разом з підпапки і файлами.

Рис. 3. Діалогове вікно для підтвердження шифрування

Якщо обраний перемикач Apply changes to this folder only, каталог обробляється так, ніби він порожній, і в його заголовку встановлюється прапор шифрування. Якщо ж обраний перемикач Apply
changes to this folder, subfolders and files
, То кожен файл в каталозі та всіх його підкаталогах шифрується відповідно до наведеного вище описом. Прапор шифрування встановлюється в заголовку кожного підкаталогу і поточного каталогу.

Дешифрування

Дешифрування – операція, зворотна шифруванню. Виконується процедура, аналогічна процедурі шифрування файлу. Щоб розшифрувати файл, зніміть прапорець Encrypt contents to secure data в діалоговому вікні
Advanced
і клацніть OK. Тоді EFS розшифрує файл, як було описано раніше.

При дешифрування каталогу виконуються ті ж операції, що і при дешифрування файлу. Якщо каталог порожній, в заголовку каталогу знімається прапор шифрування. Якщо каталог непорожній, відкривається ще одне діалогове вікно (рис. 4), Запитуюча, чи потрібно дешифрувати тільки цю папку або разом з підпапки і файлами.

Рис. 4. Діалогове вікно для підтвердження дешифрування

Якщо встановлений перемикач Apply changes to this folder only, каталог обробляється так, ніби він порожній, і в заголовку каталогу знімається прапор шифрування. Якщо ж обраний перемикач Apply changes
to this folder, subfolders and files
, То кожен файл в каталозі і всіх його підкаталогах дешифрується відповідно до наведеного вище описом. Прапор шифрування знімається в заголовку кожного підкаталогу і поточного каталогу.

Додавання користувачів

При додаванні користувачів будь-якого файлу надається криптографічний доступ до цього файлу. Під криптографічним доступом розуміється, що користувачі можуть дешифрувати і шифрувати файл, а також додавати або видаляти інших користувачів. Однак наявність криптографічного доступу не означає, що у користувача є права доступу в файловій системі. Права доступу в файлової системи задаються списками управління доступом до файлів (ACL) в NTFS. Щоб у користувача був повний доступ до захищеного файлу, потрібно не лише надати криптографічний доступ, але і вказати в ACL, що даному користувачеві дозволяється звертатися до файлу.

Кнопка Details в діалоговому вікні Advanced відкриває діалогове вікно Encryption Details (рис. 5).

Рис. 5. Діалогове вікно Encryption Details

За допомогою кнопки Add можна вказати додаткових користувачів файлу, EFS-сертифікат яких зберігається в списках сертифікатів Trusted People або Other People, відомих поточним користувачеві. Крім того, можна шукати користувачів в Active Directory.

Видалення користувачів

Видалення користувача файлу забороняє йому криптографічний доступ до цього файлу. Ця операція виконується аналогічно додаванню користувачів. Клацанням кнопки Details в діалоговому вікні
Advanced
відкривається діалогове вікно Encryption Details (рис.
5
).

За допомогою кнопки Remove видаляються користувачі файлу. Як і при додаванні користувачів, при видаленні скасовується тільки криптографічний доступ до файлу. Якщо не вносити зміни в ACL файлової системи, віддалені користувачі як і раніше будуть мати правами доступу файлової системи до цього файлу.

Відновлення

Відновлення файлу виконується так само, як і його дешифрування. Агент відновлення повинен увійти на комп’ютер, де знаходиться файл, і у нього повинен бути доступ до закритого ключа сертифіката відновлення.

Агент відновлення може відкрити файл і зберегти його в новому файлі, що знаходиться поза ієрархії зашифрованих каталогів, тим самим зберігши файл в незашифрованому вигляді.

Щоб агенту відновлення не доводилося імпортувати закритий ключ сертифіката відновлення на комп’ютер користувача, можна налаштувати станцію відновлення (recovery station). Тоді можна зробити так, щоб користувачі надсилали файли, які потребують відновлення, на цю станцію, а агент відновлення входив на неї і відновлював файли.

Програмне використання

Інтерфейси

EFS надає кілька відкритих Win32-інтерфейсів, що працюють з зашифрованими файлами. Ці інтерфейси доступні в Platform SDK. Нижче наведена базова інформація з цих інтерфейсів, а повний опис міститься в документації Platform SDK.

EncryptFile

Визначення

BOOL WINAPI EncryptFile (
LPCWSTR   lpFilename)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ненульове значення.

Якщо функція зазнала невдачі, повертається 0. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

EncryptFile Microsoft Developer Network.

DecryptFile

Визначення

BOOL WINAPI DecryptFile (
LPCWSTR   lpFilename,
DWORD   dwReserved)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ненульове значення.

Якщо функція зазнала невдачі, повертається 0. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

DecryptFile Microsoft Developer Network.

AddUsersToEncryptedFile

Визначення

DWORD WINAPI AddUsersToEncryptedFile (
LPCWSTR   lpFilename,
PENCRYPTION_CERTIFICATE_LIST   pUsers)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

AddUsersToEncryptedFile Microsoft Developer Network.

RemoveUsersFromEncryptedFile

Визначення

DWORD WINAPI RemoveUsersFromEncryptedFile (
LPCWSTR   lpFilename,
PENCRYPTION_CERTIFICATE_HASH_LIST   pHashes)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

RemoveUsersFromEncryptedFile Microsoft Developer Network.

DuplicateEncryptionInfoFile

Копіює метадані EFS з одного файлу або каталогу в інший. Дозволяє користувачеві скопіювати файл, не запитуючи доступ до всіх сертифікатами, в які обгорнутий FEK. Функція особливо важлива для розробників додатків, в яких до зашифрованих файлів будуть звертатися кілька користувачів. З її допомогою розробники можуть забезпечити, щоб для всіх користувачів застосовувалися загальні параметри шифрування і загорнуті FEK.

Визначення

DWORD WINAPI DuplicateEncryptionInfoFile (
LPCTSTR   lpSourceFilename,
LPCTSTR   lpDestinationFilename,
DWORD   dwCreationDistribution,
DWORD   dwAttributes,
LPSECURITY_ATTRIBUTES   lpSecurityAttributes)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

DuplicateEncryptionInfoFile Microsoft Developer Network.

QueryUsersOnEncryptedFile

Ця функція запитує та повертає список хешей сертифікатів користувачів зашифрованого файлу.

Визначення

DWORD WINAPI QueryUsersOnEncryptedFile (
LPCWSTR   lpFilename,
PENCRYPTION_CERTIFICATE_HASH_LIST   pUsers)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

QueryUsersOnEncryptedFile Microsoft Developer Network.

QueryRecoveryAgentsOnEncryptedFile

Запитує і повертає список хешей сертифікатів агентів відновлення зашифрованого файлу.

Визначення

DWORD WINAPI QueryRecoveryAgentsOnEncryptedFile (
LPCWSTR   lpFilename,
PENCRYPTION_CERTIFICATE_HASH_LIST   pRecoveryAgents)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

QueryRecoveryAgentsOnEncryptedFile Microsoft Developer Network.

FileEncryptionStatus

Отримує інформацію про стан EFS даного файлу, зокрема, зашифрований чи файл і чи можна його шифрувати.

Визначення

BOOL FileEncryptionStatus (
LPCTSTR   lpFilename,
LPDWORD   lpStatus)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ненульове значення.

Якщо функція зазнала невдачі, повертається 0. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

FileEncryptionStatus Microsoft Developer Network.

SetUserFileEncryptionKey

Задає EFS-сертифікат поточного користувача.

Визначення

BOOL WINAPI SetUserFileEncryptionKey (
PENCRYPTION_CERTIFICATE   pEncryptionCertificate)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ERROR_SUCCESS.

Якщо функція зазнала невдачі, повертається системний код помилки. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

SetUserFileEncryptionKey Microsoft Developer Network.

EncryptionDisable

Дозволяє або забороняє шифрування заданого каталогу.

Визначення

BOOL WINAPI EncryptionDisable (
LPCWSTR   lpDirectoryname,
BOOL   bDisable)

Параметри

Значення, що повертаються

Якщо функція виконана успішно, повертається ненульове значення.

Якщо функція зазнала невдачі, повертається 0. Для отримання інформації про помилку викличте GetLastError ().

Опис

Додаткову інформацію і приклад вихідного коду див

EncryptionDisable Microsoft Developer Network.

Структури даних

В описаних вище EFS-функціях використовується кілька структур даних. Ці структури описані нижче.

EFS_CERTIFICATE_BLOB

Містить реальні дані сертифіката.

Визначення

typedef struct _CERTIFICATE_BLOB {
DWORD   dwCertEncodingType;
DWORD   cbData;
PBYTE   pbData;
} EFS_CERTIFICATE_BLOB, *PEFS_CERTIFICATE_BLOB;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

EFS_CERTIFICATE_BLOB Microsoft Developer Network.

ENCRYPTION_CERTIFICATE

Містить сертифікат.

Визначення

typedef struct _ENCRYPTION_CERTIFICATE {
DWORD   cbTotalLength;
SID   *pUserSid;
PEFS_CERTIFICATE_BLOB   pCertBlob;
} ENCRYPTION_CERTIFICATE, *PENCRYPTION_CERTIFICATE;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

ENCRYPTION_CERTIFICATE Microsoft Developer Network.

Додаткову інформацію про структуру даних SID див

SID Microsoft Developer Network.

ENCRYPTION_CERTIFICATE_LIST

Містить список сертифікатів.

Визначення

typedef struct _ENCRYPTION_CERTIFICATE_LIST {
DWORD   nUsers;
PENCRYPTION_CERTIFICATE   *pUsers;
} ENCRYPTION_CERTIFICATE_LIST, *PENCRYPTION_CERTIFICATE_LIST;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

ENCRYPTION_CERTIFICATE_LIST Microsoft Developer Network.

EFS_HASH_BLOB

Містить дані хеша сертифіката.

Визначення

typedef struct _EFS_HASH_BLOB {
DWORD   cbData;
PBYTE   pbData;
} EFS_HASH_BLOB, *PEFS_HASH_BLOB;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

EFS_HASH_BLOB Microsoft Developer Network.

 

ENCRYPTION_CERTIFICATE_HASH

 

Містить хеш сертифіката.

Визначення

typedef struct _ENCRYPTION_CERTIFICATE_HASH {
DWORD   cbTotalLength;
SID   *pUserSid;
PEFS_HASH_BLOB   pHash;
LPWSTR   lpDisplayInformation;
} ENCRYPTION_CERTIFICATE_HASH, *PENCRYPTION_CERTIFICATE_HASH;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

ENCRYPTION_CERTIFICATE_HASH Microsoft Developer Network.

Додаткову інформацію про структуру даних SID див

SID Microsoft Developer Network.

 

ENCRYPTION_CERTIFICATE_HASH_LIST

 

Містить список хешей сертифікатів.

Визначення

typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST {
DWORD   nUsers;
PENCRYPTION_CERTIFICATE_HASH   *pUsers;
} ENCRYPTION_CERTIFICATE_HASH_LIST, *PENCRYPTION_CERTIFICATE_HASH_LIST;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див

ENCRYPTION_CERTIFICATE_HASH_LIST Microsoft Developer Network.

SECURITY_ATTRIBUTES

Містить описувач захисту об’єкта.

Визначення

typedef struct _SECURITY_ATTRIBUTES {
DWORD   nLength;
LPVOID   lpSecurityDescriptor;
BOOL   bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;

Члени

Опис

Додаткову інформацію і приклад вихідного коду див
SECURITY_ATTRIBUTES Microsoft Developer Network.

Безпека

В цілому EFS забезпечує прийнятну конфіденційність файлів. EFS-компоненти вдало спроектовані і реалізовані. Код EFS успішно справляється з очищенням ресурсів після закінчення їх використання і з відновленням після системних помилок, які виникли при виконанні операцій. Крім того, EFS-компоненти повторно використовують існуючий код, звертаючись до системних API при управлінні ключами і сертифікатами.

Важливо відзначити, що EFS не використовується для забезпечення цілісності файлів і захисту на основі аутентифікації.

Розробники EFS свідомо пішли на компроміс між абсолютною безпекою та зручністю. Через ці компромісних рішень можливі деякі граничні випадки, описані нижче. Ці випадки не відносяться до помилок – вони стали можливими внаслідок певних рішень при проектуванні і були відомі з самого початку. Крім того, при звичайній роботі переважна більшість користувачів EFS ніколи не зіткнеться з цими граничними випадками. Ми розглянемо їх лише для того, щоб підкреслити, що застосування EFS вимагає більш високого рівня знань у галузі управління файлами.

Про авторів

Автори цього документа – Уеслі Гріффін (Wesley Griffin), Майкл Хейман (Michael Heyman), Річард Клейтон (Richard Clayton), Майкл Ст. Джонс (Michael St. Johns) і Девід Карман (David Carman) – члени групи Cryptographic Technologies Group в Network Associates Laboratories. Network Associates Laboratories – багатопрофільна дослідна організація, яка завоювала всесвітнє визнання в області мережевої безпеки, криптографічних технологій, компонентів інфраструктури захисту, середовищ безпечного виконання, адаптивної захисту мереж, захисту розподілених систем і моделювання архітектури захисту.

Автори хотіли б висловити вдячність Майку Лаі (Mike Lai), Девід Кросс (David Cross), Роберту Гу (Robert Gu) і Дрю Купер (Drew Cooper) (всі вони – співробітники Microsoft), що надали інформацію про EFS. Ми також хотіли б подякувати Дуга Бейера (Doug Bayer) і Дейва Томпсона (Dave Thompson) за надані ними ресурси Microsoft.

Довідкова інформація

Девід Кросс (David Cross)

Encrypting File System in Windows XP and Windows Server 2003, Microsoft, серпень 2002
Microsoft MSDN Library, Січень 2002
Раджив Нагар (Rajeev Nagar), О “Рейлі (O” Reilly)
Windows NT File
System Internals: A Developer”s Guide, Вересень 1997 р.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*