You are on page 1of 5

XML ENCRYPTION

David Menndez Cisterna silius@gmail.com Abril 2003 1. Introduccin A medida que la tecnologa XML se extiende, cada vez ms informacin se distribuye en este formato. Pero XML naci como formato de documentos y en s mismo no contiene elementos relacionados con la seguridad. Esto hace necesario realizar un esfuerzo concreto en esta materia, en una bsqueda para encontrar un mtodo para proteger esa informacin compartida. XML Encryption es una Recomendacin del Consorcio Web que especifica un proceso para encriptar datos (no nicamente documentos XML) y representar esa informacin encriptada a su vez en XML para que viaje por los medios de transmisin. Este artculo pretende describir y ejemplificar someramente su funcionamiento, para informacin detallada acudir a la Especificacin del Consorcio Web. 2. Aspectos generales XML Encryption establece que para encriptar un elemento (o un contenido textual de un elemento), este va a ser sustituido por otro elemento establecido por la especificacin que contendr el dato encriptado y la informacin necesaria para el procesamiento, como puede ser la identificacin del algoritmo utilizado o datos sobre la clave empleada. Este elemento es <EncryptedData>, de tal modo que podra aparecer como raz del nuevo documento generado tras el proceso, o como hijo de otros elementos ya existentes previamente. Por otro lado, la especificacin establece XML Schema como esquema de modelo de datos. Dicho Schema puede ser consultado en la especificacin de XML Encryption y es necesario para conocer la sintaxis a emplear. La versin actual de XML Encryption utiliza el siguiente espacio de nombres:
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'

3. Granularidad de la encriptacin de documentos XML XML Encryption establece que es posible encriptar datos a distintos niveles de granularidad, desde elementos simples hasta documentos enteros. Puede verse fcilmente con un ejemplo bastante intuitivo, obtenido directamente del Consorcio Web. Supongamos que disponemos del siguiente documento XML:
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'> <Name>John Smith</Name> <CreditCard Limit='5,000' Currency='USD'>

-1-

<Number>4019 2445 0277 5567</Number> <Issuer>Example Bank</Issuer> <Expiration>04/02</Expiration> </CreditCard> </PaymentInfo>

Se trata de una informacin de pago que contiene datos sobre una tarjeta de crdito: un cliente llamado John Smith dispone de una tarjeta de crdito, cuyo nmero es 4019 2445 0277 5567, con un limite de 5000 USD y con fecha de expiracin. Esta informacin es delicada y debera ser protegida. Veamos unos ejemplos de diferentes niveles de encriptacin para ese documento 3.1. Encriptando un elemento Podemos encriptar nicamente el elemento <CreditCard> y dejar el nombre del cliente intacto, obteniendo lo siguiente:
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'> <Name>John Smith</Name> <EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element' xmlns='http://www.w3.org/2001/04/xmlenc#'> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData> </PaymentInfo>

Al encriptar totalmente el elemento <CreditCard>, incluyendo sus etiquetas, la identidad del elemento permanece oculta. Esto ofrece una interesante posibilidad para la seguridad ya que en principio no se sabr cul es el medio de pago hasta que no se desencripte el dato. 3.2. Encriptando elementos hijos Podemos optar por no encriptar todo el elemento <CreditCard> sino algunos datos en concreto: el nmero, el banco y la fecha de expiracin.
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'> <Name>John Smith</Name> <CreditCard Limit='5,000' Currency='USD'> <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#' Type='http://www.w3.org/2001/04/xmlenc#Content'> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData> </CreditCard> </PaymentInfo>

Ahora vemos que el elemento <CreditCard> permanece visible pero no los datos que queramos ocultar.

-2-

3.3. Encriptando contenido textual Si queremos proteger nicamente el nmero de tarjeta de crdito (es decir, el contenido textual del elemento <number>) obtendramos lo siguiente:
<?xml version='1.0'?> <PaymentInfo xmlns='http://example.org/paymentv2'> <Name>John Smith</Name> <CreditCard Limit='5,000' Currency='USD'> <Number> <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#' Type='http://www.w3.org/2001/04/xmlenc#Content'> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData> </Number> <Issuer>Example Bank</Issuer> <Expiration>04/02</Expiration> </CreditCard> </PaymentInfo>

Vemos que toda la informacin permanece intacta excepto el contenido textual del elemento <number> que contena el dato a proteger. 3.4. Encriptando documentos enteros Si se necesita que toda la informacin sea protegida es posible encriptar todo un documento XML. Si lo hacemos con el documento de nuestro ejemplo se obtiene lo siguiente: <?xml version='1.0'?> <EncryptedData xmlns='http://www.w3.org/2001/04/xmlenc#' MimeType='text/xml'> <CipherData> <CipherValue>A23B45C56</CipherValue> </CipherData> </EncryptedData> Ahora, toda la informacin ha sido encriptada. 3.5. Super-encriptacin (encriptando datos previamente encriptados) Dado que es posible encriptar cualquier tipo de informacin, nada nos impide encriptar datos que ya estaban encriptados. Esto se conoce como Super-encriptacin y puede ser utilizada siempre que se respete la siguiente limitacin: se debe encriptar el elemento <EncryptedData> al completo. Encriptar el contenido textual o elementos hijos del mismo tendra como resultado un documento XML invlido frente al Schema que define XML Encryption, ya que segn este esquema un elemento <EncryptedData> no puede ser padre o hijo de otro elemento <EncryptedData>. Ser necesario pues tener en cuenta esa limitacin a la hora de utilizar esta posibilidad de doble encriptacin.

-3-

4. Sintaxis de XML Encryption Normalmente el aspecto de un documento XML encriptado ser bastante ms complejo que el que hemos visto en los ejemplos anteriores. El Schema que modeliza toda esa sintaxis es relativamente extenso y da cobertura a multitud de aspectos relacionados con la criptografa, empleando para ello un conjunto de elementos y atributos especiales. Por ejemplo para conocer el mtodo de encriptacin empleado se utiliza el elemento <EncryptionMethod>. Si este elemento no existe el destinatario del mensaje encriptado debe saber de antemano cul fue el algoritmo utilizado. Los datos encriptados propiamente dichos se engloban en elementos <CipherData>, representando el contenido en Base 64. El manejo de las claves tambin tiene su propia estructura, pero tambin se emplean partes propias de XML Signature (otro trabajo del W3C). Por ejemplo se puede asociar una cadena de caracteres visible a una clave secreta que slo conozcan el emisor y el receptor de antemano. Esta cadena se incrusta en el elemento <KeyName> y as el receptor sabr que clave utilizar para desencriptar la informacin (una interesante forma de evitar enviar las claves secretas por medios de comunicacin inseguros). Por otro lado, si optamos por enviar la clave junto con el documento, ser recomendable que la encriptemos a su vez; se utiliza para ello el elemento <EncryptedKey> para transportarla en el documento. Esto nos servir para poder enviar la clave propiamente dicha junto con el documento de un modo seguro. Existen ms elementos y atributos especficos que aportan ms informacin para el procesamiento de XML Encryption. Hay que tener en cuenta que, como se ha comentado antes, muchas de esos mtodos pertenecen no a XML Encryption propiamente dicho sino a XML Signature. 5. Algoritmos reconocidos Dado que XML Encryption involucra muchos aspectos sobre criptografa y seguridad en general, se ha hecho una clasificacin de los algoritmos reconocidos y de cul es su misin en el procesamiento. Para el cifrado de los datos se admiten diversos algoritmos de criptografa entre los cuales figuran TripleDES, AES y RSA. Cada uno debe ser referido en el documento encriptado mediante un identificador destinado a ello y que est definido en la especificacin. El transporte de las claves (Key Transport) queda a cargo de los algoritmos RSA-v1.5 y RSA-OAEP obligatoriamente. Su funcin es un encriptado asimtrico (clave pblica) diseado especficamente para encriptar y desencriptar claves. Para la autenticacin de los mensajes (Message Authentication) el grupo de trabajo recomienda utilizar XML Signature, otro trabajo del Consorcio Web.

-4-

La canonicalizacin (Canonicalization) del documento XML se describe en el Canonical XML, otro trabajo del Consorcio Web. Este proceso consiste en serializar un documento XML en un flujo de octetos, paso necesario para la encriptacin. Por ltimo se establece que la codificacin de los datos se haga obligatoriamente en Base64. Existen ms algoritmos y mtodos reconocidos por XML Encryption que los aqu comentados para conocerlos en detalle debemos acudir a la especificacin. 6. Conclusin Hemos visto que efectivamente el W3C ha desarrollado un trabajo completo sobre un tema que hasta ahora estaba poco investigado: la seguridad en documentos XML. Es importante tambin el hecho de haber demostrado que se pueden seguir utilizando soluciones criptogrficas ya existentes aunque no se debe descartar que, dada la peculiar estructura de los documentos XML, puedan aparecer algoritmos especficos muy pronto. Existen diversas implementaciones que se acogen a la actual especificacin de XML Encryption: -XML Security Library, de Aleksey Sanin, distribuido bajo MIT License (http://www.aleksey.com/xmlsec/). -IBM Security XML Suite, del grupo Alpha Works (http://www.alphaworks.ibm.com/tech/xmlsecuritysuite) -KeyTools XML, de Baltimore (http://www.baltimore.com/keytools/xml/). -Phaos XML (http://phaos.com/products/category/xml.html). 7. Referencias An Introduction to XML Encryption and XML Signatura, Murdoch Mactaggart, http://www-106.ibm.com/developerworks/xml/library/s-xmlsec.html/index.html XML 1.0, W3C, http://www.w3.org/XML/ XML Encryption, W3C, http://www.w3.org/TR/xmlenc-core/ XML Key Management, W3C, http://www.w3.org/2001/XKMS/ XML Schema, W3C, http://www.w3.org/XML/Schema XML Signature, W3C, http://www.w3.org/Signature/

-5-

You might also like