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

6.6. Цифровий підпис

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

Саме такий підхід до формування цифрового підпису використовується в базових функціях Crypto API для роботи з підписом. Базова функція отримання підпису хешу даних має наступний опис:

BOOL CryptSignHash(HCRYPTHASH hHash,

DWORD dwKeySpec,

LPCTSTR sDescription,

DWORD dwFlags,

BYTE* pbSignature,

DWORD* pdwSigLen);

В якості першого параметра використовується значення хендла хеш-об'єкта, вже ініціалізованих даними (за допомогою функції CryptHashData). Параметр dwKeySpec визначає, яка саме пара ключів буде використана для формування підпису (AT_KEYEXCHANGE (пара для обміну ключами) або AT_SIGNATURE (пара для формування цифрового підпису)). В багатьох криптопровайдерів пара ключів, призначена для обміну ключами, може також використовуватися і для формування цифрового підпису (але не у всіх криптопровайдерів). Параметр sDescription більш не використовується в даній функції і його значення повинне завжди бути встановлено в NULL. Параметр dwFlags зазвичай встановлюють також в 0. Параметри pbSignature і pdwSigLen використовують для коректної вказівки посилання на масив вихідних даних і його розміру.

6.7. Перевірка цифрового підпису

Для перевірки цифрового підпису хеш-значення використовується базова функція, що має наступний опис:

BOOL CryptVerifySignature(HCRYPTHASH hHash,

BYTE* pbSignature,

DWORD dwSigLen,

HCRYPTKEY hPubKey,

LPCTSTR sDescription,

DWORD dwFlags);

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

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