Está en la página 1de 13

6 DE JUNIO DE 2018

CIFRADOR DECIFRADOR
ELGAMAL
SEGURIDAD EN REDES

YESSICA CRUZ - FRANCISCO HIDALGO - PEDRO PROAÑO


ESDUELA POLITÉCNICA NACIONAL
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Contenido
....................................................................................................................................................... 0
1. Cifrador/Decifrador ElGamal ..................................................................................................... 2
1.1 Historia ................................................................................................................................ 2
1.2 Características del Algoritmo ElGamal ................................................................................ 2
1.3 Escenario para la explicación del Algoritmo ....................................................................... 3
1.3.1 Generación de la Clave ................................................................................................. 3
1.3.2 Cifrado .......................................................................................................................... 3
1.3.3 Descifrado .................................................................................................................... 4
1.4 Ejemplo del Cifrado/Descifrado .......................................................................................... 4
2. IMPLEMENTACIÓN DEL CIFRADOR Y DECIFRADOR ELGAMAL .................................................. 6
2.1 Cifrador ElGamal ................................................................................................................. 8
2.2 Decifrador ElGamal ............................................................................................................. 8
Código Implementado ............................................................................................................... 9
3. BIBLIOGRAFÍA .......................................................................................................................... 12

Ilustración 1: Taher Elgamal .......................................................................................................... 2


Ilustración 2: Esquema de un algoritmo de criptografía asimétrica. ............................................ 2
Ilustración 3: Escenario para la implementación del algoritmo ................................................... 3
Ilustración 4 Formulario de presentación ..................................................................................... 6
Ilustración 5 Formulario de Inicio ................................................................................................. 7
Ilustración 6 Formulario de información....................................................................................... 8
Ilustración 7 Cifrado en la APP ...................................................................................................... 8
Ilustración 8 Descifrado en la APP................................................................................................. 8
Ilustración 9 Ejemplo Cifrado/Descifrado en la APP ................................................................... 11
Ilustración 10 Ejemplo Cifrado/Descifrado en el programa de la WEB. ..................................... 12
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

1. Cifrador/Decifrador ElGamal
1.1 Historia
Durante 1984 y 1985 Taher ElGamal desarrolló un nuevo
criptosistema de clave pública basado en la
intratabilidad computacional del problema del
logaritmo discreto. Aunque generalmente no se utiliza
de forma directa, ya que la velocidad de cifrado y
autenticación es inferior a la obtenida con RSA, y
además las firmas producidas son más largas, el
algoritmo de ElGamal es de gran importancia en el
desarrollo del DSS (Digital Signature Standard), del NIST
(National Institute of Standards and Technology) Ilustración 1: Taher Elgamal
estadounidense. El criptosistema de ElGamal tiene una
característica determinante que lo distingue del resto de sistemas de clave pública: en
el cifrado se utiliza aparte de la clave pública del receptor, la clave privada del emisor.

1.2 Características del Algoritmo ElGamal


El procedimiento de cifrado/descifrado ElGamal, se refiere a un esquema de cifrado
basado en problemas matemáticos de logaritmos discretos. Es un algoritmo de
criptografía asimétrica basado en la idea de Diffie-Hellman y que funciona de una forma
parecida a este algoritmo discreto.
El algoritmo de ElGamal puede ser utilizado tanto para generar firmas digitales como
para cifrar o descifrar.

Ilustración 2: Esquema de un algoritmo de criptografía asimétrica.

La seguridad del algoritmo se basa en la suposición que la función utilizada es de un sólo


sentido debido a la dificultad de calcular un logaritmo discreto.
El procedimiento de cifrado (y descifrado) está basado en cálculos sobre un grupo
cíclico cualquiera lo que lleva a que la seguridad del mismo dependa de la dificultad
de calcular logaritmos discretos en .
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

1.3 Escenario para la explicación del Algoritmo


Para la explicación del algoritmo se plantea la comunicación entre dos entidades A y B
cuyos nombres son Alicia y Benito respectivamente; en el cual Benito desea enviar un
mensaje a Alicia. Dado que este algoritmo es asimétrico se debe tener una clave pública
y una privada que serán necesarias para la encriptación y la desencriptación del
mensaje.

Ilustración 3: Escenario para la implementación del algoritmo

1.3.1 Generación de la Clave


Para generar la clave, Alicia escoge un número entero “p” tal que el algoritmo discreto
no es soluble en un tiempo admisible; eso quiere decir que p-1 tenga un factor primo
grande, lo que hace que el problema del logaritmo discreto sea difícil.

1.3.1.1 Generación de la Clave Privada


Alicia deberá escoger dos números aleatorios g y a tal que:

a Ꞓ {0, ……… , p-1}

Donde:
a: Identificador que actuara como la clave privada.
g: Generador del grupo cíclico

1.3.1.2 Generación de la Clave Pública


Alicia calculará el valor de 𝐊 = 𝐠 𝐚 mod(p), entonces la clave pública estará dada
por (g , p , K) .

El criptosistema es seguro siempre que sea difícil hallar el logaritmo discreto de la


relación entre los componentes de la clave pública y privada que estará dada por:

𝒂 = 𝐥𝐨𝐠 𝒈 𝑲 mod(p)

1.3.2 Cifrado
Para realizar el cifrado dado el escenario en la Ilustración 3, donde Benito desea enviar
un mensaje, el cual se encuentra en texto claro que requiere enviarlo cifrado hacia Alicia;
el procedimiento que se debe realizar es el siguiente:

• Convertir el texto en claro en un entero m entre 1 y p-1 donde m Ꞓ Zp.


• Escoger un número b aleatorio tal que b Ꞓ {2, ……… , p-1}, el cual se mantendrá
en secreto.
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

• 𝑦1 = 𝑔𝑏 (𝑚𝑜𝑑 𝑝)
• 𝑦2 = 𝐾 𝑏 𝑚 (𝑚𝑜𝑑 𝑝)
• Finalmente el mensaje cifrado corresponderá a 𝑪𝒃 (𝒎, 𝒃) = (𝒚𝟏 , 𝒚𝟐 )

Es importante mencionar que el usuario B (Benito), debe elegir un entero b distinto para
cada mensaje que quiere enviar a A. Suponiendo que B utiliza el mismo b para codificar
dos mensajes diferentes, 𝒎𝟏 y 𝒎𝟐 . Entonces B tendría que enviar lo siguiente

𝑪𝒃 (𝒎, 𝒃) = (𝑔𝑏 , 𝐾 𝑏 𝑚1 )

𝑪𝒃 (𝒎, 𝒃) = (𝑔𝑏 , 𝐾 𝑏 𝑚2 )
Por lo tanto, cualquier criptoanalista que tenga conocimiento de esta debilidad por
parte de B y conozca el mensaje original 𝑚1 correspondiente al mensaje cifrado
𝑪𝒃 (𝒎, 𝒃) = (𝑔𝑏 , 𝐾 𝑏 𝑚1 ) puede fácilmente calcular la clave común.

1.3.3 Descifrado
Para descifrar se aplica lo siguiente:

𝑦1−𝑎 𝒚𝟐 (𝒎𝒐𝒅 𝒑) = (𝒈𝒃 )−𝒂 𝑲𝒃 𝒎 (𝒎𝒐𝒅 𝒑)

𝑦1−𝑎 𝒚𝟐 (𝒎𝒐𝒅 𝒑) = (𝒈𝒃 )−𝒂 (𝒈𝒂 )𝒃 𝒎 (𝒎𝒐𝒅 𝒑)

𝑦1−𝑎 𝒚𝟐 (𝒎𝒐𝒅 𝒑) = (𝒈𝒂 )−𝒃 (𝒈𝒂 )𝒃 𝒎 (𝒎𝒐𝒅 𝒑)


𝑦1−𝑎 𝒚𝟐 (𝒎𝒐𝒅 𝒑) = 𝒎 (𝒎𝒐𝒅 𝒑)
Donde 𝑦1−𝑎 representa el inverso de 𝑦1𝑎 (𝑚𝑜𝑑 𝑝) lo que indica que para calcular el
descifrado, es necesario conocer a, que es la clave privada de Alicia

Dado el pequeño teorema de Fermat se demuestra que:


𝒑−𝟏−𝒂
𝒚−𝒂
𝟏 = 𝒚𝟏

1.4 Ejemplo del Cifrado/Descifrado


Alicia y Benito quieren intercambiar mensajes utilizando el criptosistema de ElGamal en
el cuerpo F17 con un generador g=3. Para ello Alicia escoge su clave privada a=6.
Suponiendo que Benito quiere mandar el mensaje m=19 a Alicia. Entonces escoge un
entero b=5. Realizar la encriptación y desencriptación del mensaje.

Alicia

p=17 → Número aleatorio suponiendo que p-1 es un factor primo grande.


g=3 → Generador aleatorio.
a=6 → Clave privada.
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Se procede a calcular la clave pública la cual será publicada, para lo cual se realiza lo
siguiente:

𝐾 = 𝑔𝑎 (𝑚𝑜𝑑 𝑝)
𝐾 = 36 (𝑚𝑜𝑑 17)
𝐾 = 15
Por lo tanto, la clave pública corresponde a lo siguiente:

(𝑔, 𝑝, 𝐾) = (3,17,15)

Bruce

m=9 → Mensaje en texto claro.


b=5 → Número aleatorio entre 2 y p-1

Se procede a realizar la encriptación para lo cual se realiza lo siguiente:


𝒚𝟏 = 𝒈𝒃 (𝒎𝒐𝒅 𝒑)

𝑦1 = 35 (𝑚𝑜𝑑 17)
𝑦1 = 5

𝒚𝟐 = 𝑲𝒃 𝒎 (𝒎𝒐𝒅 𝒑)

𝑦2 = 155 9 (𝑚𝑜𝑑 17)


𝑦2 = 1
Por lo tanto, el texto cifrado es 𝑪𝒃 (𝒎, 𝒃) = (𝟓, 𝟏)

Para la desencriptación Alicia utiliza la clave privada a=6 y el pequeño teorema de


Fermat.
𝑝−1−𝑎
𝒎 = 𝑦1 𝒚𝟐 (𝒎𝒐𝒅 𝒑)

𝑚 = (5)17−1−6 𝟏 (𝒎𝒐𝒅 𝟏𝟕)


𝑚=9
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

2. IMPLEMENTACIÓN DEL CIFRADOR Y DECIFRADOR ELGAMAL

Para la implementación del cifrador ElGamal se ha decidido utilizar el lenguaje de


programación C# en el entorno de desarrollo VIsualStudio. Nuestra aplicación consta de tres
formularios los cuales se detallarán a continuación:

Formulario de Portada

Ilustración 4 Formulario de presentación

Este formulario básicamente es la portada de presentación de la aplicación, donde se detalla el


algoritmo a implementar y los participantes que formamos parte del desarrollo.

Formulario de Inicio
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Ilustración 5 Formulario de Inicio

Este formulario es la aplicación desarrollada, en donde se ha dividido en tres secciones:

- Generación de la Clave publica


- Envío del mensaje cifrado
- Descifrado del mensaje recibido

En la primera sección “Generación de la Clave publica” se ofrece al usuario dos opciones ya


que si el desea puede ingresar los valores manualmente o mantener los valores
predeterminados de ciertas variables, las cuales se detallan a continuación:

- p(espacio de trabajo)=29
- g(generador)=3
- a(clave privada del receptor para nuestro caso)=6

En la siguiente sección se presenta la etapa del envió del mensaje mediante este algoritmo,
para lo cual se solicita que el emisor escriba un texto a enviar o seleccione un archivo de texto.
Además, en esta sección se le solicita al emisor que ingrese su clave privada.
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Para concluir en la sección final se muestra el escenario donde el mensaje le ha llegado al


receptor pero cifrado, donde se le solicita al receptor que ingrese su clave privada para poder
descifrar la información.

Formulario de Información del Alfabeto Utilizado

Ilustración 6 Formulario de información

Este formulario básicamente muestra la correspondencia del alfabeto con un numero decimal
con el cual se procederá a trabajará para efectos de cálculo.

2.1 Cifrador ElGamal

Ilustración 7 Cifrado en la APP

2.2 Decifrador ElGamal

Ilustración 8 Descifrado en la APP


ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Código Implementado
A continuación, se presenta algunos segmentos de código implementados.

Enviar Llave Publica


private void btnEnviarLLave_Click(object sender, EventArgs e)
{

txtA.Enabled = true;
txtG.Enabled = true;
txtP.Enabled = true;
p = Int32.Parse(txtP.Text);
g = Int32.Parse(txtG.Text);
a = Int32.Parse(txtA.Text);
generarK();
MessageBox.Show("Generando K..... K= " + K.ToString());
MessageBox.Show("Clave publica Enviada (g,p,K)= " + " ( " +
g.ToString() + "," + p.ToString() + "," + K.ToString()+") ");

Cifrado y envio de Mensaje


private void button1_Click(object sender, EventArgs e)
{
if (txtClaveB.Text == "" || Fuente=="")
{
MessageBox.Show("No se permite clave nula o Texto de envio vacio
para el EMISOR del mensaje, proceda a llenar...");
}
else
{
generarK();
for (int i = 0; i < longFuente; i++)
{
for (int j = 0; j < 28; j++)
{
if (Fuente[i] == Alfabeto[j])
{
// MessageBox.Show(Fuente[i].ToString());
numero.Add(j);
break;
}
}
}
string textoNumero = "";
foreach (int iter in numero)
{

textoNumero = textoNumero + "-" + iter.ToString();


}
//MessageBox.Show(" mensaje de entrada en decimal "+textoNumero);

b = Convert.ToInt32(txtClaveB.Text);
//MessageBox.Show("Numero Aleatorio "+b.ToString());

generacionY1();
//MessageBox.Show(" Valor de Y1 :"+y1.ToString());
Y1Y2.Add(Convert.ToInt32(y1));
int auxContador = 0;
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

foreach (int iterNum in numero)


{
// MessageBox.Show("lista numeros entrada:
"+iterNum.ToString());
y2 = 0;

generacionY2(auxContador);
Y1Y2.Add(Convert.ToInt32(y2));
auxContador++;
}
//procedemos a mostrar el resuldado del algoritmo de elgamal,
para nuestro caso mostraremos Y1,Y2a,Y2b...
lbTextC.Text = y1y2TXT;
lbMensajeCIfradoRedibido.Text = y1y2TXT;
}
}

Selección del Archivo de Texto


private void btnAbrir_Click(object sender, EventArgs e)
{

if (openFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK)
{
System.IO.StreamReader sr = new
System.IO.StreamReader(openFileDialog1.FileName);
Fuente = sr.ReadToEnd();
sr.Close();
//MessageBox.Show(sr.ReadToEnd());
//sr.Close();
longFuente = Fuente.Length;
//MessageBox.Show("LONGITUD TEXTO DE ENTRADA: " +
Fuente.Length.ToString());
string mensaje=Fuente;
MessageBox.Show("MENSAJE: " + mensaje);
lbTxt.Text = mensaje;
mostrarCorrespondienteDecimal(mensaje);
//graficar();
}
}

Descifrar Información
private void button2_Click(object sender, EventArgs e)
{
int clave = Int32.Parse(txtClave.Text);
decifrarMensaje(clave);
}

public void decifrarMensaje(int key) {


string mensajeCifrado="";
double maux1;
double maux2;
double maux;
int auxLong=calcularLongitudY1Y2();
double y1aux=Y1Y2[0];
int r1 = p - 1 - key;

for (int i=1;i<auxLong;i++) {


maux1 = Math.Pow(y1aux, r1);
maux2 = maux1 * Y1Y2[i];
maux = maux2 % p;
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

mensajeDC.Add(Convert.ToInt32(maux));
mensajeCifrado = mensajeCifrado + maux.ToString();
}
lbTxtDC.Text = mensajeCifrado;

string mensajeDCOriginal="";
for (int ii = 0; ii < longFuente; ii++)
{
for (int jj = 0; jj < 28; jj++)
{
if (Fuente[ii] == Alfabeto[jj])
{
// MessageBox.Show(Fuente[i].ToString());
mensajeDCOriginal = mensajeDCOriginal + Alfabeto[jj];
break;
}
}
}
lbMensajeRecibidoOriginal.Text = mensajeDCOriginal;
}

3. PRUEBAS

Ilustración 9 Ejemplo Cifrado/Descifrado en la APP


ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES

Ilustración 10 Ejemplo Cifrado/Descifrado en el programa de la WEB.

4. BIBLIOGRAFÍA
• Santamaría Fernández, J. (2012). Repositorio UNICAN. Recuperado el 02 de Junio de
2018, de
https://repositorio.unican.es/xmlui/bitstream/handle/10902/3101/Jennifer%20Sant
amaria%20Fernandez.pdf?sequence=1

También podría gustarte