24
Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-1 Especialista en Aplicaciones y Servicios Web con Java Enterprise Programacíon de Seguridad en Java Sesión 2 Encriptación Asimétrica

sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-1

Especialista en Aplicaciones y Servicios Web con Java Enterprise

Programacíon de Seguridad en Java

Sesión 2Encriptación Asimétrica

Page 2: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-2

Clave pública y clave privadaClases e interfaces en JavaEncriptación por clave de sesión (“session key”)Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Índice

Page 3: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-3

Clave pública y clave privadaClases e interfaces en JavaEncriptación por “session key”Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Clave pública y clave privada

Page 4: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-4

Esquema:

Clave pública y clave privada

hola Cif-EN Cif-DE holakrod

Clave pública Clave privada

Page 5: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-5

Características: Resuelve el problema de compartir un secreto sin que el intercambio sea sensible a “ataques-a-mitad”Las claves (pública y privada) del par son “complementarias” en ambas direccionesAlgoritmos: RSA (usado en SSL), El GammalClaves largas: 1024 bits (equiparable con 128 bits en el caso simétrico.

Estrategias de clave pública

Page 6: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-6

Clave pública y clave privadaClases e interfaces en JavaEncriptación por “session key”Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Clases e interfaces en Java

Page 7: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-7

Clase KeyPairEncapsula un par de claves. Para acceder a cada una de ellas se usan los métodos: getPublic(),getPrivate()

Clases PublicKey(PrivateKey)Interfaz para claves públicas (privadas). java.security.interfaces.RSAPublicKeyRSAPrivateKeyRSAPrivateCrtKey

Clase KeyPairGeneratorEl par se genera con genKeyPair()

Clases e interfaces en Java

Page 8: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-8

Clave pública y clave privadaClases e interfaces en JavaEncriptación por “session key”Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Encriptación por “session key”

Page 9: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-9

Motivación: La encriptación asimétrica (que es muy lenta) es especialmente útil para encriptar claves secretas(simétricas).En el modelo “clave-de-sesión” un mensaje se encripta con una clave secreta y esta a su vez se encripta con la clave pública del receptor del mensaje.Cuando el mensaje se recibe, el receptor usa su clave privada para desencriptar la clave secreta y, finalmente, ésta para desencriptar el mensaje.

Encriptación por “session key”

Page 10: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-10

Esquema (encriptación):

Encriptación por “session key”

hola Cif-EN krod

Cif-EN

Clave secreta Clave encriptada

Enviado a receptor

Clave pública del receptor

Page 11: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-11

Esquema (desencriptación):

Encriptación por “session key”

holaCif-DE

Cif-DE

Clave secreta

krod

Clave encriptada

Clave privada del receptor

Page 12: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-12

Encriptación por “session key”

En Java…. RSA.javaClave simétrica (“Blowfish”):

System.out.println("Generando clave Blowfish...");KeyGenerator generador = KeyGenerator.getInstance("Blowfish");generador.init(128);Key claveBlowfish = generador.generateKey();System.out.println("Formato: "+claveBlowfish.getFormat());

Page 13: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-13

Encriptación por “session key”

Par de claves RSA:

System.out.println("Generando par de claves RSA...");KeyPairGenerator generadorRSA = KeyPairGenerator.getInstance("RSA");

generadorRSA.initialize(1024);KeyPair claves = generadorRSA.genKeyPair();System.out.println("Generada la clave asimétrica.");

Page 14: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-14

Encriptación por “session key”

Encriptación de la clave “Blowfish”:

Cipher cifradorRSA=Cipher.getInstance("RSA/ECB/PKCS1Padding");

cifradorRSA.init(Cipher.ENCRYPT_MODE, claves.getPublic());

byte[] bytesClaveBlowfish = claveBlowfish.getEncoded();

byte[] claveBlowfishCifrada = cifradorRSA.doFinal(bytesClaveBlowfish);

Page 15: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-15

Encriptación por “session key”

Desencriptar y recrear de la clave “Blowfish”:

cifradorRSA.init(Cipher.DECRYPT_MODE, claves.getPrivate());

byte[] bytesClaveBlowfish2 = cifradorRSA.doFinal(claveBlowfishCifrada);

SecretKey nuevaClaveBlowfish = newSecretKeySpec(bytesClaveBlowfish2, "Blowfish");

Page 16: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-16

Clave pública y clave privadaClases e interfaces en JavaEncriptación por “session key”Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Codificación de claves públicas y privadas

Page 17: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-17

Motivación: Codificar para poder guardar las claves en ficheros. Claves públicas, debido a su mayor complejidad, se codifican en X.509 y las privadas en PKCS#8.Codificación: método getEncoded()Decodificación: utilizar un “spec” específico: • X509EncodedKeySpec()• PKCS8EncodedKeySpec()

Y se le pasa a un KeyFactory

Codificación de claves públicas y privadas

Page 18: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-18

Codificación de claves públicas y privadas

X509EncodedKeySpec spec = newX509EncodedKeySpec(bytesClave);

KeyFactory factoria = KeyFactory.getInstance("RSA");PublicKey clavePublica = factoria.generatePublic(spec);

PKCS8EncodedKeySpec spec = newPKCS8EncodedKeySpec(bytesClave);

KeyFactory factoria = KeyFactory.getInstance("RSA");PrivateKey clavePrivada = factoria.generatePrivate(spec);

Page 19: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-19

Clave pública y clave privadaClases e interfaces en JavaEncriptación por “session key”Codificación de claves públicas y privadasEncriptación de ficheros con RSA

Encriptación de ficheros con RSA

Page 20: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-20

Ejemplo…RSAFicheros.java

Integra todo lo visto en esta sesión (y la anterior) Usar la parte pública RSA para encriptar un fichero.

1. Generar y almacenar par RSAPública en X509 y privada con PBE + PKCS#8. Métodos: crearClave() :- encriptarPBE().

Encritpación de ficheros con RSA

Page 21: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-21

2. Método encriptar()Abrir fichero con la clave pública y transformarla de X.509 a PublicKeyCrear clave Rijndael y encriptar con la clave públicaGuardar la “clave sesión” encriptada (precedida de su longitud) al principio del fichero de salida.

3. Encriptar fichero con la “clave sesión”Generar un IV para el “stream” y guardarlo a continuación de la “clave sesión”.Crear cifrador Rijndael CBC y se aplica. El texto cifrado se añade al fichero de salida.

Encritpación de ficheros con RSA

Page 22: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-22

4. Método desencriptar()Obtener la clave privada necesaria para desencriptar la clave sesión, teniendo en cuenta que está a su vez encriptada por PBE: pedir password y llamar a desencriptarPBE()Pasar la clave de PKCS#8 a PrivateKeyDesencriptar la “sesión”:• Leer cabecera (clave sesión encriptada e iv) • Inicializar un descrifrador RSA• Desencriptar la claveConvertir en SecretKey y desencriptar el texto

Encritpación de ficheros con RSA

Page 23: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-23

Ejercicio3.java…Implementación básica del protocolo “Key Agreement” entre cliente y servidorIntercambio de claves públicas para construir un secreto compartido y luego usar dicho secreto para encriptar el canal de comunicación.Así, la información que el cliente envía al servidor está protegida por un cifrador de “stream”.

Ejercicios…

Page 24: sesion-2 - uajtech.ua.es/j2ee/2003-2004/modulos/sj/sesion02-traspas.pdfTitle: Microsoft PowerPoint - sesion-2.ppt Author: sco Created Date: 2/19/2004 5:09:27 PM

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Encriptación Asimétrica-24

Protocolo:1. Servidor. Crea un par y envía al cliente la parte pública.2. Cliente. Crea una clave secreta, la encripta con la parte

pública del servidor y se la envía a éste.3. Servidor. Recibe la clave secreta encriptada por su

parte pública y usa su clave privada para desencriptarla. Entonces inicializa un cifrador de “stream” de entrada. Crea un IV y se lo pasa el cliente.

4. Cliente. Recibe el IV y usa su clave secreta para inicializar un cifrador de “stream” de salida. Teclear.

5. Servidor. Desencripta lo que recibe e imprime.

Ejercicios…