Beruflich Dokumente
Kultur Dokumente
criptogrfica
Ana Saiz Garca
ana (at) gpul (dot) org
David Fernndez Vaamonde
david_fv (at) gpul (dot) org
II Taller de riptografa aplicada
!niversidade da or"#a
G"in
oncl"siones
Introd"ccin
ifrado sim&trico
A"tenticacin
Introd"ccin ,I-
riptologa%
riptografa%
riptoanlisis%
omp"tacionalmente seg"ro
Introd"ccin ,II-
riptosistema%
Terminologa%
m% texto en claro
c% texto cifrado o
criptograma/ )ensaje
transformado en ininteligi(le
algoritmos de cifrado%
convierten m en c
Servicios de seg"ridad
onfidencialidad
Integridad
A"tenticacin
1o rep"dio
)ecanismos de seg"ridad
ifrado
Generacin de trfico
$rotocolos de a"tenticacin
Firma digital
Introd"ccin ,IV-
Ata2"es a la informacin%
A la confidencialidad%
A la a"tenticidad%
S"plantacin de la f"ente
)odificacin de tiempo
3ep"dio
Emisor cifra con la clave ' receptor descifra con la misma clave
Servicios%
confidencialidad
a"tenticacin
integridad
$ro(lemas%
Servicios%
$ro(lemas%
cifrado lento
5tros mecanismos
$rotocolos de a"tenticacin
F"nciones 7AS7
F"nciones )A
Firma digital
ifrado sim&trico ,I-
*lo2"e cifrador
Efectos%
5peraciones (sicas%
S"(stit"cin%
clave% f"ncin de s"(stit"cin
conf"sin
cajas6S ,S6(o;es-
$erm"tacin%
clave% reordenacin de (its
dif"sin
cajas6$ ,$6(o;es-
ifrado sim&trico ,II-
DES ,I-
ifrado sim&trico ,III-
DES ,II-
Detalle de la iteracin
ifrado sim&trico ,IV-
DES ,III-% )odos de "so
el ms rpido
cifrado de fl"jo
necesita sincronizacin
emisor9receptor
no propaga errores
ifrado sim&trico ,V-
DES ,' IV-
Ventajas
Desventajas
Triple DES
5tros algoritmos%
IDEA
S0ipjac0
*loAfis4
3:
3@
AST68:?
AES
riptografa de clave p+(lica ,I-
ategoras%
ifrado9descifrado confidencialidad
Ata2"es%
Te;to en claro ' cifrado son enteros entre E ' n68 ,valor tpico n>8E:=
(its-
$ara "n (lo2"e de te;to en claro ) ' "n (lo2"e de te;to cifrado %
ifrado% C=M
e
mod n
Descifrado% M=C
d
mod n=M
ed
mod n
Ata2"es a 3SA
F"erza (r"ta
Ata2"e matemtico
costoso si n grande
Funcin Hash% f"ncin p+(lica 2"e genera "n valor de longit"d fija
a partir de "n mensaje de c"al2"ier longit"d
A"tenticacin ,II-
cifrado sim&trico%
A ' * comparten clave secretaC slo el otro p"ede 4a(er cifrado con esa
clave
ofrece confidencialidad
no ofrece no rep"dio
cifrado asim&trico%
ofrece no rep"dio
no ofrece confidencialidad
1o confidencialidad
!sos%
receptor m"' cargado 2"e no p"ede descifrar todos los mensajes 2"e le
llegan slo verifica alg"nos
F"nciones 4as4
A"tenticacin ,IV-
)A
1o necesita clave
!sos%
on cifrado simtrico%
a"tenticacin
m|C
k
[h(m)]
a"tenticacin D confidencialidad C
k
[m|h(m)]
A"tenticacin ,VI-
7AS7 ,II-
on cifrado asimtrico%
a"tenticacin ,firma digital- m|C
KprivA
[h(m)]
con confidencialidad C
k
[m|C
KprivA
[h(m)]]
A"tenticacin ,VII-
7AS7 ,' III-
a"tenticacin
m|h(m|S)
Algoritmos%
)D@
S7A68
3I$E)D
1o ofrece confidencialidad
Introd"ccin
Ideas generales
alto nivel
nivel (ajo
Algoritmos
ertificados
Dispositivos 4ardAare
Ideas generales ,I-
Inicio9final
Inicializar cr'ptli(
Todas las f"nciones dev"elven "n entero con "n error asociado
,definido en cr'ptli(/4-
Dos macros%
cr'ptStat"sError,stat"s-
cr'ptStat"s5B,stat"s-
status=cryptInit();
if(cryptStatusError(status))
printf("Init: %d\n", status);
status=cryptCheckSignature(signature, publicKey,
shaContext);
if(cryptStatusOK(status))
printf(Firma correcta);
Ideas generales ,' III-
onte;tos de cifrado ' 0e'sets
onte;tos%
$ropietario
Vector de inicializacin///
Se cifra9descifra en el conte;to
Be'sets
Firma con clave privada del emisor "n res"men 4as4 del mensaje
LM"& es )onoN
5rientado a o(jetos
pa2"etes . namespaces
e;cepciones% tr'9catc4
///
System.Security.Cryptography
riptografa general
System.Security.Cryptography.X509
System.Security.Cryptography.Xml
S'stem/Sec"rit'/r'ptograp4'
omponentes%
5tros elementos%
En"merados%
ip4er)ode ,*CE*C5F*CTS-
$adding)ode ,1oneC$BSWCXeros-
3andom1"m(erGenerator
!so de cr'ptostream
Algoritmos Sim&tricos
DESCJDES///
lase a(stracta
SimmetricAlgor't4m
Implementacin
TripleDES
TripleDESr'pto$rovider
Ejemplo 8/ ifrado Triple DES
using System.Security.Cryptography;
using System.IO;
using System;
using System.Text;
public class Cifra3des
{
public static void Main(string[] Args)
{
// Obtenemos un provider 3DES
TripleDES td = TripleDES.Create();
// Tomamos el mensaje a cifrar
System.Console.Write("Escriba su mensaje a cifrar:
");
string mensaje=System.Console.ReadLine();
Ejemplo8/ ifrado TripleDES ,II-
// Generamos una nueva llave y un vector de inicializacin
td.GenerateKey();
td.GenerateIV();
// Convertimos la cadena a ristra de bytes
byte[] bytemen = Encoding.ASCII.GetBytes(mensaje);
// Abrimos un stream de memoria con escribiremos el cifrado
MemoryStream mem = new MemoryStream();
// Iniciamos un cryptostream que lo enlazamos al stream de memoria
CryptoStream cs = new CryptoStream(mem,td.CreateEncryptor(),
CryptoStreamMode.Write);
Ejemplo 8/ ifrado TripleDES ,III-
// Escribimos en el criptostream el mensaje convertido a bytes
cs.Write(bytemen,0,bytemen.Length);
cs.FlushFinalBlock();
// Obtenemos el resultado del stream de memoria
byte[] encrypted = mem.ToArray();
mem.Seek(0,SeekOrigin.Begin);
StreamReader reader1 = new StreamReader(mem);
System.Console.WriteLine("Texto Cifrado: "+reader1.ReadToEnd());
// Creamos un nuevo stream de memoria del que leeremos el descifrado
MemoryStream mem2 = new MemoryStream();
Ejemplo 8/ ifrado TripleDES ,' IV-
// Inciamos un cryptostream para descifrar
CryptoStream cs2 = new CryptoStream(mem2,td.CreateDecryptor(),
CryptoStreamMode.Write);
// Escribimos el texto cifrado y sale descifrado al stream
// de memoria
cs2.Write(encrypted,0,encrypted.Length);
cs2.FlushFinalBlock();
// Obtenemos el texto descifrado
mem2.Seek(0,SeekOrigin.Begin);
StreamReader reader = new StreamReader(mem2);
System.Console.WriteLine("Texto Descifrado: "+reader.ReadToEnd());
}
}
A$I riptogrfica de )ono ,VIII-
Algoritmos de 7AS7
)D@CS7A;C///
Be'ed o no Be'ed
lase a(stracta
7as4Algor't4m
Implementacin
S7A@8:r'pto$rovider
)D@r'pto$rovider
Ejemplo :/ F"nciones 7as4
1 using System;
2 using System.Security.Cryptography;
3 using System.IO;
4 using System.Text;
5
6 public class HashExample
7 {
8
9 public static void Main(string[] args)
10 {
11
12 if(args.Length==0)
13 {
14 System.Console.WriteLine("\n Uso: ejemploSHA512.exe
fichero\n\n");
15 System.Environment.Exit(0);
16
17 }
18
Ejemplo :/ F"nciones 7as4 ,' II-
19
20 StreamReader sr = new StreamReader(args[0]);
21
22 string mensaje = sr.ReadToEnd();
23
24 byte[] mensajeBytes = Encoding.ASCII.GetBytes(mensaje);
25
26 SHA512 sha = SHA512.Create();
27
28 byte[] hash = sha.ComputeHash(mensajeBytes);
29
30 System.Console.WriteLine("Hash:"+BitConverter.ToString(hash));
31
32 }
33
34
35 }
A$I riptogrfica de )ono ,IK-
Algoritmos asim&tricos
3SACDSA
lase a(stracta
AssimetricAlgorit4m
lases de implentacin
DSAr'pto$rovider
3SAr'pto$rovider
A$I riptogrfica de )ono ,' K-
$armetros 3SA
$armetros p+(licos%
DC)od"l"sCE;ponent
$armetros privados
$CMCD$CDMCInverseM
"% $rimo
#% $rimo
d">,89e-mod,p68-
d#>,89e-mod,268-
$%&'>,892-mod p donde p Y 2
EjemploJ/ Firma Digital 3SADS7A8
1 using System;
2 using System.Security.Cryptography;
3 using System.IO;
4 using System.Text;
5
6 public class ejemploSHARSA
7 {
8
9 public static void Main(string[] args)
10 {
11
12 if(args.Length==0)
13 {
14 System.Console.WriteLine("\n Uso: ejemploSHA512.exe
fichero\n\n");
15 System.Environment.Exit(0);
16
17 }
Ejemplo J/ Firma Digital ,II-
19 // Leemos el fichero a firmar
20
21 StreamReader sr = new StreamReader(args[0]);
22 string mensaje = sr.ReadToEnd();
23 sr.Close();
24
25 byte[] mensajeBytes = Encoding.ASCII.GetBytes(mensaje);
26
27 // Creamos una clase SHA1
28
29 SHA1 sha = SHA1.Create();
30
31 // Realizamos el HASH del fichero en bytes
32
33 byte[] hash = sha.ComputeHash(mensajeBytes);
34
35 System.Console.WriteLine("Hash: "+BitConverter.ToString(hash));
36
Ejemplo J/ Firma Digital ,III-
37 // Generamos un Provider RSA
38
39 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
40
41 // Es en el firmado cuando se generan el par de llaves.
// Firmamos
42
43 byte[] signbytes = rsa.SignHash(hash,"1.3.14.3.2.26");
44
45 // Exportamos los parametros para usarlos en la verificacin.
46 // Parte de estos parmetros son la clave pblica que enviamos al
// otro punto.
47
48 RSAParameters rsaparams = rsa.ExportParameters(false);
49
50 System.Console.WriteLine("Hash Firmado: \n\n"+
BitConverter.ToString(signbytes));
51 System.Console.Write("\n(Cambie el fichero para prueba) Quiere
cambiar la firma? (S/N) ");
52
53 if(String.Compare(System.Console.ReadLine(),"S")==0)
54 signbytes = new byte[signbytes.Length];
Ejemplo J/ Firma Digital ,IV-
56 // Releemos el fichero por si queremos cambiar algo
57
58 StreamReader sr2 = new StreamReader(args[0]);
59 string mensaje2 = sr2.ReadToEnd();
60 sr2.Close();
61
62 // Realizamos de nuevo el hash
63
64 byte[] mensajeBytes2 = Encoding.ASCII.GetBytes(mensaje2);
65 SHA1 sha2 = SHA1.Create();
66 byte[] hash2 = sha2.ComputeHash(mensajeBytes2);
67
68 System.Console.WriteLine("\nHash 2: "+
BitConverter.ToString(hash2));
69
70 // Creamos un provider RSA
71
72 RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider();
Ejemplo III/ Firma Digital ,' V-
74 // Importamos los parmetros que extrajimos
//anteriormente
75
76 rsa.ImportParameters(rsaparams);
77
78
79 if(rsa.VerifyHash(hash2,"1.3.14.3.2.26",signbytes))
80 {
81 System.Console.WriteLine("Firma Correcta!");
82 }else{
83 System.Console.WriteLine("Firma Incorrecta!");
84 }
85
86
87 }
88
89 }
oncl"siones
$arte terica%
r'ptli(%
"onodoc% 4ttp%99AAA/go6mono/com9docs9