DE .NET, SQLSERVER Y MÁS, APRENDE CONMIGO!✔

Desarrollo de todo tipo de aplicaciones y Administración de Base de datos con Tecnología Microsoft


UNETE

Encriptación y Desencriptación

0


Encriptación y Desencriptación 

La criptografía (del griego ‘(criptos), «oculto», y (grafé), «escritura») se podría traducir como la escritura de mensajes ocultos. En la antigüedad ya se empleaban métodos de criptografía para ocultar mensajes en tiempo de guerra, de forma que aunque el mensajero fuera interceptado por el enemigo, el contenido del mensaje estaba a salvo.

Uno de los primeros métodos de criptografía documenta es el método utilizado por Julio Cesar. Es un tipo de cifrado por sustitución que consiste en remplazar cada letra del mensaje por otra que se encuentra un número fijo más adelante en el alfabeto.

Hoy en día, con las tecnologías actuales, la necesidad de cifrar es mayúscula: Hablamos con nuestros amigos, reservamos nuestras vacaciones, damos en número de nuestra tarjeta de crédito, ofrecemos nuestros datos personales… y todo ello mediante:

·         Voz telefónica

·         Mensajería breve (SMS, WhatsApp … )

·         Datos por línea digital (ADSL, fibra, HFC) o inalámbrica (wifi, UMTS, LTE).

·         …..

Los mensajes se transmiten por canales inseguros, redes de compartidas de comunicación etc.… y, con toda seguridad, vamos a tener a terceras personas acechando para obtener el contenido del mensaje

Una vez que llegamos a la conclusión de que es necesario encriptar (o cifrar) necesitamos decidir cómo lo vamos a hacer. Para ello necesitaremos seleccionar un algoritmo de cifrado.

CRIPTOGRAFÍA SIMÉTRICA

Los algoritmos de criptografía simétrica utilizan la misma clave para los dos procesos: cifrar y descifrar. Suelen ser sencillos de utilizar y bastante eficientes.

El emisor quiere enviar un documento al receptor, para ello le aplica al documento un algoritmo simétrico con una clave que también conoce el receptor. Cuando el receptor recibe el mensaje le aplica el mismo algoritmo (inverso) con la misma clave. Si el documento no ha sido modificado en la transmisión, el resultado será el documento original.





Problemas de la criptografía simétrica

El problema principal de la criptografía simétrica es la transmisión de la clave. ¿Cómo conseguimos que el emisor y el receptor tengan la misma clave?. No podemos enviar el mismo canal inseguro para transmitir las claves. Ya que la clave para desencriptar habría que enviarla sin cifrar. Por ejemplo: Si quiero enviar un mensaje secreto a una persona que está en Japón, los dos tenemos que conocer el algoritmo de cifrado que vamos a utilizar y la clave secreta para cifrar y descifrar. Decidimos utilizar el algoritmo AES pero ¿Cómo transmitimos la clave? Obviamente la clave la tenemos que transmitir sin cifrar, o bien cifrada con otra clave que a su vez la tendremos que transmitir sin cifrar y así sucesivamente. Así que debemos garantizar un canal seguro de comunicación, lo que no siempre resulta fácil.

Otro problema es el almacenamiento de claves: Si en una empresa hay diez trabajadores y todos tienen conversaciones privadas con todos, cada uno necesita establecer nueve claves distintas con 81 canales seguros de comunicación para la transmisión de claves. Si en vez de 10 trabajadores tuviésemos 100 trabajadores deberíamos almacenar 10000 claves y establecer 10000 canales de comunicación seguros distintos.

En la actualidad estos problemas se solucionan con la criptografía asimétrica.

CRIPTOGRAFÍA ASIMÉTRICA (o de clave pública)

Un algoritmo de criptografía asimétrica utiliza dos claves para el envío de mensajes. Las dos claves pertenecen a la persona que recibe el mensaje. Se utiliza una clave para encriptar y otra para desencriptar. La clave que se emplea para cifrar se llama clave pública y se puede entregar a cualquier persona. (De hecho hay hasta servidores de claves públicas). La magia es que si el cifrado se ha hecho con una clave pública sólo podre desencriptar con una clave distinta de la primear asociada. Es decir: dos claves matemáticamente relacionadas de manera que lo que cifras con una solo lo puedes descifrar con la otra.

Obviamente la clave pública y privada se tienen que generar en el mismo instante y deben estar matemáticamente relacionadas. La robustez del algoritmo asimétrico es que estas claves sean en apariencia independientes o, dicho de otra forma, el coste computacional para obtener la clave privada a partir de la pública sea desorbitado.

De esta forma solucionamos los problemas de la criptografía simétrica.

·         Se cifra con la clave pública la cual se puede transmitir libremente

·         Cada usuario sólo tiene que controlar dos claves (su clave pública y su clave privada). Para enviar un mensaje cifrado a otro usuario no tiene más que pedirle la clave pública (o tomarla del servidor de claves) y éste se la puede enviar por un canal no seguro.



La criptografía asimétrica tiene algunos inconvenientes

·         Para una misma longitud de clave y mensaje se necesita mayor tiempo de proceso.

·         Las claves deben ser de mayor tamaño que las simétricas. (Generalmente son cinco o más veces de mayor tamaño que las claves simétricas) para garantizar la “independencia” matemática entre ellas.

·         El mensaje cifrado ocupa más espacio que el original.

Algunos protocolos como HTTPS o SSH, utilizan un formato hibrido de criptografía simétrica y asimétrica. Para comunicar con un servidor SSH el cliente hace una petición al servidor, el servidor envía al cliente su clave pública y el cliente envía al servidor una clave cifrada con la clave pública del servidor (sólo la puede ver el servidor con su clave privada). A partir de este momento ambos se comunican con mensajes encriptados de forma simétrica con la clave enviada por el cliente.

DEMOSTRACIÓN

En Visual Studio vamos a dar click en menú File à New à Project


En la Ventana emergente le damos click a Window, seleccionamos la opción “Console Application” y espacio Name colocamos el nombre del proyecto que para el Ejemplo es “Demo 13 20483” y luego presionamos el botón OK.

 


Procedemos a agregar a nuestra solución una nueva librería de clases llamada ‘LibreriaClases’




Procederemos a crear una clase llamada ‘DESEncrypt’ y haremos el llamado a la librería siguiente:


En nuestra clase codificaremos el siguiente método:


Para luego realizar el método que realiza la encriptación:



Continuamos con la desepcriptación:



En la referencia de nuestro proyecto agregamos la librería ‘LibreriaClases’ como se muestra a continuación:



Hacemos la llamada en nuestro editor de código:

Y desarrollamos nuestra codificación para encriptar:


El resultado sería el siguiente:





Tal vez te interesen estas entradas

No hay comentarios