1. CRIPTOGRAFÍA
El término Criptografía está derivado de del griego κρύπτω krypto, “oculto”, y
γράφως graphos, “escribir”, literalmente viene a significar “Escritura Oculta”.
Ésta altera las representaciones lingüísticas de mensajes, mediante técnicas
de cifrado o codificado, para hacerlos inentendibles a lectores no autorizados,
que intercepten esos mensajes. Por tanto el único objetivo de la criptografía era
conseguir la confidencialidad de los mensajes, no es ocultar la existencia de
un mensaje, sino más bien ocultar su significado, un proceso que se conoce
como codificación.
Aunque el objetivo original de la criptografía era mantener en secreto un
mensaje, en la actualidad no se persigue únicamente la privacidad o
confidencialidad de los datos, sino que se busca además garantizar la
autenticación de los mismos (el emisor del mensaje es quien dice ser, y no
otro), su integridad (el mensaje que leemos es el mismo que nos enviaron) y su
no repudio (el emisor no puede negar el haber enviado el mensaje).
Historia de la Criptografía y su relación con congruencias:
Existen muchos casos donde se utiliza la criptografía, pero a través de métodos
que no son matemáticos, si bien es cierto son estos muy importantes, no son
nuestro objeto de estudio, por lo cuál solo nos concentraremos en mostrar y
ejemplificar aquellos casos que a través del tiempo han utilizado congruencias
para codificar mensajes.
En la historia aparecería El Cifrario de César, éste método fue empleado en los
tiempos de la Roma Imperial. El algoritmo de César, llamado así porque es el
procedimiento que empleaba el emperador Julio César para enviar mensajes
secretos a sus legiones,es uno de los algoritmos criptográficos más simples.
Es un algoritmo de sustitución, su cifrado consistía simplemente en sustituir
una letra por la situada tres lugares más allá en el alfabeto esto es la A se
transformaba en D, la B en E y así sucesivamente hasta que la Z se convertía
en C.
Alfabeto Original
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Alfabeto cifrado
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
2. Por ejemplo :
El mensaje TEORÍA DE NÚMEROS se convierte en:
WHRULD GH QXPHURV
Tratamiento matemático:
Si asignamos a cada letra un número A =00, B =01, C=02,.......Z=25), y
consideramos un alfabeto de 26 letras como el original, la transformación
criptográfica en términos matemáticos se puede explicar
bajo la siguiente fórmula de congruencias:
𝐶 = (𝑀 + 3) ( 𝑚ó𝑑 26)
M, corresponde a la letra del mensaje original
C, es la letra correspondiente a M pero en el mensaje cifrado.
Obsérvese que este algoritmo ni siquiera posee clave, puesto que la
transformación siempre es la misma. Obviamente, para descifrar basta con
restar 3 al número de orden de las letras del criptograma.
Ejemplo:
Asumiendo un alfabeto de 26 símbolos como el siguiente:
A 00 F 05 K 10 P 15 U 20 Z 25
B 01 G 06 L 11 Q 16 V 21
C 02 H 07 M 12 R 17 W 22
D 03 I 08 N 13 S 18 X 23
E 04 J 09 O 14 T 19 Y 24
Cifrar el siguiente mensaje: PROFESOR
Utilizado la fórmula anteriormente dada:
1. Reemplazar M por el valor de la primera letra, en este caso P equivale a 15.
2. Realizar la operación indicada: C = (15 + 3) (mód 26) = 18.
3. Corresponder el número obtenido con la letra , en nuestro caso la S.
4. Para las letras restantes sería:
Así obtenemos las siguientes correspondencias :
𝑃 (15 + 3) = S
𝑅 (17 + 3) =U
𝑂 (14 + 3) =R
𝐹 (5 + 3) =I
𝐸 (4 + 3) =H
𝑆 (18 + 3) =V
𝑂 (14 + 3) =R
𝑅 (17 + 3) =U
Por tanto el Mensaje Codificado es : SURIHVRU (la palabra PROFESOR)
Como podemos ver este código se basa en congruencias.
3. La aparición de la Informática y el uso masivo de las comunicaciones digitales
han producido un número creciente de problemas de seguridad. Las
transacciones que se realizan a través de la red pueden ser interceptadas. La
seguridad de esta información debe garantizarse. Este desafío ha generalizado
los objetivos de la criptografía.
Para ello los criptógrafos investigan, desarrollan y aprovechan técnicas
matemáticas que les sirven como herramientas para conseguir sus objetivos.
Los grandes avances que se han producido en el mundo de la criptografía
han sido posibles gracias a los grandes avances que se han producido en el
campo de las matemáticas y la informática.
La criptografía actualmente se encarga del estudio de los algoritmos,
protocolos y sistemas que se utilizan para dotar de seguridad a las
comunicaciones, a la información y a las entidades que se comunican.
Por tanto el tipo de propiedades de las que se ocupa actualmente la
criptografía son por ejemplo:
• Confidencialidad. Es decir garantiza que la información esta accesible
únicamente a personal autorizado. Para conseguirlo utiliza códigos y técnicas
de cifrado.
• Integridad. Es decir garantiza la corrección y completitud de la información.
Para conseguirlo puede usar por ejemplo funciones hash criptográficas MDC,
protocolos de compromiso de bit, o protocolos de motorización electrónica.
• Vinculación. Permite vincular un documento o transacción a una persona o un
sistema de gestión criptográfico automatizado. Cuando se trata de una
persona, se trata de asegurar su conformidad respecto a esta vinculación
(content commitment) de forma que pueda entenderse que la vinculación
gestionada incluye el entendimiento de sus implicaciones por la persona.
Antiguamente se utilizaba el término "No repudio" que esta abandonándose, ya
que implica conceptos jurídicos que la tecnología por si sola no puede resolver.
En relación con dicho termino se entendía que se proporcionaba protección
frente a que alguna de las entidades implicadas en la comunicación, para que
no pudiera negar haber participado en toda o parte de la comunicación. Para
conseguirlo se puede usar por ejemplo firma digital. En algunos contextos lo
que se intenta es justo lo contrario: Poder negar que se ha intervenido en la
comunicación. Por ejemplo cuando se usa un servicio de mensajería
instantánea y no queremos que se pueda demostrar esa comunicación. Para
ello se usan técnicas como el cifrado negable.
• Autenticación. Es decir proporciona mecanismos que permiten verificar la
identidad del comunicante. Para conseguirlo puede usar por ejemplo función
hash criptográfica MAC o protocolo de conocimiento cero.
Soluciones a problemas de la falta de simultaneidad en la tele firma digital de
contratos. Para conseguirlo puede usar por ejemplo protocolos de transferencia
inconsciente.
Un sistema criptográfico es seguro respecto a una tarea si un adversario con
capacidades especiales no puede romper esa seguridad, es decir, el atacante
no puede realizar esa tarea específica.
Por ejemplo: Si un correo electrónico es enviado por internet sin seguridad
alguna, la información que conlleva es frágil y descifrable.
4. Para ello, se usa la criptografía en el correo electrónico. Entre las varias
ventajas que tiene usar un certificado al enviar un email, podríamos destacar la
seguridad que nos aporta ya que así evita que terceras personas
(o hackers) puedan leer su contenido, o bien que tenemos la certeza de que el
remitente este correo electrónico es realmente quien dice ser.
Gracias al empleo del código ASCII y las congruencias es fácil desarrollar un
algoritmo de cifrado y descifrado de un mensaje, como son el procedimiento
aditivo, multiplicativo, exponencial y el famoso RSA.
Para dar ejemplos de estos procedimientos utilizaremos el siguiente código o
tabla de equivalencias.
:
A B C D E F G H I J K L M
10 11 12 13 14 15 16 17 18 19 20 21 22
N O P Q R S T U V W X Y Z
23 24 25 26 27 28 29 30 31 32 33 34 35
Y asignado el numero 36 al espacio en blanco
Procedimiento aditivo
La clave del cifrado es un número, digamos b, que se suma a cada uno de los
del mensaje. Para números que estén entre 0 y 36, se obtiene el resto módulo
37 de la suma del número original más b. El receptor el mensaje debe conocer
b, y no tiene más que restar b módulo 37 o, lo que es lo mismo, sumar 37-b
para descifrar el mensaje.
Ejemplo. Veamos cómo cifrar el mensaje “EL 1 A LAS 3″ con la clave aditiva
b=17. En primer lugar, “traducimos” cada carácter a su valor numérico:
14 21 36 1 36 10 36 21 10 28 36 3.
Su codificación es
31 1 16 18 16 27 16 1 27 8 16 20.
Esto se traduce en “V1GIGRG1R8GK”.
El receptor deberá sumar 37 − 17 = 20(𝑚𝑜𝑑𝑢𝑙𝑜 37) en la cadena numerica
para obtener le mensaje original.
Procedimiento multiplicativo
En lugar de sumar, se multiplica por un factor, digamos a; es decir, el cifrado de
la conversión numérica de cada carácter será 𝑚𝑎(𝑚𝑜𝑑 37).
5. Para que el cifrado sea biyectivo es necesario que todas las congruencias
lineales:
𝑎𝑥 ≡ 𝑦(𝑚𝑜𝑑37)
tengan una única solución para cualquier 𝑦 ∈ 𝑍37
𝑎𝑎 − 1 ≡ 𝑚(𝑚𝑜𝑑37), 𝑠𝑒 𝑡𝑖𝑒𝑛𝑒 𝑞𝑢𝑒
(𝑚𝑎)𝑎 − 1 ≡ 𝑚(𝑚𝑜𝑑37)
por lo que el número buscado m es el resto de dividir (𝑚𝑎)𝑎 − 1 𝑒𝑛𝑡𝑟𝑒 37.
Ejemplo:
Veamos como cifrar el mensaje anterior con la clave multiplicativa a=7.
24 36 30 7 30 33 30 36 33 11 30 21
lo que se traduce en “O U7UXU XBUL”.
El receptor debe multiplicar en la cadena numérica por el inverso de 7
en ℤ37 que es 16, obteniendo:
384 576 480 112 480 528 480 576 528 176 480 336
cuyos restos, modulo 37, constituyen la cadena original.
Procedimiento exponencial
En este procedimiento, cuando se quiera cifrar un número m, se elevará éste a
un exponente k y el resultado se reducirá módulo n, siendo k y n números
naturales elegidos convenientemente.
Tomamos φ(n) la función de Euler φ de n.
Este procedimiento se aplica de la siguiente forma: se elige n∈N, se
calcula φ(n), se toma k primo con φ(n) y se calcula j, el inverso de k en Zφ(n).
Suponiendo que el emisor y el receptor de un conocen los números k y j, el
emisor mandara el mensaje codificado que es r, el resto de la división
es 𝑚𝑘 entre n. Para descodificar, teniendo en cuenta que
𝑚𝑘𝑗 ≡ 𝑚(𝑚𝑜𝑑𝑛)
el receptor calculará
𝑟𝑗 ≡ (𝑚𝑘)𝑗 ≡ 𝑚(𝑚𝑜𝑑𝑛)
y asi recuperara el mensaje original m.
6. Obviamente este procedimiento solo es válido cuando el número m es menor
que n. Por ello, en la práctica, cuando el mensaje es largo, se agrupan sus
caracteres (escribiendo las cifras como 00,01,02,…,09 para que todos los
caracteres estén representados por un número de dos cifras) en paquetes mi
de la misma longitud l, (por ejemplo, para n=108, podemos tomar l=4, puesto
que 36363636 < n). En el caso de que el número de caracteres del mensaje no
sea múltiplo de l, el último paquete se completa con espacios en blanco.
Ejemplo:
Para ilustrar este método, consideramos un caso sencillo con n pequeño y un
mensaje corto. Tomamos n=5×11 = 55, lo que nos obliga a tomar paquetes que
contienen un único carácter. Veamos como cifrar el mensaje “ADN”. Puesto
que
Φ (55)=4x10=40
tomamos, por ejemplo, k=3 (que es primo con 40) y deducimos que el inverso
de k = 3 en ℤ40 es
𝑗 = −13 ≡ 27(𝑚𝑜𝑑40)
Traduciendo cada caracter a su valor numérico, el mensaje se convierte en
101323. Como nuestros paquetes se corresponden con un único caracter,
debemos codificar 3 números: 𝑚1 = 10, 𝑚2 = 13 𝑦 𝑚3 = 23. Para ello,
calculamos 𝑚3. Los tres paquetes de mensaje codificados que se envian son
10, 52 y 12.
Para descifrar los tres paquetes recibidos, el receptor debe calcular el resto, el
modulo n=55, de los números recibidos elevados a j=27. Obteniendo así el
mensaje original.
El procedimiento RSA
Todos los procedimientos anteriores se basan en sistemas de clave privada, en
que los datos para el cifrado han de mantenerse secretos.
El salto cualitativo siguiente son los sistemas de clave publica/clave privada, y
el primero ha sido el sistema RSA, así llamado por los nombres de sus autores,
Rivest, Shamir y Adelman.
Este es un sistema exponencial en el cual n es producto de dos primos
“grandes” distintos p y q. Aunque se hagan públicos el exponente k y el módulo
n, si no se sabe factorizar n, no se puede calcular φ(n)=(p−1)(q−1) y, por lo
tanto, no se puede encontrar el número j necesario para descifrar el código.
Por ello la idea fundamental es utilizar un número n que no sea factorizable en
un tiempo “razonable”, lo cual exige actualmente usar dos factores de unas 150
cifras y, por tanto, n de unas 300.
El sistema de envío de mensajes encriptados funciona de la siguiente forma:
7. Si A quiere mandar un mensaje a B debe consultar la clave pública (n,k) de B.
Con ella A cifra el mensaje (elevándolo a k) y se lo envía a B; lo único que debe
hacer B es descifrarlo mediante su clave privada j (elevando a j el numero
recibido).
Este sistema sirve también para firmar los mensajes y comprobar su integridad;
en concreto, sirve para que el receptor B este seguro de que quien envía el
mensaje es, efectivamente, el supuesto emisor A, y de que el mensaje no ha
sido manipulado por un tercero. Para conseguir esto, basta que A envíe un
mensaje en el que, junto con el texto cifrado mediante la clave publica de B,
vaya una copia del texto cifrado mediante su propia clave privada. Cuando B
recibe el mensaje, descifra el primer texto mediante su clave privada, y el
segundo con la clave publica de A; ambos resultados deben coincidir. El
segundo texto enviado se conoce como firma digital; en la practica la firma no
se suele realizar sobre el texto como tal sino sobre un resumen del mismo que
se obtiene mediante la aplicación de un tipo especifico de funciones que se
conocen con el nombre de funciones hash.
Ejemplo:
Consideramos un valor pequeño de n y el mismo mensaje “ADN” del ejemplo
anterior, supongamos que el emisor A tiene como clave publica
(𝑛𝐴, 𝑘𝐴) = (91,5) Mientras que la del receptor B es (𝑛𝐵, 𝑘𝐵) = (55,3).
Según lo visto en el ejemplo anterior, el texto cifrado que se envía está formado
por los tres paquetes 10,52 y 12. Para obtener la firma digital hay que tener en
cuenta que la clave privada de A es 𝑗𝑎 = 29. Por tanto, los tres paquetes del
texto original 𝑚1 = 10, 𝑚2 = 13 𝑦 𝑚3 = 23 deben elevarse a 29 modulo
𝑛𝐴 = 91, obteniendose 82,13 y 04. De esta forma el mensaje que recibe B es
10 52 12 | 82 13 04
Para descifrar el primer trozo, B utiliza su clave privada que es 𝑗𝐵 = 27.
Elevando los tres paquetes a 10,52 y 12 a 27 𝑚𝑜𝑑𝑢𝑙𝑜 𝑛𝐵 = 55, obtiene 10,13 y
23 lo que obviamente se corresponde con el mensaje original ADN. Al elevar
los tres paquetes de la firma digital 82,13 y 04 a la clave publica de 𝐴, 𝑘𝐴 =
5, 𝑚𝑜𝑑𝑢𝑙𝑜 𝑛𝐴 = 91 obtiene el mismo resultado, lo cual le confirma que el
mensaje ha sido enviado por A y no ha sido manipulado.
Y es así, como está la criptografía relacionada a las congruencias.