Download - Aplicaciones Criptográficas Java
![Page 1: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/1.jpg)
Aplicaciones Criptográficas Aplicaciones Criptográficas JavaJava
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 Aguiar24/05/06
http://jcef.sourceforge.net
![Page 2: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/2.jpg)
Breve descripción Breve descripción (1/4)(1/4)
![Page 3: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/3.jpg)
• 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 Breve descripción (2/4)(2/4)
![Page 4: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/4.jpg)
• 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 Breve descripción (3/4)(3/4)
![Page 5: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/5.jpg)
• 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 Breve descripción (4/4)(4/4)
![Page 6: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/6.jpg)
Introducción
Introducción a la seguridad
![Page 7: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/7.jpg)
Introducción a la seguridad Introducción a la seguridad (1/9)(1/9)
La seguridad es muy importante hoy día
![Page 8: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/8.jpg)
Introducción a la seguridad Introducción a la seguridad (2/9)(2/9)
Evitar que se obtengan documentos de forma ilegal.
![Page 9: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/9.jpg)
Introducción a la seguridad Introducción a la seguridad (3/9)(3/9)
Evitar que se obtenga información sobre los comunicantes.
![Page 10: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/10.jpg)
Introducción a la seguridad Introducción a la seguridad (4/9)(4/9)
Evitar que se pueda suplantar una identidad
![Page 11: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/11.jpg)
Introducción a la seguridad Introducción a la seguridad (5/9)(5/9)
Evitar que se puedan repetir mensajes sin ser detectada tal repetición
![Page 12: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/12.jpg)
Introducción a la seguridad Introducción a la seguridad (6/9)(6/9)
Evitar la modificación de mensajes antes de llegar a su destinatario
![Page 13: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/13.jpg)
Introducción a la seguridad Introducción a la seguridad (7/9)(7/9)
Evitar la interrupción de sus servicios
![Page 14: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/14.jpg)
Introducción a la seguridad Introducción a la seguridad (8/9)(8/9)
Los servicios de seguridad solucionan o previenen los ataques
![Page 15: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/15.jpg)
Introducción a la seguridad Introducción a la seguridad (9/9)(9/9)
Y para implementar estos servicios, se utiliza principalmente la Criptografía.
![Page 16: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/16.jpg)
Introducción
Criptografía Orientada a Objetos
![Page 17: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/17.jpg)
Criptografía OO Criptografía OO (1/8)(1/8)
La Criptografía es una herramienta que permite:– Asegurar objetos.– Y recuperar objetos asegurados.
![Page 18: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/18.jpg)
Criptografía OO Criptografía OO (2/8)(2/8)
La Criptografía gestiona objetos seguros:– Protegidos y/o Autentificables
![Page 19: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/19.jpg)
Criptografía OO Criptografía OO (3/8)(3/8)
![Page 20: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/20.jpg)
Criptografía OO Criptografía OO (4/8)(4/8)
![Page 21: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/21.jpg)
Criptografía OO Criptografía OO (5/8)(5/8)
![Page 22: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/22.jpg)
Criptografía OO Criptografía OO (6/8)(6/8)
Es auténtico sólo si la huella de éste objeto es la misma que la adjunta
![Page 23: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/23.jpg)
Criptografía OO Criptografía OO (7/8)(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
![Page 24: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/24.jpg)
Criptografía OO Criptografía OO (8/8)(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.
![Page 25: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/25.jpg)
Introducción
Análisis de JCA y JCE
![Page 26: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/26.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (1/40)(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
![Page 27: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/27.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (2/40)(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
![Page 28: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/28.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (3/40)(3/40)
1. Asegurar un objeto con nuevos parámetros criptográficos
1.1. Definición del objeto a asegurar y carga del proveedor1.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áticamente1.10. Creación del objeto seguro
![Page 29: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/29.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (4/40)(4/40)
2. Almacenar parámetros criptográficos para un uso posterior2.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
![Page 30: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/30.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (5/40)(5/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.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
![Page 31: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/31.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (6/40)(6/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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
![Page 32: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/32.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (7/40)(7/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.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
![Page 33: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/33.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (8/40)(8/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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();
![Page 34: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/34.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (9/40)(9/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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; }
![Page 35: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/35.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (10/40)(10/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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();
![Page 36: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/36.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (11/40)(11/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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; }
![Page 37: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/37.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (12/40)(12/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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);
}
![Page 38: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/38.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (13/40)(13/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.6. Generación del parámetro
AlgorithmParameters algorithmParameters = parameterGenerator.generateParameters();
try { parameter = algorithmParameters.getParameterSpec(parameterType); }
catch (InvalidParameterSpecException e) { e.printStackTrace(); return; }
![Page 39: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/39.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (14/40)(14/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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; }
![Page 40: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/40.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (15/40)(15/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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; }
}
![Page 41: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/41.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (16/40)(16/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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; }
}
![Page 42: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/42.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (17/40)(17/40)
1. Asegurar un objeto con nuevos parámetros criptográficos1.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);
![Page 43: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/43.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (18/40)(18/40)
2. Almacenar parámetros criptográficos para un uso posterior2.1. Traducción de la clave
encodedKey = key.getEncoded();
![Page 44: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/44.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (19/40)(19/40)
2. Almacenar parámetros criptográficos para un uso posterior2.2. Traducción del parámetro
if (parameter instanceof IvParameterSpec) {
IvParameterSpec iv = (IvParameterSpec)parameter;
encodedParameter = iv.getIV();
}
![Page 45: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/45.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (20/40)(20/40)
2. Almacenar parámetros criptográficos para un uso posterior2.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; }
![Page 46: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/46.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (21/40)(21/40)
2. Almacenar parámetros criptográficos para un uso posterior2.4. Almacenamiento de los parámetros
saveKey(encodedKey);
saveParameter(encodedParameter);
![Page 47: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/47.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (22/40)(22/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.1. Carga de los parámetros
encodedKey = loadKey();
encodedParameter = loadParameter();
![Page 48: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/48.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (23/40)(23/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.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; }
![Page 49: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/49.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (24/40)(24/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.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; }
![Page 50: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/50.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (25/40)(25/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.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; }
}
![Page 51: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/51.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (26/40)(26/40)
3. Obtener el objeto asegurado utilizando los nuevos parámetros criptográficos3.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; }
![Page 52: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/52.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (27/40)(27/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.1. Definición del objeto y carga de los parámetros
String otherObject = "other object";
encodedKey = loadKey();
encodedParameter = loadParameter();
![Page 53: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/53.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (28/40)(28/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.2. Traducción de la clave a su forma adecuada
key = new SecretKeySpec(encodedKey, "AES");
![Page 54: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/54.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (29/40)(29/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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; }
![Page 55: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/55.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (30/40)(30/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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; }
![Page 56: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/56.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (31/40)(31/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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; }
}
![Page 57: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/57.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (32/40)(32/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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; }
}
![Page 58: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/58.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (33/40)(33/40)
4. Asegurar otro objeto reutilizando parámetros criptográficos ya existentes4.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);
![Page 59: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/59.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (34/40)(34/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.1. Carga de los parámetros
encodedKey = loadKey();
encodedParameter = loadParameter();
![Page 60: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/60.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (35/40)(35/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.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; }
![Page 61: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/61.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (36/40)(36/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.3. Traducción de la clave a su forma adecuada
key = new SecretKeySpec(encodedKey, "AES");
![Page 62: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/62.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (37/40)(37/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.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; }
![Page 63: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/63.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (38/40)(38/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.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; }
}
![Page 64: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/64.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (39/40)(39/40)
5. Obtener el objeto asegurado reutilizando parámetros criptográficos ya existentes5.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; }
}
![Page 65: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/65.jpg)
Análisis de JCA y JCE Análisis de JCA y JCE (40/40)(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.
![Page 66: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/66.jpg)
El proyecto
Valor añadido de JCEF
![Page 67: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/67.jpg)
Valor añadido de JCEF Valor añadido de JCEF (1/7)(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
![Page 68: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/68.jpg)
Valor añadido de JCEF Valor añadido de JCEF (2/7)(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);
// ...
![Page 69: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/69.jpg)
Valor añadido de JCEF Valor añadido de JCEF (3/7)(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);
// ...
![Page 70: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/70.jpg)
Valor añadido de JCEF Valor añadido de JCEF (4/7)(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);
// ...
![Page 71: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/71.jpg)
Valor añadido de JCEF Valor añadido de JCEF (5/7)(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);
// ...
![Page 72: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/72.jpg)
Valor añadido de JCEF Valor añadido de JCEF (6/7)(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; }
![Page 73: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/73.jpg)
Valor añadido de JCEF Valor añadido de JCEF (7/7)(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
![Page 74: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/74.jpg)
El proyecto
Detalles y curiosidades
![Page 75: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/75.jpg)
Detalles y curiosidades Detalles y curiosidades (1/7)(1/7)
Estructura y composición del proyecto
![Page 76: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/76.jpg)
Detalles y curiosidades Detalles y curiosidades (2/7)(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.
![Page 77: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/77.jpg)
Detalles y curiosidades Detalles y curiosidades (3/7)(3/7)
Metodología
![Page 78: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/78.jpg)
Detalles y curiosidades Detalles y curiosidades (4/7)(4/7)
Coste del proyecto– Coste económico: CERO EUROS– Coste de tiempo: entre 2000 y 3000 horas.– Complejidad:
![Page 79: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/79.jpg)
Detalles y curiosidades Detalles y curiosidades (5/7)(5/7)
![Page 80: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/80.jpg)
Detalles y curiosidades Detalles y curiosidades (6/7)(6/7)
Disponibilidadhttp://jcef.sourceforge.net
![Page 81: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/81.jpg)
Detalles y curiosidades Detalles y curiosidades (7/7)(7/7)
Recursos utilizados
ArgoUML
WinSCP FileZilla
Mozilla Firefox
![Page 82: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/82.jpg)
El proyecto
Futuros proyectos
![Page 83: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/83.jpg)
Futuros proyectos Futuros proyectos (1/7)(1/7)
Ampliaciones de JCEF
![Page 84: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/84.jpg)
Futuros proyectos Futuros proyectos (2/7)(2/7)
Pruebas sobre algoritmos JCEF
![Page 85: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/85.jpg)
Futuros proyectos Futuros proyectos (3/7)(3/7)
Certificados digitales con JCEF
![Page 86: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/86.jpg)
Futuros proyectos Futuros proyectos (4/7)(4/7)
Archivos seguros con JCEF
![Page 87: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/87.jpg)
Futuros proyectos Futuros proyectos (5/7)(5/7)
Proveedor Criptográfico JCEF
![Page 88: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/88.jpg)
Futuros proyectos Futuros proyectos (6/7)(6/7)
Almacén de objetos seguros con JCEF
![Page 89: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/89.jpg)
Futuros proyectos Futuros proyectos (7/7)(7/7)
Metaimplementación de “Aplicaciones Criptográficas Java”
![Page 90: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/90.jpg)
El proyecto
Conclusiones
![Page 91: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/91.jpg)
Conclusiones Conclusiones (1/3)(1/3)
Puntos débiles:1. Tiempo empleado superior a 300 horas.2. No haber desarrollado exactamente lo que
estaba previsto desde un principio.
![Page 92: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/92.jpg)
Conclusiones Conclusiones (2/3)(2/3)
Puntos fuertes:1. Haber desarrollado un trabajo novedoso2. Aguantar un año de trabajo.3. Diseño de imágenes4. 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,...
![Page 93: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/93.jpg)
http://jcef.sourceforge.net
![Page 94: Aplicaciones Criptográficas Java](https://reader036.vdocumento.com/reader036/viewer/2022081519/568140a1550346895dac57f7/html5/thumbnails/94.jpg)
Aplicaciones Criptográficas Aplicaciones Criptográficas JavaJava
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 Aguiar24/05/06
http://jcef.sourceforge.net