Seguridad Informtica - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

Seguridad Informtica

Description:

Los objetos de esta clase se obtienen con este m todo indicando como par metro ... cifrar no se ajusta a un n mero exacto de bloques se necesita un criterio para ... – PowerPoint PPT presentation

Number of Views:147
Avg rating:3.0/5.0
Slides: 20
Provided by: mic4152
Category:

less

Transcript and Presenter's Notes

Title: Seguridad Informtica


1
Seguridad Informática
Cifrado Java SE Security Micael.Gallego_at_urjc.es
Seguridad en Java
2
Introducción
  • Cifrado de información con algoritmos de cifrado
    (ciphers)
  • Se puede utilizar para
  • Guardar información en disco
  • Enviar información por una red pública

Seguridad en Java
3
Algoritmo de Cifra
  • Clase javax.crypto.Cipher
  • Tiene métodos para cifrar y descifrar (encriptar
    y desencriptar)
  • Arrays de información
  • Flujos de datos (streams)
  • Los objetos de esta clase se obtienen con este
    método indicando como parámetro el algoritmo
    concreto y su configuración

Static Cipher getInstance(String transformation)
Seguridad en Java
4
Algoritmo de Cifra
  • Algoritmos
  • DES
  • Data Encriptation Algorithm. Gobierno EEUU
  • DESede
  • Triple DES
  • Se realizan 3 rondas de encriptación DES con
    varias claves
  • Blowfish
  • Algoritmo no patentado
  • Bruce Schneier

Seguridad en Java
5
Algoritmo de Cifra
  • Algoritmos
  • PBEWithMD5AndDES
  • PBE Cifrado basado en contraseña (Password-Based
    Encryptation) con MD5 de la contraseña y DES para
    el cifrado
  • Otros
  • RSA, DESedeWrap, PBEWithMD5AndTripleDES,
    PBEWithSHA1AndRC2_40, PBEWithSHA1AndDESede, AES,
    AESWrap, RC2, ARCFOUR, RSA/ECB/PKCS1Padding

Seguridad en Java
6
Algoritmo de Cifra
  • Modos de funcionamiento
  • El cifrado se realiza por bloques (de uno a
    varios bytes, por defecto 8 bytes)
  • El modo de funcionamiento indica como han de
    manejarse esos bloques para cifrar
  • Cifrar cada bloque de forma independiente
  • Hacer que el cifrado de un bloque influya en el
    siguiente bloque (encadenado)

Seguridad en Java
7
Algoritmo de Cifra
  • Modos de funcionamiento
  • Hay modos que permiten un cifrado más fuerte en
    el caso de que los datos a cifrar tengan patrones
    repetitivos
  • Cabecera y pie en documentos de texto
  • Si el bloque es de 1 byte, se tiene un algoritmo
    de cifrado de flujos (streams)
  • Algunos modos de funcionamiento requieren
    información inicial para descifrar
    (initialization vector)

Seguridad en Java
8
Algoritmo de Cifra
  • Modos de funcionamiento
  • ECB (electronic cookbook)
  • Cifra cada bloque de 8 bytes de forma
    independiente
  • Recomendado para binario o texto sin patrones
  • CBC (cipher block chaining)
  • Los datos de un bloque afectan al cifrado del
    siguiente bloque (encadenado)
  • Recomendado para texto con patrones
  • Único compatible con el algoritmo
    PBEWithMD5AndDES
  • Requiere vector de inicialización para descifrar

Seguridad en Java
9
Algoritmo de Cifra
  • Modos de funcionamiento
  • CFB (cipher-feedback)
  • Los datos de un bloque afectan al cifrado del
    siguiente bloque (encadenado)
  • Recomendado para cifrar texto
  • Requiere vector de inicialización para descifrar
  • Se puede especificar el tamaño del bloque en bits
    (múltiplos de 8)
  • CFB8, CFB16, CFB24, , CFB64 (defecto)
  • OFB
  • PCBC

Seguridad en Java
10
Algoritmo de Cifra
  • Esquemas de relleno
  • Padding schemes
  • Si la información a cifrar no se ajusta a un
    número exacto de bloques se necesita un criterio
    para completar el último bloque
  • Si el tamaño del bloque es 8 bits (1 byte) no se
    necesita relleno

Seguridad en Java
11
Algoritmo de Cifra
  • Esquemas de relleno
  • PKCS5Padding
  • Asegura que la información se puede dividir en
    bloques de 8 bytes
  • NoPadding
  • No realiza relleno
  • Los datos de entrada al algoritmo de cifra deben
    ajustarse al tamaño de bloque o se producirá un
    fallo

Seguridad en Java
12
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Seguridad en Java
13
Algoritmo de Cifra
Obtenemos la clave. En Este caso la hemos
creado, en otros caso la podemos obtener de un
keystore o la podemos generar con un algoritmo de
acuerto de claves (key agreement algorithm)
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Seguridad en Java
14
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Iniciamos el algoritmo de cifrado para cifrar
Seguridad en Java
15
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Obtenemos el vector inicial que puede ser
necesario para descifrar
Seguridad en Java
16
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Para encriptar tenemos que llamar en último lugar
al método doFinal() antes tenemos que llamar al
método update()
Seguridad en Java
17
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Creamos el parámetro de vector de inicio
Seguridad en Java
18
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Reiniciamos el algoritmo de cifrado para descifrar
Seguridad en Java
19
Algoritmo de Cifra
// Obtenemos la clave. Debe mantenerse en
secreto KeyGenerator kg KeyGenerator.getInstance
("DES") Cipher c Cipher.getInstance("DES/CBC/PK
CS5Padding") Key key kg.generateKey() //
Inicializamos en algoritmo de cifrado c.init(Ciphe
r.ENCRYPT_MODE, key) // Obtenemos el vector de
inicio. Puede enviarse en claro byte iv
c.getIV() byte input "Stand and unfold
yourself".getBytes() // Encriptamos byte
encrypted c.doFinal(input) //
Desencriptado IvParameterSpec dps new
IvParameterSpec(iv) c.init(Cipher.DECRYPT_MODE,
key, dps) byte output c.doFinal(encrypted)
System.out.println("The string was "new
String(output))
Desciframos el último fragmento. Si tuviésemos
más habría que llamar a update
Seguridad en Java
Write a Comment
User Comments (0)
About PowerShow.com