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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Kilya  
#11 Оставлено : 22 апреля 2019 г. 13:42:26(UTC)
Kilya

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

Группы: Участники
Зарегистрирован: 13.11.2015(UTC)
Сообщений: 20
Российская Федерация

Сказал(а) «Спасибо»: 14 раз
Ошибка та же.
Но понятна причина стала. Если я на клиенте вызываю
Код:
oHashedData.Hash(dataToSign);

, то полученный хэш успешно подписывается.

А вот если я хэш получаю с сервера в виде строки, сформированный как
Код:
return System.Convert.ToBase64String(hash);

, то получаю ошибку.

Что я делаю не так, что особенного с данными делает
Код:
oHashedData.Hash(dataToSign);
?
Offline Kilya  
#12 Оставлено : 6 мая 2019 г. 12:48:34(UTC)
Kilya

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

Группы: Участники
Зарегистрирован: 13.11.2015(UTC)
Сообщений: 20
Российская Федерация

Сказал(а) «Спасибо»: 14 раз
Отвечу сам на свой же вопрос. На сервере после вычисления хэша методом ComputeHash, надо приводить его к строке не мотодом конвертации
Код:
return System.Convert.ToBase64String(hash);


а с помощью цикла

Код:
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
   builder.Append(hash[i].ToString("X2"));
}
return builder.ToString();


У меня есть пара вопросов других.
Когда я на сервере имею вычисленный хэш и полученный от клиента подписанный хэш, мне достаточно проверить их между собой на корректность?
Или я еще должен проверять сертификат, которым был подписан хэш а клиенте?
Если должен, то могу ли я проверить сертификат по подписанному хэшу, т.е. не пересылась сам сертификат с клиента?
Offline two_oceans  
#13 Оставлено : 8 мая 2019 г. 8:34:03(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Добрый день. Если все еще не разобрались что получаете, то наверно надо просто посмотреть что там вышло и присутствует ли сертификат в результате. Если присутствует, то ничего отдельно передавать не нужно. Если отсутствует, то наверно надо указать какие-то еще что-то при подписании. Для проверки, например, взять некий тестовый небольшой pdf без критичной информации, подписать по Вашему методу, заархивировать исходный файл и полученную предположительно отсоединенную подпись, залить архив на Яндекс диск, открыть доступ и написать ссылку сюда.

Либо посмотрите наличие сертификата в результате сами - для этого нужно убедиться что результат (и сертификат для сравнения) декодирован из Base64 в двоичный вид, сначала можно сравнить размер. Если "подписанный хэш" меньше размера сертификата, то естественно никакого сертификата там нет. Если больше - нужно смотреть, для этого нужна программа просмотра ASN.1 кодировки, я использую Asn1Editor, но есть и другие программы. Там уже можно найти характерные для сертификата структуры визуально. Если программа не открывает файл, значит перекодировка сделана неправильно. Некоторые программы сами перекодируют, ими можно Base64 открыть.

По поводу проверки - обычно проверка подписи состоит из 2 этапов: 1) проверка математической корректности подписи и 2) проверка целостности и действительности цепочки сертификатов. По первому этапу все наверно ясно, этот этап удостоверяет что файл не был изменен с момента подписи, но ничего не говорит о том, кто подписал файл (сертификат используется только как хранилище открытого ключа, можно передать открытый ключ отдельно и с успехом пройти этот этап низкоуровневыми крипто операциями. В частности, это используется для проверки математической корректности подписи самого сертификата).

По второму этапу строится цепочка сертификатов удостоверяющих центров до самоподписаного (корневого) сертификата, проверяется что все сертификаты имеют верную математическую подпись, проверяется что корневой сертификат указан в списках доверенных сертификатов, проверяется что на дату подписи все сертификаты цепочки (и УЦ и конечный) были действующими по дате, проверяется что сертификаты не были отозваны (кроме корневого, проверка может быть по протоколу OCSP, по установленному списку отзыва и скачиванием списка отзыва при проверке). Этот этап удостоверяет, кто именно владеет ключом, которым подписан файл и какой удостоверяющий центр заверил факт владения. Если дата подписи не указана, то проверяется на время проверки, то есть подпись получится недействительна при проверке после истечения сертификата.

Если у Вас в "системе документооброта" (назову так) не так уж много "абонентов", подписывающих файл, но множество файлов - в принципе не будет серьезным упущением безопасности просто раз в день истекшие скачивать списки отзыва, проверять статус всех сертификатов и кэшировать результат проверки неким способом, чтобы не гонять всю процедуру проверки при каждом подписанном файле. Тем не менее если вдруг встретится сертификат "не закэшированный" его нужно проверить по полной процедуре. Совсем не проверять сертификат нельзя, но промежуток кэширования на Ваше усмотрение. Обычно 24 часа вполне достаточно, но чем серьезнее документы, тем меньше должен быть промежуток (вплоть до полной проверки цепочки сертификатов на каждом файле). Или удостоверяющие центры можно проверять пореже, а конечные сертификаты клиентов почаще.

Если кроме подписи файлы будут еще и шифроваться, то при смене сертификата желательно предусмотреть возможность перешифрования на новый сертификат. Подразумевается шифрование симметричным ключом полученным по схеме обмена ключами между 2 абонентами. В этом случае каждый файл смогут расшифровать 2 абонента и если сертификат одного абонента закончился можно расшифровать файл от другого абонента и зашифровать снова уже замененным сертификатом первого.
thanks 2 пользователей поблагодарили two_oceans за этот пост.
Андрей * оставлено 08.05.2019(UTC), Kilya оставлено 08.05.2019(UTC)
Offline Kilya  
#14 Оставлено : 8 мая 2019 г. 11:04:38(UTC)
Kilya

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

Группы: Участники
Зарегистрирован: 13.11.2015(UTC)
Сообщений: 20
Российская Федерация

Сказал(а) «Спасибо»: 14 раз
Сам прочитал, что метод CheckSignature может идти с параметром false и тогда идет проверка цепочки сертификатов.
Подписанный файл из .sig переименовал в .p7b и увидел что это за сертификат вложен.
Спасибо за развернутый ответ.
Offline Kilya  
#15 Оставлено : 14 мая 2019 г. 13:03:38(UTC)
Kilya

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

Группы: Участники
Зарегистрирован: 13.11.2015(UTC)
Сообщений: 20
Российская Федерация

Сказал(а) «Спасибо»: 14 раз
Дабы не плодить темы, спрошу тут.
Искал в интернете "как подписать пакет документов", "как подписать папку". Все что нашел - КриптоПроАрм позволяет подписывать папки.
Но как реализован данный механизм?

В моей ситуации с кэшем как мне быть с папкой/пакетом документов/несколькими файлами.
Я не хочу подписывать каждый файл отдельно.

Мое понимание:
1) Собрать архив из всех файлов
2) Работать с архивом как с одним файлом (вычислять его хэш, подписывать этот вычисленный хэш)

Или есть другой способ?
Offline two_oceans  
#16 Оставлено : 15 мая 2019 г. 7:11:07(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Если я правильно понял о какой программе речь, то обратите внимание что "КриптоАрм" пишется без части "Про" в серединет, так как это программа не разработка КриптоПро, а совсем другой компании. К слову, у меня в контекстном меню папки нет пункта КриптоАрм, а у файлов есть, то есть подписать папку можно только из основного окна программы - при этом подписывается каждый файл в папке отдельно, просто нет необходимости выбрать каждый файл, перечисление файлов из папки в список для подписания автоматическое.

В информационных системах применяются оба подхода как подписание каждого файла и прикрепление парами файл подпись, так и прикрепление одного архива + подписи архива. Понятно, что во многих случаях архив еще место на диске экономит. Однако вВажен вопрос удобства изменения части пакета документов - если понадобится изменить один файл в архиве, то это будет означать что все файлы архива стали подписаны более поздней датой или будете хранить несколько версий архива. В то же время при подписании каждого файла можно более гибко прикрепить новую версию одного файла и новую подпись, при необходимости сохранив и старую подписанную версию для полной истории. Поэтому "не хочу" тут аргумент слабый, лучше ориентироваться на возможность потенциальной замены части пакета документов: если частичная замена не предполагается, то архивом, иначе каждый файл отдельно.
thanks 1 пользователь поблагодарил two_oceans за этот пост.
Kilya оставлено 15.05.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.