Цифровая подпись хеш-значения файла непосредственно вместо файла
Мой вопрос - возможно ли цифровую подпись хеш-значения файла вместо файла.
Я должен цифровой подписи файла XML в веб-среде через электронный токен. Поэтому я должен загрузить файл с сервера на клиент, а затем получить сертификат от e-token usb на клиентском компьютере, подписать файл и загрузить его на сервер.
Но проблема в том, что если размер файла слишком велик, то загрузка на стороне клиента займет слишком много времени (зависит от скорости интернета), а также может привести к некоторой утечке в безопасности файла.
Таким образом, вместо того, чтобы отправлять файл на клиентский компьютер, отправляйте только хэш-значение файла (внутреннее хеш-значение файлов подписывается, а не файлы как общий поток процесса цифровой подписи).
Или есть какое-нибудь другое альтернативное решение?
2 ответа
@ Евгений приводит некоторые достоверные замечания о деталях безопасной передачи хэша.
Поскольку у вас есть eToken, вы можете использовать его для установления двустороннего SSL-сеанса между клиентом и сервером. Этот сеанс может использоваться для передачи хеша клиенту и полученной подписи обратно на сервер.
Для подписи хеша на стороне клиента в Java вы можете использовать алгоритм Signature, такой как NONEwithRSA
вместо одного как SHA256withRSA
,
"NONE" указывает, что необработанные данные (в данном случае хеш) будут подписаны и не будут повторно хешированы алгоритмом.
Ну, конечно, можно передать хеш клиенту и подписать его там, но дьявол кроется в деталях - в случае такой распределенной подписи вам нужно разработать действительно безопасный способ передачи хеша и подписи и надежно подписать его на стороне клиента. Также вам необходимо иметь код на сервере, который позволит вам вычислить хеш, передать его клиенту и затем встроить подпись в формат подписи по вашему выбору.
Наша компания разработала надстройку распределенной криптографии для нашего продукта SecureBlackbox, которая решает все вышеперечисленные проблемы. Для получения подробной информации вы можете проверить этот ответ на Stackru.