You are on page 1of 23

Trabajo de investigacin: Criptografa en .

NET

ndice
1 Concepto 2 Criptografa moderna 3 Usos de la criptografa 3.1 Confidencialidad 3.2 Autenticacin 3.3 Verificacin de integridad 3.4 Mecanismos de repudio 3.5 Otros usos o aplicaciones 4 Protocolos criptogrficos 4.1 Protocolo de criptografa simtrica 4.2 Funciones de una va y hash 4.3 Protocolos de criptografa asimtrica 4.4 Protocolo de firma digital 4.5 Generacin de nmeros aleatorios 5 Introduccin a los algoritmos criptogrficos 5.1 Tipos Block y Stream de algoritmos criptogrficos 5.2 Modos ECB, CBC, CFB y OFB de algoritmos criptogrficos 5.3 Llaves criptogrficas 6 Algoritmos criptogrficos 6.1 Algoritmo DES y TripleDES 6.2 Algoritmo AES 7 Algoritmos de funciones hash 7.1 Algoritmo MD5 7.2 Algoritmo SHA 8 Algoritmos de criptografa asimtrica 8.1 Algoritmo RSA 8.2 Algoritmo DSA 9 Criptografa en entornos .NET 9.1 Codificacin de encriptacin simtrica 9.2 Codificacin de encriptacin asimtrica 9.3 Codificacin de funciones de una va y hash 10 Criptografa en SQL Server 10.1 Funciones para cifrado simtrico y asimtrico de datos Bibliografa Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. Pg. 2 2 3 3 3 4 4 4 4 5 5 6 7 8 9 9 10 10 11 11 12 12 12 12 12 12 13 13 14 17 19 20 20 23

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

1. Concepto Como primera aproximacin podramos remitirnos a la definicin del diccionario de la Real Academia Espaola: el arte de escribir con clave secreta o de un modo enigmtico (kryptos, del griego - ocultar y grafa, graphos - escribir -). La criptografa actualmente se entiende tanto como parte o rama de la ciencia matemtica, como rama de la ciencia de la computacin o informtica. Ya en el mbito de la informtica, las implementaciones criptogrficas que sirven para evitar que la informacin sea leda por un usuario ocasional de estas aplicaciones o servicios y aquellas otras que impiden a entes que dispongan de gran capacidad de procesamiento y el conocimiento acerca de las teoras criptoanalticas actuales, acceder a, o descifrar esta informacin. Un especialista espaol Rami Aguirre, la define de la siguiente manera: Rama inicial de las matemticas y en la actualidad tambin de la informtica y la telemtica, que hace uso de mtodos y tcnicas con el objetivo principal de cifrar, y por tanto proteger, un mensaje o archivo por medio de un algoritmo, usando una o mas claves Hace poco menos de cuarenta aos el estudio y el uso de la criptografa eran exclusivos de las fuerzas militares de cada nacin. Luego el uso masivo de Internet a partir del ao 2000 hizo que la demanda de implementaciones criptogrficas seguras por parte del sector privado y de los usuarios particulares. Hoy se podra decir que es posible comprar casi cualquier bien a travs de este medio, pagar servicios, consultar nuestra informacin bancaria, etc. 2. Criptografa moderna No se podra citar esta parte de la historia sin mencionar a Claude Shannon, considerado por muchos autores el padre de la criptografa matemtica. Sus artculos y libros establecieron las bases para las implementaciones de los algoritmos criptogrficos actuales.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

El DES (Data Encryption Standard) fue el primer algoritmo publico, basado en tcnicas matemticas y criptogrficas modernas, aprobado por la NSA. Aunque en la actualidad se considera inseguro, por la corta longitud de su llave (56 bits), aun es utilizado en muchas implementaciones (en especial su versin mejorada TripleDES o 3DES). DES fue reemplazado por el AES (Advanced Encryption Standard) en el ao 2001. Otro hecho importante que determino cmo hoy compramos de manera segura a travs de Internet, fue la publicacin de un articulo de Whitfield Diffie y Martin Hellman respecto a las nuevas direcciones en la criptografa. Se trataba de un nuevo mtodo para distribuir llaves criptogrficas y esto genero como lo que se conoci como cifrado asimtrico. Antes todos los sistemas criptogrficos (simtricos) requeran que ambas partes, emisor, y receptor, conociesen o acordasen la misma llave criptogrfica. Con esta nueva metodologa se utilizaban dos llaves criptogrficas (una privada y una pblica). 3. Usos de la criptografa A que problemas las implementaciones criptogrficas pueden dar una solucin: 3.1 Confidencialidad Es el uso o aplicacin principal de la criptografa, se supone como nico pero, implica mantener en secreto una informacin determinada. El objetivo es que solo aquellas personas que estn autorizadas tengan acceso a la informacin resguardada. Existen diferentes modos de lograr la confidencialidad, desde la proteccin fsica hasta algoritmos matemticos que transforman la informacin original en datos, en apariencia, no inteligibles. 3.2 Autenticacin La autenticacin o identificacin implica de la corroboracin de la identidad de una entidad (persona, una computadora, un sector de una compaa o empresa, etc.).

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

Otros tipos de autenticacin se refieren a autenticacin de mensajes (message authentication), donde se autenticara la fuente de informacin o mensaje. Puede entenderse a la autenticacin como un uso o aplicacin relacionado con el de la identificacin, este aspecto de la criptografa es comnmente dividido en dos clases principales: Autenticacin de entidades y autenticacin de origen de datos. 3.3 Verificacin de integridad Esas verificaciones o comprobaciones corresponden al aseguramiento de que una informacin particular no haya sido alterada por personas no autorizadas o por cualquier otro medio desconocido. 3.4 Mecanismos de repudio Este uso o aplicacin consta de la implementacin de un mecanismo o tcnica para prevenir que una entidad niegue un envo previo de informacin, un mensaje, una accin etc. 3.5 Otros usos o aplicaciones Muchos de estos temas estn basados en los anteriores o derivan de ellos: La autorizacin. El recibo. La validacin. La confirmacin. Control de acceso. De propiedad. La certificacin. El anonimato. El fechado. La retraccin o revocacin. El atestiguamiento. 4 Protocolos criptogrficos Un protocolo se entender como una serie de tareas o pasos, que involucren a dos o ms partes, desarrollada para lograr un objetivo. Al acordar el uso de un protocolo, se debe conocer por todas las partes que han de implementarlo. Especficamente, un protocolo criptogrfico es un protocolo que utilizara como herramienta un algoritmo criptogrfico, cuyo objetivo va ms all de mantener informacin en secreto. Las partes que acuerdan utilizarlos podrn tener o no confianza entre ellas. Su objetivo general es prevenir y detectar el acceso indebido a. o la alteracin de informacin sensible, privada, critica o

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

que debe ser resguardada por el motivo que fuere. Nos referiremos a las partes involucradas en los protocolos criptogrficos en base a una convencin general como Alice, Bob, Carol, Dave (A,B,C,D). 4.1 Protocolo de criptografa simtrica La forma ms conocida, ms antigua y ms utilizada actualmente de criptografa. Involucrar a dos partes: Una a quien denominaremos A, que pretende enviar un mensaje a la otra B. Ambas partes acordarn una llave de manera secreta, la parte A, por medio de un algoritmo y de la llave, encriptar el mensaje y enviara el resultado a la parte B a travs de un canal (se asume como inseguro). La parte B podr obtener el mensaje original desencriptandolo por medio de la llave previamente acordada. Lo que Alice y Bob deben acordar en secreto, es la llave que han de resguardar, no sucede lo mismo con el algoritmo ya que podra acordarse pblicamente. La seguridad de las comunicaciones estar basada en mantener es secreto la llave entre las partes que s deben acceder a la informacin cifrada. Otro aspecto a tener en cuenta es que por cada par de usuarios, o partes, se necesitar una llave, la formula para calcular la cantidad de llaves es n(n-1)/2, siendo n la cantidad de partes.
Llave secreta Llave secreta

Texto -plano

Encriptacin por parte A

Texto -cifrado

Desencriptacin por parte B

Texto -plano

Canal o medio inseguro

Fig. 1. Protocolo de criptografa simtrica.

4.2 Funciones de una va y hash No es un protocolo criptogrfico en s, pero forman parte fundamental de otros protocolos y algoritmos. Se podr obtener el resultado de manera rpida, pero el parmetro de la funcin a partir del resultado

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

ser inviable. Siendo f la funcin de una va, se podr calcular f(x) de manera sencilla, pero obtener x demandar aos. Dentro de las funciones de va encontramos las funciones de hashing criptogrfico. Estas tienen varios sinnimos: Resmenes de mensajes (message digests), huellas digitales (finger-prints), funciones de comprensin, funciones de contraccin, chequeos de integridad de mensajes (message integrity check o MIC), cdigos de deteccin de manipulacin (manipulation detection code o MDC) y checksums criptogrficos. El concepto de estas funciones es que tomarn como entrada una informacin o mensaje de longitud variable que se denominar preimagen, para convertirlo en una informacin de salida de longitud fija. A esta salida se da la denominara valor hash. Estas funciones operan en una direccin (una va), por lo tanto es posible calcular el hash a partir de una pre-imagen, pero ser inviable generar una pre-imagen cuyo hash corresponda a un resultado en particular.
Informacin o mensaje (M) de entrada Salida o hash resultado

Funcin de hashing
Tamao o longitud variable

= h(M)
De longitud fija

Fig. 2. Funciones de una va.

4.3 Protocolos de criptografa asimtrica La aparicin de la criptografa asimtrica represento un cambio de paradigma muy importante en la materia, en 1976 Whitfield Diffie y Martin Hellman la describieron explicando que implicaba la utilizacin de dos llaves: Una publica y una privada. Como primer paso se acuerda entre las partes la utilizacin de un protocolo de criptografa asimtrica. Luego, la parte B enviar a la parte A su llave pblica, sta entonces encriptar la informacin o mensaje utilizando la llave pblica recibida de B. A enviar a B el resultado de sta encriptacin. Entonces, B desencriptar el mensaje utilizando su llave privada.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

En implementaciones multi-usuario, las llaves pblicas de todas las partes se encuentran almacenadas en una base de datos de acceso pblico. Por lo tanto B no necesitara enviar su llave pblica a la parte A, sta la obtendra de la base de datos. En la prctica generalmente el cifrado asimtrico no se implementa para encriptar mensajes sino para encriptar llaves. Cabe aclarar, que la criptografa asimtrica es considerablemente ms lenta que la simtrica, aproximadamente mil veces.
Llave pblica de parte B Llave privada de parte B

Texto -plano

Encriptacin por parte A

Texto -cifrado

Desencriptacin por parte B

Texto -plano

Canal o medio inseguro

Fig. 3. Protocolo de criptografa asimtrica.

4.4 Protocolo de firma digital Corresponde a la versin informtica de la de firma personal manuscrita o firma olgrafa, los protocolos de firma digital proporcionan mayor seguridad que las firmas tradicionales, pretendiendo resolver los problemas con los documentos digitales. De acuerdo con la legislacin de cada pas, tendr tanto carcter de validez jurdica como la firma personal manuscrita y podr ser admisible como prueba en un juicio. Pases como Argentina, Brasil, Chile, Mxico y Per, entre otros, han adoptado la utilizacin de la firma digital como alternativa a la olgrafa y tienen legislacin al respecto que ya apunta al principio de equivalencia funcional, sea cualquier documento puede ser firmado con una firma tradicional como con una digital. El sitio Web de Firma Digital de la Republica Argentina, mantenido por la Secretara de Gestin Pblica, se puede obtener toda la informacin de la legislacin argentina en materia de firma digital (http://www.pki.gob.ar).

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

Es utilizada para probar la autora de, o el acuerdo a, la informacin contenida en un documento electrnico. La implementacin mas utilizada involucra la utilizacin de funciones hash junto con la criptografa asimtrica. La parte A producir el hash del documento, lo encriptar con su llave privada y enviara esto, junto con el documento. B producir por su cuenta el hash sobre el documento. Mediante la llave publica de A, desencriptar el hash que A gener. Como resultado B podra comparar los hashes y verificar la firma.
Informacin , mensaje o documento original

Envo sin encriptacin

Clculo del hash del mensaje por parte de B

Llave privada de parte A


Resultado hash del mensaje o Texto -plano
Texto -plano

Llave pblica de parte A

Encriptacin por parte A

Texto -cifrado

Desencriptacin por parte B

Texto -plano

Verificacin por parte B

Canal o medio inseguro

Fig. 4. Protocolo de firma digital.

4.5 Generacin de nmeros aleatorios Si bien casi todos los sistemas operativos o compiladores proveen una llamada a sistema o una funcin. La mayora de estos generadores no son lo suficientemente seguros para su uso en criptografa. Es imposible obtener un numero verdaderamente aleatorio a partir de una computadora, por eso se los tratar como nmeros seudoaleatorios. Las tcnicas para obtencin de nmeros seudoaleatorios, o las secuencias de ellos, de manera computacional varan: Estn basadas en generadores de congruencia lineal o retroalimentacin (feedback). Por ltimo, no es recomendable utilizar la funcin ramdom que el lenguaje de programacin provee. Las diferentes libreras y frameworks criptogrficos disponen de generadores ms seguros.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

5 Introduccin a los algoritmos criptogrficos Un algoritmo consiste en un conjunto determinado y finito de pasos o acciones, con el objetivo de solucionar un problema. Los algoritmos criptogrficos son funciones matemticas, utilizadas por los procesos de encriptacin o desencriptacin de datos. Las especificaciones de los algoritmos se realizar mediante notacin matemtica.
De cifrado por bloques En modo ECB

En modo CBC De cifrado simtrico De cifrado por flujo En modo CFB Que utilizan llaves

De cifrado asimtrico

Algoritmos criptogrficos Funciones de una va y hash

Cifrado o encriptacin de llave pblica

En modo OFB

Que no utilizan llaves

Firma digital

Generacin de nmeros aleatorios

Fig. 5. Categorizacin de algoritmos criptogrficos

5.1 Tipos Block y Stream de algoritmos criptogrficos Los algoritmos de criptografa simtrica pueden caracterizarse en dos grupos, segn operen sobre la entrada o texto-plano y la salida o textocifrado. Las dos alternativas corresponden a aquellos que traten la entrada de a porciones, o en bloques, de una longitud determinada. Por otro lado estn los algoritmos que operan sobre la entrada en forma de flujo, o stream, de a un bit, byte o hasta palabras de 32 bits inclusive, cada vez. En los algoritmos cifradores por bloques, el mismo bloque de entrada o texto-plano terminar resultando en el mismo bloque de salida o textocifrado, en tanto se utilice la misma llave. En cambio, en los cifradores por flujo, el bit o byte de texto-plano resultar encriptado en un bit o byte de texto cifrado, diferente cada vez.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

10

5.2 Modos ECB, CBC, CFB y OFB de algoritmos criptogrficos Aplican a los algoritmos de cifrado simtricos, entre ellos podemos encontrar: ECB: Electronic codebook, o libro de cdigo electrnico. El modo ms simple de utilizar un cifrador por bloques. Un bloque de entrada o texto-plano es encriptado produciendo un bloque de salida o texto-cifrado. El nombre proviene del hecho de que un bloque de entrada corresponder siempre al mismo bloque de salida y por lo tanto, podra construirse un libro de cdigos, de correspondencias, entre textos-cifrados y textos-planos. CBC: Cipher Block Chaining o cifrado con encadenamiento de bloque. El encadenamiento agrega una retroalimentacin, al cifrador por bloques. El resultado de la encriptacin de un bloque se combinar en el proceso de encriptacin del siguiente bloque. Cada bloque de texto-cifrado depende de todos los bloques encriptados anteriormente. En el caso del primer bloque, que no contiene texto-cifrado del bloque anterior, se utiliza informacin aleatoria. A este bloque se lo conoce como vector de inicializacin, initialization vector o IV. CFB: Cipher Feedback o cifrado retroalimentado. Permite utilizar cifradores por bloques como cifradores por flujo. Se basa en la utilizacin de una pila o cola del tamao del bloque de entrada. Se utiliza un vector de inicializacin con operaciones XOR y de desplazamiento, luego de la encriptacin se obtiene el primer byte de texto cifrado. OFB: Output feedback o retroalimentacin de salida. Otro mtodo para utilizar un cifrador por bloques como un cifrador por flujo. La diferencia con respecto de CFB es que una cantidad determinada de bits del bloque de salida anterior se traslada hacia las posiciones menos significativas de la pila o cola. 5.3 Llaves criptogrficas Al utilizar criptografa simtrica la seguridad del sistema depender de dos cosas: La fortaleza del algoritmo y la longitud de la llave. Por ejemplo, el algoritmo DES utiliza una longitud de llave de 56 bits, otros mas modernos como AES, utilizan 128 bits. En el caso del algoritmo DES, tenemos 256 llaves posibles. Suponiendo que una computadora o sistema distribuido pudiese probar un milln de llaves por segundo, se tardaran 2285 aos en encontrar la llave. Para el caso de llaves de 128 bits de longitud, el tiempo en aos sera de 1025. Por lo general a travs de funciones de hashing o algoritmos especficos se obtendran los 128 bits necesarios a partir de la cadena de caracteres de la llave.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

11

En lo que refiere a criptografa asimtrica, los algoritmos mas utilizados se basan en la dificultad de factores de nmeros grandes que sean resultado del producto de dos nmeros primos. 6 Algoritmos criptogrficos Se debe dejar en claro que la encriptacin asimtrica no reemplaza a la simtrica, sino que ambos mecanismos proveen soluciones a problemas diferentes. Adems de tener en cuenta las cuestiones tcnicas al momento de elegir algn algoritmo criptogrfico, se puede decir que un factor importante es el de la legalidad de la implementacin y la utilizacin de un algoritmo determinado en el pas en donde fuera a funcionar o a distribuirse la aplicacin. 6.1 Algoritmo DES y TripleDES Por sus siglas Data Encryption Standard, es un algoritmo de criptografa simtrica, fue probado por American Nacional Standards Institute (ANSI), en 1981. Un algoritmo de cifrado por bloques, que encriptar informacin en bloques de 64 bits de longitud. En la encriptacin un bloque de este tamao ser entrada del algoritmo, el texto-plano y, junto con la llave se producir una salida del mismo tamao, el texto-cifrado. La longitud de la llave es de 56 bits y es posible utilizar cualquier nmero que quepa en ese tamao como llave. Basndose fundamentalmente en una combinacin de tcnicas de confusin y difusin. Se realiza una sustitucin seguida de una permutacin del texto de entrada, en funcin de la llave, esta operacin se la conoce como round o ronda. DES realiza 16 rondas, sea 16 veces sobre el bloque de texto-plano en la encriptacin. TripleDES, esta basado en el algoritmo DES y realiza el proceso DES tres veces. Su llave corresponde al conjunto de las tres llaves DES aplicadas. 6.2 Algoritmo AES De las siglas Advances Encryption Standard, es un algoritmo de criptografa simtrica por bloques. Es un estndar cuyo objetivo es reemplazar al algoritmo DES.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

12

Anunciado por el Institute of Standards and Technology (NIST), tambin es conocido como Rijndael, basado en el apellido de sus creadores, Joan Daemen y Vicent Rijmen. El estndar AES ha sido algo restringido. Rijndael permite un rango mayor de tamaos posibles de bloques y de longitudes de llaves. AES especifica un tamao e bloque fijo de 128 bits de longitud. La llave puede ser de 128, 192 256 bits. 7 Algoritmos de funciones hash 7.1 Algoritmo MD5 El algoritmo hashing criptogrfico MD5 es una versin mejorada de su antecesor MD4. Las siglas MD corresponden a Message Digest o resumen de mensaje. Fueron diseados por Ron Rivest. El algoritmo produce a partir de una entrada no limitada en cuanto a su tamao, un hash criptogrfico, o resumen de mensaje, de 128 bits de longitud. 7.2 Algoritmo SHA Nacional Institute of Standards and Technology (NIST), en conjunto con National Security Agency (NSA) disearon el algoritmo SHA, nombrado a partir de las siglas Secure Hash Algorithm. Fue diseado para ser utilizado en otro estndar, llamado DSS Digital Signatura Standard, que implementa el algoritmo DSA de firma digital. 8 Algoritmos de criptografa asimtrica 8.1 Algoritmo RSA Creado por Ron Rivest, Adi Shamir y Leonard Adleman. El algoritmo es considerado seguro en tanto sean utilizadas llaves de longitud suficientemente seguras (se recomienda al menos una longitud de 2048). El algoritmo sirve tanto para encriptar como para desencriptar, y para la generacin de firmas digitales. Es ampliamente utilizado en protocolos de comercio electrnico. Se debe utilizar un padding criptogrfico como el estndar PKCS#1. Para la firma digital tambin debe utilizarse un padding seguro y la misma llave no deber utilizarse para la encriptacin y desencriptacin.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

13

La llave privada y pblica es generada o calculada en funcin de un par de nmeros primos, del orden de los 200 dgitos o ms grandes. 8.2 Algoritmo DSA Digital Signature Algorithm, es un estndar del gobierno federal de los EE.UU. La patente del algoritmo fue atribuida a David Kravitz (ex-empleado). El algoritmo de llave pblica para la firma digital DSA es una variante de los algoritmos ElGammal y Schnorr. 9 Criptografa en entornos .NET El namespace System.Security.Cryptography provee servicios criptogrficos que incluyen la encriptacin y desencriptacin de datos y otras operaciones como la de generacin de hashes criptogrficos, la generacin de nmeros aleatorios y la autenticacin de mensajes. El framework.NET provee implementaciones de estos algoritmos que pueden ser utilizados de manera sencilla, con valores por defecto seguros. A su vez, tambin dispone del modelo criptogrfico del framework.NET de herencia, diseo de stream o flujo y configuraciones extensibles. El sistema de seguridad del framework.NET implementa un patrn extensible de herencia de clases derivadas. Cuya jerarqua es: Clase de tipo algoritmo, por ejemplo: SummetricAlgorithm y HashAlgorithm (nivel abstracto). Clase de algoritmo que hereda de una clase de tipo de algoritmo, por ejemplo: RC2 o SHA1 (nivel abstracto). Implementacin de una clase de algoritmo que hereda tambin de la clase de algoritmo, por ejemplo: RC2CryptoServiceProvider y SHA1Managed (nivel completamente implementado) Algunas de las clases incluidas en el Framework.NET son: AsymmetricAlgorithm: Clase abstracta, para utilizar como base, a partir de la cual todas las implementaciones de algoritmos asimtricos deben heredar. CryptoConfig: Accede a la informacin de la configuracin criptogrfica.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

14

CryptographicException: Excepcin que se genera al sucederse un error en una operacin criptogrfica. DES: Clase base para el algoritmo Data Encryption Standard de la cual derivan las implementaciones DES. DSA: Clase base abstracta de la cual las implementaciones del algotimo Digital Signature Algorithm deben heredar. HashAlgorithm: Clase base desde la cual derivan las implementaciones de hashing criptogrficos. KeySizes: Determina el conjunto de longitudes de llaves vlidas para algoritmos criptogrficos simtricos. MD5: Clase abstracta a partir de la cual derivan las implementaciones del algoritmo MD5. RandomNumberGenerator: Clase abstracta a partir de la cual derivan implementaciones de nmeros aleatorios. RC2: Clase base desde la cual derivan implementaciones del algoritmo RC2. Rijndael: Clase base desde la que derivan las implementaciones del algoritmo Rijndael. RSA: Clase base desde la cual heredan las implementaciones del algoritmo RSA. SHA1: Computa el hash SHA-1 para los datos de entrada. SymmetricAlgorithm: Clase abstracta a partir de la cual heredan las implementaciones de algoritmos simtricos. TripleDES: Clase base para algoritmos Triple Data Encryption Standard desde la cual todas las implementaciones de TripleDES deben derivar.

9.1 Codificacin de encriptacin simtrica Las clases que proveen funcionalidades criptogrficas estn incluidas en el namespace System.Security.Cryptography. Debajo de esta raz comn se encuentran clases y otros namespaces especializados para la encriptacin simtrica. El Framework.NET descansa sobre la implementacin de la Microsoft CryptoAPI, de cdigo del tipo unmanaged o no manejado, aunque existen dentro de System.Security.Cryptography opciones de cdigo managed (ejecutado y controlado por el CLR).

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

15

Una aplicacin har uso de estas funcionalidades a travs de los Cryptographic Service Providers (CPS). Para la encriptacin simtrica de informacin, las clases disponibles son las siguientes: DESCryptoServiceProvider: Para el acceso al algoritmo Data Encryption Standard (DES). RC2CryptoServiceProvider: Para el acceso al algoritmo RC2. RijndaelManaged: Para el acceso al algoritmo Rijndael (de cdigo manejado). TripleDESCryptoServiceProvider: Para el acceso al algoritmo TripleDES.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

16

Private Shared Sub EncryptData(ByVal inNombre As String, ByVal outNombre As String, _ ByVal RijnKey() As Byte, _ ByVal RijnIV() As Byte) 'Crea instancias para manejar los archivos Dim Fin As New FileStream(inNombre, FileMode.Open, FileAccess.Read) Dim Fout As New FileStream(outNombre, FileMode.OpenOrCreate, FileAccess.Write) Fout.SetLength(0) 'Variables para lectura y escritura Dim bIn(100) As Byte 'Almacenamiento para encriptacion Dim rdlen As Long = 0 'Nmero total de bytes escritos Dim totlen As Long = Fin.Length 'Long del archivo in Dim len As Integer 'Nmero de bytes a escribir 'Crea implementacion por defecto, RijndaelManaged Dim Rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create() Dim encStream As New CryptoStream(Fout, _ Rijn.CreateEncryptor(RijnKey, RijnIV), _ CryptoStreamMode.Write) Console.WriteLine("Encriptando...") 'Leer archivo, encriptar y escribir archivo out While rdlen < totlen len = Fin.Read(bIn, 0, 100) encStream.Write(bIn, 0, len) rdlen = Convert.ToInt32(rdlen + len) Console.WriteLine("{0} bytes procesados", rdlen) End While encStream.Close() Fout.Close() Fin.Close() End Sub
Fig. 6. Ejemplo de implementacin de una funcin que utiliza la clase RjndaelManaged.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

17

9.2 Codificacin de encriptacin asimtrica De la misma manera que la encriptacin simtrica, tendremos acceso a funcionalidades de cifrado asimtrico a travs de los Cryptographic Service Providers (CSP), implementados para cada algoritmo. Para la encriptacin asimtrica de datos, las clases disponibles que heredan de AsymmtricAlgorithm, son las siguientes: DSACryptoServiceProvider: Para el acceso al CSP estndar para el algoritmo Digital Signature Algotithm. RSACryptoServiceProvider: Para el acceso al CSP estndar para el algoritmo RSA.
Imports System Imports System.Security.Cryptography Imports System.Text Public Class EjemploDSA Shared Sub main() Try Dim DSA As New DSACryptoServiceProvider 'Creo instancia para generar hash SHA-1 Dim sha As New SHA1CryptoServiceProvider 'Obtengo resultado de hash del ejemplo Dim HashValue As Byte() = sha.ComputeHash(Encoding.Default.GetBytes("MiContenido")) 'Almacenar y firmar el valor Dim SignedHashValue As Byte() = DSASignHash(HashValue, _ DSA.ExportParameters(True), _ "SHA1") 'Verificar el hash y mostrar los resultados If DSAVerifyHash(HashValue, SignedHashValue, _ DSA.ExportParameters(False), "SHA1") Then Console.WriteLine("El resultado fue verificado") Else Console.WriteLine("El resultado NO fue " & _ "verificado") End If Catch ex As Exception Console.WriteLine(ex.Message) End Try End Sub

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

18

Public Shared Function DSASignHash(ByVal HashToSign() As Byte, _ ByVal DSAKeyInfo As DSAParameters, _ ByVal HashAlg As String) As Byte() Try Dim DSA As New DSACryptoServiceProvider 'Importar informacin de la llave DSA.ImportParameters(DSAKeyInfo) 'Crea instancia para transferir la llave privada Dim DSAFormatter As New DSASignatureFormatter(DSA) 'Establecer el algoritmo de hashing segn parmetro DSAFormatter.SetHashAlgorithm(HashAlg) 'Crea la firma para el hashvalue y lo devuelve Return DSAFormatter.CreateSignature(HashToSign) Catch ex As CryptographicException Console.WriteLine(ex.Message) Return Nothing End Try End Function

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

19

Public Shared Function DSAVerifyHash(ByVal HashValue() As Byte, _ ByVal SignedHashValue() As Byte, _ ByVal DSAKeyInfo As DSAParameters, _ ByVal HashAlg As String) As Boolean Try Dim DSA As New DSACryptoServiceProvider 'Importar informacin de la llave DSA.ImportParameters(DSAKeyInfo) 'Crea instancia para transferir la llave privada Dim DSADeFormatter As New DSASignatureDeformatter(DSA) 'Establecer el algoritmo de hashing segn parmetro DSADeFormatter.SetHashAlgorithm(HashAlg) 'Verifica la firma y devuelve el resultado Return DSADeFormatter.VerifySignature(HashValue, _ SignedHashValue) Catch ex As CryptographicException Console.WriteLine(ex.Message) Return Nothing End Try End Function End Class
Fig. 7. Ejemplo de implementacin de firma digital utilizando el algoritmo DSA.

9.3 Codificacin de funciones de una va y hash Podremos acceder a las diferentes implementaciones de funciones de hashing a travs de los Cryptographic Service Providers (CSP). El namespace System.Security.Cryptography provee las siguientes clases para la generacin de hashes criptogrficos: MD5CryptoServiceProvider: Genera el hash MD5 de los datos de entrada, usando la implementacin del CSP. SHA1CryptoServiceProvider y SHA1Managed: Estas clases generan el hash SHA-1 de la informacin de entrada, La primera utiliza cdigo no manejado y la segunda manejado. SHA256Managed, SHA384Managed y SHA512Managed: generan el hash SHA-256, SHA-384 y SHA-512, para los datos de entrada utilizando cdigo manejado.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

20

Public Function GenerarSHA1() As Byte() Dim Datos As Byte() = Encoding.Default.GetBytes("PruebaSHA1") Dim Resultado() As Byte Dim Sha As New SHA1CryptoServiceProvider Resultado = Sha.ComputeHash(Datos) Return Resultado End Function
Fig.8. Ejemplo de implementacin de hash SHA-1.

10 Criptografa en SQL Server Hasta la versin 2005, SQL Server no provea ms funcionalidad criptogrfica que dos funciones no documentadas para la encriptacin y comparacin de contraseas de usuarios del motor. Luego de esta versin es posible implementar hashing criptogrfico directamente sobre el motor de SQL Server. La funcin que provee el motor de base de datos para obtener hashes utilizando diferentes algoritmos es HashBytes(). La funcin se define de la siguiente maneta:
HashBytes('<Algorithm>', {@input | 'input'}) <Algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1

10.1 Funciones para cifrado simtrico y asimtrico de datos Los mecanismos de encriptacin que provee el motor Microsoft SQL Server, a partir de la versin 2005, son los siguientes: Funciones Transac-SQL. Llaves asimtricas. Llaves simtricas. Certificados. Encriptacin transparente de datos.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

21

Al usar las funciones Transac-SQL, es posible encriptar tems individuales al insertar o actualizar registros. Las funciones EncryptByPassPhrase() y DecryptByPassPhrase()
EncryptByPassPhrase({ 'passphrase' | @passphrase }, { 'cleartext' | @cleartext }, { 'add_authenticator' | @add_authenticator }, { 'authenticator' | @authenticator },)

Passphrase es la palabra-clave de contrasea a partir de la cual se generar la llave simtrica. Cleartext es el texto-plano que deseamos encriptar. Add_authenticator indicar si se cifrar un autenticador junto con el texto sin cifrar. Se utilizara 1 si se va a agregar un autenticador. Authenticator determinar como se obtendr un autenticador. Los mecanismos de llaves simtricas y asimtricas implementados en SQL Server 2005 dependen de una jerarqua de llaves incorporadas en el motor.

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

22

Fig. 9. Jerarqua de llaves implementadas en SQL Server 2005.

Se encuentra en el nivel ms alto de la jerarqua a la Data Protection API, que provee estos servicios mediante llamadas o funciones del sistema. El Service Master Key (SMK), es una llave simtrica generada al momento de la instalacin. El Database Master Key (DMK) es una llave que puede utilizarse para encriptar y/o desencriptar llaves almacenadas en la base de datos. Los certificados self-signed, creados por SQL Server, siguen el estndar X.509. Para la encriptacin simtrica, utilizando llaves almacenadas en la base de datos, se dispone de dos funciones: EncryptByKey() y DecryptByKey(). Para la encriptacin asimtrica, las funciones correspondientes son EncryptByAsymKey() y DecryptByAsymKey(). Por ltimo en el caso de los certificados EncryptByCert() y DecryptByCert().

Ahumada. Lpez

Trabajo de investigacin: Criptografa en .NET

23

Bibliografa
Criptografa. Tcnicas de desarrollo para profesionales. Ariel Maiorano. Editorial Alfaomega. 1ra. Edicin 2009 MSDN. Modelo de criptografa en .NET http://msdn.microsoft.com/es-es/library/0ss79b2x %28v=VS.90%29.aspx MSDN. Informacin general sobre criptografa http://msdn.microsoft.com/es-es/library/92f9ye3s %28v=VS.90%29.aspx#secret_key MSDN. Desmitificando la encriptacin. Parte I: http://msdn.microsoft.com/es-es/library/bb972216.aspx Parte II: http://msdn.microsoft.com/eses/library/bb972217.aspx#XSLTsection125121120120

Ahumada. Lpez

You might also like