Hola Habr! Les presento la traducci贸n del quinto art铆culo "Java Signature" 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
Firma Java
La clase Signature ( java.security.Signature ) crea una firma digital para datos binarios. Una firma digital es un resumen de mensaje cifrado con la clave privada de un par de claves privada / p煤blica. Cualquier persona que posea la clave p煤blica puede verificar la firma digital.
Crear una instancia de firma
Antes de poder usar la clase Signature, debe crear una instancia de esta clase llamando al m茅todo getInstance () est谩tico. A continuaci贸n se muestra un ejemplo en el que se crea una instancia de Signature:
Signature signature = Signature.getInstance("SHA256WithDSA");
El par谩metro de cadena pasado al m茅todo getInstance () determina el algoritmo de cifrado de firma digital utilizado.
Inicializaci贸n de instancia de firma
Despu茅s de crear la instancia de Signature, debe inicializarla antes de comenzar a usarla. La instancia de Signature se inicializa llamando a su m茅todo init () . Un ejemplo de inicializaci贸n de una instancia de firma Java:
SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA"); KeyPair keyPair = keyPairGenerator.generateKeyPair(); signature.initSign(keyPair.getPrivate(), secureRandom);
Como puede ver, la instancia de Signature se inicializa con la clave privada del par de claves secreta / p煤blica y la instancia de SecureRandom.
Creaci贸n de firma digital
Cuando se inicializa la instancia de Firma, puede usarla para crear firmas digitales. Una firma digital se crea llamando al m茅todo update () (una o m谩s veces) y terminando con una llamada a sign () . Ejemplo de creaci贸n de una firma digital para datos binarios:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature.update(data); byte[] digitalSignature = signature.sign();
Verificaci贸n de firma digital
Si desea verificar una firma digital creada por otra persona, debe inicializar la instancia de firma en modo de verificaci贸n (en lugar de modo de firma). As铆 es como se ve la inicializaci贸n de una instancia de Signature en modo de validaci贸n:
Signature signature = Signature.getInstance("SHA256WithDSA"); signature.initVerify(keyPair.getPublic());
Tenga en cuenta que la instancia de Signature ahora se inicializa en modo de verificaci贸n, pasando la clave p煤blica del par de claves como par谩metro. Despu茅s de la inicializaci贸n en modo de verificaci贸n, puede usar la instancia de Firma para verificar la firma digital:
byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); signature2.update(data2); boolean verified = signature2.verify(digitalSignature);