La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Seguridad (para desarrolladores)

Presentaciones similares


Presentación del tema: "Seguridad (para desarrolladores)"— Transcripción de la presentación:

1 Seguridad (para desarrolladores)
Firma digital XML Mauricio Grimberg Axton

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í <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo> <!--La información firmada--> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n "/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference URI=""> <Transforms> <!--Remueve del cálculo del compendio toda la estructura generada a partir de [Signature] --> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>2PCZb3vt8JaSdzzVZyenRoFU694=</DigestValue> </Reference> </SignedInfo> <SignatureValue>Afc+biLiXr5XGLHC1Iz5+Jnz4UaQzSx9seOj5ac+l+a7FlXAonZMaUd3f6pZ0zG46WdcXqoNq1Rl2noGTE2+uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NYmLEMDSbGnS2AYDc24lPsHRf2BtXbd/g9bufAh5CRrdLYc=</SignatureValue> </Signature>

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 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

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 Integridad Identificació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 Serial Number Algorithm ID Issuer Versión de X.509
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 Not After Subject Public Key Info
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/2005 -e 11/28/2010 -sky exchange -ss my

17 SHA1 Secure Hash Algorithm - Version 1.0
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 (<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>)

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

20 Proceso de firma Generación de referencias Generación de la firma
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
Signature SignedInfo CanonicalizationMethod SignatureMethod El método de firma también se firma Reference Transforms DigestMethod DigestValue SignatureValue

24 Elementos Signature SignedInfo Transforms CanonicalizationMethod
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 DigestMethod SignatureValue KeyInfo
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 Firma Verificación SignedInfo DigestValue DigestMethod.
Canonicalization Transforms DigestMethod SignedInfo DigestValue Verificación DigestValue DigestMethod. SignedInfo SignatureValue KeyInfo

27 Multiplicidad Múltiples transformaciones Múltiples referencias
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 Dim store As New X509Store(StoreLocation.CurrentUser) store.Open(OpenFlags.ReadOnly) Dim certCollection As X509Certificate2Collection = store.Certificates Dim cert As X509Certificate2 = Nothing Dim c As X509Certificate2 For Each c In certCollection If c.Subject = subject Then Return c End If Next c Return Nothing End Function

29 Obtener el certificado (C#)
public static X509Certificate2 ObtenerCertificado(String subject) { X509Store store = new X509Store(StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certCollection = store.Certificates; foreach (X509Certificate2 c in certCollection) if (c.Subject == subject) return c; } return null;

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

31 Firmar digitalmente (C#)
public static void FirmarXML(ref XmlDocument documento, X509Certificate2 certificado) { SignedXml sig = new SignedXml(documento); sig.SigningKey = certificado.PrivateKey; Reference reference = new Reference(); reference.Uri = ""; XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env); sig.AddReference(reference); sig.ComputeSignature(); XmlElement xmlDigitalSignature = sig.GetXml(); documento.DocumentElement.AppendChild(documento.ImportNode(xmlDigitalSignature, true)); }

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

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

34 Vínculos http://world.std.com/~franl/crypto/rsa-example.html
EL VÍNCULO:


Descargar ppt "Seguridad (para desarrolladores)"

Presentaciones similares


Anuncios Google