Pregunta

Estoy trabajando en una funcionalidad de cifrado basado en clases heredadas de SymmetricAlgorithm como TripleDES, DES, etc.

Básicamente hay dos opciones para generar la clave consistente y IV para mi clase de algoritmo, PasswordDeriveBytes y Rfc2898DeriveBytes, tanto heredan de DeriveBytes clase abstracta.

El método PasswordDeriveBytes.GetBytes() está marcada como obsoleta en marco .NET, mientras que se recomienda Rfc2898DeriveBytes.GetBytes (), ya que coincide con el estándar PBKDF2. Sin embargo, basado en mi prueba, llamando el mismo método GetBytes() en clase Rfc2898DeriveBytes es casi 15 veces más lenta que en la clase PasswordDeriveBytes, que conduce a uso de la CPU inesperado (siempre mayor que 50%).

Acá algunos datos de prueba:

  • Iteraciones: 100
  • tipo Algoritmo: DES
  • Texto original: "Soy una clave de prueba, me cifrar favor"
  • Tiempo:
    • PasswordDeriveBytes: 99 ms
    • Rfc2898DeriveBytes: 1,373ms

Sobre la base de la prueba, el mal funcionamiento de Rfc2898DeriveBytes no es aceptable en el ambiente de producción.

¿Alguien ha notado este problema antes? Cualquier solución que todavía se puede utilizar una normal sin golpear el rendimiento? Cualquier riesgo de usar un método obsoleto (podría ser eliminado en futuras versiones)?

Gracias chicos!

Editar

Probablemente me encontré dónde está el problema ... El número de recuento predeterminado iteración para PasswordDeriveBytes es de 100, mientras que para Rfc2898DeriveBytes es 1000. Después de que los modificados al mismo número que 1000, la ejecución de Rfc2898DeriveBytes es sólo el doble de tiempo.

¿Fue útil?

Solución

Otros consejos

No son la misma cosa.

Rfc2898DeriveBytes es una implementación de PBKDF2. PasswordDeriveBytes es una implementación de PBKDF1. PBKDF2 genera una salida diferente, utilizando un método diferente, y un número mucho mayor de rondas que PBKDF1.

funciones de hash de contraseñas, como éstas, que se utilizan para la obtención de claves que se supone que son lentos. Ese es el punto -. Que los hace mucho más difícil de descifrar

Las dos funciones no son compatibles, y PasswordDeriveBytes no es tan seguro.

Creo que se echa en falta el punto de derivebytes. Se supone que es lento. Se utiliza el algoritmo intencionadamente lenta que no puede ser acelerado por truco inteligente. El "número de iteraciones" típico parámetro debe estar en 2 ^ 16-2 ^ 20 gama y introducir un segundo retardo 0,1-0,5 entre el usuario introducir la contraseña y se genera la clave. La intención es la defensa contra las contraseñas débiles seleccionados por "ignorantes usuarios perezosos" y ralentizar búsqueda de fuerza bruta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top