Чим відрізняється шифрування деяких даних від підписання деяких даних (за допомогою RSA)?
Шифрування зберігає конфіденційність повідомлення ("деякі дані"), тоді як підписання забезпечує неповернення: тобто підписати його міг лише суб'єкт, який його підписав. Існують і функціональні відмінності; читати далі.
Чи просто повертається роль публічно-приватних ключів?
Абсолютно ні. Використання одних і тих же приватних ключів для підписання та розшифрування (або, аналогічно, одних і тих же відкритих ключів для перевірки та шифрування ) насувається, оскільки не слід змішувати цілі. Це не стільки математична проблема (RSA все ще має бути захищеною), але проблема з управлінням ключами , де, наприклад, ключ підпису повинен мати коротший термін роботи і містити більше захисту перед його використанням.
Для цього ж повідомлення слід використовувати приватний ключ відправника для підписання, а одержувачі - довірений відкритий ключ для шифрування. Зазвичай шифрування «знак-то-то» використовується, інакше супротивник може замінити підпис своїм. Так само ви повинні використовувати приватний ключ одержувача для розшифровки та надійний відкритий ключ відправника для перевірки.
Крім того, ви повинні розуміти, що генерація підписів не використовує "шифрування за допомогою приватного ключа". Незважаючи на те, що всі операції RSA засновані на модульній експоненції, схема накладки абсолютно інша для створення підписів. Крім того, відкритий ключ має абсолютно інші властивості, ніж приватний ключ RSA у всіх практичних цілях використання RSA.
Наприклад, я хочу використовувати свій приватний ключ для генерування повідомлень, щоб тільки я міг бути відправником.
Це властивість неповернення, яку можна досягти підписанням.
Я хочу, щоб мій відкритий ключ використовувався для читання повідомлень, і мені байдуже, хто їх читає.
Публічний ключ слід вважати відомим усім. Якщо ви хочете, щоб усі читали повідомлення, то ви просто не шифруєте їх.
Підпис, як правило, не впливатиме на зміст повідомлення. Повідомлення вважається окремим від підписів. Офіційно такі підписи відомі як "підписи з додатком", де в додатку є повідомлення. Це трохи дивне ім'я, оскільки повідомлення вважається важливішим, ніж підпис над ним, але так. Лише небагато підписів пропонують (часткове) відновлення повідомлення; вони більше не використовуються і зазвичай вважаються застарілими.
Зауважте, що протоколи підпису, такі як CMS, можуть розгорнути формат контейнера, що включає в себе і повідомлення, і підпис. У такому випадку вам потрібно спочатку дістати з контейнера повідомлення - все ще незашифроване - як розпакування файлу з простого архіву .zip. Тож повідомлення може бути прихованим від перегляду і не може бути безпосередньо використане в такому випадку.
Я хочу мати можливість зашифрувати певну інформацію та використовувати її як ключ продукту для мого програмного забезпечення. Мені байдуже лише те, що я єдиний, хто може їх створити.
Шифрування використовується для досягнення конфіденційності. У минулому покоління підписів RSA часто вважалося "шифруванням приватним ключем". Однак операції зовсім інші, як пояснено вище, і пізніші стандарти відчайдушно намагаються розділити шифрування та генерацію підписів.
Я хотів би включити свій відкритий ключ у своє програмне забезпечення для розшифрування / зчитування підпису ключа. Мені байдуже, хто може читати дані в ключі, мені байдуже лише те, що я єдиний перевіряється, хто може їх генерувати.
Так, це називається встановленням довіри до відкритого ключа. Однак захист програмного коду дуже відрізняється від захисту повідомлень. Ви можете виконати підпис коду, але тоді вам знадобиться щось перевірити підпис поза кодом . Є операційні системи, які пропонують це.
Наприклад, є Microsoft Authenticode. Магазини додатків, такі як магазин iStore та Android, можуть або не можуть використовувати підписи коду, але вони гарантують, що ваша програма не клонована або принаймні не клонована в магазині. Криптографія - це не завжди рішення.
Уникнути клонування / зміни коду взагалі набагато складніше, і ви б надійно знаходилися на території DRM, якщо підете цим шляхом.
Чи підписання корисно в цьому сценарії?
Так, абсолютно. Це, безумовно, може переконатися, що повідомлення були підписані лише вами, якщо є довіра до відкритого ключа. Якщо це може бути корисно для автентифікації вашого коду програми / інтегрованого відкритого ключа, повністю залежить від середовища, в якому ви очікуєте запустити код.