Cryptography Application Block

viernes, 18 de mayo de 2007

Introducción

Este es un bloque de aplicación integrado en las versiones de Enterprise Library 2.0 y 3.0, basado en la criptografía, que intenta facilitarla y acercarla a los desarrolladores y sus aplicaciones, pudiendo utilizarlo para encriptar información, crear datos compactados y compararlos para verificar que la información no ah sido alterada.

Dentro de las principales características encontramos

  • Reduce los requerimientos para escribir código normalizado proveyendo implementaciones para solucionar problemas comunes de criptografía.
  • Ayuda a mantener prácticas consistentes de criptografía en la aplicación y la empresa.
  • Facilita la curva de aprendizaje de los desarrolladores usando un modelo de arquitectura consistente a través de varias áreas de funcionalidad que son provistas.
  • Provee implementaciones que pueden ser utilizadas para resolver los problemas básicos.
  • Es esténcil y soporta implementaciones adicionales de criptografía.


  • Escenarios comunes

    Los desarrolladores frecuentemente escriben aplicaciones que requieren encriptación y compactación de datos, para cumplir los requerimientos de seguridad de la organización. Tanto los datos que son creados y mantenidos por las aplicaciones como la información de configuración necesitan ser resguardadas. Adicionalmente las contraseñas que son usadas para acceder a la funcionalidad o datos de la aplicación requieren compactación. También favorece la abstracción del código de la aplicación respecto al de los proveedores de criptografía, permitiendo el cambio en la encriptación sin necesidad de modificaciones en el código del resto de la aplicación.
    Este bloque solo soporta algoritmos simétricos, que utilizan una misma llave para ambos procesos, pero no así los asimétricos, para los cuales el método de encriptación y desencriptación difieren en el código.

    Objetivos

  • Proveer una interfase simple e intuitiva para las funcionalidades más comúnmente requerida.
  • Encapsular la lógica de encriptación.
  • Lograr un modelo consistente y estandarizado para las tareas comunes relacionadas con la criptografía.
  • Asegurar un bloque de aplicación extensible.
  • Minimizar el impacto de las funciones criptográficas al resto de la aplicación.
  • Proveer un modelo basado en una “llave” que puede ser modificada por el usuario, para personalizar la encriptación.


  • Estructura y posibilidades

    El bloque separa las implementaciones de la encriptación y el resto de la aplicación permitiéndonos modificar uno sin alterar en nada el funcionamiento del otro. Dentro del mismo podemos encontrar con tres diferentes ámbitos.
  • La clase “Cryptographer” es una interfase que media entre el código de la aplicación y las funciones del “Cryptography Application Block”. El código del cliente llama a métodos estáticos de esta clase para crear compactaciones de información, compararlas, encriptar y desencriptar datos. Cada método estático llama a una clase de generación y pasa el código de configuración al constructor de la clase, con el mismo la clase determina que tipo de proveedor crear.
  • La clase “DpapiCryptographer” utiliza DPAPI (Data Protection API) para encriptar y desencriptar datos. DPAPI utiliza las credenciales de logueo para encriptar los datos, las mismas pueden ser de un usuario en una máquina o dominio, o de una computadora dentro de una red. En el caso de utilizar las credenciales de logueo de un usuario en una máquina, estas permiten que cualquier aplicación que el mismo usuario ejecute, pueda desencriptar toda información resguardada bajo la misma llave. Para no permitir esto se puede utilizar una clave o “entropy”. Hay métodos sobrecargados en la clase que permiten encriptar y desencriptar utilizado esta clave.
    Es importante remarcar que la necesidad de resguardar la seguridad de esta clave es tan necesaria como la encriptación de la información sensible.
  • La clase “SymmetricCryptographer” encapsula la implementación de la clase base abstracta “SymmetricAlgorithm”, la cual se encuentra dentro de “System.Security.Cryptography” en el .NET Framework. Esto significa que la clase en cuestión nos permite utilizar cualquier algoritmo simétrico de encriptación como por ejemplo el “Rijndael”. El bloque de aplicación utiliza DPAPI para encriptar y desencriptar la clave del algoritmo simétrico.


  • Conclusiones

    Este bloque de aplicación no intenta solucionar todos los casos en los cuales el resguardo de información y por ende la encriptación de los datos es necesaria, sino facilitar a los programadores novatos los primeros pasos, sin perder de vista que para determinadas aplicaciones, este bloque es lo suficientemente completo como para cumplir con todos los requisitos de seguridad de la misma. Con esto queremos concluir en que si bien el bloque es muy útil en muchos tipos de aplicaciones no hay que forzar la utilización del mismo en cualquier desarrollo, sino estudiar previamente si cumple con los requisitos que tenemos en ese momento.