Криптосистема з відкритим ключем Криптографічний система з відкритим ключем (різновид асиметричного шифрування, асиметричного шифру) - система шифрування і / або електронного підпису (ЕП), при якій відкритий ключ передається по відкритому (тобто незахищені, доступному для спостереження) каналу і використовується для перевірки ЕП і для шифрування повідомлення. Для генерації ЕП і для розшифровки повідомлення використовується закритий ключ. Криптографічні системи з відкритим ключем в даний час широко застосовуються в різних мережевих протоколах, зокрема, в протоколах TLS і його попереднику SSL (що лежать в основі HTTPS), в SSH. Також використовується в PGP, S / MIME. Ідея криптосистеми з відкритим ключем Ідея криптографії з відкритим ключем дуже тісно пов'язана з ідеєю односторонніх функцій, тобто таких функцій f (x), що за відомим x досить просто знайти значення f (x), тоді як визначення x з f (x) неможливо за розумний термін. Але сама одностороння функція даремна в застосуванні: нею можна зашифрувати повідомлення, але розшифрувати не можна. Тому криптографія з відкритим ключем використовує односторонні функції з лазівкою. Лазівка - це деякий секрет, який допомагає розшифрувати. Тобто існує такий y, що знаючи f ( x ) і y, можна вичислити x. Наприклад, якщо розібрати годинник на безліч складових частин, то дуже складно зібрати знову працюючий годинник. Але якщо є інструкція по складанню (лазівка), то можна легко розв'язати цю проблему. Одержувач інформації формує відкритий ключ і "лазівку" (іншими словами, відкриту і закриту частину ключа), потім передає відкритий ключ посилачеві, а "лазівку" залишає у себе. Посилач шифрує інформацію на основі відкритого ключа: таку зашифровану інформацію просто розшифрувати, лише маючи одночасно і відкритий ключ, і "лазівку". В термінах функції, одержувач формує f ( ) з лазівкою y, потім передає інформацію про параметри функції f ( ) посилачеві (при цьому, навіть знаючи параметри функції f ( ), неможливо виявити "лазівку" за розумний термін). Після цього посилач формує шифроване повідомлення f ( x ), а одержувач витягає x з f (x), знаючи y. Зрозуміти ідеї і методи криптографії з відкритим ключем допомагає наступний приклад - зберігання паролів у видаленому комп'ютері, до якого повинні підключатися користувачі. Кожен користувач в мережі має свій пароль. При вході він вказує ім'я і вводить секретний пароль. Але якщо зберігати пароль на диску видаленого комп'ютера, то хто-небудь його може вважати (особливо легко це зробити адміністраторові цього комп'ютера) і отримати доступ до секретної інформації. Для вирішення завдання використовується одностороння функція. При створенні секретного пароля в комп'ютері зберігається не сам пароль, а результат обчислення функції від цього пароля і імені користувача. Наукова основа Початок асиметричним шифрів було покладено в роботі «Нові напрямки в сучасній криптографії» Уитфилда Діффі і Мартіна Хеллмана, опублікованій в 1976 році. Перебуваючи під впливом роботи Ральфа Меркле про поширення відкритого ключа, вони запропонували метод отримання секретних ключів, використовуючи відкритий канал. Цей метод експоненціального обміну ключів, який став відомий як обмін ключами Діффі - Хеллмана, був першим опублікованим практичним методом для встановлення поділу секретного ключа між завіреними користувачами каналу. У 2002 році Хеллман запропонував називати даний алгоритм «Діффі - Хеллмана - Меркле», визнаючи внесок Меркле в винахід криптографії з відкритим ключем. Ця ж схема була розроблена Малькольмом Вільямсоном (англ. Malcolm J. Williamson) в 1970-х, але трималася в секреті до 1997 року. Метод Меркле з розповсюдження відкритого ключа був винайдений в 1974 і опублікований в 1978 році, його також називають загадкою Меркле.У 1977 році вченими Рональдом Ривестом, Аді Шамір і Леонардом Адлеманом з Массачусетського технологічного інституту розробили алгоритм шифрування, заснований на проблемі про розкладанні на множники. Система була названа за першими літерами їхніх прізвищ (RSA - Rivest, Shamir, Adleman). Ця ж система була винайдена в 1973 році Клиффордом Коксом (англ. Clifford Cocks), які працювали в центрі урядового зв'язку (GCHQ), але ця робота зберігалася лише у внутрішніх документах центру, тому про її існування не було відомо до 1977 року. RSA став першим алгоритмом, придатним і для шифрування, і для цифрового підпису. Взагалі, в основу відомих асиметричних криптосистем кладеться одна зі складних математичних проблем, яка дозволяє будувати односторонні функції і функції-лазівки. Наприклад, криптосистеми Меркля - Хеллмана і Хору - Ривеста спираються на так звану задачу про укладання рюкзака. Схема шифрування з відкритим ключем Нехай K - простір ключів, а e і d - ключі шифрування і расшифрования відповідно. Ee - функція шифрування для довільного ключа e ∈ K, така що: Ee (m) = c Тут c ∈ C, де C - простір шифротекстов, а m ∈ M, де M - простір повідомлень. Dd - функція расшифрования, за допомогою якої можна знайти початкове повідомлення m, знаючи шифротекст c : Dd ( c ) = m { Ee : e ∈ K}- набір шифрування, а {Dd : d ∈ K} - відповідний набір для расшифрования. Кожна пара (E, D) має властивість: знаючи Eе, неможливо вирішити рівняння E e ( m ) = c, тобто для цього довільного шифротекста c ∈ C, неможливо знайти повідомлення m ∈ M. Це означає, що по цьому e неможливо визначити відповідний ключ расшифрования d. Ee є односторонньою функцією, а d - лазівкою. Нижче показана схема передачі інформації особою А обличчю В. Вони можуть бути як фізичними особами, так і організаціями і так далі. Але для більше за легкий 1.Боб вибирає пару ( e, d ) і шле ключ шифрування e (відкритий ключ) Алісі по відкритому каналу, а ключ дешифрування d (закритий ключ) захищений і секретний (він не повинен передаватися по відкритому каналу). 2. Щоб послати повідомлення m Боба, Аліса застосовує функцію шифрування, визначену відкритим ключем e : Ee (m) = c, c - отриманий шифротекст. 3. Боб розшифровує шифротекст c, застосовуючи зворотне перетворення Dd, однозначно визначене значенням d. Основні принципи побудови криптосистем з відкритим ключем 1. Починаємо з важкого завдання P. Вона повинна вирішуватися складно в сенсі теорії: не повинно бути алгоритму, за допомогою якого можна було б перебрати всі варіанти вирішення завдання P за поліноміальний час щодо розміру завдання. Більш правильно сказати: не повинно бути відомого поліноміального алгоритму, вирішального це завдання - так як не для одного завдання ще поки не доведено, що для неї відповідного алгоритму немає в принципі.