Цифрові підписи

За допомогою цифрового підпису можна підписувати повідомлення, що посилають по електронній пошті, і інші цифрові документи таким чином, щоб відправник не зміг потім заперечувати, що посилав їх. Один розповсюджений спосіб одержання цифрового підпису полягає в тім, що документ пропускається через необоротний алгоритм хешування, що дуже важко інвертувати. Хеш-функція, як правило, формує результат фіксованої довжини, що не залежить від споконвічної довжини документа. Найбільш популярними функціями хешування є MD5 (Message Digest 5 — профіль повідомлення 5), що створює 16-байтовый результат, і алгоритм SHA(Secure Hash Algorithm — надійний алгоритм хешування), що формує 20-байтовый результат. На наступному кроці передбачається використання криптографії з відкритим ключем, як описувалося вище. Власник документа за допомогою свого закритого ключа з хешу одержує D(hash). Це значення, називане сигнатурним блоком, додається до документа й посилає відправникові, як показано на мал. 9.2. Іноді застосування функції D до хеш-коду називають дешифруванням хешу, але насправді ця операція не є дешифруванням, тому що хеш-код не був зашифрований. Це просто математичне перетворення хешу.

 

Коли документ і хеш-код прибувають, одержувач спочатку за допомогою алгоритму MD5 або SHA (про вибір алгоритму відправник і одержувач домовляються заздалегідь) обчислює хеш-код документа. Потім одержувач застосовує до сигнатурного блоку алгоритм шифрування з відкритим ключем, одержуючи E(D(hash)). У результаті він зашифровує «розшифрований?» хеш-код, знову одержуючи оригінальне значення хеш-кода. Якщо обчислений заново хеш-код не збігається з розшифрованим сигнатурним блоком, це значить, що або повідомлення, або сигнатурний блок були ушкоджені — або випадково, або навмисно. Зміст цієї схеми в тім, що повільне шифрування з відкритим ключем застосовується тільки для невеликого по розмірах хеш-кода. Зверніть увагу, що даний метод працює тільки в тому випадку, якщо для всіх х

E(D(x)) = х.

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

D(E(x)) = х,

тобто Е являє собою функцію шифрування, a D — функцію дешифрування. Для можливості застосування цих функцій у цифрових підписах потрібно, щоб порядок застосування функцій не мав значення, тобто функції

D і £ повинні мати властивість коммутативности1. На щастя, алгоритм RSA має таку властивість.

Щоб використати схему електронного підпису, одержувач повинен знати відкритий ключ відправника. Деякі користувачі публікують властивості відкритих ключів на своїх web-сторінках. Інші цього не роблять, тому що побоюються, що зловмисник може зламати сторінку й непомітно підмінити ключ. Для захисту від подібних дій потрібен спеціальний механізм розподілу відкритих ключів. Один із широко застосовуваних методів полягає в тім, що відправник прикріплює до повідомлення сертифікат, що містить ім'я користувача, і відкритий ключ, підписані ключем довіреної третьої сторони. Як тільки користувач одержить відкритий ключ третьої сторони, він може одержувати сертифікати від всіх відправників, що використають цю довірену третю сторону для створення своїх сертифікатів.

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