Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
Tema 6 Applets. Applets Firmados. Encriptaci´ on. Departament d’Inform`atica. Universitat de Val`encia
´Indice 1. Applets
2
1.1. Un primer ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.2. Otro ejemplo con par´ ametros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3. Formas de visualizar un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.4. El plugin de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Applets firmados
11
2.1. Seguridad en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.1. Administradores de seguridad y permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Seguridad en la plataforma Java 2
14
3.1. Archivos de pol´ıtica de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2. Firmas digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.1. Compendio de mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.2. Mensajes firmados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.3. Autenticaci´ on de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4. Encriptaci´ on
28
4.1. Codificadores sim´etricos sobre bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
[email protected]
P´ agina: 1
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
4.2. Codificadores asim´etricos o de clave p´ ublica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.
Applets Un applet est´a formado por una clase o conjunto de clases escritas en Java que est´ a insertado en una p´agina Web. Cuando un usuario carga la p´agina en la que est´a el applet, ´este se ejecuta localmente (en la m´aquina cliente donde se est´a ejecutando el navegador Web) y no remotamente (sobre el sistema que est´a ejecutando el servidor HTTP).
El navegador recibe el código HTML y ejecuta el applet
Envía el código HTML y las clases
Internet Servidor HTTP
Cliente
El hecho de que el c´odigo se ejecute localmente implica que la seguridad sea crucial. Los applets est´an sometidos a unas restricciones de seguridad por defecto. Por ejemplo, nadie desea que un applet cargado visitando una p´agina Web borre sus ficheros. O que ese applet realice conexiones a otras m´aquinas para transferir informaci´ on. Estas restricciones est´an impuestas por un objeto del tipo SecurityManager en el sistema cliente, que especifica qu´e acciones est´an permitidas y cuales no.
[email protected]
P´ agina: 2
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
A partir de la versi´on 1.1 de la plataforma Java, las clases se pueden firmar digitalmente, estas clases (si el usuario conf´ıa en quien las firma) pueden realizar acciones no permitidas a las clases no firmadas. Por defecto, el gestor de seguridad de los navegadores verifica entre otras cosas que los applets No puedan leer los ficheros locales. No puedan escribir en los discos locales. No puedan establecer conexiones a otras m´aquinas salvo con el servidor que contiene el applet. No ejecutar programas locales. No puedan obtener informaci´on privada sobre el usuario.
Los applets deben ser subclases de la clase Applet (si se van a utilizar clases de AWT) o de JApplet (si se van a utilizar clases de Swing). A diferencia de las aplicaciones vistas hasta el momento, la ejecuci´on de un applet no comienza en el m´etodo main(.). Hay una serie de m´etodos que son llamados cuando ocurren determinadas circunstancias. Estos m´etodos de Applet o de JApplet son los que hay que sobreescribir.
La siguiente figura muestra cuando llama el navegador a estos m´etodos:
Hay que redibujar el applet
init()
start()
paint()
Se carga la pagina que contiene el applet
Se cierra el navegador o se cambia a otra pagina
stop()
destroy()
El esqueleto de un applet basado en la clase Applet se muestra a continuaci´on: import import
java . a p p l e t . Applet ; j a v a . awt . ∗ ;
[email protected]
P´ agina: 3
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
c l a s s UnApplet e x t e n d s A p p l e t { // D e c l a r a c i o ´ n de a t r i b u t o s p u b l i c void init (){ // I n i c i a c i o ´ n de l a s v a r i a b l e s // C o n s t r u c c i o n d e l a GUI } p u b l i c void start () { // S e n t e n c i a s } p u b l i c v o i d stop () { // S e n t e n c i a s } p u b l i c v o i d destroy () { // S e n t e n c i a s } p u b l i c v o i d paint ( Graphics g ) { // O p e r a c i o n e s d e d i b u j o ( s i }
las
hay )
}
Un applet concreto puede sobreescribir todos estos m´etodos o solamente algunos de ellos en funci´ on de la tarea que deba realizar. En los ejemplos de c´odigo proporcionados, en el directorio ejemplos/applets/OrdenMetodos hay un applet firmado (para poder acceder al disco local) que guarda en el fichero que se le pasa como par´ ametro desde el c´odigo HTML la secuencia de llamadas a los diferentes m´etodos. Este applet se puede utilizar para ver las posibles diferencias entre los navegadores a la hora de llamar a estos m´etodos. La jerarqu´ıa de las clases Applet y JApplet es la siguiente:
Object O
Object O
Component O
Component O
Container O
Container O
Panel O
Panel O
Applet
Applet O
JApplet
[email protected]
P´ agina: 4
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
Adem´ as de los m´etodos que controlan el ciclo de vida del applet hay otros m´etodos disponibles, entre los cuales destacan: public
A u d i o C l i p g e t A u d i o C l i p (URL u r l C l i p )
public
A u d i o C l i p g e t A u d i o C l i p (URL u r l ,
String
fichero )
Obtienen un fichero de audio y MIDI desde una URL y lo asignan a un objeto del tipo AudioClip que permite los mensajes play(), loop() y stop(). La versi´ on JDK 1.1 soporta ficheros en formato .au. A partir de la versi´on 1.2 se soportan .aiff y .wav adem´as de MIDI tipo 0, MIDI tipo 1 y ficheros en formato RMF. public
Image g e t I m a g e (URL u r l I m a g e n )
public
Image g e t I m a g e (URL u r l ,
String
fichero )
Estos m´etodos obtienen una imagen desde una URL y crean un objeto del tipo Image. public
void
showStatus ( S t r i n g
mensaje )
Este m´etodo muestra la cadena pasada como argumento en la barra de estado (en la parte inferior del navegador). public
v o i d showDocument (URL htmlDoc )
public
v o i d showDocument (URL htmlDoc ,
String
frame )
Estos m´etodos se pueden utilizar para indicar al navegador que muestre una determinada p´ agina Web. En realidad est´an definidos en la clase AppletContext por lo que para utilizarlos hay que hacer lo siguiente: getAppletContext().showDocument(...) Como ya se ha comentado, el applet debe estar incluido en una p´agina Web. El lenguaje de marcado HTML contiene etiquetas para indicar que un elemento es un applet. El esqueleto de c´odigo HTML de una p´agina que contenga un applet se muestra a continuaci´ on: Applet
[email protected]
P´ agina: 5
LP (Telem´atica) Universitat de Val`encia
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
Elementos
Significado
ARCHIVE
Especifica el archivo jar donde se encuentran las clases y otros recursos que utilice el applet.
CODE
Especifica la clase que extiende a Applet o a JApplet. Se asume que la clase se puede encontrar en el mismo sitio que la p´agina web a no ser que se proporcione CODEBASE.
CODEBASE
Designa la URL donde encontrar la clase o el fichero jar.
WIDTH
Especifica la anchura que tendr´a el applet.
HEIGHT
Especifica la altura que tendr´a el applet.
ALIGN
Especifica c´omo se debe colocar el applet dentro del espacio disponible (LEFT, RIGHT, TOP, BOTTOM, MIDDLE).
PARAM
Se puede utilizar para pasar par´ametros al applet. En NAME se especifica el nombre del par´ametro y en VALUE se especifica el valor.
1.1.
Un primer ejemplo j a v a . awt . ∗ ; java . applet . ∗ ;
import import
/∗ ∗ E s t a c l a s e e s un Banner en e l q u e a p a r e c e r a t e x t o d e s p l a z a n d o s e ∗/ p u b l i c c l a s s Banner e x t e n d s A p p l e t i m p l e m e n t s Runnable { p r i v a t e S t r i n g msg = ” E s t a f r a s e s e d e s p l a z a Esta f r a s e s e p r i v a t e Thread t = n u l l ; p r i v a t e b o o l e a n parado ; /∗ ∗ O c u l t a m o s e l metodo i n i t d e A p p l e t < b r> ∗ Se e s t a b l e c e n l o s c o l o r e s d e l f o n d o y d e ∗ ademas d e l t i p o d e f u e n t e ∗/ p u b l i c void init (){ setBackground ( Color . blue ) ; setForeground ( Color . white ) ; s e t F o n t ( new Font ( ” A r i a l ” , Font . BOLD, 1 8 ) ) ; }
la
desplaza
”;
fuente
/∗ ∗ O c u l t a m o s e l metodo s t a r t ( ) d e A p p l e t < b r> ∗ Se c r e a un h i l o y s e l a n z a ∗/ p u b l i c void start () { // E s t o s e p u e d e h a c e r ya q u e e s t a c l a s e i m p l e m e n t a a R u n n a b l e t = new Thread ( t h i s ) ; parado = f a l s e ; t . start () ; } /∗ ∗ I m p l e m e n t a m o s e l metodo r u n ( ) ya q u e l a c l a s e Banner ∗ i m p l e m e n t a a l a i n t e r f a z R u n n a b l e . < b r> ∗ En e s t e metodo h a y un b u c l e i n f i n i t o d e l t r o d e l c u a l ∗ s e r e p i n t a e l a p p l e t , s e duerme d u r a n t e ∗ 2 5 0 m i l i s e g u n d o s , y e l primer c a r a c t e r s e pone a l f i n a l ∗ d e l a c a d e n a . < b r> ∗ Si se debe parar e l h i l o se s a l e d e l b u c l e . ∗/ p u b l i c v o i d run ( ) { c h a r ch ; for
( ; ; ){ try{ repaint () ; Thread . s l e e p ( 2 5 0 ) ; ch = msg . c h a r A t ( 0 ) ; msg = msg . s u b s t r i n g ( 1 , msg . l e n g t h ( ) ) ; msg = msg + ch ; i f ( parado ) break ; } c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {}
} } /∗ ∗ O c u l t a m o s e l metodo s t o p ( ) d e A p p l e t < b r> ∗ S i s e d e b e p a r a r e l a p p l e t s e pone e l i n d i c a d o r a ∗ y se asigna la r e f e r e n c i a al h i l o a n u l l .
[email protected]
false
P´ agina: 6
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
∗/ p u b l i c v o i d stop () { parado = t r u e ; t = null ; } /∗ ∗ O c u l t a m o s e l metodo p a i n t ( G r a p h i c s g ) d e A p p l e t < b r> ∗ Se l i m i t a a p i n t a r e l mensage . E s t e metodo s e r a l l a m a d o ∗ cuando s e l l a m e a r e p a i n t ( ) ∗/ p u b l i c v o i d paint ( Graphics g ) { g . d r a w S t r i n g ( msg , 5 0 , 3 0 ) ; } }
Y el c´ odigo HTML donde se utiliza este applet es: Ejemplo de a p p l e t Ejemplo de a p p l e t
Este ejemplo se encuentra en el directorio ejemplos/applets/Ejemplo1
1.2.
Otro ejemplo con par´ ametros
Ahora vamos a modificar el c´odigo anterior para pasar como argumentos al applet la siguiente informaci´ on:
El texto a mostrar El intervalo de tiempo entre actualizaciones Las coordenadas donde debe mostrar el texto El sentido de desplazamiento del texto
import import
j a v a . awt . ∗ ; java . applet . ∗ ;
/∗ ∗ E s t a c l a s e e s un Banner en e l q u e a p a r e c e r a t e x t o d e s p l a z a n d o s e ∗/ p u b l i c c l a s s B a n n e r P a r a m e t r o s e x t e n d s A p p l e t i m p l e m e n t s Runnable { p r i v a t e S t r i n g msg ; p r i v a t e i n t tiempo ; p r i v a t e i n t cx ; p r i v a t e i n t cy ; p r i v a t e String sentido ; p r i v a t e Thread t = n u l l ; p r i v a t e b o o l e a n parado ; /∗ ∗ O c u l t a m o s e l metodo i n i t d e A p p l e t < b r> ∗ Se e s t a b l e c e n l o s c o l o r e s d e l f o n d o y d e ∗ ademas d e l t i p o d e f u e n t e
[email protected]
la
fuente
P´ agina: 7
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
∗/ p u b l i c void init (){ setBackground ( Color . blue ) ; setForeground ( Color . white ) ; s e t F o n t ( new Font ( ” A r i a l ” , Font . BOLD, 1 8 ) ) ; } /∗ ∗ O c u l t a m o s e l metodo s t a r t ( ) d e A p p l e t < b r> ∗ Se o b t i e n e n l o s p a r a m e t r o s , s e c r e a un h i l o ∗/ p u b l i c void start () { S t r i n g parametro ; // O b t e n c i o n d e
los
y se
lanza
parametros
msg = g e t P a r a m e t e r ( ”TEXTO” ) ; i f ( msg== n u l l ) msg = ” Texto p o r d e f e c t o ” ; msg = ”
” + msg + ”
”;
s e n t i d o = g e t P a r a m e t e r ( ”SENTIDO” ) ; i f ( s e n t i d o== n u l l ) sentido = ”I” ; p a r a m e t r o = g e t P a r a m e t e r ( ”TIEMPO” ) ; try{ i f ( p a r a m e t r o != n u l l ) tiempo = I n t e g e r . p a r s e I n t ( parametro ) ; else t i e m p o = 2 5 0 ; // Por d e f e c t o } c a t c h ( NumberFormatException e ) { // S i s e ha p r o p o r c i o n a d o e l p a r a m e t r o p e r o no e s un numero tiempo = 2 5 0 ; } p a r a m e t r o = g e t P a r a m e t e r ( ”CX” ) ; try{ i f ( p a r a m e t r o != n u l l ) cx = I n t e g e r . p a r s e I n t ( p a r a m e t r o ) ; else cx = 5 0 ; // Por d e f e c t o } c a t c h ( NumberFormatException e ) { // S i s e ha p r o p o r c i o n a d o e l p a r a m e t r o p e r o no e s un numero cx = 5 0 ; } p a r a m e t r o = g e t P a r a m e t e r ( ”CY” ) ; try{ i f ( p a r a m e t r o != n u l l ) cy = I n t e g e r . p a r s e I n t ( p a r a m e t r o ) ; else cy = 3 0 ; // Por d e f e c t o } c a t c h ( NumberFormatException e ) { // S i s e ha p r o p o r c i o n a d o e l p a r a m e t r o p e r o no e s un numero cy = 3 0 ; } // E s t o s e p u e d e h a c e r ya q u e t = new Thread ( t h i s ) ; parado = f a l s e ; t . start () ;
esta
clase
valido
valido
valido
implementa a Runnable
} /∗ ∗ I m p l e m e n t a m o s e l metodo r u n ( ) ya q u e l a c l a s e Banner ∗ i m p l e m e n t a a l a i n t e r f a z R u n n a b l e . < b r> ∗ En e s t e metodo h a y un b u c l e i n f i n i t o d e l t r o d e l c u a l ∗ s e r e p i n t a e l a p p l e t , s e duerme d u r a n t e ∗ 2 5 0 m i l i s e g u n d o s , y e l primer c a r a c t e r s e pone a l f i n a l ∗ d e l a c a d e n a . < b r> ∗ Si se debe parar e l h i l o se s a l e d e l b u c l e . ∗/ p u b l i c v o i d run ( ) { c h a r ch ; for
( ; ; ){ try{ repaint () ; Thread . s l e e p ( t i e m p o ) ; // En f u n c i o n d e s e n t i d o d e s p l a z a m o s // i z q u i e r d a o a l a d e r e c h a if
la
frase a la
( s e n t i d o . compareTo ( ” I ” ) ==0){ ch = msg . c h a r A t ( 0 ) ; msg = msg . s u b s t r i n g ( 1 , msg . l e n g t h ( ) ) ; msg = msg + ch ;
} else{ ch = msg . c h a r A t ( msg . l e n g t h ( ) −1) ; msg = msg . s u b s t r i n g ( 0 , msg . l e n g t h ( ) −1) ; msg = ch + msg ; }
[email protected]
P´ agina: 8
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
( parado ) break ; } c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {} if
} } /∗ ∗ O c u l t a m o s e l metodo s t o p ( ) d e A p p l e t < b r> ∗ S i s e d e b e p a r a r e l a p p l e t s e pone e l i n d i c a d o r a ∗ y se asigna la r e f e r e n c i a al h i l o a n u l l . ∗/ p u b l i c v o i d stop () { parado = t r u e ; t = null ; }
false
/∗ ∗ O c u l t a m o s e l metodo p a i n t ( G r a p h i c s g ) d e A p p l e t < b r> ∗ Se l i m i t a a p i n t a r e l mensage . E s t e metodo s e r a l l a m a d o ∗ cuando s e l l a m e a r e p a i n t ( ) ∗/ p u b l i c v o i d paint ( Graphics g ) { g . d r a w S t r i n g ( msg , cx , cy ) ; } }
Y el c´ odigo HTML donde se utiliza este applet y se le pasan los par´ametros es: Ejemplo de a p p l e t con p a r a m e t r o s Ejemplo de a p p l e t con p a r a m e t r o s
parte
i n f e r i o r ” />
0) s a l i d a = c o d i f i c a d o r . d o F i n a l ( e n t r a d a , 0 , numLeidos ) ; else s a l i d a = c o d i f i c a d o r . doFinal () ; out . w r i t e ( s a l i d a ) ; } }
import import import import
java . io . ∗ ; java . s e c u r i t y . ∗ ; javax . crypto . ∗ ; javax . crypto . spec . ∗ ;
p u b l i c c l a s s Encripta { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { // Modo de o p e r a c i o n :
encriptar
i n t modo = Cipher .ENCRYPT MODE; i f ( a r g s . l e n g t h !=4) { System . out . p r i n t l n ( ” \nNumero i n c o r r e c t o de e n t r a d a s . ” ) ; System . out . p r i n t l n ( ”Uso : ” ) ; System . out . p r i n t l n ( ” j a v a E n c r i p t a a l g o r i t m o f i c h e r o C l a v e f i c h e r o E n t r a d a f i c h e r o C o d i f i c a d o \n” ) ; }else{ try { // L e c t u r a de l a
clave
O b j e c t I n p u t S t r e a m c l = new O b j e c t I n p u t S t r e a m ( new F i l e I n p u t S t r e a m ( a r g s [ 1 ] ) ) ; Key c l a v e = ( Key ) c l . r e a d O b j e c t ( ) ; cl . close () ; InputStream i n = new F i l e I n p u t S t r e a m ( a r g s [ 2 ] ) ; OutputStream out = new F i l e O u t p u t S t r e a m ( a r g s [ 3 ] ) ; Cipher c o d i f i c a d o r = Cipher . g e t I n s t a n c e ( a r g s [ 0 ] ) ; c o d i f i c a d o r . i n i t ( modo , c l a v e ) ; C i f r a . c i f r a ( in , out , c o d i f i c a d o r ) ; in . close () ; out . c l o s e ( ) ; } c a t c h ( IOException e ) { System . e r r . p r i n t l n ( ” E r r o r E/S” ) ; } catch ( GeneralSecurityException e ) { System . e r r . p r i n t l n ( ” E r r o r en e l a l g o r i t m o de e n c r i p t a c i o n . ” ) ; } c a t c h ( ClassNotFoundException e ) { System . e r r . p r i n t l n ( ” E r r o r en l a r e c u p e r a c i o n de l a c l a v e ” ) ;
[email protected]
P´ agina: 32
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
} } } }
java . io . ∗ ; java . s e c u r i t y . ∗ ; javax . crypto . ∗ ; javax . crypto . spec . ∗ ;
import import import import
p u b l i c c l a s s Desencripta { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { // Modo de o p e r a c i o n :
desencriptar
i n t modo = Cipher .DECRYPT MODE; i f ( a r g s . l e n g t h !=4) { System . out . p r i n t l n ( ” \nNumero i n c o r r e c t o de e n t r a d a s . ” ) ; System . out . p r i n t l n ( ”Uso : ” ) ; System . out . p r i n t l n ( ” j a v a D e s e n c r i p t a a l g o r i t m o f i c h e r o C l a v e f i c h e r o C o d i f i c a d o f i c h e r o D e c o d i f i c a d o \n” ) ; }else{ try { // L e c t u r a de l a
clave
O b j e c t I n p u t S t r e a m c l = new O b j e c t I n p u t S t r e a m ( new F i l e I n p u t S t r e a m ( a r g s [ 1 ] ) ) ; Key c l a v e = ( Key ) c l . r e a d O b j e c t ( ) ; cl . close () ; InputStream i n = new F i l e I n p u t S t r e a m ( a r g s [ 2 ] ) ; OutputStream out = new F i l e O u t p u t S t r e a m ( a r g s [ 3 ] ) ; Cipher c o d i f i c a d o r = Cipher . g e t I n s t a n c e ( a r g s [ 0 ] ) ; c o d i f i c a d o r . i n i t ( modo , c l a v e ) ; C i f r a . c i f r a ( in , out , c o d i f i c a d o r ) ; in . close () ; out . c l o s e ( ) ; } c a t c h ( IOException e ) { System . e r r . p r i n t l n ( ” E r r o r E/S” ) ; } catch ( GeneralSecurityException e ) { System . e r r . p r i n t l n ( ” E r r o r en e l a l g o r i t m o de e n c r i p t a c i o n . ” ) ; } c a t c h ( ClassNotFoundException e ) { System . e r r . p r i n t l n ( ” E r r o r en l a r e c u p e r a c i o n de l a c l a v e ” ) ; } } } }
4.2.
Codificadores asim´ etricos o de clave p´ ublica
La idea b´ asica es que se dispone de un par de claves: una clave p´ ublica y otra privada. Alguien que desee enviar un mensaje secreto a otra persona o entidad debe utilizar la clave p´ ublica de la otra parte para encriptar el mensaje. La mayor parte de los algoritmos de clave p´ ublica son codificadores que act´ uan sobre bloques de datos, que tratan el mensaje como una secuencia de enteros y se basan su seguridad en la dificultad de resolver un determinado problema matem´atico.
[email protected]
P´ agina: 33
Applets. Applets Firmados. Encriptaci´ on. Curso 04/05
LP (Telem´atica) Universitat de Val`encia
El algoritmo m´as conocido es el RSA (Rivest, Shamir y Adleman) en el que el problema matem´ atico es el de la factorizaci´on de un n´ umero en dos n´ umeros primos. Para que el c´odigo resultante sea seguro, el tama˜ no de las claves y los bloques debe se grande. El tama˜ no de bloque t´ıpico en codificadores sim´etricos es de 64 o 128 bits, mientras que el tama˜ no de clave t´ıpico para RSA es de al menos 640 bits y el tama˜ no de los bloques de 1024 o 2048 bits. Debido al mayor tama˜ no de los bloques y las claves, los codificadores asim´etricos son m´ as lentos que los sim´etricos por lo que son m´as utilizados para firmas digitales y para codificar claves sim´etricas. En el directorio Ejemplos/Encriptacion/Asimetrico hay una serie de directorios que contienen las clases que se detallan a continuaci´on. Estas clases muestran el uso de conjunto de la criptograf´ıa de clave sim´etrica y asim´etrica.
Clase
Descripci´ on
GeneraClavesRSA
Genera una clave p´ ublica y otra privada utilizando RSA y las almacena en ficheros. Clase que genera una clave sim´etrica, encripta un fichero con esta clave y encripta la clave sim´etrica utilizando la clave p´ ublica. Desencripta la clave sim´etrica utilizando la clave privada. Una vez ha desencriptado la clave sim´etrica desencripta el mensaje.
EncriptaMensaje DesencriptaMensaje
La secuencia de acciones a realizar por los dos actores (Destinatario y Remitente) es:
Destinatario 1) Genera claves p´ ublica y privada
Remitente 2) Obtiene clave p´ ublica del destinatario 3) Genera clave sim´etrica y encripta el mensaje usando la clave sim´etrica 4) Encripta la clave sim´etrica con la clave p´ ublica del destinatario 5) Env´ıa la clave sim´etrica encriptada con la clave p´ ublica y el mensaje encriptado con la clave sim´etrica.
6) Desencripta la clave sim´etrica con la clave privada 7) Desencripta el mensaje
[email protected]
P´ agina: 34