Мені дуже подобається перший підхід загалом.
- це просто зрозуміти та реалізувати
- це безпечно (наскільки мені відомо)
- це не рідкість підходу, який я бачив, як застосовувався в минулому
Одне, що я не бачу згадати про перше, про що слід пам’ятати, для часової позначки, яка використовується для хешування маркера, має бути термін TTL, який є надзвичайно коротким (як 1 секунда), щоб ви переконалися, що повідомлення не було надіслано таку ж мітку часу та маркер із повідомлення на 12 годин раніше; Очевидно, це було б обчислено як законний, але це не в цьому випадку.
Якщо це єдині два варіанти, які ви розглядаєте, хоча я просто хотів би переконатися, що ви також подивилися інші підходи, оскільки їх багато. Справді більше, ніж я збираюсь перерахувати. Це декілька загальних авторських підходів, які варто вивчити лише для того, щоб зрозуміти, чи можуть вони краще відповідати вашій меті, і якщо нічого іншого, розуміючи їх, можуть дати вам кілька ідей, які допоможуть посилити той підхід, який ви використовуєте.
Зверніть увагу, я не є експертом з безпеки.
OAuth / Federated
У такому підході у вас є сторона-гарант, де споживчий код запитує маркер / cert / що у вас від них і передає вам це, в цей момент все, що вам потрібно зробити, - це запитати третьої сторони, чи надано вам ключ законний.
Про:
- На основі стандартів
- Проблеми знайдуть інші в системах інших людей, тож ви дізнаєтесь, чи станеться невпевненість у собі
- Набагато менше авторських робіт вам знадобиться
Con:
- Вам потрібно мати справу з стороннім обслуговувачем та їх API, або створити та розмістити власну "третю сторону", щоб відокремити аутентифікацію від вашої основної служби.
- Для багатьох послуг надмірність, але концептуально варто задуматися
Асинхронні сертифікати
Тут ви могли б, щоб ваші клієнти шифрували свої комунікації за допомогою публічного сертифікату, яким ви поділилися з ними під час створення користувача. На вашій стороні ви б розшифрували, використовуючи приватний ключ, пов’язаний з користувачем там. Як правило, ви б ініціювали спілкування з відповіддю на виклик, щоб показати, що вони можуть шифрувати / розшифровувати, як ви очікуєте, що визначите їх тим, ким вони претендують. Хоча можливі "синхронні" підходи, які не використовують виклик-відповідь, вони мають трохи менший рівень безпеки та певний час синхронізації, що може зробити їх складнішими.
від Novell (так я знаю, novell? дійсно?)
Токени використовують змінну як основу для генерування одноразового пароля. Ця змінна називається викликом. Два основні методи визначення змінної, що використовується для створення пароля, є асинхронними або синхронними.
З асинхронним методом або методом реагування на виклик серверне програмне забезпечення надсилає маркер зовнішній виклик --- випадково генеровану змінну --- для пристрою лексеми для шифрування. Маркер використовує цю змінну виклику, алгоритм шифрування та загальний секрет для генерування відповіді --- правильно зашифрований пароль.
При синхронному методі змінна задача, що використовується для генерування пароля, визначається внутрішньо токеном і сервером. Лічильник часу, лічильник подій або комбінація лічильників часу та подій у кожному пристрої використовується як основа змінної виклику. Оскільки маркер і сервер кожен окремо і внутрішньо визначають змінну виклику від власних лічильників, дуже важливо, щоб їх лічильники часу та лічильники подій залишалися синхронізованими. Оскільки сервер і маркер настільки легко виходять з синхронізації, більшість реалізацій дозволяють певну кількість дрейфу між лічильниками. Зазвичай для обчислення пароля використовується невеликий діапазон або вікно цих лічильників. Однак якщо маркер і сервер не синхронізуються за цим вікном,
Про:
- Сертифікати мають коріння CA, які роблять їх надійними і важко підробляти
- В операційних системах є стандартні засоби для легкого управління та обслуговування магазинів cert
- Добре вивчений підхід, багато інформації про нього
- Термін дії, а також різноманітні інші речі - це вбудовані засоби стандартних сертифікатів, вони, як правило, надійні
Con:
- Сертифікати можуть бути складними для роботи з програмою
- Залежно від того, якщо вам потрібен зовнішній ЦС, можливо, не буде безкоштовним
- Може знадобитися підтримувати сховища cert вручну, щоб забезпечити налаштування очікуваних кореневих трастів
NTLM
Не смійтесь, якщо це лише менша або внутрішня послуга, і ви перебуваєте в середовищі Windows, немає нічого поганого в тому, щоб використовувати стандартну автентифікацію NTLM для гарантування доступу. Особливо, якщо ви працюєте з IIS, це найпростіший підхід. Легко обслуговувати та налаштовувати, а також у web.config.
Про:
- Надзвичайно простий у налаштуванні, реалізації та обслуговуванні
Con:
- Мінімальна сумісність
- Недостатньо для публічної автентифікації
Нюші
Працюючи з підходами до аутентифікації без будь-яких питань, ви надаєте спосіб отримати уявлення про послугу. Цей метод повертає унікальний довільний рядок або фрагмент даних ("nonce") на кожен запит. Кожен запит до інших методів тепер вимагає відшукувати безвіз і використовувати його в крипто алгоритмі для запиту. Цінність тут полягає в тому, що сервер відслідковує використані ноні і ніколи не допускає повторного використання нотаток, це повністю запобігає повторним атакам, тому що, як тільки запит зроблений без жодного запиту, запит із цим ніколи більше не може бути зроблений. Оскільки запитання не запитуються, вони додаються до списку доступних значень, оскільки вони використовуються, вони переміщуються з доступного списку до списку використовуваних.
Про:
- Thwarts відтворюють атаки досить добре
- Загалом не важко втілити чи зрозуміти
Con:
- Потрібно, щоб клієнти подавали два запити на кожен запит (хоча це може бути зменшено, якщо вони не потребують лише деяких запитів)
- Вимагає управління думками, які мають бути транзакційними
- Негативно позначається на продуктивності, вимагаючи додаткових запитів на прослуховування (трансакційність ще більше збільшує витрати на ресурси для роботи без анкет)