Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik_1_0.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.93 Mб
Скачать

6.2. Експорт сесійних ключів

Після виконання операції шифрування постає проблема передачі шифрованих даних. Самі по собі дані, звичайно, передавати можна, внаслідок їх захищеності. Але нагадаємо ще раз, що в Crypto API використовуються симетричні алгоритми шифрування, і якщо на приймаючій стороні не буде використаний той же самий сесійний ключ, який був використаний для шифрування, то розшифрувати дані на приймаючій стороні не вдасться. У самих шифрованих даних Crypto API самостійно сесійні ключі теж не передає. Замість цього Crypto API надає розвинені механізми експорту значення сесійного ключа в зовнішній масив даних.

Базова функція експорту ключів має наступний опис:

BOOL CryptExportKey(HCRYPTKEY hKey,

HCRYPTKEY hExpKey,

DWORD dwBlobType,

DWORD dwFlags,

BYTE* pdData,

DWORD* pdwDataLen);

Першим параметром цієї функції передається хендл ключа, який буде експортований. Фактично, експорт ключа можна представити як окрему операцію шифрування ключа. Отже, для такої операції необхідний ще один ключ шифрування. Зазвичай в Crypto API сесійний ключ шифрують за допомогою асиметричного алгоритму. Параметр hExpKey в більшості випадків инициализируют контекстом публічного ключа одержувача. Параметр dwBlobType визначає формат одержуваного блоку експорту. Можливо, скажімо, вказати, що експорту буде підлягати тільки лише публічний ключ. У цьому випадку параметр hExpKey має дорівнювати 0 (шифрування публічного ключа не потрібно) і на виході функції виходить просте значення публічного ключа. Для такого випадку параметр dwBlobType має дорівнювати PUBLICKEYBLOB. Зазвичай же, при експорті сесійного ключа використовується значення SIMPLEBLOB. Останні значення даного параметра досить специфічні і застосовуються рідко. Параметри pbData і pdwDataLen вказують на масив, виділений для отримання експортованого ключа, і на його розмір.

ПОРАДА

Хотілося б також звернути увагу читача на досить важливий момент: іноді для обміну ключами використовуються кілька більш складні схеми, ніж просто шифрування даних сесійного ключа публічним ключем. Прикладом подібної ускладненої схеми обміну може служити алгоритм обміну ключами по методу Діффі-Хеллмана. У даному алгоритмі використовуються обидва публічних ключа - як відправника, так і одержувача. Більш докладну інформацію про даний алгоритм читач може знайти в спеціалізованій літературі.

6.3. Імпорт сесійних ключів

Базова функція імпорту ключів має наступний опис:

BOOL CryptImportKey(HCRYPTPROV hProv,

BYTE* pbData,

DWORD dwDataLen,

HCRYPTKEY hPubKey,

DWORD dwFlags,

HCRYPTKEY* phKey);

В якості першого параметра в дану функцію передається ініціалізований контекст криптопровайдера. Для успішного завершення роботи функції CryptImportKey необхідно, щоб при ініціалізації криптопровайдера був зазначений контейнер ключів. Зокрема, це необхідно для успішного імпорту секретних ключів в контейнер ключів. Параметр pbData являє собою посилання на імпортовані дані, параметр dwDataLen - довжину цих даних. У параметрі hPubKey вказують хендл ключа, застосовуваного при імпорті (для розшифрування сесійного ключа). Параметр dwFlags зазвичай не застосовується і може бути встановлений в 0. В параметрі phKey повертається імпортований ключ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]