Tutoriales

Cómo funciona el cifrado: todos los secretos detrás de este sistema de seguridad

El cifrado es una técnica muy importante a la hora de proteger datos y comunicaciones mediante túneles. Sin embargo, pese a que la ciberseguridad es un tema de actualidad y cada vez más importante, pocos conocen qué es realmente el cifrado y cómo funciona. Por eso vamos a volver a los orígenes de esta técnica para que puedas comprenderla de forma sencilla.

¿Qué es el cifrado?

El cifrado de datos es un proceso mediante el cual se convierte información legible (texto, archivos, mensajes, etc.) en un formato codificado o cifrado, con el objetivo de proteger su confidencialidad e integridad. Para ello, se utilizan algoritmos matemáticos y claves para convertir los datos originales en una forma ilegible, conocida como texto cifrado, que solo puede ser descifrado y comprenderse nuevamente por aquellos que posean la clave adecuada.

El objetivo principal del cifrado es garantizar la seguridad de la información mientras se transmite o se almacena, especialmente cuando los datos se encuentran expuestos a posibles amenazas, como el acceso no autorizado o el robo. Al utilizar técnicas de cifrado adecuadas, incluso si los datos son interceptados, el cifrado dificulta o hace virtualmente imposible que los atacantes comprendan el contenido original sin la clave de descifrado adecuada.

Tipos de cifrado

Existen varios tipos de cifrado utilizados en diferentes contextos y para diversos propósitos. A continuación, se presentan algunos de los tipos de cifrado más comunes:

  • Cifrado simétrico: también conocido como cifrado de clave secreta, utiliza la misma clave para cifrar y descifrar los datos. El algoritmo de cifrado aplica transformaciones matemáticas a los datos utilizando la clave compartida. Ejemplos de algoritmos de cifrado simétrico incluyen AES (Estándar de Cifrado Avanzado), DES (Estándar de Cifrado de Datos) y 3DES (Triple DES).
  • Cifrado asimétrico: también conocido como cifrado de clave pública, utiliza un par de claves relacionadas pero distintas: una clave pública y una clave privada. La clave pública se utiliza para cifrar los datos, mientras que la clave privada correspondiente se utiliza para descifrarlos. Este tipo de cifrado permite la comunicación segura entre dos partes sin necesidad de compartir una clave secreta. Ejemplos de algoritmos de cifrado asimétrico incluyen RSA (Rivest-Shamir-Adleman) y ECC (Criptografía de Curva Elíptica).

Estos son solo algunos ejemplos de los tipos de cifrado más comunes. Cada uno de ellos tiene sus características y aplicaciones específicas, y la elección del tipo de cifrado depende de los requisitos de seguridad y del contexto de uso.

Por otro lado, también podríamos destacar otros tipos como los siguientes:

  • Cifrado de flujo: en este tipo de cifrado, los datos se cifran y descifran en tiempo real, a medida que se transmiten o procesan. Se utiliza una corriente de bits generada por una secuencia de clave y se combina con los datos utilizando una operación de bits, como XOR. Los algoritmos de cifrado de flujo populares incluyen RC4 (Rivest Cipher 4) y Salsa20.
  • Cifrado de bloque: en contraste con el cifrado de flujo, el cifrado de bloque divide los datos en bloques de un tamaño fijo y luego aplica operaciones criptográficas a cada bloque individualmente. Los algoritmos de cifrado de bloque populares incluyen AES, DES y Blowfish. Los modos de operación, como ECB (Electronic Codebook), CBC (Cipher Block Chaining) y CTR (Counter), se utilizan para determinar cómo se manejan los bloques y se encadenan entre sí.
  • Cifrado homomórfico: es un tipo especial de cifrado que permite realizar operaciones criptográficas en datos cifrados sin necesidad de descifrarlos. Esto significa que los datos permanecen encriptados durante el procesamiento, lo que puede ser útil en escenarios de computación en la nube o análisis de datos confidenciales.

¿Qué es un algoritmo de cifrado?

Un algoritmo de cifrado es un conjunto de instrucciones matemáticas y lógicas que se utilizan para transformar los datos originales en una forma cifrada o encriptada, y viceversa para descifrarlos. Los algoritmos de cifrado son el núcleo de los sistemas de cifrado y determinan cómo se realiza la transformación de los datos.

Existen numerosos algoritmos de cifrado utilizados en diferentes aplicaciones y contextos. A continuación, tienes unos ejemplos de algoritmos de los más conocidos:

  • AES (Estándar de Cifrado Avanzado): es un algoritmo de cifrado simétrico ampliamente utilizado y considerado seguro. Utiliza claves de 128, 192 o 256 bits y funciona mediante la sustitución y permutación de los datos en bloques de 128 bits.
  • RSA (Rivest-Shamir-Adleman): es un algoritmo de cifrado asimétrico que utiliza un par de claves: una clave pública para cifrar y una clave privada para descifrar. Se basa en la dificultad de factorizar números grandes en sus factores primos.
  • DES (Estándar de Cifrado de Datos): es un algoritmo de cifrado simétrico más antiguo que utiliza una clave de 56 bits. Aunque DES ha sido reemplazado en gran medida por AES debido a su longitud de clave más corta, aún se encuentra en uso en algunas aplicaciones.
  • 3DES (Triple DES): es una versión mejorada de DES que aplica el algoritmo DES tres veces en secuencia utilizando dos o tres claves diferentes. Esto proporciona una mayor seguridad y una longitud de clave de 112 o 168 bits.
  • Blowfish: es un algoritmo de cifrado de bloque simétrico diseñado para ser rápido y seguro. Puede utilizar claves de hasta 448 bits y es ampliamente utilizado en aplicaciones que requieren alta velocidad de cifrado.
  • RC4 (Rivest Cipher 4): es un algoritmo de cifrado de flujo ampliamente utilizado. Se utiliza en aplicaciones como el cifrado de comunicaciones inalámbricas (WEP y WPA) y en protocolos de seguridad como SSL y TLS.

¿Qué es un hash?

Un hash es una función matemática que toma una cantidad variable de datos y genera una cadena de caracteres de longitud fija. El objetivo principal de un hash es resumir o condensar la información de entrada en una representación compacta y única, conocida como el valor hash. Un hash es unidireccional, lo que significa que no se puede obtener la información original a partir del valor hash.

La principal diferencia entre un hash y un cifrado radica en su propósito y forma de operar:

  • Propósito:
    • Cifrado: se utiliza para proteger la confidencialidad de los datos mediante su transformación en una forma ilegible, que solo puede ser revertida con una clave de descifrado.
    • Hash: se utiliza para verificar la integridad de los datos y garantizar que no hayan sido modificados durante el proceso de almacenamiento o transmisión.
  • Reversibilidad: el cifrado es reversible, lo que significa que se puede descifrar la información original utilizando la clave correcta. Por otro lado, el hash es unidireccional y no se puede obtener la información original a partir del valor hash.
  • Tamaño: el cifrado generalmente produce resultados de longitud similar o mayor que los datos originales, ya que debe mantener la información legible después de la operación de descifrado. En cambio, el hash produce un valor de longitud fija, independientemente del tamaño de los datos de entrada.
  • Colisión: en el cifrado, se busca evitar colisiones, es decir, que dos conjuntos de datos diferentes generen el mismo resultado cifrado. En cambio, en el hash, las colisiones son teóricamente posibles debido a la reducción de datos a una longitud fija, pero los algoritmos de hash modernos están diseñados para minimizar significativamente la probabilidad de colisiones.

¿Qué es una clave o key?

contraseña
Free password lock on laptop image, public domain CC0 photo.

En el cifrado, una clave o key es un valor secreto o conocido utilizado para transformar los datos originales en una forma cifrada y viceversa para descifrarlos. La clave actúa como un parámetro esencial en el algoritmo de cifrado, determinando cómo se realiza la transformación y permitiendo que solo aquellos que poseen la clave correcta puedan acceder a los datos originales o descifrar la información cifrada. La seguridad y la confidencialidad de los datos dependen en gran medida de la fortaleza y confidencialidad de la clave utilizada en el proceso de cifrado.

¿Qué es salt?

Un salt (sal en español) es un valor aleatorio y único que se agrega a una contraseña antes de aplicar una función de hash. El objetivo del salt es aumentar la seguridad de las contraseñas almacenadas y dificultar el proceso de descifrado mediante ataques de fuerza bruta o tablas arcoíris.

Cuando un usuario crea una contraseña, se genera un salt aleatorio y único específico para ese usuario. El salt se concatena a la contraseña antes de aplicar una función de hash, como por ejemplo SHA-256 o bcrypt. El resultado final, que incluye tanto el salt como la contraseña, se almacena en la base de datos.

Al agregar el salt a la contraseña antes del hash, se logran dos objetivos importantes en la seguridad de las contraseñas. Por un lado se aporta unicidad, es decir, que la contraseña cifrada sea única para almacenarla y que esté más protegida. Por otro lado se mejora la resistencia a ataques de fuerza bruta y tablas rainbow. Por tanto, a la hora de descifrarla necesitará más tiempo y esfuerzo que si la clave no tiene salt.

Ejemplo práctico de cifrado

Para finalizar, ahora que ya tienes la teoría, vamos a ver algún ejemplo. Y para eso, el «Hola mundo» por el que se empieza siempre es analizando el cifrado mediante el Código César. Es el más simple, y permite aprender cómo funcionan los actuales y complejos algoritmos de cifrado.

El cifrado con el Código César es un tipo de cifrado por sustitución que desplaza cada letra del alfabeto un número fijo de posiciones hacia la derecha o hacia la izquierda. Por ejemplo, si utilizamos un desplazamiento de 3 posiciones hacia la derecha, la letra «A» se sustituiría por la letra «D», la «B» por la «E», y así sucesivamente.

Un ejemplo de código fuente en C para cifrar la palabra «ProfesionalReview» y descifrar en código César sería:

#include <stdio.h>

void cifrarCesar(char mensaje[], int desplazamiento) {
     int i = 0;
     char caracter;

     while (mensaje[i] != '\0') {
         caracter = mensaje[i];

         if (caracter >= 'a' && caracter <= 'z') {
         caracter = (caracter - 'a' + desplazamiento) % 26 + 'a';
         } else if (caracter >= 'A' && caracter <= 'Z') {
         caracter = (caracter - 'A' + desplazamiento) % 26 + 'A';
         }

         mensaje[i] = caracter;
         i++;
     }
}

void descifrarCesar(char mensaje[], int desplazamiento) {
cifrarCesar(mensaje, 26 - desplazamiento); // El descifrado es simplemente el cifrado con el desplazamiento contrario
}

int main() {
     char mensaje[] = "ProfesionalReview";
     int desplazamiento = 3;

     printf("Mensaje original: %s\n", mensaje);

     cifrarCesar(mensaje, desplazamiento);
     printf("Mensaje cifrado: %s\n", mensaje);

     descifrarCesar(mensaje, desplazamiento);
     printf("Mensaje descifrado: %s\n", mensaje);

     return 0;
}

También te puede interesar conocer las partes de un programa y saber cómo se ejecuta

Recuerda que esto es un código muy simple, y los actuales sistemas de cifrado se rigen por algoritmos muy complejos. Pero el funcionamiento es similar…

¡No olvides comentar!

Isaac

Geek de los sistemas electrónicos, especialmente del hardware informático. Con alma de escritor y pasión por compartir todo el conocimiento sobre tecnología.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en [email protected]
Botón volver arriba