Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Регистрация пользователя по ЭЦП

#android #криптография #аутентификация #цифровая_подпись


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

Пока исследуем первый вариант решения задачи: у каждого предприятия есть свои ЭЦП
- для сдачи отчетностей, для ДБО и т.д. Они уникальны и никому не передаются (по понятным
причинам). Мысль такая: раз пользователь идентифицирует себя представителем предприятия
путем ввода ключа этого предприятия, то он на это уполномочен (если не считать криминальных
ситуаций воровства ключей злоумышлинниками).

Вопрос: возможно ли как-нибудь использовать эти имеющиеся у предприятия сертификаты
ЭЦП для идентификации пользователя в качестве представителя этого предприятия при регистрации
в базе данных через мобильное приложение?? 

Понятно, что не путем вставки токен-флешки в несуществующий USB-порт устройства;
может быть вводом какой-то информации?

Понимаю, что специалисту по ЭЦП вопрос может показаться смешным и абсурдным, но я
обязан исследовать все варианты. Пожалуйста, не скупитесь на свои предложения.
    


Ответы

Ответ 1



Ничего смешного и абсурдного в этом вопросе нет. Российский стандарт ЭЦП "слегка" отличается от западных стандартов digital signature. Стандарт описан в ГОСТ Р 34.10-2012 По идее все российские ЭЦП должны соответствовать указанному стандарту, но, как говорится - в жизни бывает всякое. ЭЦП на уровне данных, это по сути 2 набора данных: публичный ключ и приватный ключ. Приватный ключ никому не передается и хранится у обладателя. Публичный ключ рассылается всем желающим, то есть в рамках вашего сценария - предприятие высылает вам свой публичный ключ, чтобы получить доступ к вашему бесценному приложению. Теперь внимание, вы должны понять, что публичный ключ принадлежит тому кто вам его выдал. Для этого существуют сертификаты публичных ключей. Вся фишка именно в этом. Если бы дело касалось западных digital signature, то в любом легальном Android устройстве хранятся корневые сертификаты крупнейших удостоверяющих центров (типа VeriSign, Thawte и проч.), с помощью которых легко можно понять кому принадлежит полученный ЭЦП. Российские корневые (квалифицированные) сертификаты надо получать в соответствующем удостоверяющем центре, в котором получен ЭЦП. Этих центров у нас прямо скажем много... При этом большинство из них не идентифицируют друг друга. На всякий случай корневой сертификат налоговой здесь, а Сбербанковский здесь - в общем понятно надеюсь. Ближе к программированию. Упомянутый выше ГОСТ реализован в Bouncy Castle - для тех кто в танке - это один самых известных публичных API реализующих почти все мыслимые и немыслимые криптографические алгоритмы. И что особенно приятно, Bouncy Castle реализует алгоритмы в качестве стандартного Java Cryptography Extension провайдера. Для Андроида есть специальный порт Bouncy Castle - называется Spongy Castle Проверка юзера должна сводиться к: Получить корневой сертификат удостоверяющего центра Получить сертификат публичного ключа юзера Сверить его на валидность с корневым сертификатом удостоверяющего центра Все это можно сделать программно (хотя и не просто...) Далее уж гуглите сами на тему validate+certificate+java

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

Отправить комментарий