Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/10/2008, 10:23
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Orientacion con Firmas Digitales

Buenas tardes de nuevo Foreros !!!

Vereis, me estoy iniciando con el tema de la firma electrónica, y agradecería a quien tenga un conocimiento en este tema me resuelva ciertas dudas que me han surgido según estoy estudiando este tema.

En primer lugar, comentar que soy capaz de realizar la firma digital de un documento y despues de realizar la comprobación del mismo y me va todo perfecto. Sin embargo, no sé si realmente los pasos que estoy realizando son correctos y además, tengo un par de dudas más, que les expongo a continuación.


1-. Para realizar la firma digital de un documento .pdf, hago lo siguiente:
1.1 -. Genero un MD5 del documento .pdf
1.2-. Creo un XML con el siguiente formato:
Código:
          <documento>
            <contenido>CONTENIDO MD5</contenido>
          </documento>
1.2-. Firmo ese XML y me queda de la siguiente manera
Código:
- <documento>
  <contenido>CYeA9CssQXV1EctwZcvlFw==</contenido> 
- <Signature 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="">
- <Transforms>
  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
  </Transforms>
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
  <DigestValue>kTKLpLCZ1Kw54dL9FuMvPMpdOEM=</DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>qiJlDTYMA25vMApq4PV+9sxFS509J+eF/rM3YxJbgiixc+0H9iakdZ3+5HOUvkns5N+UKJQBcd+L8tMAeg6rvsJMslm4iVmncGf9iqaz/EcuvyedLm4YywMocuOQL/qwnfUVuY9yc6gcu1aUup15wZqdEFVMdWMusG9oIlYrivo=</SignatureValue> 
- <KeyInfo>
- <KeyValue>
- <RSAKeyValue>
  <Modulus>wiOJ0l9Qmivb9lsLx46zn0rqSu+e6P5YLT1XbP0umcjffCy1dVsmCvoQH2PJ2sDOs923ZLOW7QK5sPlYcU7rOLUVK5laCyjyTBF1UI0ktoWcwMCOcjRnpH52GDDGIOGpLfxYXnwssRmkHYKv95diHznLmm6I27EDbEOoIzyHUIU=</Modulus> 
  <Exponent>AQAB</Exponent> 
  </RSAKeyValue>
  </KeyValue>
  </KeyInfo>
  </Signature>
  </documento>
¿Podrían decirme si está correcto?



2-. En el MSDN de Microsoft, he visto como realizar la firma digital de un documento, apartir de ahí hice mis ejemplos. Ok, pero... solo he visto para realizar la firma una vez. ¿Donde puedo ver un ejemplo donde se firme un documento por varias personas? ¿Y donde puedo ver un ejemplo de comprobación de la firma correcta de cada firmante para ese documento?



3-. Por último, veo que se pueden añadir referencias al XML a firmar. ¿Estas referencias, simplemente sirven para agregar información adicional al documento? Es decir, si mando en BASE64 el documento .pdf, ¿Estaría bien? ¿O eso de las Referencias es para otra cosa?

Me refiero a lo siguiente:
FIRMA DEL XML SIN REFERENCIA:
Código:
MIRAR LA FIRMA DE ARRIBA
FIRMA DEL XML CON REFERENCIA:
Código:
- <documento>
  <contenido>CYeA9CssQXV1EctwZcvlFw==</contenido> 
- <Signature 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="#MyDocOriginal">
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
  <DigestValue>iusbSvdEpsWqhXsX4vu9ql6ohdM=</DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>KzTHZHcEsdTHV0PJavKRr8kqwaF8uOaRtMn4/jnEd6L8li7eHwRGGUHi4+cwPNXQrzBN9J31z4akNun2qvghSSy1omITjHz6BXeItjkO7V0qVfardRlcIp//i8HakkS64EA46XcRMfZE2CO3aGOF5AS+9eIIqrKtZ3O625f0g5w=</SignatureValue> 
- <KeyInfo>
- <KeyValue>
- <RSAKeyValue>
  <Modulus>wiOJ0l9Qmivb9lsLx46zn0rqSu+e6P5YLT1XbP0umcjffCy1dVsmCvoQH2PJ2sDOs923ZLOW7QK5sPlYcU7rOLUVK5laCyjyTBF1UI0ktoWcwMCOcjRnpH52GDDGIOGpLfxYXnwssRmkHYKv95diHznLmm6I27EDbEOoIzyHUIU=</Modulus> 
  <Exponent>AQAB</Exponent> 
  </RSAKeyValue>
  </KeyValue>
  </KeyInfo>
- <Object Id="MyDocOriginal">
- <documento xmlns="">
  <contenido>AQUI MANDARIA EL BASE64</contenido> 
  </documento>
  </Object>
  </Signature>
  </documento>


Bueno, como vereis, estoy algo perdido en este tema y como me gusta bastante pues he intentado hacer las preguntas lo más técnicas y claras posibles. La verdad, no sé si es el lugar idóneo para preguntar, pero como estoy trabajando con C#... he preguntado donde más creo oportuno.

En fin, si alguien puede darme unas "lecciones" sobre todo este tema, se lo agradeceré eternamente.
__________________
Charlie.