Как реализовать двухфакторную аутентификацию с использованием смарт-карт и считывателей смарт-карт через web

#php #web #smartcard #smartcard-reader #two-factor-authentication

#php #веб #смарт-карта #считыватель смарт-карт #двухфакторная аутентификация

Вопрос:

Прежде всего, пожалуйста, извините мое невежество в этой теме. (связанный)

Что именно необходимо для реализации такого процесса:

  1. Клиент посещает сайт входа (example.com/login ).
  2. Для входа в систему клиент вводит свой идентификатор клиента. Кроме того, посетителю отображается случайный (?) код:
    251 221 555.

  3. Клиент берет свой считыватель смарт-карт, вставляет в него свою смарт-карту и нажимает на кнопку «Войти», вводит код 251 221 555

  4. Затем клиент вводит свой PIN-код (в считывателе смарт-карт)
  5. Затем возвращается токен: 922 444 113
  6. Клиент использует возвращенный токен для входа на веб-сайт.

Я думаю, нужно:

  • Смарт-карта (с PIN-кодом)
  • Устройство чтения смарт-карт (см. Рисунок 1, 2)

Мне интересно, как аутентифицировать возвращенный токен на веб-сайте, а также как вернуть токен в устройство чтения смарт-карт? Каковы точные (или простейшие) шаги для реализации процесса, подобного приведенному выше?

Комментарии:

1. Рассматривали ли вы возможность использования клиентского сертификата, хранящегося на смарт-карте? Это должно быть возможно даже с защищенным устройством ввода PIN-кода и может быть намного проще в реализации (но требует подключения считывателя к компьютеру, установки некоторых драйверов / промежуточного программного обеспечения и т. Д. — Зависит от вашего варианта использования и фактических используемых компонентов). Для метода запроса-ответа неясно (для меня), хотите ли вы на самом деле использовать CAP или нет (поскольку может быть довольно сложно получить автономный / т. Е. Не подключенный к ПК / считыватель, поддерживающий какой-либо другой протокол)

Ответ №1:

Самая простая реализация — иметь секретный ключ, хранящийся на смарт-карте, и запускать шифрование или вычисление MAC по входному номеру. Чтобы это сработало, ввод PIN-кода должен быть перед вводимым номером.

Команды будут

  • ПРОВЕРКА (с помощью PIN-кода)
  • ВНУТРЕННЯЯ АУТЕНТИФИКАЦИЯ (с введенным номером)
  • или ВЫПОЛНИТЬ ОПЕРАЦИЮ БЕЗОПАСНОСТИ в режиме Вычисления криптографической контрольной суммы.

Для получения более подробной информации вам следует подробно ознакомиться с ISO 7816, часть 4 (проверка и внутренняя аутентификация) и 7816, часть 8 (выполнение операции безопасности).). Это предполагает так называемую собственную карту (в отличие от JavaCard).

Комментарии:

1. Если я правильно понимаю, мне нужен считыватель смарт-карт (EMV) и аналогичная карта, такая как смарт-карта SLE4442. Все ли считыватели EMV, например, работают с Arduino? Какой считыватель смарт-карт вы бы порекомендовали для Arduino?

2. @Kilise: Извините, у меня нет опыта работы со считывателями смарт-карт во встроенной среде; возьмите один, где вы можете найти подходящие драйверы. SLE4442, являющийся (синхронной) картой памяти, слишком глуп, чтобы поддерживать упомянутые команды. Вам нужна карта асинхронного процессора.