Title: Aplicaciones Criptogr
1Aplicaciones Criptográficas Java
http//jcef.sourceforge.net
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
2Breve descripción (1/4)
3Breve descripción (2/4)
- 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).
4Breve descripción (3/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.
5Breve descripción (4/4)
- 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_BlockSymmetricProtection
RREXKY() / 3. / SecureObject secureObject
new SecureObject(object, secureAlgorithm) / 4.
/ Object (String)secureObject.getObject(secureA
lgorithm)
6Introducción
- Introducción a la seguridad
7Introducción a la seguridad (1/9)
- La seguridad es muy importante hoy día
8Introducción a la seguridad (2/9)
- Evitar que se obtengan documentos de forma ilegal.
9Introducción a la seguridad (3/9)
- Evitar que se obtenga información sobre los
comunicantes.
10Introducción a la seguridad (4/9)
- Evitar que se pueda suplantar una identidad
11Introducción a la seguridad (5/9)
- Evitar que se puedan repetir mensajes sin ser
detectada tal repetición
12Introducción a la seguridad (6/9)
- Evitar la modificación de mensajes antes de
llegar a su destinatario
13Introducción a la seguridad (7/9)
- Evitar la interrupción de sus servicios
14Introducción a la seguridad (8/9)
- Los servicios de seguridad solucionan o previenen
los ataques
15Introducción a la seguridad (9/9)
- Y para implementar estos servicios, se utiliza
principalmente la Criptografía.
16Introducción
- Criptografía Orientada a Objetos
17Criptografía OO (1/8)
- La Criptografía es una herramienta que permite
- Asegurar objetos.
- Y recuperar objetos asegurados.
18Criptografía OO (2/8)
- La Criptografía gestiona objetos seguros
- Protegidos y/o Autentificables
19Criptografía OO (3/8)
20Criptografía OO (4/8)
21Criptografía OO (5/8)
22Criptografía OO (6/8)
Es auténtico sólo si la huella de éste objeto es
la misma que la adjunta
23Criptografí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
24Criptografí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.
25Introducción
26Aná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
27Análisis de JCA y JCE (2/40)
- Asegurar un objeto con nuevos parámetros
criptográficos - Almacenar parámetros criptográficos para un uso
posterior - Obtener el objeto asegurado utilizando los nuevos
parámetros criptográficos - Asegurar otro objeto reutilizando parámetros
criptográficos ya existentes - Obtener el objeto asegurado reutilizando
parámetros criptográficos ya existentes
28Aná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
29Aná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
30Aná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
31Aná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
32Aná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
33Aná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.addProvide
r(provider) String providerName
provider.getName()
34Aná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.ge
tInstance("AES", providerName) catch
(NoSuchAlgorithmException e) e.printStackTrace()
return catch (NoSuchProviderException e)
e.printStackTrace() return
35Aná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(genPara
meter) catch (InvalidAlgorithmParameterExcepti
on 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 gt 0 random
null) keyGenerator.init(keySize) else if
(genParameter null keySize gt 0 random !
null) keyGenerator.init(keySize, random)
else if (genParameter null keySize lt 0
random ! null) keyGenerator.init(random)
key keyGenerator.generateKey()
36Aná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
37Aná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)
38Aná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(p
arameterType) catch (InvalidParameterSpecExcep
tion e) e.printStackTrace() return
39Aná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/PKCS
7Padding", providerName) catch
(NoSuchAlgorithmException e) e.printStackTrace()
return catch (NoSuchProviderException e)
e.printStackTrace() return catch
(NoSuchPaddingException e) e.printStackTrace()
return
40Aná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
41Aná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.getPar
ameters() catch (Throwable throwable) if
(parameter null algorithmParameters !
null) if (parameterType null)
parameterType AlgorithmParameterSpec.class
try parameter algorithmParameters.getParamete
rSpec(parameterType) catch (InvalidParameterSp
ecException e) e.printStackTrace() return
42Aná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 (IllegalBlockSizeExcept
ion e) e.printStackTrace() return catch
(IOException e) e.printStackTrace() return
saveObject(secureObject)
43Aná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()
44Aná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()
45Aná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.g
etInstance("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
46Aná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(encodedParamet
er)
47Aná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()
48Aná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/CB
C/PKCS7Padding", providerName) catch
(NoSuchAlgorithmException e) e.printStackTrace()
return catch (NoSuchProviderException e)
e.printStackTrace() return catch
(NoSuchPaddingException e) e.printStackTrace()
return
49Aná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.getInsta
nce("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.g
etParameterSpec(parameterType) catch
(InvalidParameterSpecException e)
e.printStackTrace() return
50Aná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
51Aná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(secureAlg
orithm) catch (IllegalBlockSizeException e)
e.printStackTrace() return catch
(BadPaddingException e) e.printStackTrace()
return catch (IOException e)
e.printStackTrace() return catch
(ClassNotFoundException e) e.printStackTrace()
return
52Aná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()
53Aná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")
54Aná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.getInsta
nce("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.g
etParameterSpec(parameterType) catch
(InvalidParameterSpecException e)
e.printStackTrace() return
55Aná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
56Aná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
57Aná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.getPar
ameters() catch (Throwable throwable) if
(parameter null algorithmParameters !
null) if (parameterType null)
parameterType AlgorithmParameterSpec.class
try parameter algorithmParameters.getParamete
rSpec(parameterType) catch (InvalidParameterSp
ecException e) e.printStackTrace() return
58Aná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 (IllegalBlockSizeExcept
ion e) e.printStackTrace() return catch
(IOException e) e.printStackTrace() return
saveObject(otherSecureObject)
59Aná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()
60Aná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/CB
C/PKCS7Padding", providerName) catch
(NoSuchAlgorithmException e) e.printStackTrace()
return catch (NoSuchProviderException e)
e.printStackTrace() return catch
(NoSuchPaddingException e) e.printStackTrace()
return
61Aná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")
62Aná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.getInsta
nce("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.g
etParameterSpec(parameterType) catch
(InvalidParameterSpecException e)
e.printStackTrace() return
63Aná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
64Aná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)loadObjec
t() object (String)otherSecureObject.getObject
(secureAlgorithm) catch (IllegalBlockSizeExcep
tion e) e.printStackTrace() return catch
(BadPaddingException e) e.printStackTrace()
return catch (IOException e)
e.printStackTrace() return catch
(ClassNotFoundException e) e.printStackTrace()
return
65Análisis de JCA y JCE (40/40)
- 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.
66El proyecto
67Valor añadido de JCEF (1/7)
- Asegurar un objeto con nuevos parámetros
criptográficos - Almacenar parámetros criptográficos para un uso
posterior - Obtener el objeto asegurado utilizando los nuevos
parámetros criptográficos - Asegurar otro objeto reutilizando parámetros
criptográficos ya existentes - Obtener el objeto asegurado reutilizando
parámetros criptográficos ya existentes
68Valor 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) // ...
69Valor 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.getEnco
dedParameter() saveKey(encodedKey)
saveParameter(encodedParameter) // ...
70Valor 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_BlockSymmetricProtectio
nRREXKY() secureAlgorithm.setSymmetricKey(encode
dKey) secureAlgorithm.setParameter(encodedParame
ter) // 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(secureAlg
orithm) // ...
71Valor 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)
// ...
72Valor 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_BlockSymmetricProtectio
nRREXKY() secureAlgorithm.setSymmetricKey(encode
dKey) secureAlgorithm.setParameter(encodedParame
ter) // 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(secu
reAlgorithm) catch (Throwable throwable)
throwable.printStackTrace() return
73Valor añadido de JCEF (7/7)
- 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
74El proyecto
75Detalles y curiosidades (1/7)
- Estructura y composición del proyecto
76Detalles 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.
77Detalles y curiosidades (3/7)
78Detalles y curiosidades (4/7)
- Coste del proyecto
- Coste económico CERO EUROS
- Coste de tiempo entre 2000 y 3000 horas.
- Complejidad
79Detalles y curiosidades (5/7)
80Detalles y curiosidades (6/7)
http//jcef.sourceforge.net
81Detalles y curiosidades (7/7)
82El proyecto
83Futuros proyectos (1/7)
84Futuros proyectos (2/7)
- Pruebas sobre algoritmos JCEF
85Futuros proyectos (3/7)
- Certificados digitales con JCEF
86Futuros proyectos (4/7)
- Archivos seguros con JCEF
87Futuros proyectos (5/7)
- Proveedor Criptográfico JCEF
88Futuros proyectos (6/7)
- Almacén de objetos seguros con JCEF
89Futuros proyectos (7/7)
- Metaimplementación de Aplicaciones
Criptográficas Java
90El proyecto
91Conclusiones (1/3)
- Puntos débiles
- Tiempo empleado superior a 300 horas.
- No haber desarrollado exactamente lo que estaba
previsto desde un principio.
92Conclusiones (2/3)
- Puntos fuertes
- Haber desarrollado un trabajo novedoso
- Aguantar un año de trabajo.
- Diseño de imágenes
- Sección Preguntas frecuentes.
- Sección Futuros proyectos.
- Publicación del proyecto en una página web.
- El uso 100 de herramientas Open Source,
Freeware y gratuitas. - Conocimiento aplicado Ingeniería del software,
gráficos, programación, ofimática, diseño web,...
93http//jcef.sourceforge.net
94Aplicaciones Criptográficas Java
http//jcef.sourceforge.net
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