Una diferencia importante entre su construcción y PBKDF2 es que PBKDF2 usa una función pseudoaleatoria (prf), típicamente HMAC, en lugar de un hash directamente. SHA1 y SHA2 son no prfs, por lo que ciertas pruebas de seguridad no se aplican a ellos.
Un problema teórico con tu construcción es que puedes golpear colisiones internas o cadenas cortas. Debido a que su salt y contraseña permanecen en cada iteración, si alguna vez produce el mismo hash dos veces a medida que avanza, terminará en un ciclo de hashes. (PBKDF2 también tiene una variante de esto, pero ilustra el tipo de cosas a tener en cuenta).
Por lo tanto, lo harías mejor si tu bucle se vea como
hash = hmac-sha512(i + salt + password, hash)
pero por todas las razones que otros han señalado, aún está mejor utilizando PBKDF2, verrugas y todo, en lugar de rodar el suyo propio.
PBKDF2 alternativas
scryp t es superior a PBKDF2 en casi todas las situaciones. Pero es más difícil aprender a usar correctamente. PBKDF2 es superior a bcrypt.
También se debe tener en cuenta que PBKDF2 se diseñó para la obtención de claves, no para el hashing de contraseñas. Así que tiene algunas características y características que no son realmente lo que necesitas. (Y tiene un error en ese componente que solo importa para la derivación de claves, y solo en circunstancias muy inusuales).
Por mucho que critique PBKDF2, sigo pensando que es mejor usarlo que rodar el suyo. Los problemas particulares con esto no son algo que se encontrará con el hashing de contraseñas.
Un sucesor de PBKDF2 / scrypt / bcrypt
Es posible que desee seguir los desarrollos de la competencia de hash de contraseña . Este es un intento de encontrar un sucesor adecuado para PBKDF2, scrypt, bcrypt para el hashing de contraseñas. Pero por el momento, solo use scrypt si está disponible para usted o PBKDF2.