Розвиваючи тему, розпочату тут і тут, розповім ще про один механізм автентифікації на web-ресурсах. Механізм простий, в його основі лежить використання ЕЦП, для зберігання ключів при цьому використовується USB-токен.
Основним завданням алгоритмів, описаних у попередніх статтях, був захист пароля від перехоплення і безпечне зберігання секрету (наприклад, хеша пароля) в БД сервера. Однак існує ще одна серйозна загроза. Це небезпечне середовище в якому ми використовуємо паролі. Програмні та апаратні кейлогери, шпигунське ПЗ контролююче форми введення браузерів, атака MitM, що контролює не тільки протокол автентифікації, але і саму структуру html-сторінки, на якій вводиться пароль, та й просто сусід підглянув за вами представляють загрозу, якою ніяка схема парольної автентифікації нічого не зможе протиставити. Цю проблему вирішили свого часу придумавши багатофакторну автентифікацію. Суть її полягає в тому, що для успішної автентифікації треба знати секрет і володіти якимось предметом (у нашому випадку usb-токен і його пін-код).
Ось що пропонують розробники засобів захисту інформації.
USB-токен - апаратний пристрій, що вміє формувати ключову пару і здійснює електронний цифровий підпис, для виконання операцій вимагає введення пін-коду. При формуванні ЕЦП використовується криптографія на еліптичних кривих. Не потребує встановлення драйверів, визначається як HID-пристрій.
Кросбраузерний плагін - вміє працювати з usb-токеном, має програмний інтерфейс доступу до криптографічних функцій. Не потребує адміністративних прав для встановлення.
Пропоновані компоненти є свого роду конструктором для вбудовування різних криптографічних функцій у web-додатки. З їх допомогою можна реалізовувати функції шифрування, автентифікації та ЕЦП з високим рівнем безпеки.
Наприклад, схема автентифікації може виглядати так.
Реєстрація:
- Клієнт генерує в токені ключову пару e, d;
- Публічний ключ e клієнт відсилає на сервер;
Автентифікація:
- Клієнт відсилає серверу логін;
- Сервер генерує RND і відсилає клієнту;
- Клієнт створює RND і надсилає серверу підписане повідомлення (RND- server||RND - client||Server -name);
- Сервер перевіряє справжність ЕЦП використовую публічний ключ клієнта;
Для тих хто з недовірою ставиться до «велосипедів» - погуглити «ISO public-Key Two-pass Unilateral Authentication Protocol».
Як зазвичай - демонстрація. Для роботи необхідно мати USB-токен і встановити плагін. Токени для тестування можна взяти у мене, є 10 штук - пишіть в личку. Купити можна тут.