Внедрение Рутокен Веб в ИС для ЭЦП

Добрый день. Наша компания подумывает о внедрении ЭЦП в нашей информационной системе (ИС), которую мы же и разрабатываем. Система эта - веб-приложение на основе Java + Javascript.

Смотрим в сторону Рутокен ВЕБ, однако остался ряд вопросов, которые не совсем ясны из описания API, которое выложено на вашем сайте.

Что нам нужно?

1. Аутентификацию с помощью Рутокен ВЕБ нам осуществлять не надо, достаточно только ЭЦП.
2. Наша система работает с документами, которые необходимо подписывать. Затем те, кто просматривают документ, должны как-то убедиться, что он не подделан.

В связи с этим вопросы, поскольку из API не совсем понятно, как это использовать.

1. Чтобы подписать документ, я должен вычислить его хэш (это мы делаем сами), и отправить его токену с помощью функции rtwSign(contname, hash). Я правильно это понимаю? Полученный ЭЦП мы сохраняем в базе для данного документа, плюс открытый ключ пользователя (ОКП), который это подписал.
2. Чтобы затем проверить документ (т.е. подписал ли его тот, кто нужно), нужно будет повторно вычислить его хэш, а затем попробовать дешифровать ЭЦП с помощью ОКП того, кто это подписал. Я правильно понимаю этот момент? И для этого нам не нужен токен пользователя, мы просто можем это сделать с помощью какого-нибудь криптопровайдера в Java, который позволит дешифровать ЭЦП с помощью открытого ключа? Это верно?

Всвязи с этим вопросы. Я понял, как работать с контейнерами, и как получить открытый ключ пользователя с токена с помощью rtwGetPublicKey(container_name); Но не совсем ясно, для чего нужно rtwGenKeyPair(container_name)? Это что, сбрасывает закрытый ключ в контейнере устройства и создает новую пару? Т.е. это нужно по сути один раз, когда мы регистрируем пользователя в системе, и сохраняем его открытый ключ в нашем реестре ключей пользователей? Я правильно понимаю практическое использование данной функции?

Еще момент - открытые ключи ваших токенов не содержатся в каком-то удостоверяющем центре (УЦ)? Т.е. когда мы регистрируем пользователя с токеном в системе, нам нужно будет либо самим организовывать что-то типа УЦ, либо посылать открытый ключ пользователя для регистрации в УЦ?

Re: Внедрение Рутокен Веб в ИС для ЭЦП

Здравствуйте!

spirit1984 пишет:

1. Чтобы подписать документ, я должен вычислить его хэш (это мы делаем сами), и отправить его токену с помощью функции rtwSign(contname, hash). Я правильно это понимаю? Полученный ЭЦП мы сохраняем в базе для данного документа, плюс открытый ключ пользователя (ОКП), который это подписал.

Да, правильно.


spirit1984 пишет:

2. Чтобы затем проверить документ (т.е. подписал ли его тот, кто нужно), нужно будет повторно вычислить его хэш, а затем попробовать дешифровать ЭЦП с помощью ОКП того, кто это подписал. Я правильно понимаю этот момент? И для этого нам не нужен токен пользователя, мы просто можем это сделать с помощью какого-нибудь криптопровайдера в Java, который позволит дешифровать ЭЦП с помощью открытого ключа? Это верно?

Правильно. Токен пользователя для этого не нужен, поскольку для проверки используется только открытый ключ.
Проверку подписи на серверной стороне можно реализовать исключительно программным способом.

spirit1984 пишет:

Всвязи с этим вопросы. Я понял, как работать с контейнерами, и как получить открытый ключ пользователя с токена с помощью rtwGetPublicKey(container_name); Но не совсем ясно, для чего нужно rtwGenKeyPair(container_name)? Это что, сбрасывает закрытый ключ в контейнере устройства и создает новую пару? Т.е. это нужно по сути один раз, когда мы регистрируем пользователя в системе, и сохраняем его открытый ключ в нашем реестре ключей пользователей? Я правильно понимаю практическое использование данной функции?

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

spirit1984 пишет:

Еще момент - открытые ключи ваших токенов не содержатся в каком-то удостоверяющем центре (УЦ)? Т.е. когда мы регистрируем пользователя с токеном в системе, нам нужно будет либо самим организовывать что-то типа УЦ, либо посылать открытый ключ пользователя для регистрации в УЦ?

Решение Рутокен Web разрабатывалось в расчете на то, что инфраструктура открытых ключей (PKI) не будет задействована. То есть для тех случаев, когда сервис может доверять клиенту и не требовать сертификата открытого ключа. Абонент может требовать сертификат открытого ключа от сервиса для аутентификации сервиса и установления защищенного соединения. Поэтому открытые ключи Рутокен Web не хранятся ни в каком УЦ, а имеют хождение между абонентами сервиса и самим сервисом. По сути получается, что сервис может являться своеобразным УЦ для своих абонентов, если между абонентами нет доверия.
PKI нужна в тех системах, в которых доверие есть только к удостоверяющему центру, а между всеми остальными участниками-абонентами и сервисами взаимного доверия нет. Если разворачивать предлагаемую Вами систему с задействованием УЦ и использованием PKI в "классическом" понимании, целесообразно рассматривать применение продукта "Рутокен плагин" https://www.rutoken.ru/products/all/rutoken-plugin/, а не Рутокен Web в его чистом виде. Плагин полностью совместим с устройством Рутокен Web. "Что-то типа УЦ" для собственных нужд можно организовать на базе OpenSSL, например.

Re: Внедрение Рутокен Веб в ИС для ЭЦП

Здравствуйте.

1) да
2) да (правда, термин "дешифровать подпись" некорректен. "Дешифрование - процесс аналитического раскрытии зашифрованной информации без знания примененного шифра". Правильнее использовать термин "проверить подпись", но суть Вы уловили)

В Рутокене может быть несколько контейнеров с ключевыми парами.
Каждый раз вызывая rtwGenKeyPair(container_name) Вы создаёте новую.

Если Вы хотите один раз регистрировать пользователя тогда логично будет если вы вызовете rtwGenKeyPair всего один раз.

Понятие УЦ в случае Рутокен Web вырождается до таблицы с записанными в неё открытыми ключами.
Для использования Рутокен Web Вам не потребуется взаимодействовать с УЦ.
Однако, в случае если это необходимо, Вам лучше обратить внимание на продукт Рутокен Плагин, который полностью поддерживает PKI-инфраструктуру и требует взаимодействия с УЦ.