La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

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


Descargar ppt "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."

Presentaciones similares


Anuncios Google