El argumento de seguridad para PBKDF2 es mejor que para su propuesta. Esto no significa que su propuesta sea menos segura, solo que PBKDF2 es más fácil de justificar.
Esto se debe a que PBKDF2 incorpora tres ideas adicionales más allá de su propuesta de iteración. Primero, PBKDF2 incorpora explícitamente una sal, mientras que su ejemplo no lo hace. Incluso si asumiera implícitamente que key
sería algo así como salt + password
, un codificador de contraseñas realmente debería tomar la contraseña y la sal como argumentos separados.
En segundo lugar, PBKDF2 no itera una función hash pública como SHA-256, sino una función pseudorandom ("PRF") como HMAC-SHA-256, con la contraseña. Este es un punto teórico muy sutil, pero lo que esto significa es que PBKDF puede trabajar con funciones que son más débiles que una función hash en toda regla como SHA-256.
Tercero, PBKDF2 no solo encadena las salidas de la PRF, sino que también XORs sus salidas. Esta es una salvaguardia (quizás paranoica) contra PRF débiles que tienen ciclos cortos cuando se aplican a sus propios resultados.
PBKDF2 es en realidad bastante simple. Es bastante simple que es poco probable que los laicos puedan estropearlo. Si su idioma y biblioteca tienen SHA-256, es probable que también tengan HMAC-SHA-256, pero si no es así, también es fácil de implementar. Por lo tanto, realmente debería simplemente darle una oportunidad: es mejor atenerse a las técnicas estándar y bien probadas que a preparar las suyas.
Nota final: la salida de una función hash es datos binarios , y realmente debería tratarse como tal. Es decir, su uso de hexdigest
en su ejemplo es inútil y no conduce a un código de buena calidad; Los datos deben ser procesados en su tipo nativo tanto como sea posible! (El uso de resúmenes hexadecimales también le daría una implementación PBKDF2 incorrecta).