Аутентификация пользователя с помощью ЭЦП

Добрый день.
Можно ли где-нибудь поподробнее узнать об алгоритме аутентификации пользователя с помощью ЭЦП?

Вы имеете в виду проверку подлинности подписи?

Нет. Я имею ввиду авторизацию пользователя в системе с помощью ЭЦП, а именно AUTH_RSA256_…p12. Как при авторизации на портале egov.kz.

Определенного алгоритма для авторизации нет. Каждая система имплементирует авторизацию по своему усмотрению. Как вариант можно передавать пользователю какой-нибудь уникальный идентификатор для подписи и верифицировать подпись на стороне сервера.

Все верно, именно так сейчас и устроена авторизация в нашей системе. Но для подписи уникального идентификатора приходится использовать ключ для подписи RSA256_(…).p12. При попытке подписывать идентификатор ключом AUTH_RSA256_(…).p12 NCALayer выдает ошибку “В выбранном хранилище отсутствует ключ для подписи”, что и не удивительно, поскольку данный ключ не предназначен для подписания. Отсюда и возникает вопрос: как использовать данный ключ для авторизации пользователя при условии, что мы используем NCALayer и какой-либо документации на эту тему в SDK нет.

Для использования AUTH_RSA в методах с параметром keyType вместо значения “SIGNATURE” нужно испльзовать “AUTHENTICATION”.

Спасибо. Буду пробовать.

Не забывайте о том, что на стороне сервера вам нужно верси учет выданных блоков случайных данных для аутентификации. Необходимо быть уверенными в двух моментах:

  • что пользователь подписал данные которые были сформированы сервером (иначе злоумышленник может попробовать найти уже подписанный пользователем документ и попробовать пройти аутентификацию используя его)
  • что каждый блок данных был использован только один раз (иначе ваша система будет уязвима для атак типа “повтор”).

На тему аутентификации по цифровым сертификатам могу порекомендовать статью https://sigex.kz/blog/authentication/