Добрый день.
Можно ли где-нибудь поподробнее узнать об алгоритме аутентификации пользователя с помощью ЭЦП?
Аутентификация пользователя с помощью ЭЦП
Вы имеете в виду проверку подлинности подписи?
Нет. Я имею ввиду авторизацию пользователя в системе с помощью ЭЦП, а именно AUTH_RSA256_…p12. Как при авторизации на портале egov.kz.
Определенного алгоритма для авторизации нет. Каждая система имплементирует авторизацию по своему усмотрению. Как вариант можно передавать пользователю какой-нибудь уникальный идентификатор для подписи и верифицировать подпись на стороне сервера.
Все верно, именно так сейчас и устроена авторизация в нашей системе. Но для подписи уникального идентификатора приходится использовать ключ для подписи RSA256_(…).p12. При попытке подписывать идентификатор ключом AUTH_RSA256_(…).p12 NCALayer выдает ошибку “В выбранном хранилище отсутствует ключ для подписи”, что и не удивительно, поскольку данный ключ не предназначен для подписания. Отсюда и возникает вопрос: как использовать данный ключ для авторизации пользователя при условии, что мы используем NCALayer и какой-либо документации на эту тему в SDK нет.
Для использования AUTH_RSA в методах с параметром keyType вместо значения “SIGNATURE” нужно испльзовать “AUTHENTICATION”.
Спасибо. Буду пробовать.
Не забывайте о том, что на стороне сервера вам нужно верси учет выданных блоков случайных данных для аутентификации. Необходимо быть уверенными в двух моментах:
- что пользователь подписал данные которые были сформированы сервером (иначе злоумышленник может попробовать найти уже подписанный пользователем документ и попробовать пройти аутентификацию используя его)
- что каждый блок данных был использован только один раз (иначе ваша система будет уязвима для атак типа “повтор”).
На тему аутентификации по цифровым сертификатам могу порекомендовать статью https://sigex.kz/blog/authentication/