Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAarón Dominguez Modificado hace 10 años
1
Aplicaciones Criptográficas Java Proyecto Fin de Carrera Facultad de Informática Universidad de Las Palmas de Gran Canaria Autor: Jesús María Ramos Saky Tutor: Miguel Ángel Pérez Aguiar 24/05/06 http://jcef.sourceforge.net
2
Breve descripción (1/4)
3
El objetivo es Aprender a utilizar mecanismos criptográficos para asegurar objetos y volver a recuperarlos: Protección y Autentificación. El resultado del proyecto: Conjunto librerías Java sobre algoritmos criptográficos. Destacando JCEF (Java Cryptographic Extension Framework). Breve descripción (2/4)
4
JCEF (Java Cryptographic Extension Framework): Es útil y sobre todo de muy fácil uso. Ideal para usuarios inexpertos. Suplanta a las librerías criptográficas Java estándar llamadas JCA y JCE. Breve descripción (3/4)
5
Como un EJEMPLO del valor añadido de este proyecto observen cómo se asegura un objeto y se vuelve a recuperar con suma facilidad: /* 1. */ Object object = new String(my object); /* 2. */ CryptoAlgorithm secureAlgorithm = new AES_BlockSymmetricProtectionRREXKY(); /* 3. */ SecureObject secureObject = new SecureObject(object, secureAlgorithm); /* 4. */ Object = (String)secureObject.getObject(secureAlgorithm); Breve descripción (4/4)
6
Introducción Introducción a la seguridad
7
Introducción a la seguridad (1/9) La seguridad es muy importante hoy día
8
Introducción a la seguridad (2/9) Evitar que se obtengan documentos de forma ilegal.
9
Introducción a la seguridad (3/9) Evitar que se obtenga información sobre los comunicantes.
10
Introducción a la seguridad (4/9) Evitar que se pueda suplantar una identidad
11
Introducción a la seguridad (5/9) Evitar que se puedan repetir mensajes sin ser detectada tal repetición
12
Introducción a la seguridad (6/9) Evitar la modificación de mensajes antes de llegar a su destinatario
13
Introducción a la seguridad (7/9) Evitar la interrupción de sus servicios
14
Introducción a la seguridad (8/9) Los servicios de seguridad solucionan o previenen los ataques
15
Introducción a la seguridad (9/9) Y para implementar estos servicios, se utiliza principalmente la Criptografía.
16
Introducción Criptografía Orientada a Objetos
17
Criptografía OO (1/8) La Criptografía es una herramienta que permite: –Asegurar objetos. –Y recuperar objetos asegurados.
18
Criptografía OO (2/8) La Criptografía gestiona objetos seguros: –Protegidos y/o Autentificables
19
Criptografía OO (3/8)
20
Criptografía OO (4/8)
21
Criptografía OO (5/8)
22
Criptografía OO (6/8) Es auténtico sólo si la huella de éste objeto es la misma que la adjunta
23
Criptografía OO (7/8) A diferencia de la huella digital, los sellos digitales proporcionan un mayor nivel de seguridad al utilizar una clave simétrica tanto para la generación como para la verificación
24
Criptografía OO (8/8) Finalmente, las firmas digitales proporcionan el mayor nivel de seguridad de todos los tipos de autentificación al utilizar claves asimétricas, evitándose así distribuir la clave de firmado.
25
Introducción Análisis de JCA y JCE
26
Análisis de JCA y JCE (1/40) El uso más habitual de la criptografía: –Crear objetos seguros –Obtener objetos asegurados –Con parámetros generados recientemente –O reutilizando parámetros
27
Análisis de JCA y JCE (2/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 2. Almacenar parámetros criptográficos para un uso posterior 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes
28
Análisis de JCA y JCE (3/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.1. Definición del objeto a asegurar y carga del proveedor 1.2. Definición del generador de claves simétricas 1.3. Inicialización del generador de claves simétricas y generación de la clave 1.4. Definición del generador de parámetros 1.5. Inicialización del generador de parámetros 1.6. Generación del parámetro 1.7. Definición del algoritmo de seguridad 1.8. Inicialización del algoritmo de seguridad 1.9. Obtención del parámetro que se haya podido generar automáticamente 1.10. Creación del objeto seguro
29
Análisis de JCA y JCE (4/40) 2. Almacenar parámetros criptográficos para un uso posterior 2.1. Traducción de la clave 2.2. Traducción del parámetro 2.3. Otra traducción del parámetro 2.4. Almacenamiento de los parámetros
30
Análisis de JCA y JCE (5/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.1. Carga de los parámetros 3.2. Definición del algoritmo de seguridad 3.3. Traducción de los parámetros a la forma adecuada 3.4. Inicialización del algoritmo de seguridad para desprotección 3.5. Obtención del objeto asegurado
31
Análisis de JCA y JCE (6/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.1. Definición del objeto y carga de los parámetros 4.2. Traducción de la clave a su forma adecuada 4.3. Traducción del parámetro a su forma adecuada 4.4. Definición del algoritmo de seguridad 4.5. Inicialización del algoritmo de seguridad para protección 4.6. Obtención del parámetro si fuera generado automáticamente 4.7. Creación del objeto seguro
32
Análisis de JCA y JCE (7/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.1. Carga de los parámetros 5.2. Definición del algoritmo de seguridad 5.3. Traducción de la clave a su forma adecuada 5.4. Traducción del parámetro a su forma adecuada 5.5. Inicialización del algoritmo de seguridad para desprotección 5.6. Obtención del objeto asegurado
33
Análisis de JCA y JCE (8/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.1. Definición del objeto a asegurar y carga del proveedor String object = "my object"; Provider provider = new BouncyCastleProvider(); Security.addProvider(provider); String providerName = provider.getName();
34
Análisis de JCA y JCE (9/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.2. Definición del generador de claves simétricas SecureRandom random = null; Key key = null; javax.crypto.KeyGenerator keyGenerator = null; try { keyGenerator = javax.crypto.KeyGenerator.getInstance("AES", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; }
35
Análisis de JCA y JCE (10/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.3. Inicialización del generador de claves simétricas y generación de la clave int keySize = 256; AlgorithmParameterSpec genParameter = null; if (genParameter != null && random == null) { try { keyGenerator.init(genParameter); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (genParameter != null && random != null) { try { keyGenerator.init(genParameter, random); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (genParameter == null && keySize > 0 && random == null) { keyGenerator.init(keySize); } else if (genParameter == null && keySize > 0 && random != null) { keyGenerator.init(keySize, random); } else if (genParameter == null && keySize <= 0 && random != null) { keyGenerator.init(random); key = keyGenerator.generateKey();
36
Análisis de JCA y JCE (11/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.4. Definición del generador de parámetros AlgorithmParameterSpec parameter = null; Class parameterType = IvParameterSpec.class; AlgorithmParameterGenerator parameterGenerator = null; try { parameterGenerator = AlgorithmParameterGenerator.getInstance("AES", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; }
37
Análisis de JCA y JCE (12/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.5. Inicialización del generador de parámetros genParameter = null; int parameterSize = 16; if (genParameter != null && random == null) { try { parameterGenerator.init(genParameter); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (genParameter != null && random != null) { try { parameterGenerator.init(genParameter, random); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (genParameter == null && random == null) { parameterGenerator.init(parameterSize); } else if (genParameter == null && random != null) { parameterGenerator.init(parameterSize, random); }
38
Análisis de JCA y JCE (13/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.6. Generación del parámetro AlgorithmParameters algorithmParameters = parameterGenerator.generateParameters(); try { parameter = algorithmParameters.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; }
39
Análisis de JCA y JCE (14/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.7. Definición del algoritmo de seguridad Cipher secureAlgorithm = null; try { secureAlgorithm = Cipher.getInstance("AES/CBC/PKCS7Padding", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } catch (NoSuchPaddingException e) { e.printStackTrace(); return; }
40
Análisis de JCA y JCE (15/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.8. Inicialización del algoritmo de seguridad int mode = Cipher.ENCRYPT_MODE; if (parameter != null && random == null) { try { secureAlgorithm.init(mode, key, parameter); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter != null && random != null) { try { secureAlgorithm.init(mode, key, parameter, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter == null && random == null) { try { secureAlgorithm.init(mode, key); } catch (InvalidKeyException e) { e.printStackTrace(); return; } } else if (parameter == null && random != null) { try { secureAlgorithm.init(mode, key, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } }
41
Análisis de JCA y JCE (16/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.9. Obtención del parámetro que se haya podido generar automáticamente try { algorithmParameters = secureAlgorithm.getParameters(); } catch (Throwable throwable) {} if (parameter == null && algorithmParameters != null) { if (parameterType == null) { parameterType = AlgorithmParameterSpec.class; } try { parameter = algorithmParameters.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; } }
42
Análisis de JCA y JCE (17/40) 1. Asegurar un objeto con nuevos parámetros criptográficos 1.10. Creación del objeto seguro SealedObject secureObject = null; try { secureObject = new SealedObject(object, secureAlgorithm); } catch (IllegalBlockSizeException e) { e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); return; } saveObject(secureObject);
43
Análisis de JCA y JCE (18/40) 2. Almacenar parámetros criptográficos para un uso posterior 2.1. Traducción de la clave encodedKey = key.getEncoded();
44
Análisis de JCA y JCE (19/40) 2. Almacenar parámetros criptográficos para un uso posterior 2.2. Traducción del parámetro if (parameter instanceof IvParameterSpec) { IvParameterSpec iv = (IvParameterSpec)parameter; encodedParameter = iv.getIV(); }
45
Análisis de JCA y JCE (20/40) 2. Almacenar parámetros criptográficos para un uso posterior 2.3. Otra traducción del parámetro AlgorithmParameters parameterTranslator = null; try { parameterTranslator = AlgorithmParameters.getInstance("RIJNDAEL", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } try { parameterTranslator.init(parameter); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; } try { encodedParameter = parameterTranslator.getEncoded(); } catch (IOException e) { e.printStackTrace(); return; }
46
Análisis de JCA y JCE (21/40) 2. Almacenar parámetros criptográficos para un uso posterior 2.4. Almacenamiento de los parámetros saveKey(encodedKey); saveParameter(encodedParameter);
47
Análisis de JCA y JCE (22/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.1. Carga de los parámetros encodedKey = loadKey(); encodedParameter = loadParameter();
48
Análisis de JCA y JCE (23/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.2. Definición del algoritmo de seguridad try { secureAlgorithm = Cipher.getInstance("AES/CBC/PKCS7Padding", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } catch (NoSuchPaddingException e) { e.printStackTrace(); return; }
49
Análisis de JCA y JCE (24/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.3. Traducción de los parámetros a la forma adecuada key = new SecretKeySpec(encodedKey, "AES"); parameterType = IvParameterSpec.class; parameterTranslator = null; try { parameterTranslator = AlgorithmParameters.getInstance("RIJNDAEL", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } try { parameterTranslator.init(encodedParameter); } catch (IOException e) { e.printStackTrace(); return; } try { parameter = parameterTranslator.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; }
50
Análisis de JCA y JCE (25/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.4. Inicialización del algoritmo de seguridad para desprotección mode = Cipher.DECRYPT_MODE; if (parameter != null && random == null) { try { secureAlgorithm.init(mode, key, parameter); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter != null && random != null) { try { secureAlgorithm.init(mode, key, parameter, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter == null && random == null) { try { secureAlgorithm.init(mode, key); } catch (InvalidKeyException e) { e.printStackTrace(); return; } } else if (parameter == null && random != null) { try { secureAlgorithm.init(mode, key, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } }
51
Análisis de JCA y JCE (26/40) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 3.5. Obtención del objeto asegurado try { secureObject = (SealedObject)loadObject(); object = (String)secureObject.getObject(secureAlgorithm); } catch (IllegalBlockSizeException e) { e.printStackTrace(); return; } catch (BadPaddingException e) { e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); return; } catch (ClassNotFoundException e) { e.printStackTrace(); return; }
52
Análisis de JCA y JCE (27/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.1. Definición del objeto y carga de los parámetros String otherObject = "other object"; encodedKey = loadKey(); encodedParameter = loadParameter();
53
Análisis de JCA y JCE (28/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.2. Traducción de la clave a su forma adecuada key = new SecretKeySpec(encodedKey, "AES");
54
Análisis de JCA y JCE (29/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.3. Traducción del parámetro a su forma adecuada parameterType = IvParameterSpec.class; parameterTranslator = null; try { parameterTranslator = AlgorithmParameters.getInstance("RIJNDAEL", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } try { parameterTranslator.init(encodedParameter); } catch (IOException e) { e.printStackTrace(); return; } try { parameter = parameterTranslator.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; }
55
Análisis de JCA y JCE (30/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.4. Definición del algoritmo de seguridad secureAlgorithm = null; try { secureAlgorithm = Cipher.getInstance("AES/CBC/PKCS7Padding", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } catch (NoSuchPaddingException e) { e.printStackTrace(); return; }
56
Análisis de JCA y JCE (31/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.5. Inicialización del algoritmo de seguridad para protección mode = Cipher.ENCRYPT_MODE; if (parameter != null && random == null) { try { secureAlgorithm.init(mode, key, parameter); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter != null && random != null) { try { secureAlgorithm.init(mode, key, parameter, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter == null && random == null) { try { secureAlgorithm.init(mode, key); } catch (InvalidKeyException e) { e.printStackTrace(); return; } } else if (parameter == null && random != null) { try { secureAlgorithm.init(mode, key, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } }
57
Análisis de JCA y JCE (32/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.6. Obtención del parámetro si fuera generado automáticamente try { algorithmParameters = secureAlgorithm.getParameters(); } catch (Throwable throwable) {} if (parameter == null && algorithmParameters != null) { if (parameterType == null) { parameterType = AlgorithmParameterSpec.class; } try { parameter = algorithmParameters.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; } }
58
Análisis de JCA y JCE (33/40) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 4.7. Creación del objeto seguro SealedObject otherSecureObject = null; try { otherSecureObject = new SealedObject(otherObject, secureAlgorithm); } catch (IllegalBlockSizeException e) { e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); return; } saveObject(otherSecureObject);
59
Análisis de JCA y JCE (34/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.1. Carga de los parámetros encodedKey = loadKey(); encodedParameter = loadParameter();
60
Análisis de JCA y JCE (35/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.2. Definición del algoritmo de seguridad try { secureAlgorithm = Cipher.getInstance("AES/CBC/PKCS7Padding", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } catch (NoSuchPaddingException e) { e.printStackTrace(); return; }
61
Análisis de JCA y JCE (36/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.3. Traducción de la clave a su forma adecuada key = new SecretKeySpec(encodedKey, "AES");
62
Análisis de JCA y JCE (37/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.4. Traducción del parámetro a su forma adecuada parameterType = IvParameterSpec.class; parameterTranslator = null; try { parameterTranslator = AlgorithmParameters.getInstance("RIJNDAEL", providerName); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } catch (NoSuchProviderException e) { e.printStackTrace(); return; } try { parameterTranslator.init(encodedParameter); } catch (IOException e) { e.printStackTrace(); return; } try { parameter = parameterTranslator.getParameterSpec(parameterType); } catch (InvalidParameterSpecException e) { e.printStackTrace(); return; }
63
Análisis de JCA y JCE (38/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.5. Inicialización del algoritmo de seguridad para desprotección mode = Cipher.DECRYPT_MODE; if (parameter != null && random == null) { try { secureAlgorithm.init(mode, key, parameter); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter != null && random != null) { try { secureAlgorithm.init(mode, key, parameter, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); return; } } else if (parameter == null && random == null) { try { secureAlgorithm.init(mode, key); } catch (InvalidKeyException e) { e.printStackTrace(); return; } } else if (parameter == null && random != null) { try { secureAlgorithm.init(mode, key, random); } catch (InvalidKeyException e) { e.printStackTrace(); return; } }
64
Análisis de JCA y JCE (39/40) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes 5.6. Obtención del objeto asegurado try { otherSecureObject = (SealedObject)loadObject(); object = (String)otherSecureObject.getObject(secureAlgorithm); } catch (IllegalBlockSizeException e) { e.printStackTrace(); return; } catch (BadPaddingException e) {e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); return; } catch (ClassNotFoundException e) { e.printStackTrace(); return; } }
65
Análisis de JCA y JCE (40/40) Deficiencias JCA y JCE –Difícil uso y aprendizaje. –Mucho conocimiento técnico exigido. –Más líneas de código de las necesarias. –Gran esfuerzo en tiempo exigido. –Gran dedicación por usuario. –Muy compleja para usuarios inexpertos.
66
El proyecto Valor añadido de JCEF
67
Valor añadido de JCEF (1/7) 1. Asegurar un objeto con nuevos parámetros criptográficos 2. Almacenar parámetros criptográficos para un uso posterior 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes
68
Valor añadido de JCEF (2/7) 1. Asegurar un objeto con nuevos parámetros criptográficos try { // 1. Se desea asegurar un objeto // 1.1. Definimos un objeto que se desea asegurar String object = "my object"; // 1.2. Se selecciona un algoritmo de seguridad SymmetricProtection secureAlgorithm = new AES_BlockSymmetricProtectionRREXKY(); // 1.3. Se inicializa el algoritmo con parámetros concretos si fuera necesario (esta inicialización es opcional) // Esta inicialización es inexistente ya que se desea utilizar unos parámetros nuevos (clave y parámetro generado automáticamente por el algoritmo) // 1.4. Se asegura el objeto y se guarda en algún lugar SecureObject secureObject = new SecureObject(object, secureAlgorithm); saveObject(secureObject); //...
69
Valor añadido de JCEF (3/7) 2. Almacenar parámetros criptográficos para un uso posterior // 2. Se guardan los parámetros para su posterior uso, ya sea para generar nuevos objetos seguros u obtener objetos asegurados (objetos inseguros) que es lo más habitual byte[] encodedKey = secureAlgorithm.getSymmetricKey().getEncoded(); byte[] encodedParameter = secureAlgorithm.getEncodedParameter(); saveKey(encodedKey); saveParameter(encodedParameter); //...
70
Valor añadido de JCEF (4/7) 3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos //... tiempo más tarde en algún otro lugar del código... // 3. Se desea recuperar el objeto de forma segura // 3.1. Cargamos los datos que se necesitan encodedKey = loadKey(); encodedParameter = loadParameter(); // 3.2. Inicializamos el algoritmo con los parámetros apropiados para poder obtener el objeto asegurado secureAlgorithm = new AES_BlockSymmetricProtectionRREXKY(); secureAlgorithm.setSymmetricKey(encodedKey); secureAlgorithm.setParameter(encodedParameter); // 3.3. Se obtiene el objeto asegurado a partir de su versión en forma de objeto seguro secureObject = (SecureObject)loadObject(); object = (String)secureObject.getObject(secureAlgorithm); //...
71
Valor añadido de JCEF (5/7) 4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes //... tiempo más tarde en algún otro lugar del código... // 4. Se desea asegurar un nuevo objeto con la misma clave y parámetro en un instante de tiempo posterior // 4.1. Se define el nuevo objeto String otherObject = "other object"; // 4.2. Se cargan los parámetros que se necesitan encodedKey = loadKey(); encodedParameter = loadParameter(); // 4.3. Se inicializa el algoritmo secureAlgorithm = new AES_BlockSymmetricProtectionRREXKY(); secureAlgorithm.setSymmetricKey(encodedKey); secureAlgorithm.setParameter(encodedParameter); // 4.4. Se asegura el nuevo objeto SecureObject otherSecureObject = new SecureObject(otherObject, secureAlgorithm); saveObject(otherSecureObject); //...
72
Valor añadido de JCEF (6/7) 5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes //... tiempo más tarde en algún otro lugar del código... // 5. Se desea recuperar el nuevo objeto asegurado // 5.1. Cargamos los datos que se necesitan encodedKey = loadKey(); encodedParameter = loadParameter(); // 5.2. Inicializamos el algoritmo con los parámetros apropiados para poder obtener el objeto asegurado secureAlgorithm = new AES_BlockSymmetricProtectionRREXKY(); secureAlgorithm.setSymmetricKey(encodedKey); secureAlgorithm.setParameter(encodedParameter); // 5.3. Se obtiene el objeto asegurado a partir de su versión en forma de objeto seguro otherSecureObject = (SecureObject)loadObject(); object = (String)otherSecureObject.getObject(secureAlgorithm); } catch (Throwable throwable) { throwable.printStackTrace(); return; }
73
Valor añadido de JCEF (7/7) Mejoras de JCEF –Fácil de utilizar. –Sencillo y rápido aprendizaje. –Posibilidad de mejora. –Fácil definición de nuevos algoritmos criptográficos –64 algoritmos de todo tipo. –Sencillo para usuarios inexpertos y expertos. –Objetos seguros para cualquier algoritmo criptográfico
74
El proyecto Detalles y curiosidades
75
Detalles y curiosidades (1/7) Estructura y composición del proyecto
76
Detalles y curiosidades (2/7) Pruebas realizadas –Todos los métodos de todas las clases. –Pruebas de lectura y escritura de propiedades. –Pruebas de funcionalidad sobre los algoritmos.
77
Detalles y curiosidades (3/7) Metodología
78
Detalles y curiosidades (4/7) Coste del proyecto –Coste económico: CERO EUROS –Coste de tiempo: entre 2000 y 3000 horas. –Complejidad:
79
Detalles y curiosidades (5/7)
80
Detalles y curiosidades (6/7) Disponibilidad http://jcef.sourceforge.net
81
Detalles y curiosidades (7/7) Recursos utilizados ArgoUML WinSCP FileZilla Mozilla Firefox
82
El proyecto Futuros proyectos
83
Futuros proyectos (1/7) Ampliaciones de JCEF
84
Futuros proyectos (2/7) Pruebas sobre algoritmos JCEF
85
Futuros proyectos (3/7) Certificados digitales con JCEF
86
Futuros proyectos (4/7) Archivos seguros con JCEF
87
Futuros proyectos (5/7) Proveedor Criptográfico JCEF
88
Futuros proyectos (6/7) Almacén de objetos seguros con JCEF
89
Futuros proyectos (7/7) Metaimplementación de Aplicaciones Criptográficas Java
90
El proyecto Conclusiones
91
Conclusiones (1/3) Puntos débiles: 1.Tiempo empleado superior a 300 horas. 2.No haber desarrollado exactamente lo que estaba previsto desde un principio.
92
Conclusiones (2/3) Puntos fuertes: 1.Haber desarrollado un trabajo novedoso 2.Aguantar un año de trabajo. 3.Diseño de imágenes 4.Sección Preguntas frecuentes. 5.Sección Futuros proyectos. 6.Publicación del proyecto en una página web. 7.El uso 100% de herramientas Open Source, Freeware y gratuitas. 8.Conocimiento aplicado: Ingeniería del software, gráficos, programación, ofimática, diseño web,...
93
http://jcef.sourceforge.net
94
Aplicaciones Criptográficas Java Proyecto Fin de Carrera Facultad de Informática Universidad de Las Palmas de Gran Canaria Autor: Jesús María Ramos Saky Tutor: Miguel Ángel Pérez Aguiar 24/05/06 http://jcef.sourceforge.net
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.