Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas
Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas

lunes, 6 de abril de 2009

Creación de llaves públicas y privadas del algoritmo asimétrico RSA como archivos XML en C#

En esta entrada les mostraré la forma en que podemos generar nuestras propias llaves tanto públicas y privadas del algoritmo de encriptación asimétrico RSA (llamado así por sus creadores), las llaves son generadas como archivos XML, esto con la finalidad de poder distribuir la llave pública para los fines que sean necesarios y el ejemplo está hecho en C# para aplicaciones de escritorio. El ejemplo esta hecho en VS 2008 express edition.

Si todo esto de la encriptación y las llaves públicas y privadas se te dificulta un poco, te recomiendo que consultes esta información.

Todo el proceso es realmente sencillo y se hace con el namespace System.Security.Cryptography.

Para este ejemplo y para ilustrar el contenido que tendrán los archivos, se tienen 2 cuadros de texto, en el primero se tiene el contenido de la llave privada (y pública tambien), mientras que en el segundo se tiene únicamente el contenido de la llave pública.

Tambien se tienen 3 botones, con un botón se generan las llaves y con otros botones se exporta el contenido de los cuadros de texto a archivos XML.

 En el evento Load del formulario tenemos la siguiente instrucción:
algoritmoRSA = new System.Security.Cryptography.RSACryptoServiceProvider(2048);
la variable algoritmoRSA fue previamente declarada.

En el evento clic del boton generar tenemos lo siguiente:
textBox1.Text = algoritmoRSA.ToXmlString(true);
textBox2.Text = algoritmoRSA.ToXmlString(false);
El sistema provee la funcionalidad necesaria para poder obtener las llaves mediante el método ToXmlString(bool indicador); el valor que acepta este método lo utlizamos para indicar si es la llave privada (con true) o si es la llave pública (con false).

En los botones que nos permiten exportar el contenido de los cuadros de texto tenemos un código como este:
SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "archivos xml |*.xml";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName);
                sw.Write(this.textBox1.Text);
                sw.Close();
                  
            }
esto nos permite guardar los archivos xml.

 

lunes, 16 de febrero de 2009

Criptografia - Una introducción

La criptografia (que es una palabra que proviene del griego y significa "texto oculto") es la ciencia que se encarga de cifrar y descifrar la información mediante técnicas muy avanzadas. El interés primordial de la criptografia es el de proteger la información.


En la sociedad de la información de hoy en dia, la criptografía se ha convertido en una de las principales herramientas para mantener la privacidad y la confianza, lo que tiene aplicaciones en distintos campos: control de acceso a recursos y servicios, autenticación de usuarios, pagos electrónicos, seguridad dentro de las coporaciones, etc. .

Debido a la gran cantidad de algoritmos de encriptación, la criptografía ha dejado de ser un privilegio especial de los gobiernos y de especialistas con grandes habilidades; ahora, la criptografia esta abierta a todo mundo.

Definiciones básicas


En la criptologia, el mensaje que se quiere encriptar es llamado texto plano. El proceso de codificar un mensaje con el fin de ocultar el texto de personas externas es llamado cifrado o encriptación. El texto ya encriptado es llamado texto cifrado. El proceso inverso a la encriptación es llamado desencriptación, que consiste en decodificar el texto cifrado con el fin de obtener nuevamente el texto plano. Los procesos de encriptación y desencriptación necesitan el uso de una llave o key.

La confidencialidad es mantener en secreto el contenido de la información; la integridad de datos consiste en detectar cambios no autorizados en la información; autenticación consiste en verificar que las personas sean quien dicen ser y de esta forma identificar los origenes de la información.

Algoritmos criptográficos básicos


El método para encriptar y desencriptar datos se conoce como algoritmo de encriptación o algoritmo de cifrado. Algunos algoritmos se basan en ocultar el método con el que el algoritmo de encriptación funciona, pero debido al gran auge de la encriptación y ya que hay muchos algoritmos que se han convertido en estandares de la industria la técnica de ocultar el método de funcionamiento de los algoritmos de encriptación se ha vuelto muy poco práctico. Los modernos algoritmos de encriptación basan su uso en llaves.

Hay dos clases de algoritmos de encriptación basados en llaves: los de llave privada o simétricos y los algoritmos de llave pública o asimétricos. La diferencia entre estos dos tipos de algoritmos consiste en que los algorimtos simétricos (de llave privada) utilizan la misma llave para encriptar y desencriptar el mensaje; por otro lado, los algoritmos asimétricos (de llave pública) utilizan una llave para encriptar el mensaje y otra llave completamente distinta para desencriptar el mensaje y es imposible encriptar el mensaje con una llave y desencriptarlo con esa misma llave, ya que las llaves no tienen relación alguna entre si.

Realmente los algoritmos asimetricos tienen dos tipos de llaves: Una llave pública y una llave privada y como su nombre lo indica, la llave pública puede darse a conocer sin problema y la llave privada tiene que esconderse bajo llave. En la vida real, un algoritmo asimétrico tiene el siguiente funcionamiento: Una empresa X (gorgosfot) emite documentos de configuración para sus usuarios y los envia por correo electrónico; la empresa gorgosoft para mejorar la seguridad de sus usuarios encripta sus documentos con un algoritmo de asimétrico (mediante la llave privada); los usuarios al recibir el documento encriptado intentan desencriptarlo con la llave pública que con anterioridad se les proporcionó; ya que los documentos encriptados con la llave privada solo pueden ser desencriptados con lla llave pública, se puede corroborar que los documentos que reciben los usuarios realmente son de gorgosotf. Los algoritmos asimétricos basan su seguridad en que la llave privada efectivamente permanezca privada.

Algunos de los algoritmos simétricos mas usados son: DES y AES (AES es el reemplazo de DES). Por su parte RSA es probablemente el algoritmo asimétrico mas conocido y utilizado.