Noticias

%^ef$g73$5r(@&#!! – Unas cuantas palabras sobre codificación y algoritmos

¿Qué es la encriptación? Este término tiene muchas definiciones. Unas son más detalladas y complejas, otras son más sencillas. Sin embargo, podemos decir que la encriptación es un método para modificar un texto legible de tal manera que terceras personas no puedan leerlo, pero se puede volver legible de nuevo tras haber realizado una verificación apropiada. La criptografía no comenzó en la era informática. Aunque la cada vez mayor potencia de los ordenadores hace posible que se creen códigos mejores y más efectivos, y aunque la criptografía sin duda se ha vuelto una parte importante de la tecnología informática, existe desde hace miles de años. Antes de hablar sobre la criptografía moderna, me gustaría explicar algunos métodos más antiguos de codificación.

Los códigos más antiguos

El cifrado César

Este es uno de los códigos más antiguos que se conocen y, como sugiere el nombre, lo usaba el líder romano Julio Cesar como forma de salvaguardar los mensajes importantes que transportaban los mensajeros. El código se utilizó para evitar que el enemigo localizara a su ejército si interceptaba la información. El cifrado consistía en reemplazar cada letra del mensaje por la que se encontrara tres lugares después en el alfabeto. Las claves de este tipo, en las que una letra se reemplaza por otra, se llaman códigos de sustitución. Los cifrados monoalfabéticos (como el de César) son un tipo de código de sustitución en los que cada letra del texto decodificado tiene un equivalente determinado entre las letras del texto decodificado.

 новое окно


ROT13

Este código consiste en intercambiar las letras que se encuentran a 13 lugares de distancia, comenzando con la letra que se va a codificar. Este es un tipo de codificación muy simple que en realidad no ofrece ninguna protección. Hoy en día este tipo de codificación se utiliza más como una curiosidad, o para codificar información que en realidad no es muy importante. El código no distingue entre las letras mayúsculas y minúsculas. El siguiente ejemplo muestra que el mecanismo usado en este tipo de codificación es muy similar al del cifrado César, la única diferencia es la distancia entre las letras intercambiadas.

 новое окно


ADFGVX

Los alemanes utilizaban este código para esconder las órdenes e instrucciones durante la Primera Guerra Mundial. Es una versión mejorada del anterior código ADVGX y consiste en asignar un par de letras (sólo utilizando A, D, F, G, V y X) a cada letra del texto codificado. Después se crea una palabra clave para que descifrarlo sea más difícil. También hay una tabla llena de letras y números. El receptor del mensaje debía saber tanto la palabra clave como el orden de las letras de la tabla. La tabla a continuación ilustra este punto:

 новое окно

Imaginen que queremos codificar la palabra “Kaspersky”. Para ello, primero debemos combinar las letras en pares:

K – FV
A – GX
S – AG
P – AV
E – VA
R – VD
S – AG
K – FV
Y – XF

El próximo paso es escoger la contraseña: escogimos la palabra SZYFR (CODIGO). Después escribimos las letras en pares desde la tabla ADFGVX en una nueva tabla de forma lineal. Cada columna debe tener la misma cantidad de letras, así que si no hay suficientes caracteres, se deben agregar más. En este caso, las dos últimas letras de la tabla representan el número 0.

 новое окно

El paso final consiste en colocar las columnas que contienen las letras de la contraseña en orden alfabético.

 новое окно

Ahora podemos volver a escribir la palabra codificada de la última tabla. Para ello, reescribimos las letras de izquierda a derecha. Para dificultar la interpretación, se agrega un espacio después de cada sexto carácter en esta secuencia (ADFGVX).


Libreta de un solo uso

Esta es una forma muy segura de cifrado, y no existe ningún método de romper el código (ni siquiera si se hace a “lo bruto”, sustituyendo todos los caracteres posibles para establecer el orden correcto). Gilbert Vernam creó este método en 1917. Existen dos versiones de esta clave: una binaria y otra ordinaria, basada en caracteres. La diferencia es el método que utilizan para codificar el texto: uno utiliza el algoritmo XOR, el otro el algoritmo Vigenere. La contraseña es especialmente efectiva debido a su extensión (es igual de larga que el mensaje), su mecanismo aleatorio y el hecho de que sólo se la puede utilizar una vez. La respuesta al emisor del mensaje se realiza utilizando una nueva clave. Aunque tanto los algoritmos XOR y Vigenere son códigos de substitución, al contar con las tres condiciones antes mencionadas este método de codificación es totalmente seguro. En el siguiente ejemplo utilizaré el método binario, por ejemplo, utilizando el operador lógico XOR.

XOR también se llama “disyunción exclusiva” o “o exclusivo”. Si p o q es verdadero (tiene valor uno), entonces toda la expresión también es verdadera.


Entonces, para codificar el mensaje “Kaspersky”, primero debemos escribirlo en el sistema binario. En la práctica, por supuesto, el mensaje (que puede ser el contenido de una carta, por ejemplo) sería más largo, por lo tanto, más seguro, teniendo en mente que la clave sería tan larga como el mensaje.

 новое окно

Cuando tenemos el mensaje escrito en binario, debemos generar la contraseña. Pero debe crearse de forma aleatoria, sin seguir ningún patrón establecido, lo que no es una tarea fácil. Aunque existen generadores de números pseudo-aleatorios, utilizarlos no garantiza que sean aleatorios por completo (como indica el nombre), y se pueden detectar algunas regularidades (patrones). La mejor solución para este problema es utilizar un generador que esté basado, por ejemplo, en los cambios aleatorios de la temperatura de los componentes del ordenador (como el procesador). Para ilustrar este proceso, se generaron los siguientes números:

 новое окно

El próximo paso es realizar la operación XOR:

 новое окно

Después del cifrado, nuestro mensaje tendrá la siguiente apariencia:

 новое окно

Como la contraseña generada se utilizará sólo una vez, los números son aleatorios y la longitud de la contraseña es la misma que la del mensaje codificado. Este tipo de codificación se conoce como OTP (“contraseña de un solo uso” por sus siglas en inglés, porque es inútil después de haberlo usado una vez). Los intentos de adivinar la contraseña no pueden tener éxito, porque es imposible reconstruir el mensaje original sin tener la clave. Esto se debe a que el criptograma es tan aleatorio como la clave. Conociendo el resultado de la operación XOR, sólo se deben sustituir los caracteres uno por uno y calcular la contraseña basándose en ellos. Pero si no se sabe con certeza si el carácter substituido es correcto, no podremos descubrir la contraseña, porque además sólo se la puede utilizar una vez. Por lo tanto, no se podrá realizar un análisis del código basándose en la frecuencia de aparición de algunos signos o sistemas de signos (como en las cifras de sustitución). Estos cambiarán en cada mensaje.

Algoritmos modernos

Ahora puedo comenzar a discutir los algoritmos que se usan hoy en día. Primero, voy a mostrar la diferencia entre la codificación simétrica y asimétrica. Después, describiré en pocas palabras los algoritmos AES y RSA. Explicaré el segundo con mayor detalle y utilizando un ejemplo.

Criptografía simétrica

Debe su nombre al hecho de que la mayoría de los códigos basados en criptografía simétrica tienen la misma clave para codificar y decodificar el mensaje. En este grupo, podemos diferenciar entre las claves de bloque y de flujo. En las claves de bloque, los mensajes se dividen en bloques de información antes de codificarse, mientras que las de flujo convierten cada bit de información según el algoritmo. Lo que puede ser un problema es la distribución de la contraseña, ya que el receptor podrá descifrar el código sólo si la tiene. Por lo tanto, gran parte del poder de la criptografía simétrica está en la contraseña.

Criptografía asimétrica

Este tipo de criptografía está muy extendido hoy en día, las firmas digitales son un ejemplo del uso cotidiano que se les da. Se crean un par de claves en el proceso de codificar un texto: una pública y otra privada. La clave privada está diseñada sólo para su creador. Éste puede usarla para firmar el mensaje, validándolo. La clave pública casi siempre está disponible y cada receptor puede revisar, entre otras cosas, si el mensaje ha sido alterado en el camino. La clave pública también puede utilizarse para codificar mensajes, pero se decodificarán valiéndose de la clave privada.

AES es uno de los códigos simétricos. Ganó el concurso para reemplazar el estándar obsoleto DES, que ofrecía muy poca protección. AES utiliza claves de 128, 196 y 256 bits. Es un algoritmo que opera en bloques de diferentes extensiones y, como la longitud de las claves varía, garantiza un alto nivel de protección.

Presentaré la operación del algoritmo de codificación moderno utilizando el ejemplo de RSA. No lo discutí antes porque quiero explicarlo con mayor profundidad y mostrar un ejemplo de texto codificado utilizando este algoritmo.

Algunos se refieren a RSA como el “algoritmo Rivest, Shamir y Adleman”, porque RSA es el resultado de la unión de las primeras letras de los apellidos de sus tres creadores. Este es el primer algoritmo basado en el método de criptografía asimétrica antes discutido, y es muy utilizado para las firmas digitales. Los tres creadores del algoritmo querían encontrar una solución práctica para el concepto de utilizar claves públicas y privadas para la codificación propuesta por Diffie y Hellman. Después de hacer algunas modificaciones, al final se puso en práctica la idea de que todos los usuarios tengan acceso a una clave y que se realice la codificación con otra clave que sea individual.

Antes voy a presentar un ejemplo que ilustra la codificación práctica de un texto utilizando el algoritmo RSA, y explicaré los símbolos utilizados en las fórmulas y los métodos para calcularlos.

p – 1. número primo alto
q – 2. número primo alto
(los números primos sólo pueden dividirse entre 1 y sí mismos)

n – producto de números primos altos
(en la codificación de 256 bits recibimos el número de dígitos de n >300)
m – mensaje escrito en forma numérica

e – clave de codificación, que es el número primo relativo al producto (p-1)(q-1), y eClave privada (para la decodificación) – compuesta por los números d y n, donde d se calcula según la siguiente fórmula:

ed = 1 (mod (p-1)(q-1))

Clave pública – números n y e

Codificación:

c = me (mod n)

Decodificación:

m = cd (mod n)

Así es como el proceso de codificación se lleva a cabo. Ya sabemos que se necesitan números primos altos. Pero para ilustrar este proceso, utilizaré números primos más bajos. Estos números son demasiado pequeños como para hacer que un algoritmo sea seguro, pero simplificarán el proceso de realizar los cálculos del ejemplo.

Imaginemos que queremos codificar la letra Y (realizar cálculos de palabras y frases completas ocuparía demasiado espacio, así que usaré sólo una letra). En el sistema decimal, la letra Y es el número 89. Ya tenemos el mensaje escrito en forma numérica. Es nuestra m. Ahora debemos encontrar p y q, que son números primos. 19 y 29 pueden dividirse sólo por sí mismos y por 1, así que son números primos (aunque debemos recordar que en una codificación “real” estos números deberían ser mucho más altos). Ahora comencemos a hacer los cálculos:

n = p * q

n = 551

(p-1)*(q-1) = 504

e = 5

Este es un número primo relativo, porque 5 y 504 tienen un común divisor: 1 (se cumple el requisito e

Tenemos todos los datos necesarios para comenzar la codificación. Durante el proceso de decodificación, también tendremos que calcular d.

m = 89

c = me (mod n)

c=895 (mod 551)

c = 5584059449 (mod 551)

c = 90

Después de codificarlo, nuestro mensaje “Y” tiene valor 90. Para decodificar el valor, se necesita usar la clave privada. Pero primero debemos calcular d, como habíamos mencionado antes.

ed = 1 (mod (p-1)*(q-1))
5d = 1 (mod 504)
5d = 505
d = 505/5

d = 101

La decodificación del mensaje se realiza con los siguientes cálculos:

c = 90

m = cd (mod n)

m = 90101 (mod 551)

m = 89

89 es el número que representa el símbolo Y, así que nuestro mensaje se codificó y decodificó de forma correcta. Como las operaciones de este tipo se realizan con valores mucho más altos, el usar este algoritmo garantiza una mayor noción de seguridad. Y digo “noción de seguridad” porque uno nunca puede estar al 100% seguro. Cada algoritmo tiene sus debilidades y tarde o temprano alguien las podrá explotar. Es sólo cuestión de tiempo, porque la potencia de los ordenadores aumenta de forma constante. La debilidad de RSA es la factorización (por suerte, debido a su complejidad, la factorización tardaría demasiado en dar un resultado correcto).

La factorización es la descomposición de un número entero grande en factores que, al multiplicarse, dan como resultado el número entero original. Utilizaré un ejemplo para clarificar el proceso. X es nuestro número entero grande; tras descomponerlo obtenemos los factores y1, y2, y3, yn. So, x=y1 y2 y3 yn.

Para obtener una clave privada, debemos factorizar el número utilizado para crear la clave pública, así obtenemos los números primos p y q. Esto haría que sea muy fácil decodificar o comprometer el mensaje. Pero, por suerte para la seguridad de RSA, la factorización de números muy grandes, como los que se usan hoy en día, es muy difícil y requiere mucho tiempo. Aunque algunos algoritmos están diseñados para acelerar la factorización, el tiempo que se necesitaría para lograrlo todavía es muy largo. Hoy en día se utilizan claves mayores de 1024 bits. La clave RSA más grande que se ha descifrado a la fuerza es de 663 bits. La amenaza real a RSA, e incluso su fin, puede llegar con los ordenadores cuánticos. Como su nombre indica, sus operaciones están basadas en mecanismos cuánticos, y su poder informático superará de forma significativa el de los ordenadores tradicionales, haciendo que el tiempo requerido para completar la factorización de números primos muy altos sea mucho más corto que el de ahora. Entonces, la solución en ese caso será la criptografía cuántica… Sin embargo, debemos recordar que los algoritmos de codificación sirven como escudo y espada. Aunque cada algoritmo asegura la protección, nadie sabe cuánto durará. Tarde o temprano, alguien descubrirá una forma de comprometerla…

Codificar o no codificar…

Mucha gente no se da cuenta de lo valiosa que es la información que guarda en sus ordenadores o discos extraíbles. No me refiero a la música o fotografías (aunque los cibercriminales pueden usar estos datos en chantajes, por ejemplo). Me refiero a la información guardada en los buscadores de Internet, los correos electrónicos guardados en el disco, las aplicaciones como servicios de mensajería que guardan las contraseñas, y los artículos y otro tipo de información que no se debe revelar a nadie. Cuando vendes tu ordenador o disco duro, formatearlo no es suficiente. Aún así se puede recuperar toda la información del equipo, incluso usando programas gratuitos. No tenemos que dar ejemplos de situaciones en las que se puede utilizar los datos recolectados: es suficiente imaginar a una tercera persona teniendo en su poder una carta con información confidencial de una empresa o consiguiendo un número de tarjeta de crédito ajeno. Si se recolectan suficientes datos personales, también es posible recrear una identidad falsa.

Conocemos casos de chantajistas que compran discos duros usados en subastas de Internet sólo para recuperar los datos eliminados y utilizarlos para extorsionar a sus anteriores dueños. Por desgracia, algunas víctimas se dejan llevar por las demandas del chantajista y prefieren darles lo que piden para evitar que revelen sus datos personales o de su empresa.

Una forma de evitar ser víctima de estas amenazas es la codificación de discos. Podemos codificar archivos individuales, particiones y discos duros enteros. Algunos programas permiten la creación de particiones codificadas, a las que se puede acceder sólo al conectarlos. Estas soluciones hacen que transferir documentos importantes entre ordenadores sea más seguro. Todo lo que debemos hacer es transferir los archivos a la partición en el ordenador A, y después poner la partición completa en el disco extraíble y conectarlo al ordenador B. Aunque el disco extraíble se pierda o caiga en manos de delincuentes, la pérdida no será significativa (dependiendo del algoritmo de codificación que se utilice), y habrá más tiempo para reaccionar y asegurar las posibles pérdidas.

Para probar que codificar tus datos no es difícil y que cualquiera hacerlo, hemos preparado tres ejemplos. En ellos muestro el proceso de codificación de datos utilizando el programa gratuito TrueCrypt:

Estas soluciones serían particularmente útiles para instituciones que guardan datos personales. Por desgracia, cada vez escuchamos con más frecuencia casos de robo y pérdida de CDs y discos que contienen datos personales. Estos casos no serían tan alarmantes si los dispositivos hubieran estado protegidos con algoritmos fuertes.

  • En 2007, en Gran Bretaña se perdieron los datos de 25 millones de ciudadanos británicos. Estaban guardados en CDs desprotegidos, que contenían información como números de cuentas bancarias, fechas de nacimiento, direcciones y nombres, así como números de la seguridad social.
  • Sólo un mes después ocurrió otro incidente, en el que Gran Bretaña también estuvo involucrada. En Iowa, EEUU, se perdió un disco duro que contenía los datos de 3 millones de personas que querían sacarse el carné de conducir. La agencia británica que organizaba los exámenes de conducir había mandado los datos personales de estas personas a una empresa estadounidense. Pero el dispositivo que contenía los datos nunca llegó a la empresa norteamericana, y la información todavía no se ha recuperado.

Por desgracia, se siguen viendo situaciones similares, y ocurren cada vez con más frecuencia. Codificar esta información tan importante sin duda habría ayudado a protegerla. Jeremy Clarkson también vio por si mismo que no vale la pena confiarse y pensar “¿Pero qué se podría hacer con mis datos?” El presentador británico del programa de automóviles “Top Gear” dijo en uno de los capítulos que estos datos no le servirían a nadie, y decidió poner a disposición del público sus números de cuenta bancaria y la información requerida para realizar transferencias de dinero. Poco tiempo después, desaparecieron 500 libras de su cuenta bancaria. Después del incidente, dijo:

“El banco no encuentra al que hizo esto… y no pueden evitar que vuelva a suceder. Estaba equivocado y he sido castigado por mi error“

(http://news.bbc.co.uk/2/hi/entertainment/7174760.stm)

Esto prueba lo importante que es codificar los datos personales para protegerse. Aunque no podemos influir en los datos que guardan las instituciones o el gobierno, la seguridad de nuestros propios ordenadores está en nuestras manos.

A veces, los datos codificados también se pueden utilizar con otros propósitos, además de los que ya he mencionado. Los métodos diseñados para proteger nuestros datos contra accesos desautorizados pueden impedir que nosotros mismos accedamos a nuestros propios archivos. En 2006, un virus llamado Gpcode apareció en la red. Este virus codificó más de 80 tipos de archivos en los ordenadores de las víctimas y exigía dinero para decodificarlos.

El virus se propagaba por correo electrónico. Las víctimas recibían correos electrónicos en inglés con el siguiente mensaje:

¡Hola!

Te escribimos por el Currículum Vitae que publicaste en el sitio web job.ru. Tenemos una vacante que es apropiada para ti. ADC Marketing LTD (Reino Unido) está abriendo una oficina en Moscú y estoy buscando a los candidatos indicados. Pronto te pediré que nos visites para tu entrevista en un horario que nos convenga a ambos. Si te interesa mi oferta, por favor rellena el formulario adjunto que trata los asuntos de compensación y envíame los resultados por correo electrónico.

Atentamente,

Viktor Pavlov
Gerente de HR

No es difícil adivinar que el archivo adjunto era un troyano que descargaba el virus por sí mismo. Gpcode codificaba los siguientes tipos de archivos, entre otros: PDF, DOC, HTML, y RAR. Tan pronto como se abría el mensaje, se destruían todos los programas maliciosos que se habían descargado e instalado, dejando sólo el siguiente mensaje:

Algunos archivos están codificados utilizando el método RSA.
Para comprar un decodificador escribe a: k47674@mail.ru con asunto: REPLY

Al principio, los algoritmos de codificación eran muy débiles (de 56 bits de longitud), y les faltaba mucho para ser perfectos. Pero el autor del virus mejoró su “creación” con el tiempo, logrando crear una llave RSA de 660 bits de largo. Aunque esto proporciona una protección extremadamente fuerte y la mayor clave RSA que se haya descifrado a la fuerza es de 663 bits de longitud, los especialistas de Kaspersky Lab lograron desarrollar un método de decodificación (basado en errores del autor de Gpcode) el mismo día en que se descubrió el virus.

Debemos recordar que la codificación es un arma de doble filo. Dependiendo de cómo y quién la use, puede causar un gran daño o asegurar la protección. Aunque la codificación asegura la libertad de expresión al evitar que los mensajes codificados se lean sin tener la contraseña correcta, también puede reducir la seguridad de un país. Después de todo, cualquiera puede codificar sus mensajes y datos, incluyendo las organizaciones criminales, que pueden utilizar la criptografía para esconder su información. Pero no debemos entrar en un estado de paranoia. Como dijo Chekhov, “El conocimiento no tiene valor mientras no lo pongas en práctica”. Es importante que usemos nuestro conocimiento de forma sabia para proteger nuestros propios datos: nadie más lo hará por nosotros.

%^ef$g73$5r(@&#!! – Unas cuantas palabras sobre codificación y algoritmos

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Informes

BlindEagle vuela alto en LATAM

Kaspersky proporciona información sobre la actividad y los TTPs del APT BlindEagle. Grupo que apunta a organizaciones e individuos en Colombia, Ecuador, Chile, Panamá y otros países de América Latina.

MosaicRegressor: acechando en las sombras de UEFI

Encontramos una imagen de firmware de la UEFI infectada con un implante malicioso, es el objeto de esta investigación. Hasta donde sabemos, este es el segundo caso conocido en que se ha detectado un firmware malicioso de la UEFI usado por un actor de amenazas.

Suscríbete a nuestros correos electrónicos semanales

Las investigaciones más recientes en tu bandeja de entrada