¿Cuál es la diferencia entre codificación, cifrado y hashing?

Hay mucho ruido en torno a la protección y la seguridad de datos en nuestra vida diaria. Vivimos en una época en la que no está mal decir que los datos son la nueva “Moneda”. Y al igual que cualquier otra moneda que poseemos, nunca quisiéramos que nuestros datos estuvieran en posesión de otra persona, especialmente de alguien malintencionado. 

Si crees que tus datos personales están seguros en línea, entonces créeme amigo mío, no puedes estar más equivocado.

Bueno, para ser honesto, la mayoría de los que están leyendo esta probabilidad ya son conscientes de este hecho (si no es así, ¡hola! ¡Despierta!). 

Es posible que también hayas oído hablar de las palabras escritas en el título de este artículo, es decir, codificación, cifrado y hash. Es un error común pensar que estas palabras se refieren a lo mismo. Empero, en realidad se refieren a sus propias técnicas, que son muy diferentes entre sí. 

Así que usemos nuestra curiosidad y tratemos de entender qué son en realidad.

Codificación

Entonces, primero, aclaremos las cosas, a diferencia del cifrado y el hash, la codificación no se usa con fines de seguridad

Es una técnica en la que los datos se transforman de un formato a otro, para que puedan ser entendidos y utilizados por diferentes sistemas. No se utiliza ninguna “clave” en la codificación. 

El mismo algoritmo se utiliza para decodificar los datos que se utilizaron para codificarlos en primer lugar. Por esta razón, es muy fácil para un atacante decodificar los datos si tiene la información codificada. El ejemplo de tales algoritmos son ASCII, Unicode, Base64, etc.

¿Por qué entonces necesitamos codificación?

Para entender esto, tomemos un ejemplo de la técnica de codificación BASE64. Durante los primeros años de los correos electrónicos, los datos se basaban principalmente en texto. Entonces, para transmitirlos a través de Internet, los datos de texto se convirtieron a formato binario. Y, al final del receptor, estos datos binarios se volvieron a convertir nuevamente a formato de texto. 

Pero a medida que pasaba el tiempo, surgió la necesidad de enviar archivos adjuntos y multimedia junto con el correo electrónico basado en texto. La probabilidad de que los datos binarios de estos archivos adjuntos se dañaran era alta en su forma original. Esto se debió principalmente a que un binario sin formato contiene algunos caracteres que en algunos lenguajes se tratan de manera diferente. 

Por ejemplo, en C/C++ el caracter “Nulo” se trata como el final del archivo. Por lo tanto, el envío de binarios que contengan bytes “nulos” eventualmente evitará que el archivo se lea completo y provocará daños en los datos.

¿Cómo funciona la codificación Base64?

Tomemos un ejemplo de conversión de “abc” en Base64.

1. Convierte los caracteres de la cadena en decimal.

a = 97, b = 98 y c = 99.

2. Convierte cada uno de estos números decimales en su forma binaria equivalente de 8 bits:

a = 0110 0001, b = 0110 0010 y c = 0110 0011

es decir, abc = 0110 0001 0110 0010 0110 0011

3. Los separa en grupos de 6 bits cada uno:

011000 – 010110 – 001001 – 100011

4. Convierte cada binario en su forma decimal equivalente:

011000 = 24, 010110 = 22, 001001 = 9 y 100011 = 35

5. Con la tabla Base64, convierte cada uno de estos números decimales en sus correspondientes caracteres Base64:

Entonces, 24 = ‘Y’, 23 = ‘X’, 9 = ‘J’ y 35 = ‘j’.
Por lo tanto, “abc” => “YXJj” en Base64.

Nota: A veces es imposible dividir el binario combinado en grupos exactos de 6 bits cada uno. En ese caso, se agrega 0 al final para convertirlo en un número exacto de grupos de 64 bits. Este proceso se denomina “relleno (Padding)”. Para codificar los datos rellenados, si hay 6 bits totalmente rellenados, se mapea a “=”.
Por ejemplo: “a:aa” => 011000 010011 101001 100001 011000 01xxxx xxxxxx xxxxxx => “YTphYQ ==”

Cifrado o criptografía

No se puede imaginar Internet sin cifrado. Internet habría sido un lugar mucho menos seguro sin él. Los datos en Internet se mantienen confidenciales y seguros mediante cifrado. El cifrado hace que los datos sean ilegibles y difíciles de decodificar para un atacante y evita que sean robados.

El cifrado utiliza “claves criptográficas”. Con la clave, los datos se cifran en el extremo del remitente. Y, con la misma clave o una clave diferente, los datos se descifran en el extremo del receptor. Según el tipo de clave que se utiliza para cifrar/descifrar la información, el cifrado se clasifica en dos categorías:
– cifrado de clave simétrica
– cifrado de clave asimétrica

Analicemos estos dos tipos de técnicas de cifrado:

1. Clave simétrica

El enfoque de la criptografía de clave simétrica es sencillo. Antes de enviar los datos al receptor, el remitente utiliza una clave privada para cifrar los datos. Esta clave privada es conocida solo por el remitente y el receptor. 

Entonces, una vez que el receptor obtiene los datos cifrados, él o ella usa la misma clave privada del remitente para descifrarlos. Dado que el remitente y el receptor utilizan la misma clave, esto se conoce como criptografía de “clave simétrica”.

Sí, hay muchos beneficios de usar esta técnica para el cifrado. Por ejemplo, la simplicidad de este sistema proporciona una ventaja logística ya que requiere menos potencia de cálculo. 

Además, el simple hecho de aumentar la longitud de la clave puede ayudar fácilmente a escalar el nivel de seguridad del sistema. Pero el problema de utilizar esta técnica ya es visible para nosotros. ¿Cómo va a saber el receptor cuál es la clave secreta con la que se cifraron los datos en primer lugar? Para que él conozca la clave, el remitente también debe enviar la clave. ¿Captaste el problema? ¡¡Si!! 

El remitente también tiene que transmitir la clave al receptor, y si se hace a través de una conexión no segura. Es decir, existe una alta probabilidad de que la clave pueda ser interceptada por cualquier atacante.

2. Clave asimétrica

Para contrarrestar los problemas de utilizar la técnica de criptografía de clave simétrica, se utiliza la técnica de criptografía de clave asimétrica. Es una técnica relativamente nueva en comparación con la anterior. 

Como puedes adivinar por el propio nombre, esta técnica implica dos claves diferentes. Se utiliza una clave para cifrar los datos, que se conoce como clave pública, y es conocida prácticamente por todos en Internet. La otra clave se utiliza para descifrar los datos, que se conoce como clave privada, y solo la conoce el receptor y debe mantenerse discreta. Por lo tanto, el uso de dos claves distintas hace que el sistema sea más seguro y se vuelve demasiado difícil para un atacante descifrarlo.

Las claves públicas y privadas son “llaves” reales para una cerradura. Estos son básicamente dos números primos muy grandes que están relacionados matemáticamente entre sí. Es decir, todo lo que esté cifrado por la clave pública, solo puede ser descifrado por la clave privada relacionada.
No se puede simplemente adivinar la clave privada basándose en conocer la clave pública.

Algunos algoritmos conocidos para la criptografía de clave asimétrica son:
RSA, DSS (estándar de firma digital), criptografía de curva elíptica, etc.

Hashing

¿Sabes cuál es el elemento de desayuno favorito de un desarrollador de blockchain? – Son Hash Browns (croquetas de papa). (Ba Dun Tss)!
De acuerdo, dejemos las bromas, el hash es el proceso de garantizar la integridad de la información que se envía a través de la red. 

Con eso, significa que se asegura de que incluso si se cambia una sola cosa, tu puedes saber que se ha cambiado. El hash protege tus datos contra posibles alteraciones para que tus datos no se modifiquen ni un poco.

Un Hash es básicamente una cadena que se genera a partir de la cadena de entrada pasándola a través de un algoritmo Hash. Esta cadena hash es siempre de una longitud fija sin importar el tamaño de la cadena de entrada. El hash también se puede considerar como “cifrado unidireccional”, es decir, los datos una vez procesados ​​no se pueden revertir a su forma original.

¿Cómo funciona el algoritmo hash?

“Detrás de cada algoritmo hash exitoso, hay una gran función hash”

Algún nerd en Internet.

La función hash se encuentra en el corazón del algoritmo de Hashing. Esta función hash toma datos en una longitud fija, por lo que la entrada se proporciona a la función dividiendo la entrada en bloques de tamaño fijo. Estos bloques se denominan “bloques de datos”. Si el tamaño de los datos de entrada es menor que el tamaño del bloque, entonces se usa “Padding”.

Efecto avalancha

El proceso de hash también se conoce como “efecto de avalancha”. Es como lo siguiente:
El mensaje se procesa un bloque a la vez. La entrada se proporciona al primer bloque, la salida del primer bloque se proporciona a la función junto con la entrada del segundo bloque. Siguiendo el mismo proceso para el tercer bloque. Ahí es donde la salida del segundo bloque se le da a la función junto con la entrada del tercer bloque. La salida final es el valor combinado de todos los bloques.
De esta manera, si un solo bit se cambia o manipula en cualquier lugar entre el mensaje, el valor hash completo cambiará.

Algunos algoritmos de hash populares son:

  • Algoritmo Message Digest (MD)
  • Algoritmo Secure Hash (SHA)
  • RACE Integrity Primitives Evaluation Message Digest (RIPEMD)
  • Whirlpool
  • Verificación de redundancia cíclica (CRC)

En resumen…

  • La codificación es un proceso de conversión de datos de un formato a otro.
  • El cifrado es un proceso para convertir la información en un cifrado mediante claves, para mantener la confidencialidad.
  • Hashing es una técnica para garantizar la integridad de los datos convirtiéndolos en una cadena de longitud fija.
Deja un comentario