Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proyecto01 ElGamal
Proyecto01 ElGamal
CIFRADOR DECIFRADOR
ELGAMAL
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
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.
Donde:
a: Identificador que actuara como la clave privada.
g: Generador del grupo cíclico
𝒂 = 𝐥𝐨𝐠 𝒈 𝑲 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:
• 𝑦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:
Alicia
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
𝑦1 = 35 (𝑚𝑜𝑑 17)
𝑦1 = 5
𝒚𝟐 = 𝑲𝒃 𝒎 (𝒎𝒐𝒅 𝒑)
Formulario de Portada
Formulario de Inicio
ESCUELA POLITÉCNICA NACIONAL
SEGURIDAD EN REDES
- 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
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.
Código Implementado
A continuación, se presenta algunos segmentos de código implementados.
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()+") ");
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
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;
}
}
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);
}
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
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