Saltar la navegación

4.3.- Gestión de claves con el paquete java.security.

Foto de varias llaves doradas sobre una base blanca.

En la generación de claves se utilizan números aleatorios seguros, que son números aleatorios que se generan en base a una semilla. Esto permite crear algoritmos seguros, pues será muy difícil determinar los valores generados sin conocer la semilla.

El paquete java.security proporciona las siguientes clases para la gestión de claves:

  • El interface Key, permite la representación de claves, su almacenamiento y envío de forma serializada dentro de un sistema. Se trata de un interface Serializable y proporciona entre otros los siguientes métodos:
    • getAlgorithm(). Devuelve el nombre del algoritmo con el que se ha generado la clave (RSA, DES, etc.).
    • getEncoded(). Devuelve la clave como un array de bytes.
    • getFormat(). Devuelve el formato con el que está codificada la clave.
  • La clase KeyPairGenerator permite la generación de claves públicas y privadas (asimétricas). Genera objetos del tipo KeyPair, que a su vez contienen un objeto del tipo PublicKey y otro del tipo PrivateKey.
    • El método initialize() permite establecer el tamaño de la clave y el número aleatorio a partir del cual será generada.
  • La clase KeyGenerator permite la generación de claves privadas (simétricas). Genera objetos de tipo SecretKey.
    • El método init() permite establecer el tamaño de la clave y el número aleatorio a partir del cual será generada.
  • La clase SecureRandom permite generar números aleatorios seguros.
    • El método setSeed() permite establecer el valor de la semilla.
    • El constructor secureRandom() utiliza la semilla del proveedor SUN.
    • El método next() y el nextBytes() obtienen el valor de los números generados.
La creación de claves se basa en el tamaño de las mismas, de manera que, si incrementas mucho el tamaño de una clave, el tiempo de cálculo de la misma también se incrementará; y esto puede suponer que la administración de claves no sea lo suficientemente ágil para una determinada aplicación.

Desde el siguiente enlace puedes descargar un proyecto java que genera una pareja de claves (pública y privada) mediante la clase KeyPairGenerator y muestra los valores obtenidos de la PrivateKey y la PublicKey.

En el siguiente enlace puedes ver otro ejemplo de generación de claves en el que se indica además del tamaño de la clave, el número aleatorio seguro a partir del que se genera.

Generar claves pública y privada.

Autoevaluación

Pregunta 1

El método initialize() establece el valor de la semilla al generar números aleatorios.