Cryptography Application Block

Cryptography Application Block facilita las tareas de criptografía presentando una sencilla interfaz que permite realizar hashing y encriptación con diversos algoritmos. Ademas incluye un mecanismo para almacenar y distribuir las claves de encriptación. Es parte de Microsoft Enterprise Library 5.0.

Cryptography Application Block facilita las tareas de encriptación de las siguientes formas:

  • Soporta diversos algoritmos de hashing y encriptación.
  • Abstrae el código que requiere cada algoritmo en particular y presenta una Interfaz sencilla con solo cuatro métodos CreateHash(), CompareHash(), EncryptSymmetric() y DecryptSymmetric().
  • Disminuye la curva de aprendizaje, evitando que los programadores deban aprender código especifico para cada algoritmo.
  • Ayuda a mantener consistencia en la manera en que se realizan las tareas de criptografía dentro de un proyecto, o incluso dentro de toda la compañía.
  • Puede modificar cambiar un algoritmo editando el archivo de configuración sin necesidad de recompilar la aplicación.
  • Es extensible, se pueden incorporar nuevos algoritmos implementados por terceras partes.
  • Incluye un mecanismo para almacenar las claves y transportarlas de manera segura.

Cryptography Application Block solo soporta algoritmos de clave simétrica, es decir, la clave para encriptar y desencriptar los datos es la misma. No soporta encriptación de clave asimétrica.

Configuración

La configuración se define en el archivo de configuración de la aplicación (app.config o web.config). Enterprise Library incluye una herramienta grafica para facilitar las tareas de configuración.
Puede definir varios algoritmos de hashing, y varios algoritmos de encriptación. Cada uno de los algoritmos es identificado por un nombre. Cuando realice tareas de criptografía en el codigo fuente deberá indicar este nombre para identificar el algoritmo con el cual desea trabajar.
En la configuración para cada algoritmo debe indicar los parametros necesarios, por ejemplo, la clave de simétrica.

Cuando configura un algoritmo de clave simétrica debe proporcionar una clave o generar una nueva. Cryptography Application Block almacena la clave en un archivo encriptado con DPAPI.
La encriptación DPAPI usa la contraseña de la cuenta de usuario o del computador para encriptar datos. Si encripta a nivel de usuario solo el usuario actual podrá acceder a la clave. Si encripta a nivel de computador todos los usuarios de ese computador podrán acceder a la clave.
La herramienta de configuracion de Enterprise Library tiene un Wizard para importar una clave que nosotros propocionamos o crear una nueva, tambien debemos indicar donde se guardaran estas claves, a pesar de que se guardan encriptadas es importante limitar el acceso a estos archivos con permisos ACL.
Cryptography Application Block tambien incluye un wizard para transportar las claves privadas en caso que deban ser entregadas a otros usuarios del sistema. Para mas detalles vea el tutorial Almacenamiento y Transporte de Claves Privadas (Proximamente)

Operatoria

Para acceder a la funcionalidad de Cryptography Application Block hay varias alternativas. La mas sencilla es usar la fachada estática "Cryptographer".
Otras formas son mas amigables con los patrones Dependency Injection o Service Locator, nos permiten obtener instancias de el objeto "CryptographyManager" que presenta exactamente la misma interface que la fechada estatica "Cryptographer".
Independientemente de como accedamos a la funcionalidad la interface es muy sencilla, solo cuatro metodos: CreateHash(), CompareHash(), Encrypt() y Decrypt().
CreateHash() nos premite obtener un hash a partir de un texto o un array de bytes. CompareHash() nos permite comparar un hash con valores y ver si coinciden. Encrypt() nos permite encriptar texto o array de bytes. Decrypt() nos permite desencriptar.
Siempre usamos estos sencillos metodos independientemente de los algoritmos que definamos en el archivo de configuracion.

Algoritmos Recomendados

Para hashing se recomienda usar SHA256Managed que usa una clave de 256 bits.
Para encriptación de clave simétrica se recomienda usar AES con clave de 128 bits, o mayor para datos extremadamente sensibles.
El tamaño de las claves depende de cuan rapido son los procesadores para hacer ataques de fuerza. A medida que los procesadores evolucionan y se hacen mas rapidos, las claves van creciendo.

Extensión

Es posible extender Cryptography Application Block incorporando nuevos algoritmos de hashing y de encriptación. Estos algoritmos son generalmente desarrollados por terceras empresas especialistas en criptografía. Usted debe crear solo el adaptador para poder usarlos con el bloque.
Para incorporar un nuevo algoritmo de hashing debe crear una clase que implemente la interfaz IHashProvider que incluye solo dos métodos: CreateHash() y CompareHash(). Para incorporar un nuevo algoritmo de encriptación con clave simétrica debe crear una clase que implemente la interfaz ISymmetricCryptoProvider que incluye los métodos: Encrypt() y Decrypt().


Artículos en detalle