2

I have an XML digital signature, serialized with line breaks and indentation, as per the defaults in XmlSerializer. It fails the .net SignedXml.CheckSignature() test. If I strip out the line breaks and indentation, it passes. Is this the expected behaviour? Can the signature be considered robust and cross-platform if the default serialization, or a cosmetic change to the signature, breaks its validity? Should I be considering the binary pkcs formats for robustness. The signature, as serialized with line breaks, is below.

<?xml version="1.0"?>
<ds:Signature Id="SignatureID" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:SignedInfo>
    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
    <ds:Reference URI="http://localhost/simondocs/images/succes.png">
      <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <ds:DigestValue>Dv7mVn07JAKmm77J0PzqJ1N00SI=</ds:DigestValue>
    </ds:Reference>
  </ds:SignedInfo>
  <ds:SignatureValue Id="SignatureID">FHQiNBNrNVm/0yCNrvlifVpw9I10fyEQkXrAGslIOzBRtnPRBUDS3tE9RtvWbVxObQLhkn4Im5wcZoOtvl/K8fiAe45Pwvj3Q7trql+BCq3jDogYi83mlSaoW1ScU5Vmdl/jv6qfros0R7jelEqNiEkIF1n8dCZJBdzY/pY2vhkzM2MeiPxfHRYgMT3tgMUkhBGiU6EjGtitSWT840L/dz3HIRSXr4PCx7qAV108S8ICkXJPTp4Qs+32Tk1T7ha45BN7A+rHtyupd2xrCu7JCEHDn3k0XJL0/ARprqvZVpzqt2c/GLCjrX3fAJy7Yxs/3fOusA7jNm7qVHxFKHJAYA==</ds:SignatureValue>
  <ds:KeyInfo>
    <ds:X509Data>
      <ds:X509Certificate>MIIFPjCCBCagAwIBAgIRAIzFm3K+lU+T8UNfa4YidgAwDQYJKoZIhvcNAQELBQAwgZsxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMUEwPwYDVQQDEzhDT01PRE8gU0hBLTI1NiBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQTAeFw0xNTEyMDEwMDAwMDBaFw0xNjExMzAyMzU5NTlaMCQxIjAgBgkqhkiG9w0BCQEWE2Jic2ltb25iYkBnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIKK/6gK0lX2PpRT+O5Ghh8JcKShLSyeZ9HTeCH24oponyvcSJwYsXGk0eXH79RNJJI3J6elcjfVISRnujZmCOiAuFd1mdRWnlqtduVjPljxarSIxPj2cUvhZU2ybrp34q+MQ6mQPORb8IxLzglDUwYyAQ+ygt0mNHitdozqSB31j9ynDv+CdWQnXx3K6dfmO9djBlha1nhbqamcnz+XiOIp8YtWHBuDQiRQG1p0HVADHOCGxHo4+6gYCTZkP+t0rG2SZeI3m1GoelEp8KHdwGGGFqINbv+L4er6ZqBLmoMaHyFRQlF5D7t6LlrtJl57D+C+BbjvJdz9Es1io01t8jAgMBAAGjggHxMIIB7TAfBgNVHSMEGDAWgBSSYWuC4aKgqk/sZ/HCo/e0gADB7DAdBgNVHQ4EFgQUzX5+StqAfFWq8akUIZOEr6/OqvYwDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwIAYDVR0lBBkwFwYIKwYBBQUHAwQGCysGAQQBsjEBAwUCMBEGCWCGSAGG+EIBAQQEAwIFIDBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEBATArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8ubmV0L0NQUzBdBgNVHR8EVjBUMFKgUKBOhkxodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9TSEEyNTZDbGllbnRBdXRoZW50aWNhdGlvbmFuZFNlY3VyZUVtYWlsQ0EuY3JsMIGQBggrBgEFBQcBAQSBgzCBgDBYBggrBgEFBQcwAoZMaHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPU0hBMjU2Q2xpZW50QXV0aGVudGljYXRpb25hbmRTZWN1cmVFbWFpbENBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMB4GA1UdEQQXMBWBE2Jic2ltb25iYkBnbWFpbC5jb20wDQYJKoZIhvcNAQELBQADggEBACxK9UPMHxVhnBacp9nG9E4YK76GcQs3XbbX41VYYIwWgqVOSVfsY4bEQIs6j0JDY26KsIPMcvJL1XS5yT8UzZImL+GzmrPAKcts6jD2/KIXXpCC6FI3dQ+iOlMEJXlRQA6sY+a+viKgApzZHObL+SAh9DaALsaMdaYUKS+u9glS08BsT+LEqPagSwDkvV0molN8WDg1io4OfqY1k2nxx4cvMYHFXoC89d+Qq2+atqBfQZ9b6WzQagazdSZCdHF7dSM0r16SKUAW4XL1LQa+IHyFi8bfYEuqredeOtb9y5pOpTtaZqymCKCn/IeXQfTjSRXUmCR3Gtnsmd550XkSnRQ=</ds:X509Certificate>
    </ds:X509Data>
    <ds:KeyValue>
      <ds:RSAKeyValue>
        <ds:Modulus>yCiv+oCtJV9j6UU/juRoYfCXCkoS0snmfR03gh9uKKaJ8r3EicGLFxpNHlx+/UTSSSNyenpXI31SEkZ7o2ZgjogLhXdZnUVp5arXblYz5Y8Wq0iMT49nFL4WVNsm66d+KvjEOpkDzkW/CMS84JQ1MGMgEPsoLdJjR4rXaM6kgd9Y/cpw7/gnVkJ18dyunX5jvXYwZYWtZ4W6mpnJ8/l4jiKfGLVhwbg0IkUBtadB1QAxzghsR6OPuoGAk2ZD/rdKxtkmXiN5tRqHpRKfCh3cBhhhaiDW7/i+Hq+magS5qDGh8hUUJReQ+7ei5a7SZeew/gvgW47yXc/RLNYqNNbfIw==</ds:Modulus>
        <ds:Exponent>AQAB</ds:Exponent>
      </ds:RSAKeyValue>
    </ds:KeyValue>
  </ds:KeyInfo>
</ds:Signature>
bbsimonbb
  • 27,056
  • 15
  • 80
  • 110
  • Is this a question or a rant? Usually if you are going to hash something you have to decide on a normalized, canonical representation. – Matt Burland Dec 23 '15 at 14:21
  • 1
    Yes but canonicalization is applied the to thing you're signing, not the signature itself. Perhaps you can recommend a w3c algorithm that will canonicalize my signature and restore my emotional state ? – bbsimonbb Dec 23 '15 at 14:25
  • 1
    Overly emotive tone corrected for sensitive viewers. – bbsimonbb Dec 23 '15 at 14:32
  • *If I strip out the line breaks and indentation, it passes.* it seems like you already have your answer. Don't serialize it with line breaks and indents in the first place. I think there's a setting for the `XmlSerializer` that controls that. For example, see [here](http://stackoverflow.com/questions/5414617/prevent-xmlserializer-from-formatting-output) – Matt Burland Dec 23 '15 at 14:51
  • 1
    Looks like you are not the only one to run into this class of problem: http://stackoverflow.com/questions/4728300/how-to-produce-xml-signature-with-no-whitespaces-and-line-breaks-in-java. Apparently this is by design. – Chris Shain Dec 23 '15 at 14:57

0 Answers0