Hola Habr! Les presento la traducción de 6, 7 y 8 artículos de Jakob Jenkov de una serie de artículos para principiantes que desean aprender los conceptos básicos de la criptografía en Java.
Tabla de contenido:
- Criptografía Java
- Cifrado de Java
- Messagedigest
- Mac
- Firma
- Par de llaves
- Generador de claves
- KeyPairGenerator
- Keystore
- Keytool
- Certificado
- CertificateFactory
- CertPath
Par de llaves
La clase KeyPair ( java.security.KeyPair ) es un par de claves asimétricas (clave pública + clave privada). Una instancia de KeyPair se usa comúnmente en criptografía asimétrica (cifrado o firma de datos). Típicamente, una instancia de KeyPair se obtiene del almacén de claves de Java o KeyPairGenerator, que se discutirá más adelante en este artículo.
Acceso a clave pública
Puede acceder a la clave pública de una instancia de KeyPair llamando a su método getPublic () . Un ejemplo de obtención de una clave pública:
PublicKey publicKey = keyPair.getPublic();
Acceso a clave privada
También puede acceder a la clave privada de la instancia de KeyPair llamando a su método getPrivate () . Aquí hay un ejemplo de cómo obtener una clave privada:
PrivateKey privateKey = keyPair.getPrivate();
Generador de claves
La clase KeyGenerator ( javax.crypto.KeyGenerator ) se usa para generar claves de cifrado simétricas. Una clave de cifrado simétrica es una clave que se utiliza para cifrar y descifrar datos utilizando un algoritmo de cifrado simétrico.
Crear una instancia de KeyGenerator
Antes de poder usar la clase KeyGenerator, debe crear una instancia de KeyGenerator. Una instancia de KeyGenerator se crea llamando al método estático getInstance () , como un parámetro que toma el nombre del algoritmo de cifrado para el que se está creando la clave. Aquí hay un ejemplo de cómo crear una instancia de KeyGenerator:
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
Este ejemplo crea una instancia de KeyGenerator que puede generar claves para el algoritmo de cifrado AES.
KeyGenerator Initialization
Después de crear una instancia de KeyGenerator, debe inicializarla. La inicialización de una instancia se logra llamando al método init () . Ejemplo de inicialización de instancia de KeyGenerator:
SecureRandom secureRandom = new SecureRandom(); int keyBitSize = 256; keyGenerator.init(keyBitSize, secureRandom);
El método init () acepta dos parámetros: la longitud de la clave y SecureRandom , que se usa durante la generación de la clave.
Generación clave
Después de inicializar la instancia de KeyGenerator, puede usarla para generar las claves. La generación de claves se realiza llamando al método generateKey () . Aquí hay un ejemplo de generación de una clave simétrica:
SecretKey secretKey = keyGenerator.generateKey();
Generador de par de llaves
La clase KeyPairGenerator ( java.security.KeyPairGenerator ) se usa para generar pares de claves asimétricas. Un par de claves asimétricas consta de dos claves: la primera clave se usa generalmente para cifrar datos, y la segunda clave se usa para descifrar datos cifrados con la primera clave.
Claves públicas y privadas
El tipo de par de claves asimétricas más famoso es el tipo de par de claves de la forma: clave pública + clave privada. La clave privada se usa para cifrar datos, y la clave pública se usa para descifrar datos. De hecho, también puede cifrar datos con la clave pública y descifrarlos con la clave privada. La clave privada generalmente se mantiene en secreto, y la clave pública puede ser conocida por todos. Por lo tanto, si Jack cifra algunos datos con su clave privada, cualquier persona que posea la clave pública de Jack puede descifrarla.
Crear una instancia de KeyPairGenerator
Para usar KeyPairGenerator, primero debe crear una instancia de la clase KeyPairGenerator. Se crea una instancia de KeyPairGenerator llamando al método getInstance () . Aquí hay un ejemplo de creación de una instancia:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
El método getInstance () acepta el nombre del algoritmo de cifrado que se utilizará. En este ejemplo, usamos el algoritmo RSA.
Initialization KeyPairGenerator
Dependiendo del algoritmo, es posible que deba inicializar una instancia de KeyPairGenerator. KeyPairGenerator se inicializa llamando a su método initialize () . Ejemplo de inicialización de instancia de KeyPairGenerator:
keyPairGenerator.initialize(2048);
En este ejemplo, un KeyPairGenerator se inicializa para generar claves de 2048 bits.
Generación de pares de claves
Para generar un par de claves utilizando KeyPairGenerator, se llama al método generateKeyPair () . Aquí hay un ejemplo de generación de pares de claves:
KeyPair keyPair = keyPairGenerator.generateKeyPair();