XADES-EPES Сомнения относительно стоимости в DigestValue и SignatureValue

Я интегрирую цифровую подпись XADES-EPES в PHP на стандарте UBL, прочитал достаточно на нем тему и в нескольких хранилищах они делают из различных форм подписанного, пойдите, что идет внутри DiguestValue и SignatureValue поддаваясь в конце концов с сомнением: какая информация действительно идет в этих элементах?.

Чтобы проверять мои продвижения и прибывать в подписанный правильно я опираюсь на этот validador https://tools.chilkat.io/xmlDsigVerify.cshtml и открыл хранилище, где я имею мой код в PHP докуда я это приношу из аванпоста: https://gitlab.com/siegroupmx/xmlsinger

Я иду в тему....

>>, поскольку производятся DigestValue для Ссылок внутри SignedInfo??

Моя процедура для этого состоит в том, чтобы брать просто Узел (например KeyInfo) канонизированный в C14N и после я это перемещаю из-за Алгоритма (sha1, sha256, и т.д....), после это конвертирую в Base64 и результат это разместил на DigestValue, мой процесс правилен???

Простой и быстрый пример:

Излишне упоминать о том, что в нижнем примере я опускаю процесс, где я верю в этикетку Singature и Ваши внутренние элементы.

preserveWhiteSpace= FALSE;
$xml->formatOutput= true;
$xml->load($xmlSigned);

$xp= new DOMXPath($xml);
$xp->registerNamespace('secdsig', self::XMLDSIGNS);
$keyinfo= $xp->query('.//secdsig:Signature/secdsig:KeyInfo');

$hash= hash("sha256", $keyinfo->item(0)->C14N(), true);
$base64= base64_encode($hash);
echo $base64; # imprime LcOJdpKtT7sgjbblkmGyYrSUslXMlw0TyCc8SOUBJQM=
?>

И в XML:


    
        
    
    
    LcOJdpKtT7sgjbblkmGyYrSUslXMlw0TyCc8SOUBJQM=

....
....

    ... todas las etiquetas internas....

>>, поскольку производится SignatureValue???

В моей процедуре я беру узел SignedInfo, канонизированного в C14N, подписываю их с openssl_sign () и результат я это конвертирую в Base64 и размещаю внутри SignatureValue. Правильно это, что я делаю???

Быстрый пример:

preserveWhiteSpace= FALSE;
$xml->formatOutput= true;
$xml->load($xmlOut);

$xp= new DOMXPath($xml);
$xp->registerNamespace('secdsig', self::XMLDSIGNS);

$si= $xp->query('.//secdsig:Signature/secdsig:SignedInfo'); # signedinfo
openssl_sign($si->item(0)->C14N(), $signature, $this->privateKey, OPENSSL_ALGO_SHA256);
$dato= base64_encode($signature); # esto va en SignatureValue

$sv= $xp->query('.//secdsig:Signature/secdsig:SignatureValue'); # signaturevalue
$sv->item(0)->nodeValue= $dato;
?>

И SignatureValue внутри XML эта:


    
        
        
        
            
                
            
            
            KWOvQ3tWaygQXkkvfI6s9UO0azjQgc0YGp9JANDXYis=
        
        
            
                
            
            
            LcOJdpKtT7sgjbblkmGyYrSUslXMlw0TyCc8SOUBJQM=
        
    
    
        ZGcaOhKK3Uzp64T11LHFKAy1eOkKeMpvKNNAeBFapJxbyCr8iQDkGQ2B+VQFYLWZnDneK6Cuc6uDtUw14q4mlYoarlIRVvLlsiQK0OmFrdWEM4sd62WPP2N0GpUOOh/I/BjggsqNV1OOWG2xutZNbdh4maJzxEbcLuU8SrdPuU6q38bTAw/QJyQ5F4eiRr++28sR9G3yV0nTzkZXR5QNPScdrbwrMtH/vkBx0FfV8ErzubwKyPdvQSbugmLMk8hd7Rnn5SRg8JaxQhCC5TDPC3KOmj5Nh1zHmzATZaRAbP0XNoYsDLnQtmteo5/RL2NHGvHYbP0teUF43nHXu/KAVg==
    

>> ЗАКЛЮЧЕНИЕ

validador говорит мне, что Подпись плохая, и что также болен подписанный ссылок :(

Ссылка в пример https://gitlab.com/siegroupmx/xmlsinger/blob/master/examples/ejemplo_out.xml

Удостоверение: https://gitlab.com/siegroupmx/xmlsinger/blob/master/tmp/certificado.pem

Подпиши: https://gitlab.com/siegroupmx/xmlsinger/blob/master/tmp/firma.pem

Ключ: persona_juridica_pruebas

1
задан 14.03.2019, 18:14
1 ответ

DespuГ©s 4 dГ-схвати , которые показались "вечными", в конце концов решите мою проблему.

Процесс в, поскольку он реализовывал DigestValue из Ссылок, и SignatureValue полностью правильны, проблема коренилась в CanonizaciГіn.

В момент груза подписанного XML, извлекать узел и производить ссылку производило неправильное открытие, что seteaba по умолчанию она canonizaciГіn, в "предохранило место" что оказывалось hash, отличным от ожидаемого, так как, в момент Transform заявили для каждого Reference, был показан регулярный C14N, больше не C14N-WithComments.

Раньше: Правильные

    $xml= new DOMDocument();
    $xml->preserveWhiteSpace= FALSE;
    $xml->formatOutput= true;
    $xml->load($xmlsrc);
    $xmldata= $xml->C14N();

:

    $xml= new DOMDocument();
    $xml->formatOutput= true;
    $xml->load($xmlsrc);
    $xmldata= $xml->C14N();

простой Восток подробно описал я permitiГі производить Подписанного Xades-Epes без проблем, сейчас все tools помечают мне "pass/valid" подписанного ссылок как SignatureValue.

типов Привета!

0
ответ дан 02.12.2019, 05:39