Цифрові сигнатури (підписи), збірки і розгортання, статті, програмування - програмування

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

Цифрові підписи (сигнатури) засновані на криптографічних методах, в яких застосовуються відкриті ключі. У світі криптографії застосовується два основних криптографічних методу - симетричні шифри (загальний ключ) і асиметричні шифри (відкритий ключ). Симетричні шифри спільно використовують секретний ключ як для кодування, так і для розшифровки. Стандарт шифрування даних DES (Data Encryption Standard), Triple DES (Потрійний стандарт шифрування даних) і RC2 - приклади симетричних алгоритмів шифрування. Симетричні шифри можуть бути дуже ефективними і потужними в забезпеченні таємності сполучення між двома довіряють один одному співпрацюють особами, але вони не зовсім підходять для ситуацій, де важко спільно використовувати секретний ключ. З цієї причини симетричні шифри вважаються невідповідними для цифрових підписів (сигнатур). Саме тому цифрові підписи (сигнатури) використовуються не для секретності, а лише для ідентифікації і розпізнавання, що є більш відкритим справою. Якби ви спільно використовували ваш симетричний ключ з кожним, хто потенційно хотів би переконатися в достовірності ваших збірок, то з необережності могли довірити його людям, яким захотілося виконати вашу роль. Для використання в цифрових підписах (сигнатури) набагато краще підходять асиметричні шифри.

Асиметричні шифри, які також називаються шифрами з відкритим ключем, використовують криптографічний пару відкритого і секретного ключа. Ключі в парі математично пов'язані, і генеруються вони разом; проте надзвичайно важко обчислити один ключ по іншому. Зазвичай відкритий ключ видається кожному, хто хотів би переконатися в достовірності власника збірки З іншого боку, власник зберігає відповідний секретний ключ підпису в таємниці, щоб ніхто не міг підробити його підпис. Метод шифрування за схемою відкритого ключа RSA (RSA-кодування) - приклад системи шифрування з відкритим ключем.
Шифрування з відкритим ключем засновано на дуже цікавою математичної схемою, яка дозволяє зашифрувати звичайний текст одним ключем, а розшифрувати, тільки знаючи ключ, відповідний вихідного Наприклад, коли відкритий ключ використовується, щоб зашифрувати початкові дані (звані відкритим текстом), тільки відповідний секретний ключ може допомогти в розшифровці цього тексту. Навіть ключ, який використовувався для шифрування, не допоможе в розшифровці зашифрованого тексту! Цей сценарій корисний тоді, коли секретні повідомлення надсилаються тільки людині, яка знає секретний ключ.

Розглянемо тепер протилежний сценарій. Людина, яка знає секретний ключ, використовує його для того, щоб зашифрувати відкритий текст. Добутий зашифрований текст не є таємницею, так як кожен зацікавлений може отримати відкритий ключ, щоб розшифрувати даний текст. Цей сценарій марний для збереження таємниці, але дуже ефективний для розпізнавальних цілей. Немає необхідності шифрувати вихідні дані повністю, тому, щоб підвищити ефективність, замість них шифрується компактний хеш-код, який з високою ймовірністю характерний для вихідних даних. Якщо ви отримуєте файл, який містить зашифровану версію його власного хеш-коду, і розшифровуєте його за допомогою відповідного відкритого ключа, то фактично ви повторно обчисліть хеш-код вихідних даних. І якщо тепер ви виявите, що він збігається з хеш-кодом, який був зашифрований, можете бути абсолютно впевнені, що саме власник секретного ключа доклав цифровий підпис і дані не були змінені іншими особами Якщо припустити, що власник зумів зберегти таємницю секретного ключа, тоді збіг результатів обчислення доводить, що ніхто не зміг би спотворити файл після того, як він був підписаний в цифровій формі. На рис. 7.3 показано, як працює цифровий підпис (сигнатура).

Мал. 7.3. Ось так працює цифровий підпис (сигнатура)

Цифрове підписання методом шифрування за схемою відкритого ключа RSA і SHA1

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