Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline daryaNeko  
#1 Оставлено : 3 июня 2015 г. 11:23:59(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

Добрый день!
Задача такая: необходимо на клиенте подписывать файлы, лежащие на сервере.
Для этого я на сервере формирую хеш нужного файла, отдаю его на клиент, там создается подпись, там же проверяется, после этого полученную строку я отправляю на сервер и пытаюсь сохранить в .sig файл.
Проблема в том, что проверку такой файл в онлайн сервисах (http://www.gosuslugi.ru/pgu/eds/) не проходит.

Получение хеша:
var GostHash = new Gost3411CryptoServiceProvider();
byte[] HashValue = GostHash.ComputeHash(fs);
var str = HashValue.Aggregate("", (current, t) => current + string.Format("{0:X2}", t));

str отправляем на клиент

На клиенте:
...
function CreateSignature(oCertificate, oHashedData) {
var oRawSignature = cadesobject.CreateObject("CAdESCOM.RawSignature");
try {
var sRawSignature = oRawSignature.SignHash(oHashedData, oCertificate);
} catch (err) {
alert("Failed to create signature. Error: " + GetErrorMessage(err));
return;
}
return sRawSignature;
}
...

sRawSignature отправляется на сервер

И на сервере сохраняется в файл:

byte[] bytesSign = Convert.FromBase64String(sRawSignature); //подпись в Base64 формате
var ms = new MemoryStream(bytesSign);
var file = new FileStream("file.sig", FileMode.OpenOrCreate, FileAccess.Write);
ms.WriteTo(file);
file.Close();
ms.Close();

В чем ошибка логики?
Или я не отделенную подпись таким образом создаю? Или сохраняю неправильно?
Offline Андрей Писарев  
#2 Оставлено : 3 июня 2015 г. 11:37:32(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
В код не смотрел, достаточно для начала:
>подпись в Base64 формате
>http://www.gosuslugi.ru/pgu/eds/
>Или сохраняю неправильно?

На сайте написано DER, верно? Тогда зачем дополнительное кодирование в base64?
Техническую поддержку оказываем тут
Наша база знаний
Offline daryaNeko  
#3 Оставлено : 3 июня 2015 г. 13:00:12(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

С сайта:
> Данный сервис предназначен для подтверждения подлинности ЭП сертификатов в форматах X.509 и BASE64.
Вот эта функция разве не в base64 возвращает:oRawSignature.SignHash(oHashedData, oCertificate) ?
И все таки уточню, она именно отсоединенную подпись возвращает?

PS У меня файл может быть любого расширения, поэтому подписываю я его не привязываясь к формату. Может быть поэтому сервис их не проверяет?
Offline daryaNeko  
#4 Оставлено : 3 июня 2015 г. 13:12:01(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

А вообще, каким образом лучше всего подписывать произвольные файлы, чтобы получатель потом мог проверить подпись?
Offline Андрей Писарев  
#5 Оставлено : 3 июня 2015 г. 13:31:56(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: daryaNeko Перейти к цитате
С сайта:
> Данный сервис предназначен для подтверждения подлинности ЭП сертификатов в форматах X.509 и BASE64.
Вот эта функция разве не в base64 возвращает:oRawSignature.SignHash(oHashedData, oCertificate) ?
И все таки уточню, она именно отсоединенную подпись возвращает?

PS У меня файл может быть любого расширения, поэтому подписываю я его не привязываясь к формату. Может быть поэтому сервис их не проверяет?


А причем здесь подтверждения подлинности ЭП сертификатов?
Техническую поддержку оказываем тут
Наша база знаний
Offline daryaNeko  
#6 Оставлено : 3 июня 2015 г. 14:03:09(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

Хорошо, не важно что там этот сервис проверяющий говорит. Ответьте, пожалуйста на остальные вопросы, чтобы я смогла сориентироваться.
Что именно (подписанный файл, отсоединенную подпись, вообще что-то другое) и в каком формате возвращает функция oRawSignature.SignHash(oHashedData, oCertificate) ? Пригоден ли результат этой функции как содержание для .sig файла?
Произвольные файлы вообще та кподписывают ли это неправильно?
Каким образом получатель сможет проверить подписан ли файл?
Offline Андрей Писарев  
#7 Оставлено : 3 июня 2015 г. 14:26:18(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
http://cpdn.cryptopro.ru...1_1_i_raw_signature.html
В отличие от интерфейса ICPSignedData, методы данного интерфейса работают не с CMS-сообщением, а непосредственно со значением электронной подписи.
Техническую поддержку оказываем тут
Наша база знаний
Offline daryaNeko  
#8 Оставлено : 3 июня 2015 г. 14:29:27(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

Ага, а как теперь из этого строкового значение сформировать непосредственно файл подписи? Просто сохранить полученную строку? Или надо преобразовать ее каким либо образом?
Offline daryaNeko  
#9 Оставлено : 3 июня 2015 г. 15:34:12(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

Сформировала файл подписи через криптоАрм, получаются значения вида MIAGCSqGSIb3DQEHAqCAMIACAQExDDAKBgYqhQMCAgkFADCABgkqhkiG9w0BBwEA (32 подобных строки)
А мне функция вовращает строку вида 56416ABC12B71BCEB5D4DEEB615C0A84055B8C545C27123383AF65DCE66F6374289689404A7704E9E8E87555612023C443296C9E9822DB0B522275FBBE47CA50
Как мою строку преобразовать к верному виду?
Offline daryaNeko  
#10 Оставлено : 3 июня 2015 г. 16:53:06(UTC)
daryaNeko

Статус: Участник

Группы: Участники
Зарегистрирован: 01.06.2015(UTC)
Сообщений: 11

И еще, в файле подписи, созданном через КриптоАрм явно больше данных, чем получается у меня программно, там видно и сертификат и еще какие-то данные... Как мне включить в мою подпись всю эту информацию?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.