Цифровая подпись XML: как вычисляется значение дайджеста для URI ссылки на тот же документ?

Моя цифровая подпись XML имеет следующие выдержки:

    <Signature Id="idPackageSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <Reference URI="#idOfficeObject" Type="http://www.w3.org/2000/09/xmldsig#Object">
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

                <DigestValue>ofqf9+Tj0qTkkExCEOwFz0V4aNo=</DigestValue>

            </Reference>
        </SignedInfo>

    <Object Id="idOfficeObject"><SignatureProperties><SignatureProperty Id="idOfficeV1Details" Target="#idPackageSignature"><SignatureInfoV1 xmlns="http://schemas.microsoft.com/office/2006/digsig"><SetupID/><SignatureText/><SignatureImage/><SignatureComments>test</SignatureComments><WindowsVersion>6.1</WindowsVersion><OfficeVersion>14.0</OfficeVersion><ApplicationVersion>14.0</ApplicationVersion><Monitors>1</Monitors><HorizontalResolution>1920</HorizontalResolution><VerticalResolution>1200</VerticalResolution><ColorDepth>32</ColorDepth><SignatureProviderId>{00000000-0000-0000-0000-000000000000}</SignatureProviderId><SignatureProviderUrl/><SignatureProviderDetails>9</SignatureProviderDetails><ManifestHashAlgorithm>http://www.w3.org/2000/09/xmldsig#sha1</ManifestHashAlgorithm><SignatureType>1</SignatureType></SignatureInfoV1></SignatureProperty></SignatureProperties></Object>

Предполагается, что указанный элемент Object имеет значение дайджеста ofqf9+Tj0qTkkExCEOwFz0V4aNo=. Я канонизирую элемент Object и получаю следующий вывод, который мне кажется правильным:

<Object Id="idOfficeObject"><SignatureProperties><SignatureProperty Id="idOfficeV1Details" Target="#idPackageSignature"><SignatureInfoV1 xmlns="http://schemas.microsoft.com/office/2006/digsig"><SetupID></SetupID><SignatureText></SignatureText><SignatureImage></SignatureImage><SignatureComments>test</SignatureComments><WindowsVersion>6.1</WindowsVersion><OfficeVersion>14.0</OfficeVersion><ApplicationVersion>14.0</ApplicationVersion><Monitors>1</Monitors><HorizontalResolution>1920</HorizontalResolution><VerticalResolution>1200</VerticalResolution><ColorDepth>32</ColorDepth><SignatureProviderId>{00000000-0000-0000-0000-000000000000}</SignatureProviderId><SignatureProviderUrl></SignatureProviderUrl><SignatureProviderDetails>9</SignatureProviderDetails><ManifestHashAlgorithm>http://www.w3.org/2000/09/xmldsig#sha1</ManifestHashAlgorithm><SignatureType>1</SignatureType></SignatureInfoV1></SignatureProperty></SignatureProperties></Object>

Я сохраняю его в файле inputxml и пытаюсь получить версию дайджеста sha1 в кодировке base64, используя следующую команду:

% shasum inputxml | cut -f 1 -d ' ' | xxd -r -p | base64
/zTi8HGHX9X+csjULYLt6FLrm3g=

Вычисленное значение дайджеста не соответствует тому, что находится в подписи XML. Что я делаю не так? Я пробовал несколько различных методов и настроек, но не могу получить правильное значение дайджеста.

Примечание. Подпись XML проверяется правильно. Таким образом, значение верное, но мне не хватает какого-то шага или детали. Спасибо за вашу помощь. Пожалуйста, дайте мне знать, как я могу уточнить или уточнить свой вопрос, если он не очень ясен.


person SkypeMeSM    schedule 28.01.2016    source источник
comment
Полная подпись не помешала бы. Однако в ваших вычислениях отсутствует по крайней мере один шаг: канонизация. Если в Справочнике не указано преобразование/канонизация, следует выполнить преобразование по умолчанию (см. спецификацию xmldsig). По умолчанию к элементу Object добавляется объявление пространства имен. Это даст: ‹Object Id=idOfficeObject xmlns=w3.org/2000/09/xmldsig# ....   -  person Moez    schedule 29.01.2016
comment
@Moez В ваших вычислениях отсутствует по крайней мере один шаг: канонизация. - Возможно, вы упустили из виду, что ОП написал Я канонизирую элемент Object и получил следующий вывод, который кажется правильным для я...   -  person mkl    schedule 29.01.2016
comment
@mkl Да, я пропустил это. Однако вывод канонизации неверен. Отсутствует объявление пространства имен.   -  person Moez    schedule 29.01.2016
comment
@Moez отлично, это должен быть ответ на вопрос.   -  person mkl    schedule 29.01.2016
comment
Я пробовал все комбинации, как было предложено. но даже с переписанными пространствами имен в каноническую форму я не получаю правильное значение дайджеста.   -  person SkypeMeSM    schedule 02.02.2016
comment
Использую ли я правильную команду/технику для вычисления значения дайджеста из канонического значения XML?   -  person SkypeMeSM    schedule 02.02.2016


Ответы (1)


Наконец я заставил его работать. С моей канонизированной разметкой было две проблемы:

a] Строка пространства имен была размещена неправильно. Это должно было быть <Object xmlns="http://www.w3.org/2000/09/xmldsig#" Id="idOfficeObject">

b] В конце файла была ошибочная новая строка, так как я редактировал эти файлы в текстовом редакторе.

Устранение этих проблем и запуск shasum дали мне правильный результат. Спасибо за вашу помощь, ребята.

person SkypeMeSM    schedule 09.02.2016