php - encriptar - password_bcrypt
¿Cómo encriptar datos correctamente con la autenticación adecuada usando AES-256-CBC en php? (2)
He estado usando la función openssl para cifrar datos con AES-256-CBC en php. Pude encriptarlo usando un IV único (generando con openssl_random_pseudo_bytes) para cada nuevo cifrado.
Pero estoy luchando con la idea del cifrado autenticado con aes cbc. ¿Cómo me autentico básicamente cuando estoy a punto de descifrar los datos?
¿Debo usar algo como PBKDF2, blowfish o hash_hmac ()?
¿Necesito hash la clave de alguna manera?
Cualquier ayuda es extremadamente apreciada.
Solución simple, use RNCryptor que está disponible para php y muchos otros idiomas. Vea este Léame para detalles de implementación.
Incluso si no usa RNCryptor, los métodos son correctos y seguros.
Algunos detalles del sitio:
- Cifrado AES-256
- Modo CBC
- Extensión de contraseña con PBKDF2
- Salar con contraseña
- Random IV
- Encrypt-then-hash HMAC
- Versiones
Pero estoy luchando con la idea del cifrado autenticado con aes cbc. ¿Cómo me autentico básicamente cuando estoy a punto de descifrar los datos?
Después de encriptar los datos con una IV aleatoria, ponga tanto el texto cifrado como IV en hash_hmac()
con una segunda clave.
Si está preguntando porque necesita implementar en producción, espere hasta que se libere la versión 2 de defuse / php-encryption y utilícela en su lugar. (Es AES-256-CTR no AES-256-CBC, pero el modo CTR tiene menos superficie de ataque que el modo CBC, es decir, no hay ataques de oráculo de relleno si se vence el HMAC).
No use RNCryptor.
RNCryptor está / no fue escrito de acuerdo con los estándares de codificación criptográfica , ni en PHP , ni en Python .
RNCryptor viola literalmente la regla 1 de los estándares de codificación criptográfica de forma consistente. Puede haber otros problemas que aún no se han descubierto. Si desea la portabilidad en todos los idiomas, use libsodium .