password - Verificación de contraseña con PBKDF2 en Java
bcryptpasswordencoder algorithm (3)
Calcule algún tipo de etiqueta de verificación de contraseña y guárdela junto con los datos del archivo encriptado para que pueda verificarlo primero. Esto podría ser algo así como el PBMAC de una cadena fija (corta). Por supuesto, esta debe ser una función no reversible para que un cracker no pueda determinar la contraseña y no sea demasiado rápido de calcular para confundir el ataque de fuerza bruta.
¿Ha considerado si (y cómo) detectará si todo el archivo se ha descifrado correctamente? Probablemente debería considerar alguna combinación de PBES2 y PBMAC en lugar de usar AES directamente.
Estoy haciendo cifrado de archivos basado en contraseña en Java; Estoy usando AES como el algoritmo de cifrado subyacente y PBKDF2WithHmacSHA1
para obtener una clave de una combinación de sal y contraseña utilizando el siguiente código (que obtuve de otro póster generoso en este sitio).
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec(password,salt,1024,128);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"AES");
Comparto el salt, el usuario ingresa su contraseña en cada extremo y el cifrado y el descifrado funcionan bien :-) Mi problema es que me gustaría poder verificar que la contraseña que ingresa el usuario es correcta antes de embarcarme en el (potencialmente largo) Proceso de desencriptación. Sé que la especificación PBKD incluye un valor de verificación de 2 bytes opcional, pero no estoy seguro de cómo generar este valor utilizando el enfoque anterior. ¿Java brinda soporte para esto o, si no, cuál sería una alternativa segura?
Gracias por tu tiempo.
Hey, gracias a scot loco y Chris por su ayuda. Después de realizar algunas excavaciones, decidí utilizar los métodos descritos en la página de cifrado de archivos del Dr. Gladmans para realizar tanto la verificación de contraseña como la autenticación de mensajes. Creo que este método, basado en el PBKDF2 y un MAC, hace que el valor de verificación para la contraseña sea lo suficientemente costoso como para que sea seguro. Gracias de nuevo, y espero que esta solución ayude a otros.
No hay un mecanismo de "comprobación rápida" que sea seguro, por definición. El punto central del uso de PBKDF2 o técnicas relacionadas es hacer que la verificación de contraseñas sea lenta, para frustrar los programas de descifrado de contraseñas. Si agregó un sistema de verificación rápida, los crackers de contraseñas podrían adivinar las contraseñas en masa de manera muy rápida.