Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Странно,у меня при выполнении канонизации на C# над вашим шаблоном следующим образом Код:
XmlDsigExcC14NTransform xmlTransform = new XmlDsigExcC14NTransform();
xmlTransform.LoadInput(xmlDocument);
MemoryStream memoryStream = (MemoryStream)xmlTransform.GetOutput();
к SignedInfo namespace не добавляется. Сейчас буду разбираться, из-за чего так происходит
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Научился получать подписи, не содержащие <Object><SignatureProperties> т.е. для шаблонов вида Цитата: <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /> <DigestValue>wMqeedhkBl4FMJ3bjYZjwLFdkwOsK/a0AaNjt+o+pxk=</DigestValue> </Reference> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>...</X509Certificate> </X509Data> </KeyInfo> </Signature>
Теперь пытаюсь получить подпись для шаблона, содержащего <Object> Цитата: <Signature Id="statCardSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /> <Reference URI="#signaturePropertiesc133ab11-1b5d-4c56-838a-fb7a9186bbbf" Type="http://www.w3.org/2000/02/xmldsig#SignatureProperty"> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::Object)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue>tcGOpnQbOFpUFvE2L5qaaEk82hs=</DigestValue> </Reference> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /> <DigestValue>KycTFRh4625xIFcvgsQq/j0RV7sE8vTLbdxhbP882ak=</DigestValue> </Reference> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>...</X509Certificate> </X509Data> </KeyInfo> <Object> <SignatureProperties Id="signaturePropertiesc133ab11-1b5d-4c56-838a-fb7a9186bbbf"> <SignatureProperty Target="#statCardSignature"> <SignDate xmlns="">23.07.2013</SignDate> </SignatureProperty> </SignatureProperties> </Object> </Signature>
однако полученный SignatureValue верификацию не проходит. На данный момент использую следующий алгоритм: 1) канонизирую SignedInfo 2)считаю хэш от SignedInfo 3)подписываю хэш от SignedInfo (переворачивание и енкодинг в base64 присутствуют) 4)вставляю полученное значение в SignatureValue Он работает при отсутствии тэга Object и второго Reference в SignedInfo Вопрос следующий- меняется ли как-то алгоритм получения SignatureValue при наличие тэгов Object и в чем может быть еще ошибка?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Переформилирую вопрос: как понять из описания Reference, от каких данных берется хэш в DigestValue этого Reference? Например для каких данных берется хэш для Reference следующего вида: Цитата: <Reference URI="#signaturePropertiesc133ab11-1b5d-4c56-838a-fb7a9186bbbf" Type="http://www.w3.org/2000/02/xmldsig#SignatureProperty"> <Transforms> <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> <XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::Object)</XPath> </Transform> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue>tcGOpnQbOFpUFvE2L5qaaEk82hs=</DigestValue> </Reference>
Я не понимаю, на что именно указывает XPath, написанный в <Transform><XPath>: на данные от которых берется хэш или на данные, от которых хэш не берется. Отредактировано пользователем 23 июля 2013 г. 15:36:16(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.07.2013(UTC) Сообщений: 21 Поблагодарили: 2 раз в 2 постах
|
Reference URI вроде как указывает на <SignatureProperties Id="signaturePropertiesc133ab11-1b5d-4c56-838a-fb7a9186bbbf">...</SignatureProperties>. Вот от него надо получить, применив XPath, хэш. Вроде же в шарпе есть класс который работает с XPath... Что он возвращает?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Спасибо, разобрался. на вход первой Transform приходит нодесет по URI из соотвествующей Reference, а на вход алгоритму хэширования приходит результат последнего Transform.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Посчитал DigestValue для обоих Reference. Хэши считаются корректно и не захватывают при расчете SignatureValue(которое заменяется мной на заново посчитанное), однако верифицировать карточку новым SignatureValue не удается. Думаю проблема в канонизации xml. Просьба к тем, к кого есть работающий алгоритм канонизации, прогоните, пожалуйста, у себя следующий xml Цитата: <Signature Id="statCardSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /><Reference URI="#signatureProperties7fe7b021-db75-4fbc-9adf-10e88930015c" Type="http://www.w3.org/2000/02/xmldsig#SignatureProperty"><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::Object)</XPath></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>VtJy0CMCBZ7D85Ebkm0lU9vnvZM=</DigestValue></Reference><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath></Transform></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /><DigestValue>TRkTgMWiFEnKfEANQgkYJwK89Q8Ms/2aJ4IUuI4VHMw=</DigestValue></Reference></SignedInfo></Signature>
C# класс по канонизации работает криво(в частности не пробрасывает xmlns="http://www.w3.org/2000/09/xmldsig#" и не заменяет \r на \n), так что сейчас канонизацию провожу руками и ,видимо, упускаю пробросить какой-то namespace.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Автор: fomenko Посчитал DigestValue для обоих Reference. Хэши считаются корректно и не захватывают при расчете SignatureValue(которое заменяется мной на заново посчитанное), однако верифицировать карточку новым SignatureValue не удается. Думаю проблема в канонизации xml. Просьба к тем, к кого есть работающий алгоритм канонизации, прогоните, пожалуйста, у себя следующий xml Цитата: <Signature Id="statCardSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /><Reference URI="#signatureProperties7fe7b021-db75-4fbc-9adf-10e88930015c" Type="http://www.w3.org/2000/02/xmldsig#SignatureProperty"><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::Object)</XPath></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>VtJy0CMCBZ7D85Ebkm0lU9vnvZM=</DigestValue></Reference><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath></Transform></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /><DigestValue>TRkTgMWiFEnKfEANQgkYJwK89Q8Ms/2aJ4IUuI4VHMw=</DigestValue></Reference></SignedInfo></Signature>
C# класс по канонизации работает криво(в частности не пробрасывает xmlns="http://www.w3.org/2000/09/xmldsig#" и не заменяет \r на \n), так что сейчас канонизацию провожу руками и ,видимо, упускаю пробросить какой-то namespace. <SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"></SignatureMethod><Reference Type="http://www.w3.org/2000/02/xmldsig#SignatureProperty" URI="#signatureProperties7fe7b021-db75-4fbc-9adf-10e88930015c"><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath>not(ancestor-or-self::Object)</XPath></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod><DigestValue>VtJy0CMCBZ7D85Ebkm0lU9vnvZM=</DigestValue></Reference><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath>not(ancestor-or-self::dsig:Signature)</XPath></Transform></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"></DigestMethod><DigestValue>TRkTgMWiFEnKfEANQgkYJwK89Q8Ms/2aJ4IUuI4VHMw=</DigestValue></Reference></SignedInfo>
|
1 пользователь поблагодарил dmishin за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Проблема была в том, что в тэги XPath также надо подставлять xmlns="http://www.w3.org/2000/09/xmldsig#". Попробовал Java-либу по канонизации(http://santuario.apache.org), она проставила их. Однако в SignedInfo она тоже упорно не хочет писать xmlns="http://www.w3.org/2000/09/xmldsig#". Пришлось дописывать руками.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Моя каноникализация оказалась тоже некорректной? (XPath без неймспейса)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close