SlideShare una empresa de Scribd logo
1 de 61
Descargar para leer sin conexión
Criptografía en aplicaciones Java
Índice de contenidos

   Introducción.
   Criptografía con Java.
   Infraestructura con PKI con Java.
   Control de acceso.
   Aplicaciones con Java SSL.
   Seguridad en aplicaciones WEB.
Criptografía en Java

   Introducción.
   Servicios criptográficos.
   Proveedores.
   Clases engine.
   Claves criptográficas.
   Encriptación.
   Message Digest.
   Firma digital.
Introducción

 El soporte que da el JDK a la criptografía se
  divide en dos grandes bloques:
    JCA (Java Cryptography Architecture): define las
    bases del soporte criptográfico de Java.
    JCE (Java Cryptography Extension): proporciona los
    algoritmos necesarios para poder encriptar y
    desencriptar datos.
 Para un programador, el conocimiento de
  protocolos y algoritmos en encriptación no es
  necesario, dado que toda esa problemática ha
  sido encapsulada dentro de unos paquetes java.
 Ambas parte de J2SE SDK v1.4
Introducción

 Debido a las leyes de los Estados Unidos, que
  prohiben exportar software de encriptación de
  datos, el JCE no venían incluido inicialmente en
  las versiones del JDK, y existían restricciones
  para bajarlo de la site de SUN.
 Existen paquetes de terceros, desarrollados
  fuera de los Estados Unidos, que implementan
  todas las especificaciones del JCE y que no
  están sujetos a sus restricciones legales, como
  por ejemplo la librería CRYPTICS.
Arquitectura criptográfica de Java (JCA)

 Marco o framework para acceder y desarrollar
  la funcionalidad criptográfica de Java.
 Incluye todas las APIs relativas a la criptografía
  (el paquete java.security y sus subpaquetes),
  así como una serie de especificaciones a tener
  en cuenta por los programadores que quieran
  crear extensiones criptográficas (como la
  librería CRYPTICS, etc).
Arquitectura criptográfica de Java (JCA)

 La arquitectura criptográfica de Java ha sido
  diseñada teniendo en cuenta dos principios:
    independencia de la implementación e interoperabilidad.
    independencia de algoritmos.
    La independencia de la implementación se consigue
    introduciendo el concepto de "Proveedor" (Cryptography
    Package Provider).
 Estos dos conceptos son complementarios. Se
  pueden utilizar servicios criptográficos tales
  como Firma Digital sin preocuparse por los
  detalles de implementación o los algoritmos que
  los implementan.
Arquitectura criptográfica de Java (JCA)

 Cuando el concepto de independencia de
  implementación no es deseable JCA permite al
  programador usar una implementación
  específica.
 La independencia de algoritmos se alcanza
  definiendo tipos de servicios criptográficos, y
  proporcionando clases específicas para cada
  uno.
Arquitectura criptográfica de Java (JCA)

 La independencia de implementación se alcanza
  usando una arquitectura basada en Proveedor.
 Cryptographic Service Provider: conjunto de
  paquetes que implementan uno o más servicios
  criptográficos.
 Un programa sólo debe solicitar un determinado
  objeto que proporciona un específico servicio,
  obteniendo una implementación a partir de uno
  de los proveedores instalados.
Arquitectura criptográfica de Java (JCA)

 Clases:
    Provider, Security.
    MessageDigest, Signature.
    SecureRandom.
    KeyPair, KeyPairGenerator.
    Identity, Signer.
     ...
 Interfaces:
    Key, PublicKey, PrivateKey.
     ...
Arquitectura criptográfica de Java (JCA)

 Paquetes más importantes:
    java.security : proporciona las clases e interfaces del
    framework de seguridad.
    java.security.cert : clases e interfaces para el manejo
    de listas de revocación, etc.
Extensión criptográfica de Java (JCE)

 Clases:
    Cipher.
    Cipher Streams.
    KeyGenerator, SecretKeyFactory.
    SealedObject.
    KeyAgreement.
    Mac.
Servicios criptográficos

 Una instancia de un servicio está asociada a
  varios algoritmos o tipos:
    Ejemplo: Signature, CertificateFactory
 Estos servicios carecen de constructores:
    Independencia del algoritmo.
    Método getInstance().
Servicios criptográficos

SERVICIO              ALGORITMO/TIPO              DESCRIPCIÓN
SecureRandom          SHA1PRNG                    Genera números pseudo-
                                                  aleatorios
KeyGenerator          DES,Triple-DES, Blowfish    Genera claves
KeyParGenerator       DSA, RSA,DH                 Genera pares de claves
                                                  publica-privada
MessageDigest         SHA1, MD5                   Computa el diggest de un
                                                  mensaje
Mac                                               Computa el código de
                                                  autenticación de un mensaje
Signature             SHA1WithDSA,                Crea y verifica firmas
                      SHA1WithRSA                 digitales de un mensaje
KeyStore              JKS, JCEKS, PKCS12          Almacena claves y
                                                  certificados
CertificateFactory    X509                        Crea Certificados
Cipher                DES, Triple-DES, Blowfish   Encripta y desencripta
KeyAgreement          DH                          Permite a dos partes
                                                  coincidir de forma segura en
                                                  una clave secreta
Proveedores

 El término Proveedor de Servicio Criptográfico o
  Proveedor se refiere a un conjunto de paquetes
  que proporcionan una implementación concreta
  de un conjunto de servicios criptográficos.
 Es posible tener instalados varios proveedores
  en un entorno de desarrollo.
 Por ejemplo
    Signature.getInstance(“SHA1WithDSA”).
    Signature.getInstance(“SHA1WithDSA”, “SUN”).
Proveedores

 Instalación de un nuevo proveedor.
    Obtención de las bibliotecas de dicho proveedor (jar).
    Instalación en jre-homelibext.
    La configuración se puede hacer editando el archivo
    java.security en el jre-homelibsecurity con entradas
    del tipo security.provider.i=<proveedor>.
Proveedores

 La clase Provider:
    Es la interface que utilizaremos para acceder a ese
    paquete o conjunto de paquetes.
    Tiene métodos para acceder al nombre del proveedor,
    número de versión y otra información.
 Métodos:
    protected Provider(String name,double version,String
    info)
    public String getName()
    public double getVersion()
    public String getInfo()
    public String toString()
    public void clear()
Proveedores

 Más métodos:
    public void load(InputStream inStream)throws
    IOException
    public void putAll(Map t)
    public Set entrySet()
    public Set keySet()
    public Collection values()
    public Object put(Object key,Object value)
    Object.equals(Object), Hashtable.get(Object)
    public Object remove(Object key)
Clases engine

 Clases que definen un servicio criptográfico de
  forma abstracta.
 Un servicio criptográfico está asociado a un
  algoritmo específico, proporciona operaciones,
  genera material criptográfico necesario en las
  operaciones, genera objetos que encapsulan
  claves.
 Por ejemplo: la clase Signature proporciona
  acceso a la funcionalidad de un algoritmo de
  firma digital.
Claves criptográficas

 El manejo de claves es vital para el uso de determinados
  servicios de encriptación.
 Se necesitan claves para generar servicios de firma
  digital y encriptación.
 La interfaz java.security.Key representa un algoritmo y
  tipo de clave con los siguientes métodos:
     public String getAlgorithm(): devuelve el algoritmo de la
     clave.
     public byte[]getEncoded(): devuelve la clave como un array
     de bytes.
     Una clave se puede generar a partir de su flujo binario o
     bien por generación expresa dentro de un programa a partir
     de algún algoritmo de generación.
Claves criptográficas

 Dos tipos de claves:
    simétricas (secret key).
    asimétricas (public y private).
    Las posibilidades de los algoritmos de clave pública
    nos permiten varias opciones que no permite los
    algoritmos de clave privada :
        Servicios de autentificación.
        Firma digital.
        Publicar una clave de cifrado, que puede ser distribuida
         sin riesgos.
Claves criptográficas

 Pero los algoritmos de clave privada también
  tienen sus ventajas:
    Los algoritmos simétricos son mas rápidos que los de
    clave publica, por lo que en mensajes largos es mejor
    usar uno de clave privada.
 Hay dos clases Engine que actúan sobre claves:
    Generador de claves.
    Factoría de claves.
 El concepto de clave es modelado por la
  interface Key, que se encuentra en el paquete
  java.security.
    public interface Key extends Serializable
        Análisis de la interface.
Claves criptográficas

 Claves asimétricas:
    Son claves muy populares.
    Siempre vienen en parejas.
    Java proporciona dos interfaces más:
        public interface PublicKey extends Key.
        public interface PrivateKey extends Key.
        No proporcionan ningún método adicional, una clase que
         implementa PublicKey se identifica a si misma como una
         clave pública, pero no contiene ningún método diferente.
    Los proveedores que vienen con Java proporcionan
    dos tipos de claves asimétricas: DSA y RSA.
    JCE proporciona otro: Diffie-Hellman.
Claves criptográficas

 Claves asimétricas:
    DSA:
        public interface DSAPrivateKey extends DSAKey.
        public interface DSAPublicKey extends DSAKey.
    RSA:
        public interface RSAPublicKey extends RSAKey, PublicKey.
        public interface RSAPrivateKey extends RSAKey,
         PrivateKey.
    Clase que hereda el concepto general de clave
    asimétrica:
        public final class KeyPair.
Claves criptográficas

 Claves asimétricas:

                               Key



                          PrivateKey



               DSAPrivateKey         RSAPrivateKey
Claves criptográficas

 Claves simétricas:
    Sólo son usadas dentro de JCE.
    Paquete javax.crypto .
    public interface SecretKey extends Key
    Si una clase implementa esta interface es una clave
    simétrica.
    Esta interface está vacía, sólo se utiliza como
    identificador de un tipo.
 JCE proporciona distintos tipos de claves
  simétricas:
    Blowfish, DES, DESede, HmacMD5, HmacSHA1 ...
Claves criptográficas

 Claves simétricas:
    Sólo son usadas dentro de JCE.
    Paquete javax.crypto .
    public interface SecretKey extends Key
    Si una clase implementa esta interface es una clave
    simétrica.
    Esta interface está vacía, sólo se utiliza como
    identificador de un tipo.
 JCE proporciona distintos tipos de claves
  simétricas:
    Blowfish, DES, DESede, HmacMD5, HmacSHA1 ...
Claves criptográficas

 La interfaz java.security.Key representa un algoritmo y
  tipo de clave con los siguientes métodos:
     public String getAlgorithm():
       Devuelve el algoritmo de la clave. Todo objeto Key está

        asociado con un algoritmo único.
     public byte[]getEncoded():
       Devuelve la clave como un array de bytes en el formato

        de codificación principal de la clave (RAW o PKCS#8).
     getFormat():
       Devuelve el formato en el que está codificada la clave.

 Una clave se puede generar a partir de su flujo binario o
  bien por generación expresa dentro de un programa a
  partir de algún algoritmo de generación.
Claves criptográficas

 Claves simétricas:
    La interface Key se ve ampliada por una serie de
    interface especializadas, nos centramos en este caso
    en:
        SecretKey.
    Se trabaja a continuación con algoritmos simétricos o
    de clave secreta.
Claves criptográficas

 Interface SecretKey:
    Se encuentra en el paquete javax.crypto.
    Hereda de la interface Key y no añade métodos
    nuevos.
    Las implementaciones de proveedores deben
    implementar dicha interface.
Claves criptográficas

 Generación de claves:
    Se proporcionan dos clases engine para generar claves
    simétricas y asimétricas.
    clase KeyPairGenerator.
    clase KeyGenerator.
Generación de claves simétricas

 Clase KeyGenerator:
    Utilizada para generar clave secretas.
    Paquete javax.crypto.
    Se instancia a través de una factoría, a través del
    método getInstance():
        Parámetro 1: String algorithm.
          Este parámetro es el nombre del algoritmo para el que se
           genera dicha clave.
          Los nombres que se pueden utilizar vienen definidos en el
           estándar de Sun y son:
               AES y Blowfish.
               DES y DESede.
               DiffieHellman.
               OAEP.
               PBE.
               PBEWith<digest>And<encryption>.
               RC2.
Generación de claves simétricas

 Clase KeyGenerator:
    Valores de clave por defecto:
        DES: 56 bits.
        Triple DES: 112 bits.
        Blowfish: 56 bits.
        HmacMD5: 64 bytes: Claves para algoritmos de firma
         digital con clave secreta (MAC).
        HmacSHA1: 64 bytes. Claves para algoritmos de firma
         digital con clave secreta (MAC).
Generación de claves simétricas

 Clase KeyGenerator:
    Restricciones:
        DES: su tamaño de clave es obligatoriamente 56.
        Triple DES: 112 o 168.
          Nota: Un tamaño de clave de 112 generará una clave Triple
           DES con dos claves intermedias, un tamaño de clave de 168
           generará una clave Triple DES con tres claves intermedias.
        Blowfish: el tamaño de clave debe ser múltiplo de 8, y
         sólo puede estar en el rango 32-448 ambos inclusive.
Generación de claves simétricas

 Clase KeyGenerator:
    Método getInstance().
        public static KeyGenerator getInstance(String algorithm):
          Se generan claves para un algoritmo simétrico especificado
           mediante la cadena pasada como parámetro.
          Nombre de los algoritmos:
               DES, Triple DES, Blowfish, HmacMD5, HmacSHA1.
        public static KeyGenerator getInstance(String algorithm,
         String provider).
          Se generan claves para un algoritmo simétrico especificado
           mediante el nombre del algoritmo y el proveedor.
          Nombre de los algoritmos:
               DES, Triple DES, Blowfish, HmacMD5, HmacSHA1.
          Nombre de los proveedores:
               SUN 1.5, Apple 1.0, ...
Generación de claves simétricas

 Clase KeyGenerator:
     Método getInstance().

   // OPCIÓN 1:
   // Creación de un generador de claves mediante el nombre del algoritmo.
   KeyGenerator kg=KeyGenerator.getInstance("DES");

   // OPCIÓN 2:
   // Creación de un generador de claves mediante el nombre del algoritmo y
   // proveedor específico
   KeyGenerator kg=KeyGenerator.getInstance("DES",“SUN 1.5”);
Generación de claves simétricas

 Clase KeyGenerator:
    Los objetos KeyGenerator se inicializan con su método
    init. Este método está sobrecargado:
        public final void init(int keysize):
           Inicializa el objeto en una clave de un tamaño especificado
            por el parámetro utilizando el generador aleatorio por
            defecto.
        public final void init(int keysize,SecureRandom random)
           Inicializa el objeto en una clave de un tamaño especificado
            por el parámetro utilizando el generador aleatorio
            suministrado por el usuario.
Generación de claves simétricas

 Clase KeyGenerator:
        public final void init(SecureRandom random):
          Inicializa el objeto en una clave utilizando el generador
           aleatorio suministrado por el usuario. Se utiliza un tamaño de
           clave apropiado para el algoritmo.
        public final void init(AlgorithmParameterSpec params)
         throws InvalidAlgorithmParameterException:
          Inicializa el objeto utilizando parámetros específicos de la
           implementación.
        public final void init(AlgorithmParameterSpec params,
         SecureRandom random)throws
         InvalidAlgorithmParameterException:
          Inicializa el objeto utilizando parámetros específicos de la
           implementación y objeto SecureRandom suministrado por el
           usuario.
Generación de claves simétricas

 Clase KeyGenerator:
    public final SecretKey generateKey():
Generación de claves simétricas

 Nota aclaratoria. SecureRandom:
    Los números aleatorios son importantes en
    criptografía.
    Se suelen usar para generar los resultados de las
    operaciones, como la generación de claves.
    Los ordenadores no suelen generar números
    verdaderamente aleatorios, en vez de ello, se utilizan
    los algoritmos de generación de números
    pseudoaleatorios (PRNG).
    Algunos son más aleatorios que otros. Se consigue un
    nivel más alto de aleatoriedad sembrando el PRNG con
    un valor seleccionado aleatoriamente (semilla).
Generación de claves simétricas

 Nota aclaratoria. SecureRandom:
    La clase SecureRandom se utiliza para acceder a los
    algoritmos seguros PRN de los distintos proveedores.
    Constructores:
        public SecureRandom(): crea un objeto que se inicializa
         con un valor de semilla que es generada internamente.
         Esta semilla puede no ser segura.
        public SecureRandom(byte[] seed): crea un objeto que
         se inicializa con un valor de semilla suministrada como
         parámetro.
    Si desea tener un alto nivel de seguridad, deberá
    generar la semilla de forma manual.
Generación de claves simétricas

 Nota aclaratoria. SecureRandom:
    Una vez creado y sembrado el objeto, está listo para
    ser usado para generar valores aleatorios utilizando:
        protected final int next(int numBits).
        public void nextBytes(byte[] bytes).
Generación de claves simétricas

 Nota aclaratoria. AlgorithmParameterSpec.
Claves criptográficas

 Clase KeyPairGenerator:
    Paquete java.security.
    Se instancia a través de una factoría, a través del
    método getInstance().
    public static KeyPairGenerator getInstance(String
    algorithm).
    public static KeyPairGenerator getInstance(String
    algorithm, String provider).
    Los algoritmos para los que generar claves esta
    disponible son:
        DSA, RSA, Diffie-Hellman.

    Método initialize().
Encriptación

 Introducción.
 Confidencialidad con clave privada.
 Confidencialidad con clave pública.
Introducción

 Es el proceso de convertir texto plano a algo
  incomprensible o cifrado aplicando
  transformaciones matemáticas.
 Estas transformaciones se conocen como
  algoritmos de encriptación y requieren una
  clave de encriptación.
 Desencriptación es el proceso inverso, y
  requiere también una clave.
 Cuando ambas claves son la misma se habla de
  criptografía secreta o simétrica.
 Cuando son distintas se habla de criptografía de
  clave pública o asimétrica.
Confidencialidad con clave privada

 Introducción.
 Clase Cipher:
    Creación.
    Inicialización.
    Encriptado y desencriptado.
 Esquema básico de cifrado con clave privada.
Introducción

 JDK 1.4 soporta los siguientes algoritmos:
     DES (Data Encryption Standard) desarrollado por IBM en los
     70. Es un cifrado de bloque de 56-bit.
     TripleDES. Consiste en aplicar el algoritmo DES tres veces
     (encriptar desencriptar encriptar) con dos claves dando un
     resultado de 112 bits.
     AES. Es el algoritmo que reemplazó a DES. Creado por Joan
     Daemen y Vincent.
     Rijmen. Es un cifrado por bloque de 128-bit con claves de
     longitud 128, 192 o 256 bits.
     RC2, RC4 y RC5.
     Blowfish. Fue creado por Bruce Schneier y hace un cifrado
     por bloques con claves de longitud variable desde 32 a 448
     bits (en múltiplos de 8), Diseñado para ser eficiente en
     computadores.
     PBE. PBE (Password Based Encryption) puede ser usado con
     algoritmos de clave privada y funciones de resumen.
Clase Cipher

 Se usa para cifrar mediante algoritmos de
  clave simétrica.
 Forma parte del JCE (Java Cryptography
  Extension).
 Vamos a analizar los distintos pasos a seguir
  para poder trabajar con objetos de dicha clase:
    Creación de objetos de la clase Cipher.
    Inicialización de objetos de la clase Cipher.
Creación de objetos de la clase Cipher

 Como ya vimos es muy normal instanciar clases
  a través de una factoría:
    public static Cipher getInstance(String
    transformation);
    public static Cipher getInstance(String transformation,
    String provider);
    Nota: transformación.

                  algoritmo / modo / relleno
                          algoritmo
Creación de objetos de la clase Cipher

 Ejemplo:
    Cipher c1 = Cipher.getInstance("DES/ECB/
    PKCS5Padding");
    Cipher c1 = Cipher.getInstance("DES");
 Los modos son la forma de trabajar del
  algoritmo:
    Ninguno.
    ECB (Electronic Code Book).
    CBC (Cipher Block Chaining).
    CFB (Cipher Feedback Mode).
    OFB (Output Feedback Mode).
    PCBC (Propagating Cipher Block Chaining).
Creación de objetos de la clase Cipher

 Relleno:
    Un algoritmo puede cifrar por bloques de una longitud
    determinada, cuando el mensaje es un múltiplo de
    dicha longitud no existe ningún problema. Pero
    cuando el mensaje no es un múltiplo, el último bloque
    es menor que la longitud necesaria para realizar el
    cifrado, entonces se realiza un relleno de ese bloque.
    A este relleno se le llama padding.
    Existen varias formas de rellenar los bloques de
    menor tamaño:
        No rellenar
        PKCS5
        OAEP
        SSL3
Inicialización del objeto Cipher

 Un objeto Cipher obtenido mediante el método
  getInstance() debe ser inicializado a uno de los
  cuatro modos disponibles. Dichos modos son
  identificados mediante constantes enteras:
    ENCRYPT_MODE: encriptación de datos.
    DECRYPT_MODE: desencriptación de datos.
    WRAP_MODE: envuelve una clave de modo que dicha
    clave puede ser transportada con seguridad.
    UNWRAP_MODE: desenvolver una clave que ha sido
    previamente envuelta, en un objeto Key.
Inicialización del objeto Cipher

 Para inicializar el objeto se debe utilizar el método:
      public void init(int opmode, Key key);
      public void init(int opmode, Certificate certificate)
      public void init(int opmode, Key key, SecureRandom
      random);
      public void init(int opmode, Certificate certificate,
      SecureRandom random)
      public void init(int opmode, Key
      key,AlgorithmParameterSpec params);
      public void init(int opmode, Key key,
      AlgorithmParameterSpec params,
      SecureRandom random);
      public void init(int opmode, Key key,
      AlgorithmParameters params)
      public void init(int opmode, Key key, AlgorithmParameters
      params,SecureRandom random)
Encriptado y desencriptado

 Un paso:
    Llamada al método doFinal.
    Cabecera:
        public byte[] doFinal(byte[] input);
        y otras variantes del mismo método.
 Varios pasos:
    Llamada al método update.
    Cabecera:
        public byte[] update(byte[] input);
    Operación en varios pasos debe ser terminada con una
    llamada al método doFinal.
Transferencia de clave

 Llamada al método wrap:
     Cabecera: public final byte[] wrap(Key key);
     Para que pueda recuperarse la clave se debe
     proporcionar más información:
        Algoritmo de la clave.
        Tipo de clave: Cipher.SECRET_KEY, Cipher.PRIVATE_KEY,
         Cipher.PUBLIC_KEY.
 Para recuperar la clave se debe utilizar el
  método unwrap:
     Cabecera:public final Key unwrap(byte[] wrappedKey,
     String wrappedKeyAlgorithm, int wrappedKeyType));
Esquema básico de cifrado con clave privada

   Creación de la clave.
   Creación del objeto Cipher.
   Cifrado.
   Configuración del objeto Cipher.
   Descifrado.
Confidencialidad con clave pública

 Introducción.
 Esquema básico de cifrado con clave pública.
Introducción

 La claves privadas tienen un problema:
    Supongamos que rx quiere comunicarse con tx, por lo
    que rx necesita conocer esa clave.
    Debe ser enviada, de ese modo pone en peligro el
    cifrado, de ahí que la clave es información sensible.
 Si alguien intercepta la clave, el cifrado será
  inútil.
 La encriptación asimétrica elimina el problema
  de compartir información sensible:
    La clave de cifrado se puede compartir sin problemas,
    y la clave de descifrar sólo la tiene que poseer el
    receptor.
Esquema básico de cifrado con clave pública

 Creamos la clave.
 Creamos un objeto Cipher y lo configuramos
  con los parámetros deseados.
 Realizamos el cifrado.
 Configuramos otra vez el objeto Cipher.
 Desciframos.
Trabajando con flujos

 Clase CipherInputStream:
    Análisis de su constructor.
    Métodos de lectura.
 Clase CipherOutputStream:
    Análisis de su constructor.
    Métodos de escritura.

Más contenido relacionado

La actualidad más candente

Teoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesTeoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesUniversidad del Valle
 
Método Runge Kutta. Computación Aplicada
Método Runge Kutta. Computación AplicadaMétodo Runge Kutta. Computación Aplicada
Método Runge Kutta. Computación Aplicadamarticalu001
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASEdavidsande
 
Simulador y Emulador
Simulador y EmuladorSimulador y Emulador
Simulador y Emuladormamaro09
 
Sistemas operativos 2
Sistemas operativos 2Sistemas operativos 2
Sistemas operativos 2Chulinneitor
 
Ingenieria web
Ingenieria webIngenieria web
Ingenieria webMirsha01
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Javaquesada_diego
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en javaWhaleejaa Wha
 
Recopilacion De Informacion De Ing.Sofware
Recopilacion De Informacion De Ing.SofwareRecopilacion De Informacion De Ing.Sofware
Recopilacion De Informacion De Ing.Sofwarecarolina
 
Máquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesMáquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesRosviannis Barreiro
 
Análisis y diseño estructurado
Análisis y diseño estructuradoAnálisis y diseño estructurado
Análisis y diseño estructuradoIsbel Alfonzo
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automataJacqui Venegas
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesmarigelcontreras
 

La actualidad más candente (20)

Teoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formalesTeoria de automatas y lenguajes formales
Teoria de automatas y lenguajes formales
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Método Runge Kutta. Computación Aplicada
Método Runge Kutta. Computación AplicadaMétodo Runge Kutta. Computación Aplicada
Método Runge Kutta. Computación Aplicada
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
Metodologia msf
Metodologia msfMetodologia msf
Metodologia msf
 
Metodo quicksort
Metodo quicksortMetodo quicksort
Metodo quicksort
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASE
 
Simulador y Emulador
Simulador y EmuladorSimulador y Emulador
Simulador y Emulador
 
Sistemas operativos 2
Sistemas operativos 2Sistemas operativos 2
Sistemas operativos 2
 
Ingenieria web
Ingenieria webIngenieria web
Ingenieria web
 
Tecnicas de Pruebas
 Tecnicas de Pruebas  Tecnicas de Pruebas
Tecnicas de Pruebas
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Organización aleatoria o indirecta
Organización aleatoria o indirectaOrganización aleatoria o indirecta
Organización aleatoria o indirecta
 
Recopilacion De Informacion De Ing.Sofware
Recopilacion De Informacion De Ing.SofwareRecopilacion De Informacion De Ing.Sofware
Recopilacion De Informacion De Ing.Sofware
 
Máquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesMáquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y Aplicaciones
 
Análisis y diseño estructurado
Análisis y diseño estructuradoAnálisis y diseño estructurado
Análisis y diseño estructurado
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
Aplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionalesAplicación de arreglos bidimensionales
Aplicación de arreglos bidimensionales
 

Destacado

Manual de identidad waldos
Manual de identidad waldosManual de identidad waldos
Manual de identidad waldosEdgar Robles
 
Prueba de bloque 5 (FARC)
Prueba de bloque 5 (FARC)Prueba de bloque 5 (FARC)
Prueba de bloque 5 (FARC)Lisseth Mora
 
Unidad iii y iv metodología y técnicas de la investigación policial (4)
Unidad iii y iv metodología y técnicas de la investigación policial (4)Unidad iii y iv metodología y técnicas de la investigación policial (4)
Unidad iii y iv metodología y técnicas de la investigación policial (4)Emanuel Mereci
 
Curso mei 512 refrigeración industrial
Curso mei 512   refrigeración industrialCurso mei 512   refrigeración industrial
Curso mei 512 refrigeración industrialProcasecapacita
 
Ciberterrorismo y espionaje
Ciberterrorismo y espionajeCiberterrorismo y espionaje
Ciberterrorismo y espionajeequipo13CDVM
 
Seguridad y Privacidad de la Información en la Era Digital
Seguridad y Privacidad de la Información en la Era DigitalSeguridad y Privacidad de la Información en la Era Digital
Seguridad y Privacidad de la Información en la Era DigitalLuisana03
 
Revista brasileira de inteligência rbi
Revista brasileira de inteligência   rbiRevista brasileira de inteligência   rbi
Revista brasileira de inteligência rbiKain2014
 
Curso De Frigorista
Curso De FrigoristaCurso De Frigorista
Curso De Frigoristaduendemagico
 
Técnicas de Cifrado y Descifrado
Técnicas de Cifrado y DescifradoTécnicas de Cifrado y Descifrado
Técnicas de Cifrado y DescifradoHacking Bolivia
 
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martin
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martinManual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martin
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martinAndré Carvalho Lima
 
O.inf 22015 parte 2(sec 34) - opinfo br, com soc y opsic ok
O.inf 22015  parte 2(sec 34) - opinfo br, com soc y opsic okO.inf 22015  parte 2(sec 34) - opinfo br, com soc y opsic ok
O.inf 22015 parte 2(sec 34) - opinfo br, com soc y opsic okcomandantebrasil2
 
Refrigeración comercial e industrial dia 2
Refrigeración comercial e industrial dia 2Refrigeración comercial e industrial dia 2
Refrigeración comercial e industrial dia 2GIssell1207
 

Destacado (20)

Curso de refrigeracion
Curso de refrigeracionCurso de refrigeracion
Curso de refrigeracion
 
Manual de identidad waldos
Manual de identidad waldosManual de identidad waldos
Manual de identidad waldos
 
Prueba de bloque 5 (FARC)
Prueba de bloque 5 (FARC)Prueba de bloque 5 (FARC)
Prueba de bloque 5 (FARC)
 
El ciberespionaje
El ciberespionajeEl ciberespionaje
El ciberespionaje
 
Telegrama Zimmermann
Telegrama ZimmermannTelegrama Zimmermann
Telegrama Zimmermann
 
Unidad iii y iv metodología y técnicas de la investigación policial (4)
Unidad iii y iv metodología y técnicas de la investigación policial (4)Unidad iii y iv metodología y técnicas de la investigación policial (4)
Unidad iii y iv metodología y técnicas de la investigación policial (4)
 
Analizando un delito informático
Analizando un delito informáticoAnalizando un delito informático
Analizando un delito informático
 
Documento sin título
Documento sin títuloDocumento sin título
Documento sin título
 
A pessoa errada
A pessoa erradaA pessoa errada
A pessoa errada
 
Curso mei 512 refrigeración industrial
Curso mei 512   refrigeración industrialCurso mei 512   refrigeración industrial
Curso mei 512 refrigeración industrial
 
Ciberterrorismo y espionaje
Ciberterrorismo y espionajeCiberterrorismo y espionaje
Ciberterrorismo y espionaje
 
Seguridad y Privacidad de la Información en la Era Digital
Seguridad y Privacidad de la Información en la Era DigitalSeguridad y Privacidad de la Información en la Era Digital
Seguridad y Privacidad de la Información en la Era Digital
 
Revista brasileira de inteligência rbi
Revista brasileira de inteligência   rbiRevista brasileira de inteligência   rbi
Revista brasileira de inteligência rbi
 
Curso De Frigorista
Curso De FrigoristaCurso De Frigorista
Curso De Frigorista
 
Técnicas de Cifrado y Descifrado
Técnicas de Cifrado y DescifradoTécnicas de Cifrado y Descifrado
Técnicas de Cifrado y Descifrado
 
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martin
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martinManual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martin
Manual-introductorio-a-la-ginecologia-natural-pabla-perez-san-martin
 
Cartucheria
CartucheriaCartucheria
Cartucheria
 
O.inf 22015 parte 2(sec 34) - opinfo br, com soc y opsic ok
O.inf 22015  parte 2(sec 34) - opinfo br, com soc y opsic okO.inf 22015  parte 2(sec 34) - opinfo br, com soc y opsic ok
O.inf 22015 parte 2(sec 34) - opinfo br, com soc y opsic ok
 
Cb s s3-v 130516 -
Cb s s3-v 130516 -Cb s s3-v 130516 -
Cb s s3-v 130516 -
 
Refrigeración comercial e industrial dia 2
Refrigeración comercial e industrial dia 2Refrigeración comercial e industrial dia 2
Refrigeración comercial e industrial dia 2
 

Similar a 2. criptografiìa con java

Chat con encriptación en java
Chat con encriptación  en javaChat con encriptación  en java
Chat con encriptación en javaChristian Salinas
 
1. introduccioìn a la seguridad
1. introduccioìn a la seguridad1. introduccioìn a la seguridad
1. introduccioìn a la seguridad1 2d
 
Protocolo SSL Jean
Protocolo SSL JeanProtocolo SSL Jean
Protocolo SSL Jeanjeanpro1
 
Auditoría wireless
Auditoría wirelessAuditoría wireless
Auditoría wirelessruben0909
 
Java Web Services - SOAP Temas Adicionales
Java Web Services - SOAP Temas AdicionalesJava Web Services - SOAP Temas Adicionales
Java Web Services - SOAP Temas AdicionalesLuis Miguel De Bello
 
Metodos de encriptacion
Metodos de encriptacionMetodos de encriptacion
Metodos de encriptacionESPE
 
Metodos de encriptacion
Metodos de encriptacionMetodos de encriptacion
Metodos de encriptacionESPE
 
5. administracioìn de claves y certificados
5. administracioìn de claves y certificados5. administracioìn de claves y certificados
5. administracioìn de claves y certificados1 2d
 
Interconexion de redes
Interconexion de redesInterconexion de redes
Interconexion de redesKary Gomez
 

Similar a 2. criptografiìa con java (20)

Seguridad criptografia
Seguridad criptografiaSeguridad criptografia
Seguridad criptografia
 
Introducción a la Criptografia
Introducción a la CriptografiaIntroducción a la Criptografia
Introducción a la Criptografia
 
Protocolo SSL
Protocolo SSLProtocolo SSL
Protocolo SSL
 
Respuestas
RespuestasRespuestas
Respuestas
 
Protocolo
ProtocoloProtocolo
Protocolo
 
Protocolo rodrigo
Protocolo rodrigoProtocolo rodrigo
Protocolo rodrigo
 
Framework .NET 3.5 11 Seguridad
Framework .NET 3.5 11 SeguridadFramework .NET 3.5 11 Seguridad
Framework .NET 3.5 11 Seguridad
 
Seguridad en Internet
Seguridad en InternetSeguridad en Internet
Seguridad en Internet
 
Chat con encriptación en java
Chat con encriptación  en javaChat con encriptación  en java
Chat con encriptación en java
 
1. introduccioìn a la seguridad
1. introduccioìn a la seguridad1. introduccioìn a la seguridad
1. introduccioìn a la seguridad
 
Protocolo SSL Jean
Protocolo SSL JeanProtocolo SSL Jean
Protocolo SSL Jean
 
Seguridad de las redes
Seguridad de las redesSeguridad de las redes
Seguridad de las redes
 
Auditoría wireless
Auditoría wirelessAuditoría wireless
Auditoría wireless
 
ALGORITMOS
ALGORITMOSALGORITMOS
ALGORITMOS
 
Java Web Services - SOAP Temas Adicionales
Java Web Services - SOAP Temas AdicionalesJava Web Services - SOAP Temas Adicionales
Java Web Services - SOAP Temas Adicionales
 
Web cryptography
Web cryptographyWeb cryptography
Web cryptography
 
Metodos de encriptacion
Metodos de encriptacionMetodos de encriptacion
Metodos de encriptacion
 
Metodos de encriptacion
Metodos de encriptacionMetodos de encriptacion
Metodos de encriptacion
 
5. administracioìn de claves y certificados
5. administracioìn de claves y certificados5. administracioìn de claves y certificados
5. administracioìn de claves y certificados
 
Interconexion de redes
Interconexion de redesInterconexion de redes
Interconexion de redes
 

Más de 1 2d

Notas clase
Notas claseNotas clase
Notas clase1 2d
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii1 2d
 
J2me
J2meJ2me
J2me1 2d
 
6. control de acceso
6. control de acceso6. control de acceso
6. control de acceso1 2d
 
4. certificados digitales
4. certificados digitales4. certificados digitales
4. certificados digitales1 2d
 
3. boletines de mensajes y firmas digitales
3. boletines de mensajes y firmas digitales3. boletines de mensajes y firmas digitales
3. boletines de mensajes y firmas digitales1 2d
 
1046 pdfsam opos informatica
1046 pdfsam opos informatica1046 pdfsam opos informatica
1046 pdfsam opos informatica1 2d
 
1203 pdfsam opos informatica
1203 pdfsam opos informatica1203 pdfsam opos informatica
1203 pdfsam opos informatica1 2d
 
878 pdfsam opos informatica
878 pdfsam opos informatica878 pdfsam opos informatica
878 pdfsam opos informatica1 2d
 
516 pdfsam opos informatica
516 pdfsam opos informatica516 pdfsam opos informatica
516 pdfsam opos informatica1 2d
 
1704 pdfsam opos informatica
1704 pdfsam opos informatica1704 pdfsam opos informatica
1704 pdfsam opos informatica1 2d
 
1893 pdfsam opos informatica
1893 pdfsam opos informatica1893 pdfsam opos informatica
1893 pdfsam opos informatica1 2d
 
516 pdfsam opos informatica
516 pdfsam opos informatica516 pdfsam opos informatica
516 pdfsam opos informatica1 2d
 
706 pdfsam opos informatica
706 pdfsam opos informatica706 pdfsam opos informatica
706 pdfsam opos informatica1 2d
 
330 pdfsam opos informatica
330 pdfsam opos informatica330 pdfsam opos informatica
330 pdfsam opos informatica1 2d
 
1 pdfsam opos informatica
1 pdfsam opos informatica1 pdfsam opos informatica
1 pdfsam opos informatica1 2d
 
1379 pdfsam opos informatica
1379 pdfsam opos informatica1379 pdfsam opos informatica
1379 pdfsam opos informatica1 2d
 
706 pdfsam opos informatica
706 pdfsam opos informatica706 pdfsam opos informatica
706 pdfsam opos informatica1 2d
 
Guia del-en roo-tador-2.8
Guia del-en roo-tador-2.8Guia del-en roo-tador-2.8
Guia del-en roo-tador-2.81 2d
 
Tlk
TlkTlk
Tlk1 2d
 

Más de 1 2d (20)

Notas clase
Notas claseNotas clase
Notas clase
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
J2me
J2meJ2me
J2me
 
6. control de acceso
6. control de acceso6. control de acceso
6. control de acceso
 
4. certificados digitales
4. certificados digitales4. certificados digitales
4. certificados digitales
 
3. boletines de mensajes y firmas digitales
3. boletines de mensajes y firmas digitales3. boletines de mensajes y firmas digitales
3. boletines de mensajes y firmas digitales
 
1046 pdfsam opos informatica
1046 pdfsam opos informatica1046 pdfsam opos informatica
1046 pdfsam opos informatica
 
1203 pdfsam opos informatica
1203 pdfsam opos informatica1203 pdfsam opos informatica
1203 pdfsam opos informatica
 
878 pdfsam opos informatica
878 pdfsam opos informatica878 pdfsam opos informatica
878 pdfsam opos informatica
 
516 pdfsam opos informatica
516 pdfsam opos informatica516 pdfsam opos informatica
516 pdfsam opos informatica
 
1704 pdfsam opos informatica
1704 pdfsam opos informatica1704 pdfsam opos informatica
1704 pdfsam opos informatica
 
1893 pdfsam opos informatica
1893 pdfsam opos informatica1893 pdfsam opos informatica
1893 pdfsam opos informatica
 
516 pdfsam opos informatica
516 pdfsam opos informatica516 pdfsam opos informatica
516 pdfsam opos informatica
 
706 pdfsam opos informatica
706 pdfsam opos informatica706 pdfsam opos informatica
706 pdfsam opos informatica
 
330 pdfsam opos informatica
330 pdfsam opos informatica330 pdfsam opos informatica
330 pdfsam opos informatica
 
1 pdfsam opos informatica
1 pdfsam opos informatica1 pdfsam opos informatica
1 pdfsam opos informatica
 
1379 pdfsam opos informatica
1379 pdfsam opos informatica1379 pdfsam opos informatica
1379 pdfsam opos informatica
 
706 pdfsam opos informatica
706 pdfsam opos informatica706 pdfsam opos informatica
706 pdfsam opos informatica
 
Guia del-en roo-tador-2.8
Guia del-en roo-tador-2.8Guia del-en roo-tador-2.8
Guia del-en roo-tador-2.8
 
Tlk
TlkTlk
Tlk
 

2. criptografiìa con java

  • 2. Índice de contenidos  Introducción.  Criptografía con Java.  Infraestructura con PKI con Java.  Control de acceso.  Aplicaciones con Java SSL.  Seguridad en aplicaciones WEB.
  • 3. Criptografía en Java  Introducción.  Servicios criptográficos.  Proveedores.  Clases engine.  Claves criptográficas.  Encriptación.  Message Digest.  Firma digital.
  • 4. Introducción  El soporte que da el JDK a la criptografía se divide en dos grandes bloques: JCA (Java Cryptography Architecture): define las bases del soporte criptográfico de Java. JCE (Java Cryptography Extension): proporciona los algoritmos necesarios para poder encriptar y desencriptar datos.  Para un programador, el conocimiento de protocolos y algoritmos en encriptación no es necesario, dado que toda esa problemática ha sido encapsulada dentro de unos paquetes java.  Ambas parte de J2SE SDK v1.4
  • 5. Introducción  Debido a las leyes de los Estados Unidos, que prohiben exportar software de encriptación de datos, el JCE no venían incluido inicialmente en las versiones del JDK, y existían restricciones para bajarlo de la site de SUN.  Existen paquetes de terceros, desarrollados fuera de los Estados Unidos, que implementan todas las especificaciones del JCE y que no están sujetos a sus restricciones legales, como por ejemplo la librería CRYPTICS.
  • 6. Arquitectura criptográfica de Java (JCA)  Marco o framework para acceder y desarrollar la funcionalidad criptográfica de Java.  Incluye todas las APIs relativas a la criptografía (el paquete java.security y sus subpaquetes), así como una serie de especificaciones a tener en cuenta por los programadores que quieran crear extensiones criptográficas (como la librería CRYPTICS, etc).
  • 7. Arquitectura criptográfica de Java (JCA)  La arquitectura criptográfica de Java ha sido diseñada teniendo en cuenta dos principios: independencia de la implementación e interoperabilidad. independencia de algoritmos. La independencia de la implementación se consigue introduciendo el concepto de "Proveedor" (Cryptography Package Provider).  Estos dos conceptos son complementarios. Se pueden utilizar servicios criptográficos tales como Firma Digital sin preocuparse por los detalles de implementación o los algoritmos que los implementan.
  • 8. Arquitectura criptográfica de Java (JCA)  Cuando el concepto de independencia de implementación no es deseable JCA permite al programador usar una implementación específica.  La independencia de algoritmos se alcanza definiendo tipos de servicios criptográficos, y proporcionando clases específicas para cada uno.
  • 9. Arquitectura criptográfica de Java (JCA)  La independencia de implementación se alcanza usando una arquitectura basada en Proveedor.  Cryptographic Service Provider: conjunto de paquetes que implementan uno o más servicios criptográficos.  Un programa sólo debe solicitar un determinado objeto que proporciona un específico servicio, obteniendo una implementación a partir de uno de los proveedores instalados.
  • 10. Arquitectura criptográfica de Java (JCA)  Clases: Provider, Security. MessageDigest, Signature. SecureRandom. KeyPair, KeyPairGenerator. Identity, Signer. ...  Interfaces: Key, PublicKey, PrivateKey. ...
  • 11. Arquitectura criptográfica de Java (JCA)  Paquetes más importantes: java.security : proporciona las clases e interfaces del framework de seguridad. java.security.cert : clases e interfaces para el manejo de listas de revocación, etc.
  • 12. Extensión criptográfica de Java (JCE)  Clases: Cipher. Cipher Streams. KeyGenerator, SecretKeyFactory. SealedObject. KeyAgreement. Mac.
  • 13. Servicios criptográficos  Una instancia de un servicio está asociada a varios algoritmos o tipos: Ejemplo: Signature, CertificateFactory  Estos servicios carecen de constructores: Independencia del algoritmo. Método getInstance().
  • 14. Servicios criptográficos SERVICIO ALGORITMO/TIPO DESCRIPCIÓN SecureRandom SHA1PRNG Genera números pseudo- aleatorios KeyGenerator DES,Triple-DES, Blowfish Genera claves KeyParGenerator DSA, RSA,DH Genera pares de claves publica-privada MessageDigest SHA1, MD5 Computa el diggest de un mensaje Mac Computa el código de autenticación de un mensaje Signature SHA1WithDSA, Crea y verifica firmas SHA1WithRSA digitales de un mensaje KeyStore JKS, JCEKS, PKCS12 Almacena claves y certificados CertificateFactory X509 Crea Certificados Cipher DES, Triple-DES, Blowfish Encripta y desencripta KeyAgreement DH Permite a dos partes coincidir de forma segura en una clave secreta
  • 15. Proveedores  El término Proveedor de Servicio Criptográfico o Proveedor se refiere a un conjunto de paquetes que proporcionan una implementación concreta de un conjunto de servicios criptográficos.  Es posible tener instalados varios proveedores en un entorno de desarrollo.  Por ejemplo Signature.getInstance(“SHA1WithDSA”). Signature.getInstance(“SHA1WithDSA”, “SUN”).
  • 16. Proveedores  Instalación de un nuevo proveedor. Obtención de las bibliotecas de dicho proveedor (jar). Instalación en jre-homelibext. La configuración se puede hacer editando el archivo java.security en el jre-homelibsecurity con entradas del tipo security.provider.i=<proveedor>.
  • 17. Proveedores  La clase Provider: Es la interface que utilizaremos para acceder a ese paquete o conjunto de paquetes. Tiene métodos para acceder al nombre del proveedor, número de versión y otra información.  Métodos: protected Provider(String name,double version,String info) public String getName() public double getVersion() public String getInfo() public String toString() public void clear()
  • 18. Proveedores  Más métodos: public void load(InputStream inStream)throws IOException public void putAll(Map t) public Set entrySet() public Set keySet() public Collection values() public Object put(Object key,Object value) Object.equals(Object), Hashtable.get(Object) public Object remove(Object key)
  • 19. Clases engine  Clases que definen un servicio criptográfico de forma abstracta.  Un servicio criptográfico está asociado a un algoritmo específico, proporciona operaciones, genera material criptográfico necesario en las operaciones, genera objetos que encapsulan claves.  Por ejemplo: la clase Signature proporciona acceso a la funcionalidad de un algoritmo de firma digital.
  • 20. Claves criptográficas  El manejo de claves es vital para el uso de determinados servicios de encriptación.  Se necesitan claves para generar servicios de firma digital y encriptación.  La interfaz java.security.Key representa un algoritmo y tipo de clave con los siguientes métodos: public String getAlgorithm(): devuelve el algoritmo de la clave. public byte[]getEncoded(): devuelve la clave como un array de bytes. Una clave se puede generar a partir de su flujo binario o bien por generación expresa dentro de un programa a partir de algún algoritmo de generación.
  • 21. Claves criptográficas  Dos tipos de claves: simétricas (secret key). asimétricas (public y private). Las posibilidades de los algoritmos de clave pública nos permiten varias opciones que no permite los algoritmos de clave privada :  Servicios de autentificación.  Firma digital.  Publicar una clave de cifrado, que puede ser distribuida sin riesgos.
  • 22. Claves criptográficas  Pero los algoritmos de clave privada también tienen sus ventajas: Los algoritmos simétricos son mas rápidos que los de clave publica, por lo que en mensajes largos es mejor usar uno de clave privada.  Hay dos clases Engine que actúan sobre claves: Generador de claves. Factoría de claves.  El concepto de clave es modelado por la interface Key, que se encuentra en el paquete java.security. public interface Key extends Serializable  Análisis de la interface.
  • 23. Claves criptográficas  Claves asimétricas: Son claves muy populares. Siempre vienen en parejas. Java proporciona dos interfaces más:  public interface PublicKey extends Key.  public interface PrivateKey extends Key.  No proporcionan ningún método adicional, una clase que implementa PublicKey se identifica a si misma como una clave pública, pero no contiene ningún método diferente. Los proveedores que vienen con Java proporcionan dos tipos de claves asimétricas: DSA y RSA. JCE proporciona otro: Diffie-Hellman.
  • 24. Claves criptográficas  Claves asimétricas: DSA:  public interface DSAPrivateKey extends DSAKey.  public interface DSAPublicKey extends DSAKey. RSA:  public interface RSAPublicKey extends RSAKey, PublicKey.  public interface RSAPrivateKey extends RSAKey, PrivateKey. Clase que hereda el concepto general de clave asimétrica:  public final class KeyPair.
  • 25. Claves criptográficas  Claves asimétricas: Key PrivateKey DSAPrivateKey RSAPrivateKey
  • 26. Claves criptográficas  Claves simétricas: Sólo son usadas dentro de JCE. Paquete javax.crypto . public interface SecretKey extends Key Si una clase implementa esta interface es una clave simétrica. Esta interface está vacía, sólo se utiliza como identificador de un tipo.  JCE proporciona distintos tipos de claves simétricas: Blowfish, DES, DESede, HmacMD5, HmacSHA1 ...
  • 27. Claves criptográficas  Claves simétricas: Sólo son usadas dentro de JCE. Paquete javax.crypto . public interface SecretKey extends Key Si una clase implementa esta interface es una clave simétrica. Esta interface está vacía, sólo se utiliza como identificador de un tipo.  JCE proporciona distintos tipos de claves simétricas: Blowfish, DES, DESede, HmacMD5, HmacSHA1 ...
  • 28. Claves criptográficas  La interfaz java.security.Key representa un algoritmo y tipo de clave con los siguientes métodos: public String getAlgorithm():  Devuelve el algoritmo de la clave. Todo objeto Key está asociado con un algoritmo único. public byte[]getEncoded():  Devuelve la clave como un array de bytes en el formato de codificación principal de la clave (RAW o PKCS#8). getFormat():  Devuelve el formato en el que está codificada la clave.  Una clave se puede generar a partir de su flujo binario o bien por generación expresa dentro de un programa a partir de algún algoritmo de generación.
  • 29. Claves criptográficas  Claves simétricas: La interface Key se ve ampliada por una serie de interface especializadas, nos centramos en este caso en:  SecretKey. Se trabaja a continuación con algoritmos simétricos o de clave secreta.
  • 30. Claves criptográficas  Interface SecretKey: Se encuentra en el paquete javax.crypto. Hereda de la interface Key y no añade métodos nuevos. Las implementaciones de proveedores deben implementar dicha interface.
  • 31. Claves criptográficas  Generación de claves: Se proporcionan dos clases engine para generar claves simétricas y asimétricas. clase KeyPairGenerator. clase KeyGenerator.
  • 32. Generación de claves simétricas  Clase KeyGenerator: Utilizada para generar clave secretas. Paquete javax.crypto. Se instancia a través de una factoría, a través del método getInstance():  Parámetro 1: String algorithm.  Este parámetro es el nombre del algoritmo para el que se genera dicha clave.  Los nombres que se pueden utilizar vienen definidos en el estándar de Sun y son:  AES y Blowfish.  DES y DESede.  DiffieHellman.  OAEP.  PBE.  PBEWith<digest>And<encryption>.  RC2.
  • 33. Generación de claves simétricas  Clase KeyGenerator: Valores de clave por defecto:  DES: 56 bits.  Triple DES: 112 bits.  Blowfish: 56 bits.  HmacMD5: 64 bytes: Claves para algoritmos de firma digital con clave secreta (MAC).  HmacSHA1: 64 bytes. Claves para algoritmos de firma digital con clave secreta (MAC).
  • 34. Generación de claves simétricas  Clase KeyGenerator: Restricciones:  DES: su tamaño de clave es obligatoriamente 56.  Triple DES: 112 o 168.  Nota: Un tamaño de clave de 112 generará una clave Triple DES con dos claves intermedias, un tamaño de clave de 168 generará una clave Triple DES con tres claves intermedias.  Blowfish: el tamaño de clave debe ser múltiplo de 8, y sólo puede estar en el rango 32-448 ambos inclusive.
  • 35. Generación de claves simétricas  Clase KeyGenerator: Método getInstance().  public static KeyGenerator getInstance(String algorithm):  Se generan claves para un algoritmo simétrico especificado mediante la cadena pasada como parámetro.  Nombre de los algoritmos:  DES, Triple DES, Blowfish, HmacMD5, HmacSHA1.  public static KeyGenerator getInstance(String algorithm, String provider).  Se generan claves para un algoritmo simétrico especificado mediante el nombre del algoritmo y el proveedor.  Nombre de los algoritmos:  DES, Triple DES, Blowfish, HmacMD5, HmacSHA1.  Nombre de los proveedores:  SUN 1.5, Apple 1.0, ...
  • 36. Generación de claves simétricas  Clase KeyGenerator: Método getInstance(). // OPCIÓN 1: // Creación de un generador de claves mediante el nombre del algoritmo. KeyGenerator kg=KeyGenerator.getInstance("DES"); // OPCIÓN 2: // Creación de un generador de claves mediante el nombre del algoritmo y // proveedor específico KeyGenerator kg=KeyGenerator.getInstance("DES",“SUN 1.5”);
  • 37. Generación de claves simétricas  Clase KeyGenerator: Los objetos KeyGenerator se inicializan con su método init. Este método está sobrecargado:  public final void init(int keysize):  Inicializa el objeto en una clave de un tamaño especificado por el parámetro utilizando el generador aleatorio por defecto.  public final void init(int keysize,SecureRandom random)  Inicializa el objeto en una clave de un tamaño especificado por el parámetro utilizando el generador aleatorio suministrado por el usuario.
  • 38. Generación de claves simétricas  Clase KeyGenerator:  public final void init(SecureRandom random):  Inicializa el objeto en una clave utilizando el generador aleatorio suministrado por el usuario. Se utiliza un tamaño de clave apropiado para el algoritmo.  public final void init(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException:  Inicializa el objeto utilizando parámetros específicos de la implementación.  public final void init(AlgorithmParameterSpec params, SecureRandom random)throws InvalidAlgorithmParameterException:  Inicializa el objeto utilizando parámetros específicos de la implementación y objeto SecureRandom suministrado por el usuario.
  • 39. Generación de claves simétricas  Clase KeyGenerator: public final SecretKey generateKey():
  • 40. Generación de claves simétricas  Nota aclaratoria. SecureRandom: Los números aleatorios son importantes en criptografía. Se suelen usar para generar los resultados de las operaciones, como la generación de claves. Los ordenadores no suelen generar números verdaderamente aleatorios, en vez de ello, se utilizan los algoritmos de generación de números pseudoaleatorios (PRNG). Algunos son más aleatorios que otros. Se consigue un nivel más alto de aleatoriedad sembrando el PRNG con un valor seleccionado aleatoriamente (semilla).
  • 41. Generación de claves simétricas  Nota aclaratoria. SecureRandom: La clase SecureRandom se utiliza para acceder a los algoritmos seguros PRN de los distintos proveedores. Constructores:  public SecureRandom(): crea un objeto que se inicializa con un valor de semilla que es generada internamente. Esta semilla puede no ser segura.  public SecureRandom(byte[] seed): crea un objeto que se inicializa con un valor de semilla suministrada como parámetro. Si desea tener un alto nivel de seguridad, deberá generar la semilla de forma manual.
  • 42. Generación de claves simétricas  Nota aclaratoria. SecureRandom: Una vez creado y sembrado el objeto, está listo para ser usado para generar valores aleatorios utilizando:  protected final int next(int numBits).  public void nextBytes(byte[] bytes).
  • 43. Generación de claves simétricas  Nota aclaratoria. AlgorithmParameterSpec.
  • 44. Claves criptográficas  Clase KeyPairGenerator: Paquete java.security. Se instancia a través de una factoría, a través del método getInstance(). public static KeyPairGenerator getInstance(String algorithm). public static KeyPairGenerator getInstance(String algorithm, String provider). Los algoritmos para los que generar claves esta disponible son:  DSA, RSA, Diffie-Hellman. Método initialize().
  • 45. Encriptación  Introducción.  Confidencialidad con clave privada.  Confidencialidad con clave pública.
  • 46. Introducción  Es el proceso de convertir texto plano a algo incomprensible o cifrado aplicando transformaciones matemáticas.  Estas transformaciones se conocen como algoritmos de encriptación y requieren una clave de encriptación.  Desencriptación es el proceso inverso, y requiere también una clave.  Cuando ambas claves son la misma se habla de criptografía secreta o simétrica.  Cuando son distintas se habla de criptografía de clave pública o asimétrica.
  • 47. Confidencialidad con clave privada  Introducción.  Clase Cipher: Creación. Inicialización. Encriptado y desencriptado.  Esquema básico de cifrado con clave privada.
  • 48. Introducción  JDK 1.4 soporta los siguientes algoritmos: DES (Data Encryption Standard) desarrollado por IBM en los 70. Es un cifrado de bloque de 56-bit. TripleDES. Consiste en aplicar el algoritmo DES tres veces (encriptar desencriptar encriptar) con dos claves dando un resultado de 112 bits. AES. Es el algoritmo que reemplazó a DES. Creado por Joan Daemen y Vincent. Rijmen. Es un cifrado por bloque de 128-bit con claves de longitud 128, 192 o 256 bits. RC2, RC4 y RC5. Blowfish. Fue creado por Bruce Schneier y hace un cifrado por bloques con claves de longitud variable desde 32 a 448 bits (en múltiplos de 8), Diseñado para ser eficiente en computadores. PBE. PBE (Password Based Encryption) puede ser usado con algoritmos de clave privada y funciones de resumen.
  • 49. Clase Cipher  Se usa para cifrar mediante algoritmos de clave simétrica.  Forma parte del JCE (Java Cryptography Extension).  Vamos a analizar los distintos pasos a seguir para poder trabajar con objetos de dicha clase: Creación de objetos de la clase Cipher. Inicialización de objetos de la clase Cipher.
  • 50. Creación de objetos de la clase Cipher  Como ya vimos es muy normal instanciar clases a través de una factoría: public static Cipher getInstance(String transformation); public static Cipher getInstance(String transformation, String provider); Nota: transformación. algoritmo / modo / relleno algoritmo
  • 51. Creación de objetos de la clase Cipher  Ejemplo: Cipher c1 = Cipher.getInstance("DES/ECB/ PKCS5Padding"); Cipher c1 = Cipher.getInstance("DES");  Los modos son la forma de trabajar del algoritmo: Ninguno. ECB (Electronic Code Book). CBC (Cipher Block Chaining). CFB (Cipher Feedback Mode). OFB (Output Feedback Mode). PCBC (Propagating Cipher Block Chaining).
  • 52. Creación de objetos de la clase Cipher  Relleno: Un algoritmo puede cifrar por bloques de una longitud determinada, cuando el mensaje es un múltiplo de dicha longitud no existe ningún problema. Pero cuando el mensaje no es un múltiplo, el último bloque es menor que la longitud necesaria para realizar el cifrado, entonces se realiza un relleno de ese bloque. A este relleno se le llama padding. Existen varias formas de rellenar los bloques de menor tamaño:  No rellenar  PKCS5  OAEP  SSL3
  • 53. Inicialización del objeto Cipher  Un objeto Cipher obtenido mediante el método getInstance() debe ser inicializado a uno de los cuatro modos disponibles. Dichos modos son identificados mediante constantes enteras: ENCRYPT_MODE: encriptación de datos. DECRYPT_MODE: desencriptación de datos. WRAP_MODE: envuelve una clave de modo que dicha clave puede ser transportada con seguridad. UNWRAP_MODE: desenvolver una clave que ha sido previamente envuelta, en un objeto Key.
  • 54. Inicialización del objeto Cipher  Para inicializar el objeto se debe utilizar el método: public void init(int opmode, Key key); public void init(int opmode, Certificate certificate) public void init(int opmode, Key key, SecureRandom random); public void init(int opmode, Certificate certificate, SecureRandom random) public void init(int opmode, Key key,AlgorithmParameterSpec params); public void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random); public void init(int opmode, Key key, AlgorithmParameters params) public void init(int opmode, Key key, AlgorithmParameters params,SecureRandom random)
  • 55. Encriptado y desencriptado  Un paso: Llamada al método doFinal. Cabecera:  public byte[] doFinal(byte[] input);  y otras variantes del mismo método.  Varios pasos: Llamada al método update. Cabecera:  public byte[] update(byte[] input); Operación en varios pasos debe ser terminada con una llamada al método doFinal.
  • 56. Transferencia de clave  Llamada al método wrap: Cabecera: public final byte[] wrap(Key key); Para que pueda recuperarse la clave se debe proporcionar más información:  Algoritmo de la clave.  Tipo de clave: Cipher.SECRET_KEY, Cipher.PRIVATE_KEY, Cipher.PUBLIC_KEY.  Para recuperar la clave se debe utilizar el método unwrap: Cabecera:public final Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType));
  • 57. Esquema básico de cifrado con clave privada  Creación de la clave.  Creación del objeto Cipher.  Cifrado.  Configuración del objeto Cipher.  Descifrado.
  • 58. Confidencialidad con clave pública  Introducción.  Esquema básico de cifrado con clave pública.
  • 59. Introducción  La claves privadas tienen un problema: Supongamos que rx quiere comunicarse con tx, por lo que rx necesita conocer esa clave. Debe ser enviada, de ese modo pone en peligro el cifrado, de ahí que la clave es información sensible.  Si alguien intercepta la clave, el cifrado será inútil.  La encriptación asimétrica elimina el problema de compartir información sensible: La clave de cifrado se puede compartir sin problemas, y la clave de descifrar sólo la tiene que poseer el receptor.
  • 60. Esquema básico de cifrado con clave pública  Creamos la clave.  Creamos un objeto Cipher y lo configuramos con los parámetros deseados.  Realizamos el cifrado.  Configuramos otra vez el objeto Cipher.  Desciframos.
  • 61. Trabajando con flujos  Clase CipherInputStream: Análisis de su constructor. Métodos de lectura.  Clase CipherOutputStream: Análisis de su constructor. Métodos de escritura.