Seguridad para desarrolladores - PowerPoint PPT Presentation

1 / 34
About This Presentation
Title:

Seguridad para desarrolladores

Description:

Que quien 'firma' el documento sea quien dice ser. Equivalente exacto a una firma manual ... No vamos a tocar en esta charla el tema encriptaci n general del ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 35
Provided by: brando96
Category:

less

Transcript and Presenter's Notes

Title: Seguridad para desarrolladores


1
Seguridad (para desarrolladores)
  • Firma digital XML

Mauricio Grimberg mau_at_mug.org.ar Axton http//www.
axton.com.ar/
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í
  • ltSignature xmlns"http//www.w3.org/2000/09/xmlds
    ig"gt
  • ltSignedInfogt
  • lt!--La información firmada--gt
  • ltCanonicalizationMethod Algorithm"http//www.w
    3.org/TR/2001/REC-xml-c14n-20010315"/gt
  • ltSignatureMethod Algorithm"http//www.w3.org/2
    000/09/xmldsigrsa-sha1"/gt
  • ltReference URI""gt
  • ltTransformsgt
  • lt!--Remueve del cálculo del compendio
    toda la estructura generada a partir de
    Signature --gt
  • ltTransform Algorithm"http//www.w3.org/2000/
    09/xmldsigenveloped-signature"/gt
  • lt/Transformsgt
  • ltDigestMethod Algorithm"http//www.w3.org/200
    0/09/xmldsigsha1"/gt
  • ltDigestValuegt2PCZb3vt8JaSdzzVZyenRoFU694lt/Dig
    estValuegt
  • lt/Referencegt
  • lt/SignedInfogt
  • ltSignatureValuegtAfcbiLiXr5XGLHC1Iz5Jnz4UaQzSx9
    seOj5acla7FlXAonZMaUd3f6pZ0zG46WdcXqoNq1Rl2noGTE
    2uSjP8CSYeFdRFZMiIiq03u0xPx5eg5tU9iucRmH3NYmLEMDS
    bGnS2AYDc24lPsHRf2BtXbd/g9bufAh5CRrdLYclt/Signatur
    eValuegt
  • lt/Signaturegt

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
  • 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 "CNXML_DIG_SIGN_Mauricio" -b
    11/28/2005 -e 11/28/2010 -sky exchange -ss my

17
SHA1
  • Secure Hash Algorithm - Version 1.0
  • http//www.w3.org/PICS/DSig/SHA1_1_0.html
  • 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
  • (ltSignatureMethod Algorithm"http//www.w3.org/200
    0/09/xmldsigrsa-sha1"/gt)

19
Firma digital
  • Detached
  • Desconectada
  • Enveloping
  • 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
  • Signature
  • SignedInfo
  • CanonicalizationMethod
  • SignatureMethod
  • El método de firma también se firma
  • Reference
  • Transforms
  • DigestMethod
  • DigestValue
  • SignatureValue

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
Firma
Canonicalization
Transforms
DigestMethod
SignedInfo
DigestValue
Verificación
DigestValue
DigestMethod.
SignedInfo
SignatureValue
KeyInfo
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
  • Dim store As New X509Store(StoreLocation.C
    urrentUser)
  • store.Open(OpenFlags.ReadOnly)
  • Dim certCollection As X509Certificate2Coll
    ection 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(StoreLocat
    ion.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 XmlDsigEnvelopedSignatureTr
    ansform()
  • reference.AddTransform(env)
  • sig.AddReference(reference)
  • sig.ComputeSignature()
  • Dim xmlDigitalSignature As XmlElement
    sig.GetXml()
  • documento.DocumentElement.AppendChild(docu
    mento.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(docu
    mento.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)nodeList0)
  • return sig.CheckSignature(certificado,
    true)

34
Vínculos
  • http//world.std.com/franl/crypto/rsa-example.htm
    l
  • http//www.codeproject.com/dotnet/xmldsiglic.asp
  • http//msdn.microsoft.com/library/default.asp?url
    /library/en-us/dnwebsrv/html/underxmldigsig.asp
  • http//www.jensign.com/
  • EL VÍNCULO http//www.w3.org/TR/2002/REC-xmldsig-
    core-20020212/Overview.html
Write a Comment
User Comments (0)
About PowerShow.com