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

Уведомление

Icon
Error

5 Страницы<1234>»
Опции
К последнему сообщению К первому непрочитанному
Offline akor81  
#11 Оставлено : 25 сентября 2012 г. 19:57:06(UTC)
akor81

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

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

Андрей * написал:
akor81 написал:
Андрей * написал:
как без привязки... ? Зачем тогда ЭЦП, если я могу менять данные, а ЭЦП остается валидной!


Потому что ЭЦП сама в себе содержит хэш данных, которому она соответствует. И в примере они оттуда вынимаются, а потом проверяется, что ЭЦП этому хэшу данных соответствует. Мне это тоже кажется бессмысленным... Конечно, я мог что-то не так понять, это весьма вероятно. И если это так - это даже очень хорошо! :)

Андрей * написал:
Как? Опиши алгоритм, очень интересно! Очень убедительные слова...


Описать алгоритм я затрудняюсь. Но вот код примера, который мне посоветовали посмотреть:



Значение ЭЦП = это зашифрованный с помощью ЗАКРЫТОГО ключа хеш (в результате хеширования данных). размер = 256 бит.
Для проверки нужен открытый ключ автора (например, из сертификата), с помощью которого происходит расшифровка хеша.
Если она удается (! = значит это автор)- далее проверяется соответствие расшифрованного хеша и вновь рассчитанного сейчас хеша от данных.
если хеши совпадают = подпись верна и автор - владелец открытого ключа ( сертификата )



А-а, в этом смысле "опиши алгоритм"!! :) Это я понимаю, само собой! Я не понимаю, как мне осуществить это на практике. У меня эта проверка совпадения хешей не проходит, и я не знаю почему! :( Я именно об этом и спрашиваю, как мне это проверить правильно!

Отредактировано пользователем 25 сентября 2012 г. 19:57:39(UTC)  | Причина: Не указана

Offline akor81  
#12 Оставлено : 25 сентября 2012 г. 21:15:04(UTC)
akor81

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

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

Уважаемые консультанты! Помогите, пожалуйста! Вопрос, по-моему, совершенно понятен, но он так и повис в воздухе, и ответа так никто и не дал...
Offline akor81  
#13 Оставлено : 25 сентября 2012 г. 21:33:57(UTC)
akor81

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

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

afev написал:
Посмотрите пример CMSVerify, в частности, проверку подписи CMSVerify.CMSVerify() - проверять следует не по подписанным данным (тексту, файлу и т.п.), а по подписываемым аттрибутам (signed attributes) в CAdES-BES подписи.


Вот что это означает? Что значит, не по подписанным данным, а по атрибутам самой подписи? Объясните мне это, пожалуйста!
Мне же как раз и нужно удостовериться, что подпись соответствует подписанным данным. В этом и есть смысл подписи. Зачем мне проверять, что она соответствует каким-то непонятным атрибутам внутри самой себя??
Offline Новожилова Елена  
#14 Оставлено : 25 сентября 2012 г. 21:41:24(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 930
Женщина
Откуда: Крипто-Про

Поблагодарили: 105 раз в 98 постах
Здравствуйте!

Ознакомьтесь, пожалуйста, с регламентом оказания услуг техподдержки разработчикам:
http://www.cryptopro.ru/....aspx?g=posts&t=4614

Есть ли у Вас сертификат на годовую техническую поддержку "КриптоПро SDK"?
Offline akor81  
#15 Оставлено : 25 сентября 2012 г. 22:17:18(UTC)
akor81

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

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

Здравствуйте, Елена!

В данный момент такого сертификата у моей компании нет. Но я, как вы понимаете, тут бьюсь лбом о стену в надежде освоить ваш продукт не из спортивного интереса, и не потому что мне нечем заняться, а как раз потому, что он нам скоро понадобится, и такой сертификат всё-равно придётся купить. Я понимаю, что пока этого сертификата нет, мне никто ничего не должен... Я просто надеялся, что какой-то ответ должен существовать. Мой вопрос ведь не является каким-то очень специфическим, наверно, куча других людей используют КриптоПро для того же самого: на клиенте есть сертификат и некая строка которую надо подписать. А на сервере нужно убедиться, что полученная подпись соответствует именно вот этой строке. Думаю, что информация как это делать с помощью JCP может понадобиться не только мне...
Offline Евгений Афанасьев  
#16 Оставлено : 25 сентября 2012 г. 23:13:01(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,033
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 730 раз в 688 постах
Ваша подпись формата CAdES-BES проверяется с помощью функции CMSVerify() класса CMSVerify (JCP)?
Offline akor81  
#17 Оставлено : 25 сентября 2012 г. 23:39:15(UTC)
akor81

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

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

afev написал:
Ваша подпись формата CAdES-BES проверяется с помощью функции CMSVerify() класса CMSVerify (JCP)?


С помощью этой функции - проверяется ) Т.е. если засунуть подпись и сертификат, с помощью которого эта подпись была создана, в этот метод CMSVerify() - то всё типа валидируется. Но меня смущает, что я там не вижу никакой проверки соответствия подписи с внешней строкой "Message", которую я подсовывал на подписание при генерации подписи. Всё что я вижу в этом коде - то что из самой же подписи с помощью неких процедур вытаскивается некий массив байтов, и в дальнейшем подпись валидируется на предмет соответствия с ним. А в чём смысл этих действий? Мне же нужно установить соответствие именно с тем, что я подписал, т.е. "Message". Это, в указанном Вами примере, не делается.

Конечно, напрашивается предположение, что этот таинственный массив байтов, который вытаскивается из подписи - это и есть "Message".getBytes(). Или же хэш от "Message".getBytes(). В этом случае всё было бы ясно. Типа, подпись имеет расширенный формат, и хэш от подписанных данных включён в её состав. Но это не так! Этот массив байтов не равен ни "Message".getBytes(), ни CMStools.digestm("Message".getBytes(), "GOST3411"). Я не могу понять, что это такое. Поэтому тот факт, что подпись находится в соответствии с неким таинственным масивом байтов, извлечённым из неё самой, нельзя признать настоящей валидацией. Вот я и прошу мне объяснить, как всё таки мне установить кореляцию между подписью и именно моими исходными "Message".getBytes(), которые я и подписывал.
Offline Евгений Афанасьев  
#18 Оставлено : 26 сентября 2012 г. 0:20:38(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,033
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 730 раз в 688 постах
Андрей* вам написал, что проверяется хеш, а не сами данные. В CAdES-BES это хеш подписанных аттрибутов, среди которых - хеш данных; посмотрите, как расчитывается хеш и формируется подпись в примере CMSSign, ф. createhashCMS, сравните с ф. createCMS.

Отредактировано пользователем 26 сентября 2012 г. 0:23:03(UTC)  | Причина: Не указана

Offline akor81  
#19 Оставлено : 26 сентября 2012 г. 1:01:33(UTC)
akor81

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

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

afev написал:
Андрей* вам написал, что проверяется хеш, а не сами данные. В CAdES-BES это хеш подписанных аттрибутов, среди которых - хеш данных; посмотрите, как расчитывается хеш и формируется подпись в примере CMSSign, ф. createhashCMS, сравните с ф. createCMS.


То, что проверяется хэш от данных, это понятно. Вы мне сейчас говорите, что этот хэш расчитывается не только от собственно данных которые я подписываю, но и ещё от каких-то дополнительных атрибутов? Другими словами, хэш, который зашифрован в подписи, это не CMStools.digestm("Message".getBytes(), "GOST3411"), а CMStools.digestm(("Message" + чего-то там ещё).getBytes(), "GOST3411"), правильно?

Но чтобы верифицировать соответствие подписи данным, я должен на стороне сервера сформировать точно такой же хэш. А как это сделать? Я посмотрел пример CMSSign, ф. createhashCMS, о котором Вы говорите, но там для формирования хэша используется PrivateKey. А на сервере-то его не будет...

Я понимаю, что я уже достал этими вопросами, но я действительно не могу понять, как это всё использовать... Eh? Неужели нет какой-то одной простой функции, которая берёт эту CMS-подпись, сертификат, и данные на которых она была сгенерена, и проверяет что всё это друг другу соответствует?

Ну допустим, нету. Но как мне сформировать этот "хеш подписанных аттрибутов" на стороне сервера, чтобы сравнить его с тем, который зашифрован в подписи?
Offline Евгений Афанасьев  
#20 Оставлено : 26 сентября 2012 г. 2:21:15(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,033
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 730 раз в 688 постах
1.
akor81 написал:

То, что проверяется хэш от данных, это понятно. Вы мне сейчас говорите, что этот хэш расчитывается не только от собственно данных которые я подписываю, но и ещё от каких-то дополнительных атрибутов? Другими словами, хэш, который зашифрован в подписи, это не CMStools.digestm("Message".getBytes(), "GOST3411"), а CMStools.digestm(("Message" + чего-то там ещё).getBytes(), "GOST3411"), правильно?

Да. раз вы написали про CAdES-BES, то этот формат подписи подразумевает наличие подписанных атрибутов, с них и вычисляется хеш (в атрибуты входит и хеш данных).

2.
akor81 написал:
я должен на стороне сервера сформировать точно такой же хэш. А как это сделать? Я посмотрел пример CMSSign, ф. createhashCMS, о котором Вы говорите, но там для формирования хэша используется PrivateKey. А на сервере-то его не будет...

Где будет происходить проверка подписи - на сервере? PrivateKey используется для подписи, createhashCMS - формирует подпись, а CMSVerify - проверяет. CMSVerify как раз и проверяет подпись и хеш:
Код:

// I. Проверяем соответствие хеша данных в подписанных атрибутах хешу переданных (вложенных) данных.
...
if (!Array.toHexString(dm).equals(Array.toHexString(md)))
            throw new Exception("message-digest attribute verify failed");
...
// II. Проверяем подпись.
signature.verify(sign);
...
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
5 Страницы<1234>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.