seguridad (para desarrolladores) firma digital xml mauricio grimberg [email protected]

34
Seguridad (para Seguridad (para desarrolladores) desarrolladores) Firma digital XML Firma digital XML Mauricio Grimberg Mauricio Grimberg [email protected] [email protected] Axton Axton http://www.axton.com.ar/ http://www.axton.com.ar/

Upload: manolito-calvin

Post on 03-Feb-2015

35 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Seguridad (para Seguridad (para desarrolladores)desarrolladores)

Firma digital XMLFirma digital XML

Mauricio GrimbergMauricio [email protected]@mug.org.arAxtonAxtonhttp://www.axton.com.ar/http://www.axton.com.ar/

Page 2: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

¿Qué pretendemos ¿Qué pretendemos asegurar?asegurar?

Que quien “firma” el documento sea quien Que quien “firma” el documento sea quien dice ser dice ser

Equivalente exacto a una firma manualEquivalente exacto a una firma manual

Que el contenido que tenemos enfrente es Que el contenido que tenemos enfrente es el que el firmante firmó (perdón por el el que el firmante firmó (perdón por el trabalenguas)trabalenguas)

Verificación de que no hubo transformación Verificación de que no hubo transformación posterior a la firmaposterior a la firma

NoNo vamos a tocar en esta charla el tema vamos a tocar en esta charla el tema encriptación encriptación general del contenido; general del contenido; lateralmente enfocaremos el tema lateralmente enfocaremos el tema encriptación en el marco de la operatoria encriptación en el marco de la operatoria de la firma.de la firma.

Page 3: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

En términos más técnicos En términos más técnicos pero no menos generalespero no menos generales

Generaremos un nodo XML que Generaremos un nodo XML que contienecontiene

Un resumen de todo lo que se quiere Un resumen de todo lo que se quiere firmarfirmar

La indicación de cómo se preprocesa el La indicación de cómo se preprocesa el material a firmarmaterial a firmar

La indicación de cómo se resume lo La indicación de cómo se resume lo preprocesadopreprocesado

Una encriptación del resumen utilizando Una encriptación del resumen utilizando claves asimétricasclaves asimétricas

Page 4: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Algo asíAlgo así

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><SignedInfo>

<!--La información firmada--><!--La información firmada--><CanonicalizationMethod <CanonicalizationMethod

Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod <SignatureMethod

Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI=""><Reference URI="">

<Transforms><Transforms> <!--Remueve del cálculo del compendio toda la estructura generada a partir de <!--Remueve del cálculo del compendio toda la estructura generada a partir de

[Signature] -->[Signature] --><Transform <Transform

Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms></Transforms><DigestMethod <DigestMethod

Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>2PCZb3vt8JaSdzzVZyenRoFU694=</<DigestValue>2PCZb3vt8JaSdzzVZyenRoFU694=</

DigestValue>DigestValue></Reference></Reference>

</SignedInfo></SignedInfo>

<SignatureValue>Afc+biLiXr5XGLHC1Iz5+Jnz4UaQzSx9seOj5ac+l+a7FlXAonZMaUd3f<SignatureValue>Afc+biLiXr5XGLHC1Iz5+Jnz4UaQzSx9seOj5ac+l+a7FlXAonZMaUd3f6pZ0zG46WdcXqoNq1Rl2noGTE2+uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NY6pZ0zG46WdcXqoNq1Rl2noGTE2+uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NYmLEMDSbGnS2AYDc24lPsHRf2BtXbd/g9bufAh5CRrdLYc=</SignatureValue>mLEMDSbGnS2AYDc24lPsHRf2BtXbd/g9bufAh5CRrdLYc=</SignatureValue></Signature></Signature>

Page 5: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Clave simétricaClave simétrica

Es una clave únicaEs una clave única

Se denomina simétrica porque la Se denomina simétrica porque la misma clave debe estar disponible misma clave debe estar disponible para quien firma y para quien verifica para quien firma y para quien verifica la firmala firma

Implica una necesidad importante de Implica una necesidad importante de transportación de la clavetransportación de la clave

Esto desvaloriza el sistema: la clave está Esto desvaloriza el sistema: la clave está viajando todo el tiempoviajando todo el tiempo

Page 6: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Claves asimétricasClaves asimétricas

Clave Clave públicapúblicaClave Clave privadaprivadaTienen un funcionamiento Tienen un funcionamiento complementario que permite complementario que permite utilizarlas de un modo utilizarlas de un modo asimétricoasimétrico: : firmo con la privada y verifico con la firmo con la privada y verifico con la públicapúblicaLa pública es PÚBLICA: la puedo La pública es PÚBLICA: la puedo distribuir a mi gustodistribuir a mi gustoRápidamente: si puedo verificar una Rápidamente: si puedo verificar una firma usando una clave pública es firma usando una clave pública es porque quien la firmó tiene la clave porque quien la firmó tiene la clave privadaprivada

Page 7: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Claves e identidadClaves e identidad

De nada sirve una clave no asociada De nada sirve una clave no asociada a una determinada itentidada una determinada itentidad

En En TODOTODO caso “alguien” debe caso “alguien” debe certificar – del mismo modo que un certificar – del mismo modo que un Banco certifica nuestra firma manual Banco certifica nuestra firma manual - la asociación entre - la asociación entre ClaveClave e e IdentidadIdentidad

Page 8: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Verificación de identidadVerificación de identidad

Por certificadoPor certificadoObtenemos un certificado generado por Obtenemos un certificado generado por una entidad una entidad autorizadaautorizada para asegurar para asegurar que puede proveer un certificado que puede proveer un certificado únicoúnico a a una persona o empresa una persona o empresa verificableverificableEs la manera Es la manera estándarestándar

Por clavePor claveGeneramos claves programáticamente y Generamos claves programáticamente y las almacenamos en una base de datos, las almacenamos en una base de datos, la aplicación certifica el vínculo entre la aplicación certifica el vínculo entre clave e identidadclave e identidadValidez sólo internaValidez sólo interna

Page 9: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

¿Qué es un certificado?¿Qué es un certificado?

Es un contenedor único - especificado Es un contenedor único - especificado de un modo estándar - de claves, de un modo estándar - de claves, información del sujeto, de la entidad información del sujeto, de la entidad autorizante y de los procedimientos autorizante y de los procedimientos asociadosasociados

Definido por el grupo de trabajo Definido por el grupo de trabajo Internet Internet Engineering Task Force (IETF) Public Key Engineering Task Force (IETF) Public Key Infrastructure, X.509 (PKIX)Infrastructure, X.509 (PKIX)

Es - finalmente - un mensaje en el que Es - finalmente - un mensaje en el que el el autorizanteautorizante asegura la identidad del asegura la identidad del titulartitular

Page 10: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

CA (certificate authority)CA (certificate authority)

Modelo de confianza “absoluta”Modelo de confianza “absoluta”

Los proveedores de certificados (los Los proveedores de certificados (los CA) son quienes se responsabilizan CA) son quienes se responsabilizan por la identificación e integridad del por la identificación e integridad del certificado “hacia todos”, en todo certificado “hacia todos”, en todo contextocontexto

Page 11: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

No repudiableNo repudiable

El hecho de la certificación universal El hecho de la certificación universal producida por un certificado produce producida por un certificado produce el tercer valor de la firma digitalel tercer valor de la firma digital

IntegridadIntegridad

IdentificaciónIdentificación

No repudiabilidadNo repudiabilidad

Page 12: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

X.509X.509

Es una colección de Es una colección de especificaciones especificaciones para estandarizar la para estandarizar la metodología de metodología de clave públicaclave pública

Contiene ambas Contiene ambas claves (o sólo la claves (o sólo la pública) y más pública) y más información información destinada a procesos destinada a procesos de identificación de de identificación de entidades y entidades y algoritmos bajo la algoritmos bajo la forma de un forma de un certificadocertificado

Page 13: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

X.509X.509

Version Version Versión de X.509Versión de X.509

Serial Number Serial Number Según RFC 2459 es un número entero Según RFC 2459 es un número entero que identifica absolutamente a un que identifica absolutamente a un certificado en el contexto de un certificado en el contexto de un determinado CAdeterminado CA

Algorithm ID Algorithm ID Algoritmo de encriptación utilizadoAlgoritmo de encriptación utilizado

Issuer Issuer Emisor del certificadoEmisor del certificado

Page 14: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

X.509X.509

Not Before Not Before Inicio de validez (fecha)Inicio de validez (fecha)

Not After Not After Fin de validez (fecha)Fin de validez (fecha)

Subject Subject Nombre distinguible del sujetoNombre distinguible del sujeto

Public Key Info Public Key Info Información de claveInformación de clave

Page 15: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Generación de certificadosGeneración de certificados

A los fines del desarrollo A los fines del desarrollo generaremos uno utilizando generaremos uno utilizando MakecertMakecert

Luego lo podremos examinar Luego lo podremos examinar utilizando MMC (Microsoft utilizando MMC (Microsoft Management Console) mediante el Management Console) mediante el snap-in snap-in CertificatesCertificates

Page 16: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

MakecertMakecert

.Net Framework SDK 2.0 contiene la .Net Framework SDK 2.0 contiene la última versiónúltima versión

Generamos un certificado que incluye Generamos un certificado que incluye una clave privada, denominación del una clave privada, denominación del titular, fechas de vigencia y lo titular, fechas de vigencia y lo enviamos al almacenamiento enviamos al almacenamiento personalpersonal

makecert -r -pe -n makecert -r -pe -n "CN=XML_DIG_SIGN_Mauricio" -b "CN=XML_DIG_SIGN_Mauricio" -b 11/28/2005 -e 11/28/2010 -sky exchange 11/28/2005 -e 11/28/2010 -sky exchange -ss my-ss my

Page 17: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

SHA1SHA1

Secure Hash Algorithm - Version 1.0 Secure Hash Algorithm - Version 1.0

http://www.w3.org/PICS/DSig/SHA1_1http://www.w3.org/PICS/DSig/SHA1_1_0.html_0.html

Algoritmo diseñado para ser usado Algoritmo diseñado para ser usado con firma digital - Digital Signature con firma digital - Digital Signature Standard (DSS) – con el objetivo de Standard (DSS) – con el objetivo de generar un resumen del contenido a generar un resumen del contenido a firmarfirmar

Page 18: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

RSARSA

Es un algoritmo de encriptación Es un algoritmo de encriptación asimétricaasimétrica

Generado en 1977 por Ron Generado en 1977 por Ron RRivest, ivest, Adi Adi SShamir y Len hamir y Len AAdleman - las dleman - las iniciales de sus apellidos componen iniciales de sus apellidos componen su nombre - en el MITsu nombre - en el MIT

Junto con Sha1 son preferidos por el Junto con Sha1 son preferidos por el W3C para los usos de XML Digital W3C para los usos de XML Digital Signature Signature

((<SignatureMethod <SignatureMethod Algorithm="http://www.w3.org/2000/09/Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>xmldsig#rsa-sha1"/>))

Page 19: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Firma digitalFirma digital

Detached Detached DesconectadaDesconectada

EnvelopingEnvelopingEnvolvente: la información firmada está Envolvente: la información firmada está embebidaembebida

EnvelopedEnvelopedEnvuelta: el documento contiene la firmaEnvuelta: el documento contiene la firma

Page 20: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Proceso de firmaProceso de firma

Generación de referenciasGeneración de referenciasAplicar las transformacionesAplicar las transformaciones

Calcular los compendiosCalcular los compendios

Agregar los respectivos elementos Agregar los respectivos elementos ReferenceReference

Generación de la firmaGeneración de la firmaConstruir SignedInfoConstruir SignedInfo

Construir SignatureValueConstruir SignatureValue

Construir el nodo principal y, Construir el nodo principal y, eventualmente, agregar información eventualmente, agregar información de claves públicas o certificadosde claves públicas o certificados

Page 21: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Proceso de validación de Proceso de validación de firmafirma

Construir el resumen utilizando el Construir el resumen utilizando el algoritmo especificadoalgoritmo especificado

Si coincide continuamosSi coincide continuamos

Obtenemos la información de clavesObtenemos la información de claves

Utilizamos el algoritmo de Utilizamos el algoritmo de encriptación asimétrica para validar encriptación asimétrica para validar la firmala firma

Page 22: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

CanonicalizationCanonicalization

Los algoritmos de criptografía Los algoritmos de criptografía esperan textos exactos esperan textos exactos (inmodificados) como condición de (inmodificados) como condición de igualdadigualdad

XML tiene flexibilidades en la XML tiene flexibilidades en la condición de igualdad:condición de igualdad:

Espacios en blancoEspacios en blanco

Orden de los atributosOrden de los atributos

Page 23: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Estructura de la Firma de Estructura de la Firma de ejemploejemplo

SignatureSignatureSignedInfoSignedInfo

CanonicalizationMethodCanonicalizationMethod

SignatureMethodSignatureMethodEl método de firma también se firmaEl método de firma también se firma

ReferenceReferenceTransformsTransforms

DigestMethodDigestMethod

DigestValueDigestValue

SignatureValueSignatureValue

Page 24: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

ElementosElementos

SignatureRaíz de la firmaRaíz de la firma

SignedInfoLa información efectivamente firmadaLa información efectivamente firmada

TransformsPasos de transformación: XPATH, XSL, Pasos de transformación: XPATH, XSL, etc.etc.

CanonicalizationMethodEl algoritmo usado para El algoritmo usado para canonicalizarcanonicalizar

Page 25: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Elementos 2Elementos 2

ReferenceCada recurso del documento a ser firmadoPuede incluir múltiples transformacionesPuede incluir múltiples transformaciones

DigestMethodEl algoritmo utilizado para producir el DigestValue

SignatureValueEl resultado de aplicar la clave al DigestValue utilizando el agoritmo del SignatureMethod

KeyInfoInformación (opcional) sobre la clave

Page 26: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

EstadiosEstadios

CanonicalizationCanonicalization TransformsTransforms DigestMethodDigestMethodSignedInfoSignedInfo DigestValueDigestValue

DigestValueDigestValue

SignedInfoSignedInfo SignatureValueSignatureValue

DigestMethod.DigestMethod.

KeyInfoKeyInfo

FirmaFirma

VerificacióVerificaciónn

Page 27: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

MultiplicidadMultiplicidad

Múltiples transformacionesMúltiples transformacionesDetalladas en cada elemento TransformDetalladas en cada elemento Transform

Múltiples referenciasMúltiples referenciasPuede utilizarse un manifiesto (colección Puede utilizarse un manifiesto (colección de referencias) en caso de que sean de referencias) en caso de que sean muchasmuchas

Page 28: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Obtener el certificado (VB)Obtener el certificado (VB)

Public Function ObtenerCertificado(ByVal subject As String) As Public Function ObtenerCertificado(ByVal subject As String) As X509Certificate2X509Certificate2

Dim store As New X509Store(StoreLocation.CurrentUser)Dim store As New X509Store(StoreLocation.CurrentUser) store.Open(OpenFlags.ReadOnly)store.Open(OpenFlags.ReadOnly) Dim certCollection As X509Certificate2Collection = Dim certCollection As X509Certificate2Collection =

store.Certificatesstore.Certificates Dim cert As X509Certificate2 = NothingDim cert As X509Certificate2 = Nothing

Dim c As X509Certificate2Dim c As X509Certificate2 For Each c In certCollectionFor Each c In certCollection If c.Subject = subject ThenIf c.Subject = subject Then Return cReturn c End IfEnd If Next cNext c Return NothingReturn Nothing End FunctionEnd Function

Page 29: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Obtener el certificado Obtener el certificado (C#)(C#) public static X509Certificate2 ObtenerCertificado(String public static X509Certificate2 ObtenerCertificado(String

subject)subject) {{ X509Store store = new X509Store store = new

X509Store(StoreLocation.CurrentUser);X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly);store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certCollection = X509Certificate2Collection certCollection =

store.Certificates;store.Certificates; foreach (X509Certificate2 c in certCollection)foreach (X509Certificate2 c in certCollection) {{ if (c.Subject == subject)if (c.Subject == subject) {{ return c;return c; }}

}} return null;return null; }}

Page 30: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Firmar digitalmente (VB)Firmar digitalmente (VB)

Public Sub FirmarXML(Public Sub FirmarXML(ByRefByRef documento As documento As XmlDocument, ByVal certificado As XmlDocument, ByVal certificado As X509Certificate2)X509Certificate2)

Dim sig As SignedXml = New Dim sig As SignedXml = New SignedXml(documento)SignedXml(documento)

sig.SigningKey = certificado.PrivateKeysig.SigningKey = certificado.PrivateKey Dim reference As New Reference()Dim reference As New Reference() reference.Uri = ""reference.Uri = "" Dim env As New Dim env As New

XmlDsigEnvelopedSignatureTransform()XmlDsigEnvelopedSignatureTransform() reference.AddTransform(env)reference.AddTransform(env) sig.AddReference(reference)sig.AddReference(reference) sig.ComputeSignature()sig.ComputeSignature() Dim xmlDigitalSignature As XmlElement = Dim xmlDigitalSignature As XmlElement =

sig.GetXml()sig.GetXml()

documento.DocumentElement.AppendChild(docudocumento.DocumentElement.AppendChild(documento.ImportNode(xmlDigitalSignature, True))mento.ImportNode(xmlDigitalSignature, True))

End SubEnd Sub

Page 31: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Firmar digitalmente (C#)Firmar digitalmente (C#)

public static void FirmarXML(ref XmlDocument documento, public static void FirmarXML(ref XmlDocument documento, X509Certificate2 certificado)X509Certificate2 certificado)

{{ SignedXml sig = new SignedXml(documento);SignedXml sig = new SignedXml(documento); sig.SigningKey = certificado.PrivateKey;sig.SigningKey = certificado.PrivateKey; Reference reference = new Reference();Reference reference = new Reference(); reference.Uri = "";reference.Uri = ""; XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform env = new

XmlDsigEnvelopedSignatureTransform();XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env);reference.AddTransform(env); sig.AddReference(reference);sig.AddReference(reference); sig.ComputeSignature();sig.ComputeSignature(); XmlElement xmlDigitalSignature = sig.GetXml();XmlElement xmlDigitalSignature = sig.GetXml();

documento.DocumentElement.AppendChild(documento.Impdocumento.DocumentElement.AppendChild(documento.ImportNode(xmlDigitalSignature, true));ortNode(xmlDigitalSignature, true));

}}

Page 32: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Verificar Firma (VB)Verificar Firma (VB)

Public Function VerificarFirma(ByVal Public Function VerificarFirma(ByVal documento As XmlDocument, ByVal documento As XmlDocument, ByVal certificado As X509Certificate2) As Booleancertificado As X509Certificate2) As Boolean

Dim sig As SignedXml = New Dim sig As SignedXml = New SignedXml(documento)SignedXml(documento)

Dim nodeList As XmlNodeList = Dim nodeList As XmlNodeList = documento.GetElementsByTagName("Signdocumento.GetElementsByTagName("Signature")ature")

sig.LoadXml(CType(nodeList(0), sig.LoadXml(CType(nodeList(0), XmlElement))XmlElement))

Return sig.CheckSignature(certificado, Return sig.CheckSignature(certificado, True)True)

End FunctionEnd Function

Page 33: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

Verificar Firma (C#)Verificar Firma (C#)

static Boolean static Boolean VerificarFirma(XmlDocument documento, VerificarFirma(XmlDocument documento, X509Certificate2 certificado)X509Certificate2 certificado)

{{

SignedXml sig = new SignedXml sig = new SignedXml(documento);SignedXml(documento);

XmlNodeList nodeList = XmlNodeList nodeList = documento.GetElementsByTagName("Signdocumento.GetElementsByTagName("Signature");ature");

sig.LoadXml((XmlElement)nodeList[0]);sig.LoadXml((XmlElement)nodeList[0]);

return sig.CheckSignature(certificado, return sig.CheckSignature(certificado, true);true);

}}

Page 34: Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg mau@mug.org.arAxton

VínculosVínculos

http://world.std.com/~franl/crypto/rsahttp://world.std.com/~franl/crypto/rsa-example.html-example.htmlhttp://www.codeproject.com/dotnet/xhttp://www.codeproject.com/dotnet/xmldsiglic.aspmldsiglic.asphttp://msdn.microsoft.com/library/defhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebsrv/ault.asp?url=/library/en-us/dnwebsrv/html/underxmldigsig.asphtml/underxmldigsig.asphttp://www.jensign.com/http://www.jensign.com/ EL VÍNCULO: EL VÍNCULO: http://www.w3.org/TR/2002/REC-xmldhttp://www.w3.org/TR/2002/REC-xmldsig-core-20020212/Overview.htmlsig-core-20020212/Overview.html