Aplicaciones Criptogr - PowerPoint PPT Presentation

About This Presentation
Title:

Aplicaciones Criptogr

Description:

Aplicaciones Criptogr ficas Java http://jcef.sourceforge.net Proyecto Fin de Carrera Facultad de Inform tica Universidad de Las Palmas de Gran Canaria – PowerPoint PPT presentation

Number of Views:96
Avg rating:3.0/5.0
Slides: 95
Provided by: Admini564
Category:

less

Transcript and Presenter's Notes

Title: Aplicaciones Criptogr


1
Aplicaciones 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
2
Breve descripción (1/4)
3
Breve 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).

4
Breve 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.

5
Breve 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)
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.addProvide
r(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.ge
tInstance("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(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()
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(p
arameterType) catch (InvalidParameterSpecExcep
tion 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/PKCS
7Padding", 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.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

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 (IllegalBlockSizeExcept
ion 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.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
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(encodedParamet
er)
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/CB
C/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.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
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(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
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.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
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.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

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 (IllegalBlockSizeExcept
ion 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/CB
C/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.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
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)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
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.getEnco
dedParameter() 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_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) // ...
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_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
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

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
  • Tiempo empleado superior a 300 horas.
  • No haber desarrollado exactamente lo que estaba
    previsto desde un principio.

92
Conclusiones (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,...

93
http//jcef.sourceforge.net
94
Aplicaciones 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
Write a Comment
User Comments (0)
About PowerShow.com