Архітектура

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

У 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 отримує запит на перетворення файлу, виконується
кілька операцій.

  • Спочатку EFS виробляє кілька перевірок, зокрема, чи можна
    шифрувати файл і чи достатньо місця на диску для шифрування файлу.
    Якщо файл позначений як системний або знаходиться в каталозі
    %systemroot%
    , Його не можна шифрувати.
  • Потім EFS генерує ключ шифрування файлу та "загортає" його
    у відкритий ключ поточного користувача. Якщо задана політика
    відновлення (описується нижче), то FEK, крім того,
    "Обертається" у відкриті ключі агентів відновлення.
  • Після того як ключ шифрування файлу підготовлений, створюються
    метадані EFS. У них міститься DDF (Data Decryption Field),
    представляє собою FEK, обгорнутий в усі відкриті ключі
    користувачів, яким надано доступ до файлу. Метадані також
    містять DRF (Data Recovery Field), що представляє собою FEK,
    обгорнутий в усі відкриті ключі агентів відновлення. EFS
    запам'ятовує в метаданих та іншу інформацію, таку як версія EFS і
    алгоритм шифрування.
  • Далі EFS створює в каталозі тимчасовий файл. Для резервування
    кожен потік даних у вихідному файлі копіюється у тимчасовий файл.
    Потім кожен потік даних у вихідному файлі усікається до нульової
    довжини, а потім довжині потоку знову присвоюється початкове
    значення. У результаті всі дані потоку видаляються. EFS записує
    метадані у вихідний файл. З цього моменту у EFS є текстові
    дані в тимчасовому файлі і порожній вихідний файл, позначений як
    зашифрований (оскільки для нього є метадані EFS).
  • EFS читає потоки з тимчасового файлу і записує їх у вихідний
    файл. Завдяки транспарентності 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>

*

*