Guía Breve de Seguridad

¿Qué es la Seguridad?

La necesidad de garantizar la integridad, la confidencialidad y la autenticidad de los datos que fluyen a través de la Web se ha convertido en un requisito esencial. Por este motivo el área de seguridad crece rápidamente, pero hay muchas dificultades a la hora de manejar datos con estructuras jerárquicas y con subgrupos de datos con diferentes requisitos en lo que se refiere a confidencialidad, derechos de acceso o integridad.

Para hacer frente a estos problemas se han desarrollado estándares como XML Encryption (encriptación) y XML Signature (firma digital), preparados para manejar situaciones en las que partes de un mismo documento necesitan un tratamiento diferente, como ocurren en documentos con diferentes secciones cuyo contenido puede ser visto por unos usuarios pero no por otros. En estos casos la encriptación juega un papel muy importante ya que es lo que va a confirma la integridad del texto. Por otro lado, las firmas digitales permiten la autenticación del remitente. Otro problema añadido surge cuando diferentes personas firman digitalmente un mismo documento XML o cuando es necesario hacerlo conjuntamente codificando ciertas partes de ese documento.

¿Para qué sirve?

¿Cómo funciona?

XML Encryption:

Este primer fragmento de código muestra información sin cifrar de un cliente ficticio y su tarjeta de crédito.

  <?xml version='1.0'?>
  <Metodopago xmlns='http://ejemplo.org/pago'>
    <Nombre>Cliente Ficticio</Nombre>
    <TarjetaCredito Limite='5.000' Moneda='EU'>
      <Numero>0000 0000 0000</Numero>
      <Issuer>Ejemplo de Banco</Issuer>
      <Caducidad>10/05</Caducidad>
    </TajetaCredito>
  </Metodopago>

El fragmento de código muestra que Cliente Ficticio utiliza una tarjeta de crédito con un límite de 5.000 Euros para realizar su compra.

El número de la tarjeta de crédito es una información que debería ser confidencial por motivos de seguridad por lo cual es importante que esté cifrada. La forma de realizar el encriptado de esa parte con XML Encryption sería el siguiente:

  <?xml version='1.0'?>
   <Metodopago xmlns="http://ejemplo.org/pago">
    <Nombre>Cliente Ficticio</Nombre>
    <DatosEncriptados xmlns="http://www.w3.org/2001/04/xmlenc#"
      Tipo="http://www.w3.org/2001/04/xmlenc#Element">
      <DatosClave>
        <DatosClave>A23B45C56</DatosClave>
      </DatosClave>
    </DatosEncriptados>
  </Metodopago>
  

Al cifrar el elemento completo de tarjeta de crédito, el elemento en sí mismo se oculta por lo que no es posible saber si el cliente está usando un tarjeta de crédito o simplemente dinero en metálico. El elemento DatosClave contiene el número encriptado del elemento TarjetaCredito.

También es posible cifrar todo el documento.

XML Signature:

<Signature Id="EjemploXMLSignature"
 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#dsa-sha1"/> 
     <Reference
        URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/"> 
        <DigestMethod 
          Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
        <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> 
      </Reference> 
   </SignedInfo> 
   <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue> 
   <KeyInfo> 
      <KeyValue>
         <DSAKeyValue> 
           <p>...</p><q>...</q><g>...</g><y>...</y> 
         </DSAKeyValue> 
      </KeyValue> 
   </KeyInfo> 
</Signature>
				

El elemento Signature encapsula la firma digital. Contiene tres sub-elementos: SignedInfo, SignatureValue y KeyInfo. El elemento SignedInfo contiene información sobre qué es lo que se firma y cómo se firma, es decir, contiene la información necesaria para crear y validar la firma. Este elemento contiene dos algoritmos. Por un lado, está el <CanonicalizationMethod> que es el algoritmo de transformación de SignedInfo antes de realizar la firma digital. Por otro lado, estaría el método de firma (<SignatureMethod>), que sería el algoritmo utilizado para calcular el valor de la firma digital. También se incluye en el elemento SignedInfo las referencias a los objetos que se van a firmar (<Reference>) que incluye además <DigestMethod> y <DigestValue>. La validación de una firma requiere dos procesos que son la validación de la firma y la validación de los resultados de las referencias.

El elemento <CanonicalizationMethod> es el encargado de indicar el algoritmo para canonizar el elemento SignedInfo, que tendrá lugar durante la creación de la firma. El <SignatureMethod>, es el encargado de indicar el algoritmo para general la firma a partir de la canonización de SignedInfo. El resultado obtenido se indicará en el elemento SignatureValue.

Cada elemento <Reference>, incluye una referencia al objeto que se firmará. Al mismo tiempo incluye el resultado de <DigestValue> que es el valor resultante.

El elemento <SignatureValue>, contiene el resultado de la firma digital que se ha aplicado sobre el elemento SignedInfo. El resultado de esta firma está codificado y contiene un atributo que es único con el que se identificará la firma en procesos posteriores de validación.

El elemento <KeyInfo>, se trata de un elemento opcional que indica la clave que ha de utilizarse para validar la firma. El elemento <KeyValue>, especifica la clave para validar la firma digital.

Resumiendo, tenemos que el elemento SignedInfo contiene lo que se firma. Por otro lado, el elemento SignatureValue, contiene la firma, es decir, contiene el elemento SignedInfo en forma canonizada, resumida y encriptada con la clave pública del firmante. Y por último, KeyInfo, que contiene el certificado de la clave pública del firmante.

Ejemplos

El siguiente caso muestra la forma en la que interviene cada parte en un proceso de transacción de datos:

LIBROS S.L. tiene un formulario para comprar libros que será rellenado por María, un usuario que desea comprar un libro.

  1. María realiza un pedido a LIBROS S.L a través de un formulario emitido por LIBROS S.L.
  2. María rellena el formulario para comprar el libro. La autorización de pago realizada por María es encriptada con una clave compartida con PAGODELIBRO; la firma y la envía a LIBROS S.L.
  3. LIBROS S.L procesa el formulario y confirma la exactitud de la orden (el título del libro y el precio) y pasa la información de la tarjeta de crédito cifrada a PAGODELIBRO.

Ejemplo de seguridad en la compra de un libro

Figura 1 - Ilustración del ejemplo de compra de un libro

Más información sobre Seguridad

Recursos sobre seguridad del W3C
Colección de recursos sobre diferentes temas en relación a la seguridad en la Web.
Sintaxis y Procesamiento de XML-Signature
Recomendación del W3C.
Sintaxis y Procesamiento de XML Encryption
Recomendación del W3C.
XKMS 2.0
Recomendación del W3C. XML Key Management