Cypher Wall

Publicado el 07/05/2023 12:05:00 en Criptografía.
Author: [x][x] Zep7i | Total de votos: 7   Vote



Este post habla sobre los diferentes métodos criptográficos más utilizados, se irá actualizando con media pase el tiempo y se añadirá todo lo posible con respecto a Criptografía, desde su aparición hasta la actualización más reciente que exista, sea reconocida y se esté aplicando actualmente.

¿Qué es la criptografía?


La criptografía es un campo de estudio y práctica que se ocupa de técnicas y métodos para proteger la información y comunicaciones confidenciales, a través del uso de algoritmos y protocolos criptográficos. Su objetivo principal es garantizar la confidencialidad, integridad, autenticidad y no repudio de los datos.

La criptografía se ha utilizado a lo largo de la historia como una herramienta para asegurar la privacidad de la información, desde la antigüedad con métodos como la sustitución de letras o la transposición de caracteres, hasta los sistemas criptográficos modernos basados en complejas operaciones matemáticas.

La criptografía se aplica en una amplia variedad de áreas, como la seguridad de las comunicaciones en línea, el almacenamiento seguro de datos, el comercio electrónico, las transacciones financieras, las firmas digitales, entre otros. Además, la criptografía también aborda aspectos como la generación de números aleatorios, la autenticación de usuarios y la protección contra ataques criptoanalíticos.

Es importante destacar que la criptografía por sí sola no garantiza la seguridad absoluta, ya que los sistemas criptográficos pueden ser vulnerables a ataques si no se utilizan correctamente o si las claves se pierden o son comprometidas. Por lo tanto, la criptografía se utiliza como una de las muchas capas de seguridad en sistemas y protocolos más complejos para garantizar la protección de la información sensible.

El primer método criptográfico: La Escítala Espartana


Una escítala es un sistema de criptografía utilizado por los éforos espartanos para el envío de mensajes secretos. Está formada por dos varas con caras variables (pero ambas con la misma cantidad de caras) y una tira de cuero o papiro, a las que ambas se puede denominar escítala.

El sistema consistía en dos varas del mismo grosor que se entregaban a los participantes de la comunicación. Para enviar un mensaje se enrollaba una cinta de cuero de forma espiral a uno de los bastones y se escribía el mensaje longitudinalmente, de forma que en cada vuelta de cinta apareciese una letra de cada vez. Una vez escrito el mensaje, se desenrollaba la cinta y se enviaba al receptor, que sólo tenía que enrollarla a la vara gemela para leer el mensaje original.

¿Qué es un CriptoAnalísta?


Un criptoanalista, también conocido como criptoanalista o criptólogo, es un profesional especializado en el estudio y análisis de sistemas criptográficos con el objetivo de descifrar o romper códigos y cifrados. Su labor consiste en aplicar técnicas y métodos criptoanalíticos para encontrar debilidades en los algoritmos criptográficos y así poder recuperar la información original sin poseer la clave de cifrado.

El trabajo del criptoanalista implica el uso de conocimientos avanzados en matemáticas, estadísticas, criptografía y computación. Utiliza diferentes técnicas y herramientas para analizar los sistemas criptográficos y buscar posibles vulnerabilidades o patrones en los datos cifrados. Algunas de las técnicas criptoanalíticas comunes incluyen:

• Criptoanálisis de fuerza bruta: Consiste en probar todas las posibles claves de cifrado hasta encontrar la correcta. Esta técnica es efectiva si la clave es débil o si el cifrado es vulnerable a ataques de fuerza bruta.
• Criptoanálisis diferencial: Se basa en el análisis de diferencias en los textos cifrados producidos a partir de diferentes claves y textos claros. Busca patrones y relaciones estadísticas que puedan ayudar a deducir información sobre la clave utilizada.
• Criptoanálisis lineal: Busca correlaciones lineales entre el texto claro y el texto cifrado para descubrir información sobre la clave de cifrado.
• Criptoanálisis algebraico: Utiliza técnicas matemáticas para simplificar y resolver ecuaciones algebraicas derivadas de los algoritmos criptográficos, lo que puede revelar información sobre la clave.

Los criptoanalistas desempeñan un papel fundamental en el campo de la criptografía, ya que su trabajo contribuye a la mejora de los sistemas de seguridad y a la identificación de debilidades en los algoritmos criptográficos existentes. Sus análisis y descubrimientos pueden llevar al desarrollo de métodos de cifrado más seguros y resistentes a los ataques.

Es importante destacar que, si bien los criptoanalistas se dedican a romper códigos y cifrados, su trabajo se realiza generalmente con fines legítimos y éticos, como la mejora de la seguridad y la protección de la información.

Hash


Para poder garantizar la integridad de un objeto se puede utilizar un algoritmo Hash el cual permite generar una huella digital de longitud fija e irreversible (no descifrable) y asegurar la integridad del objeto transmitido en el canal de comunicación.

Ejemplo:
El Hash es utilizado para preservar la integridad de un objeto pero no garantiza la confidencialidad ni la disponibilidad, por lo que no es recomendable que sea enviado por un canal de comunicación para verificar la integridad de algún objeto porque ese Hash y contenido del archivo pueden ser reemplazados por un atacante y hacerse pasar por verídicos.

Los hash se suelen utilizar para almacenar contraseñas generalmente, ya que con estos se puede cifrar las claves en texto plano (UTF-8) y no pueden ser descifradas de ninguna manera, es irreversible a su contenido original cifrado.

Aclaración importante:
Los Hash son bloques de bits de longitud fija y no importa la longitud del archivo a cifrar ya que estos no pueden ser descifrados si únicamente el atacante tiene acceso al Hash pero no a la llave privada.
Un hash es el valor que devuelve una función criptográfica, tal como la simétrica o asimétrica.

Ejemplo de Hash del cifrado MD5:
4d186321c1a7f0f354b297e8914ab240

Cifrado Simétrico


Para establecer una comunicación confidencial entre 2 o varias personas, todos deben conocer la misma llave para poder descifrar/cifrar los objetos en la comunicación.

Por ejemplo:
Nuestra llave es "Pepe"

Bob cifra un archivo con el algoritmo AES usando de llave "Pepe" y le envía la clave previamente por un medio de comunicación cuál sea a Alice.

Alice recibe la llave en texto plano (UTF-8) y ahora está lista para poder encriptar/des-encriptar objetos con esa llave.

Ahora Bob envía un archivo a Alice de forma cifrada usando la llave "Pepe" y para que Alice entienda en un idioma/lenguaje comprensible el contenido de ese archivo debe descifrarlo utilizando una llave, llave la cuál compartió Bob para que ella use.

Problemas:
- La llave debe compartirse por algún medio de comunicación, el problema reside en que al ser una llave única que puede ser usada tanto como para cifrar y descifrar archivos es que si alguien descubre esa llave secreta tranquilamente podría descifrar cualquier objeto que se envíen Bob y Alice.
- La llave suele compartirse en comunicaciones de entidades que residen en distintos puntos regionales y la única forma de compartir su llave es a través de algún medio de comunicación a través de internet. Si la clave fuese compartida de forma secreta en persona la única forma de que alguien pueda descifrar los objetos enviados mediante la comunicación es:
a) Una de las dos entidades compartió la llave con una entidad externa.
b) Una entidad externa realizó un ataque de fuerza bruta para poder descubrir la llave de manera aleatoria y así poder descifrar los objetos enviados mediante la comunicación.
c) Entre otras...

Características:
- Se utiliza una única llave compartida (Desventaja)
- Es rápido en recursos (Ventaja)
- Es difícil compartir la llave de manera confidencial (Desventaja)
- Es un método de comunicación para preservar la confidencialidad, más no puede garantizar la integridad y/o disponibilidad del objeto que se está transmitiendo.

Cifrado Asimétrico


Para establecer una comunicación confidencial entre 2 o varias personas, cada persona debe generar una llave pública y una llave privada para poder descifrar/cifrar los objetos en la comunicación..

Ejemplo de descifrado:
- Claves de Bob
llave pública es "Pepe"
llave privada es "Gonzalez"
- Claves de Alice
llave pública es "Valentina"
llave privada es "Fernandez"

Bob cifra un archivo con el algoritmo RSA usando de llave pública "Pepe" y como llave privada "Gonzalez" y le envia la llave pública previamente por un medio de comunicación cuál sea a Alice.

IMPORTANTE: La clave privada de cada entidad NUNCA se revela y debe ser confidencial para uno mismo, NO debe ser compartida con NADIE.

Alice recibe la llave pública de Bob en texto plano (UTF-8) y ahora está lista para poder encriptar cualquier objeto para que Bob lo pueda des-encriptar y con su propia llave privada (Alice) puede des-encriptar cualquier objeto que le envie de forma encriptada Bob utilizando la llave pública que le envió a Bob.

Bob recibe la llave pública de Alice en texto plano (UTF-8) y ahora está listo para poder encriptar cualquier objeto para que Alice lo pueda des-encriptar y con su propia llave privada (Bob) puede des-encriptar cualquier objeto que le envie de forma encriptada Alice utilizando la llave pública que le envió a Alice.

Entonces:
Si Bob quiere enviar un mensaje cifrado a Alice:
Debe de cifrar el mensaje con la llave pública de Alice y enviarlo por el canal de comunicación que estén utilizando, así Alice al recibir el mensaje puede descifrarlo con su propia llave privada la cuál no fue compartida de ninguna manera ni de ningún modo y únicamente ella conoce.

Si Alice quiere enviar un mensaje cifrado a Bob:
Debe de cifrar el mensaje con la llave pública de Bob y enviarlo por el canal de comunicación que estén utilizando, así Bob al recibir el mensaje puede descifrarlo con su propia llave privada la cuál no fue compartida de ninguna manera ni de ningún modo y únicamente él conoce.

Ejemplo de descifrado + Conocimiento del autor:
Para poder saber quién es el autor original del objeto que se está enviando a través del canal de comunicación, la entidad que quiera demostrar su autoría debe de cifrar el objeto con su propia clave privada y al enviárselo a la otra entidad receptora esta debe descifrarlo con la llave pública del emisor, si el objeto descifrado es coherente y comprensible fácilmente por el receptor entonces se puede comprobar que realmente la persona que está enviando el objeto es una entidad de confianza.

Características:
- Se utilizan dos llaves: Una pública y una privada (Ventaja)
- Es lento en recursos (Desventaja)
- Es fácil mantener la confidencialidad (Ventaja)
- Es un método de comunicación para preservar la confidencialidad, más no puede garantizar la integridad y/o disponibilidad del objeto que se está transmitiendo.

Cifrado Híbrido


El cifrado híbrido es una combinación de el cifrado simétrico con el cifrado asimétrico, cumpliendo de esta forma una transferencia en el cifrado asimétrico mucho más rápida.

Ejemplo:

- Claves de Bob
llave pública es "Pepe"
llave privada es "Gonzalez"

- Clave simétrica de Bob
llave es "Confidencial"

- Claves de Alice
llave pública es "Valentina"
llave privada es "Fernandez"

Bob quiere enviar un archivo .pdf demasiado pesado a Alice con las características del cifrado asimétrico pero Bob sabe que esto producirá una lentitud en la transferencia debido a las características de este cifrado.

Bob usa el cifrado híbrido el cual le permite usar la rapidez del cifrado simétrico junto con la seguridad del cifrado asimétrico.

Para esto, Bob cifra el archivo .pdf con el cifrado simétrico y la llave simétrica para des-encriptarlo lo cifra con su llave privada (Usando cifrado asimétrico). De esta manera Bob envía el archivo .pdf a Alice encriptado de forma simétrica y posteriormente le envía la llave simétrica para des-encriptarlo, de manera cifrada con cifrado asimétrico, como la llave simétrica no tiene un peso relevante entonces el cifrado asimétrico no ocupa nada de recursos prácticamente, y al usar el cifrado simétrico al cifrar el archivo pdf se conserva la rapidez de la transferencia nuevamente, enviando el archivo y la llave cifrada para ese archivo a una velocidad rápidamente considerable sin importar el tamaño del archivo.

CheckSum (Suma de verificación)


Una suma de verificación (CheckSum) sirve para detectar errores o modificaciones no autorizadas luego de haber descargado un archivo o simplemente querer verificarlo en cualquier momento después de su descarga.

Ejemplo en Windows:
Queremos descargar la ISO de KaliLinux y queremos verificar que al terminar de descargar la ISO no se haya corrompido el archivo, para esto podemos hacer una suma de verificación abriendo el símbolo de sistema (CMD) y colocar el siguiente comando:
certutil -hashfile [Nombre del Archivo].[Extensión] [Cifrado]

CheckSum de la página oficial de KaliLinux:
b7c93ff333b6e3909a6e28de5408a916cbea2b5c2371e4b76ec12900d1158bc8

Si al momento de comparar el checksum de la página oficial del sitio con la que acabamos de obtener de nuestra terminal son diferentes entonces significa que el archivo fue corrompido en cierta manera o modificado de manera no esperada en el transcurso de su descarga.

Esto puede deberse a varios motivos como:
- Descarga del archivo de un sitio NO oficial
- Se interfirió los paquetes de la red para redireccionarlo a una descarga maliciosa que se hace pasar por legitima (Un atacante está en escucha en su red y interfirió en su señal para lograr hacer que usted descargue un archivo NO oficial y sin percatarse)
- La descarga se detuvo inesperadamente o no se pudieron descargar ciertos complementos/archivos debido a X razón (Firewall, error de red, etc.)

Firma Digital


La firma digital sirve para poder verificar la autenticidad e integridad de un objeto.

Ejemplo:
Se cifra el objeto obteniendo un Hash el cual debe de ser cifrado de forma asimétrica con una clave privada, la entidad que recibe ese Hash cifrado debe de descifrarlo con la llave pública de la entidad emisora y así verificar su integridad y autenticidad.

Sirve generalmente para documentos electrónicos y para que los proveedores externos le hagan saber al usuario que son auténticos y confiables (Aplicable en protocolos como HTTPS)
El cifrado de las firmas digitales suele ser RSA.

Cifrado de Curva Elíptica


El cifrado elíptico es un método criptográfico que utiliza las propiedades matemáticas de las curvas elípticas para garantizar la seguridad en la comunicación y el intercambio de información. Es ampliamente utilizado en sistemas de seguridad y en protocolos de criptografía modernos.

El cifrado elíptico se basa en el problema matemático conocido como el problema del logaritmo discreto en una curva elíptica. Esta dificultad radica en el hecho de que calcular el logaritmo discreto en una curva elíptica es computacional-mente costoso y requiere mucho tiempo, lo que lo hace ideal para la criptografía.

El proceso de cifrado elíptico implica los siguientes pasos:
1. Generación de claves: En primer lugar, se generan dos claves: una clave privada y una clave pública. La clave privada es un número aleatorio elegido por el usuario y se mantiene en secreto. La clave pública se obtiene multiplicando la clave privada por un punto predefinido en la curva elíptica.

2. Cifrado: Para cifrar un mensaje, se convierte en un punto en la curva elíptica utilizando una función de mapeo. Luego, se utiliza la clave pública del destinatario para calcular un punto resultante al multiplicar la clave pública por el punto del mensaje.

3. Descifrado: El destinatario utiliza su clave privada para multiplicarla por el punto resultante obtenido en el paso anterior, lo que permite recuperar el punto original del mensaje.

La seguridad del cifrado elíptico se basa en la dificultad computacional de resolver el problema del logaritmo discreto en una curva elíptica. Aunque el cifrado elíptico es un algoritmo robusto y ampliamente utilizado, su seguridad depende de la elección adecuada de los parámetros y de la longitud de las claves utilizadas.

El cifrado elíptico ofrece una seguridad comparable a otros métodos criptográficos, como el cifrado RSA o el algoritmo de Diffie-Hellman, pero con claves más cortas, lo que lo hace eficiente y adecuado para entornos con recursos limitados, como dispositivos móviles o sistemas embebidos. Además, su uso se ha extendido en protocolos de seguridad como el cifrado de extremo a extremo en sistemas de mensajería segura y en aplicaciones de criptomoneda, como Bitcoin y otras criptodivisas.

Ejemplo del Cifrado


Texto a cifrar: "Hola amigos"
Clave privada: 827

Primero necesitaremos definir una curva elíptica y un punto base en esa curva. Por simplicidad, usaremos la curva elíptica secp256k1, que es ampliamente utilizada en criptografía.

La curva elíptica secp256k1 se define por la ecuación:
y^2 = x^3 + 7 (módulo p)

donde p es un número primo grande que define el campo finito sobre el cual se realiza la operación. En el caso de secp256k1, p es igual a:
p = 2^256 - 2^32 - 977

A partir de esta curva, se ha definido un punto base llamado G, que tiene coordenadas (x, y) en la curva elíptica.

El punto base G en secp256k1 es:
G = (55066263022277343669578718895168534326250603453777594175500187360389116729240, 32670510020758816978083085130507043184471273380659243275938904335757337482424)

Ahora, podemos proceder con el cifrado utilizando la clave privada 827:

1. Generación de claves: La clave privada (d) es igual a 827. La clave pública (Q) se calcula multiplicando la clave privada por el punto base G:
Q = 827 * G  

2. Cifrado: Para cifrar el mensaje "Hola amigos", convertimos el texto en un punto en la curva elíptica utilizando una función de mapeo adecuada. En este caso, utilizaremos el método de compresión/un-compresión de claves públicas.

El mensaje se representa como un punto (M) en la curva elíptica:
M = "Hola amigos" (punto en la curva elíptica)

A continuación, utilizamos la clave pública del destinatario (Q) para calcular un punto resultante (C) al multiplicar la clave pública por el punto del mensaje:
C = k * Q

Donde k es un número aleatorio generado durante el proceso de cifrado.

1. Descifrado: El destinatario utiliza su clave privada (d) para descifrar el mensaje. Multiplica su clave privada por el punto resultante (C) para obtener el punto original del mensaje:
M = d * C

Luego, convertimos el punto en el mensaje original "Hola amigos".

Es importante destacar que los cálculos anteriores requieren operaciones matemáticas en la curva elíptica y no son realizables de manera manual. También es necesario tener en cuenta que este es solo un ejemplo y que en la práctica se utilizan claves mucho más largas y otros parámetros para garantizar la seguridad adecuada.

Publicado: 07/05/2023


Última actualización: 19/05/2023


Comments:


[x]
[x][x] MuldeR (24 d) : Excelente bro, hacía falta tratar el tema;)


[x]
[x][x] benox (23 d) : Muy bueno, gracias por compartirlo con los demás. Un saludo.