La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg

Presentaciones similares


Presentación del tema: "Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg"— Transcripción de la presentación:

1 Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg

2 ¿Qué pretendemos asegurar? Que quien firma el documento sea quien dice ser Equivalente exacto a una firma manual Que el contenido que tenemos enfrente es el que el firmante firmó (perdón por el trabalenguas) Verificación de que no hubo transformación posterior a la firma No vamos a tocar en esta charla el tema encriptación general del contenido; lateralmente enfocaremos el tema encriptación en el marco de la operatoria de la firma.

3 En términos más técnicos pero no menos generales Generaremos un nodo XML que contiene Un resumen de todo lo que se quiere firmar La indicación de cómo se preprocesa el material a firmar La indicación de cómo se resume lo preprocesado Una encriptación del resumen utilizando claves asimétricas

4 Algo así 2PCZb3vt8JaSdzzVZyenRoFU694= Afc+biLiXr5XGLHC1Iz5+Jnz4UaQzSx9seOj5ac+l+a7FlXAonZMaUd3f6pZ0zG4 6WdcXqoNq1Rl2noGTE2+uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NYmLEMDSbGnS2AYDc2 4lPsHRf2BtXbd/g9bufAh5CRrdLYc= Afc+biLiXr5XGLHC1Iz5+Jnz4UaQzSx9seOj5ac+l+a7FlXAonZMaUd3f6pZ0zG4 6WdcXqoNq1Rl2noGTE2+uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NYmLEMDSbGnS2AYDc2 4lPsHRf2BtXbd/g9bufAh5CRrdLYc=

5 Clave simétrica Es una clave única Se denomina simétrica porque la misma clave debe estar disponible para quien firma y para quien verifica la firma Implica una necesidad importante de transportación de la clave Esto desvaloriza el sistema: la clave está viajando todo el tiempo

6 Claves asimétricas Clave pública Clave privada Tienen un funcionamiento complementario que permite utilizarlas de un modo asimétrico: firmo con la privada y verifico con la pública La pública es PÚBLICA: la puedo distribuir a mi gusto Rápidamente: si puedo verificar una firma usando una clave pública es porque quien la firmó tiene la clave privada

7 Claves e identidad De nada sirve una clave no asociada a una determinada itentidad En TODO caso alguien debe certificar – del mismo modo que un Banco certifica nuestra firma manual - la asociación entre Clave e Identidad

8 Verificación de identidad Por certificado Obtenemos un certificado generado por una entidad autorizada para asegurar que puede proveer un certificado único a una persona o empresa verificable Es la manera estándar Por clave Generamos claves programáticamente y las almacenamos en una base de datos, la aplicación certifica el vínculo entre clave e identidad Validez sólo interna

9 ¿Qué es un certificado? Es un contenedor único - especificado de un modo estándar - de claves, información del sujeto, de la entidad autorizante y de los procedimientos asociados Es un contenedor único - especificado de un modo estándar - de claves, información del sujeto, de la entidad autorizante y de los procedimientos asociados Definido por el grupo de trabajo Internet Engineering Task Force (IETF) Public Key Infrastructure, X.509 (PKIX) Definido por el grupo de trabajo Internet Engineering Task Force (IETF) Public Key Infrastructure, X.509 (PKIX) Es - finalmente - un mensaje en el que el autorizante asegura la identidad del titular Es - finalmente - un mensaje en el que el autorizante asegura la identidad del titular

10 CA (certificate authority) Modelo de confianza absoluta Los proveedores de certificados (los CA) son quienes se responsabilizan por la identificación e integridad del certificado hacia todos, en todo contexto

11 No repudiable El hecho de la certificación universal producida por un certificado produce el tercer valor de la firma digital IntegridadIdentificación No repudiabilidad

12 X.509 Es una colección de especificaciones para estandarizar la metodología de clave pública Contiene ambas claves (o sólo la pública) y más información destinada a procesos de identificación de entidades y algoritmos bajo la forma de un certificado

13 X.509 Version Versión de X.509 Serial Number Según RFC 2459 es un número entero que identifica absolutamente a un certificado en el contexto de un determinado CA Algorithm ID Algoritmo de encriptación utilizado Issuer Emisor del certificado

14 X.509 Not Before Inicio de validez (fecha) Not After Fin de validez (fecha) Subject Nombre distinguible del sujeto Public Key Info Información de clave

15 Generación de certificados A los fines del desarrollo generaremos uno utilizando Makecert Luego lo podremos examinar utilizando MMC (Microsoft Management Console) mediante el snap-in Certificates

16 Makecert.Net Framework SDK 2.0 contiene la última versión Generamos un certificado que incluye una clave privada, denominación del titular, fechas de vigencia y lo enviamos al almacenamiento personal makecert -r -pe -n "CN=XML_DIG_SIGN_Mauricio" -b 11/28/ e 11/28/2010 -sky exchange -ss my

17 SHA1 SHA1 Secure Hash Algorithm - Version 1.0 tml tml Algoritmo diseñado para ser usado con firma digital - Digital Signature Standard (DSS) – con el objetivo de generar un resumen del contenido a firmar

18 RSA Es un algoritmo de encriptación asimétrica Generado en 1977 por Ron Rivest, Adi Shamir y Len Adleman - las iniciales de sus apellidos componen su nombre - en el MIT Junto con Sha1 son preferidos por el W3C para los usos de XML Digital Signature ( )

19 Firma digital DetachedDesconectadaEnveloping Envolvente: la información firmada está embebida Enveloped Envuelta: el documento contiene la firma

20 Proceso de firma Generación de referencias Aplicar las transformaciones Calcular los compendios Agregar los respectivos elementos Reference Generación de la firma Construir SignedInfo Construir SignatureValue Construir el nodo principal y, eventualmente, agregar información de claves públicas o certificados

21 Proceso de validación de firma Construir el resumen utilizando el algoritmo especificado Si coincide continuamos Obtenemos la información de claves Utilizamos el algoritmo de encriptación asimétrica para validar la firma

22 Canonicalization Los algoritmos de criptografía esperan textos exactos (inmodificados) como condición de igualdad XML tiene flexibilidades en la condición de igualdad: Espacios en blanco Orden de los atributos

23 Estructura de la Firma de ejemplo SignatureSignedInfoCanonicalizationMethodSignatureMethod El método de firma también se firma ReferenceTransformsDigestMethodDigestValueSignatureValue

24 Elementos Signature Raíz de la firma SignedInfo La información efectivamente firmada Transforms Pasos de transformación: XPATH, XSL, etc. CanonicalizationMethod El algoritmo usado para canonicalizar

25 Elementos 2 Reference Cada recurso del documento a ser firmado Puede incluir múltiples transformaciones DigestMethod El algoritmo utilizado para producir el DigestValue SignatureValue El resultado de aplicar la clave al DigestValue utilizando el agoritmo del SignatureMethod KeyInfo Información (opcional) sobre la clave

26 Estadios CanonicalizationTransformsDigestMethod SignedInfoDigestValue DigestValue SignedInfoSignatureValue DigestMethod. KeyInfo Firma Verificación

27 Multiplicidad Múltiples transformaciones Detalladas en cada elemento Transform Múltiples referencias Puede utilizarse un manifiesto (colección de referencias) en caso de que sean muchas

28 Obtener el certificado (VB) Public Function ObtenerCertificado(ByVal subject As String) As X509Certificate2 Public Function ObtenerCertificado(ByVal subject As String) As X509Certificate2 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 = store.Certificates Dim certCollection As X509Certificate2Collection = store.Certificates Dim cert As X509Certificate2 = Nothing Dim cert As X509Certificate2 = Nothing Dim c As X509Certificate2 Dim c As X509Certificate2 For Each c In certCollection For Each c In certCollection If c.Subject = subject Then If c.Subject = subject Then Return c Return c End If End If Next c Next c Return Nothing Return Nothing End Function End Function

29 Obtener el certificado (C#) public static X509Certificate2 ObtenerCertificado(String subject) public static X509Certificate2 ObtenerCertificado(String subject) { X509Store store = new X509Store(StoreLocation.CurrentUser); X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certCollection = store.Certificates; X509Certificate2Collection certCollection = 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; }

30 Firmar digitalmente (VB) Public Sub FirmarXML(ByRef documento As XmlDocument, ByVal certificado As X509Certificate2) Public Sub FirmarXML(ByRef documento As XmlDocument, ByVal certificado As X509Certificate2) Dim sig As SignedXml = New SignedXml(documento) Dim sig As SignedXml = New SignedXml(documento) sig.SigningKey = certificado.PrivateKey sig.SigningKey = certificado.PrivateKey Dim reference As New Reference() Dim reference As New Reference() reference.Uri = "" reference.Uri = "" Dim env As New XmlDsigEnvelopedSignatureTransform() Dim env As New XmlDsigEnvelopedSignatureTransform() reference.AddTransform(env) reference.AddTransform(env) sig.AddReference(reference) sig.AddReference(reference) sig.ComputeSignature() sig.ComputeSignature() Dim xmlDigitalSignature As XmlElement = sig.GetXml() Dim xmlDigitalSignature As XmlElement = sig.GetXml() documento.DocumentElement.AppendChild(documento.Im portNode(xmlDigitalSignature, True)) documento.DocumentElement.AppendChild(documento.Im portNode(xmlDigitalSignature, True)) End Sub End Sub

31 Firmar digitalmente (C#) public static void FirmarXML(ref XmlDocument documento, X509Certificate2 certificado) public static void FirmarXML(ref XmlDocument documento, 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(); XmlDsigEnvelopedSignatureTransform env = new 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.ImportNode(x mlDigitalSignature, true)); documento.DocumentElement.AppendChild(documento.ImportNode(x mlDigitalSignature, true)); }

32 Verificar Firma (VB) Public Function VerificarFirma(ByVal documento As XmlDocument, ByVal certificado As X509Certificate2) As Boolean Public Function VerificarFirma(ByVal documento As XmlDocument, ByVal certificado As X509Certificate2) As Boolean Dim sig As SignedXml = New SignedXml(documento) Dim sig As SignedXml = New SignedXml(documento) Dim nodeList As XmlNodeList = documento.GetElementsByTagName("Signature") Dim nodeList As XmlNodeList = documento.GetElementsByTagName("Signature") sig.LoadXml(CType(nodeList(0), XmlElement)) sig.LoadXml(CType(nodeList(0), XmlElement)) Return sig.CheckSignature(certificado, True) Return sig.CheckSignature(certificado, True) End Function End Function

33 Verificar Firma (C#) static Boolean VerificarFirma(XmlDocument documento, X509Certificate2 certificado) static Boolean VerificarFirma(XmlDocument documento, X509Certificate2 certificado) { SignedXml sig = new SignedXml(documento); SignedXml sig = new SignedXml(documento); XmlNodeList nodeList = documento.GetElementsByTagName("Signature"); XmlNodeList nodeList = documento.GetElementsByTagName("Signature"); sig.LoadXml((XmlElement)nodeList[0]); sig.LoadXml((XmlElement)nodeList[0]); return sig.CheckSignature(certificado, true); return sig.CheckSignature(certificado, true); }

34 Vínculos example.html example.html glic.asp glic.asp asp?url=/library/en- us/dnwebsrv/html/underxmldigsig.asp asp?url=/library/en- us/dnwebsrv/html/underxmldigsig.asp EL VÍNCULO: core /Overview.html core /Overview.html core /Overview.html


Descargar ppt "Seguridad (para desarrolladores) Firma digital XML Mauricio Grimberg"

Presentaciones similares


Anuncios Google