Одне з частих запитань на позицію Node.js розробника. Найчастіше його запитують в розмові про різницю між HTTP i HTTPS або в контексті авторизації, особливо JWT.
Для початку потрібно розібрати, що таке приватний і публічний ключі. Публічний ключ не секретний і ти можеш вільно його розповсюджувати, тоді як приватний ключ ти маєш надійно зберігати і нікому не показувати.
Шифрування
В прикладі, простими словами розберемо як працює шифрування. Уявіть, що у тебе є друг і ти хочеш, щоб він передав тобі якусь секретну інформацію в зашифрованому вигляді, а ти її розшифрував після отримання.
Для того, щоб це зробити потрібно згенерувати пару ключів(публічний і приватний). Приватний ключ тримаєш в секреті, а от публічний даєш своєму другу. За допомогою публічного ключа він зможе зашифрувати повідомлення і відправити тобі. А от розшифрувати його зможе тільки той хто має приватний ключ.
Підпис
Продовжуючи наш приклад із повідомленням, уявіть, що тепер ти хочеш надіслати другу секретне повідомлення. Він генерує пару ключів і дає свій публічний ключ. Тоді ви шифруєте повідомлення його публічним ключем, щоб розшифрувати його зміг лише він.
Саме цю проблему вирішує цифровий підпис. Ти підписуєш повідомлення своїм приватним ключем, а друг перевіряє підпис твоїм публічним. Тоді навіть якщо його публічний ключ мають багато людей і можуть зашифрувати для нього повідомлення, підробити підпис вони не зможуть - бо для цього потрібен твій приватний ключ.
Якщо ти зараз пробуєш згадати де ще ти це бачив, то такий самий принцип використовується в авторизації з JWT токенами😁