¿Es segura mi contraseña Hashing o no?

0

Recientemente he creado un código para la contraseña de hashing. ¿Puede por favor dar su consejo sobre la seguridad de mi código? La función toma una contraseña y luego la convierte en un número.

#include <string>
#include <cmath>

int mod(int x, int y) {
   return x - floor((double) x/y) * y;
}

int crypt(string str) {
   int z = 0;
   for(int i = 0; i < str.size(); i++)
      z += mod( ( str[i] * -(str[i]) ), ((i*29) + 2999) );
   return z;
}

int password = crypt("Password1");

bool auth(string pass, int x) {
   if (crypt(pass) == x) return true;
   else return false;
}
    
pregunta Ruhan Habib 17.09.2014 - 06:41
fuente

2 respuestas

3

No lo es. Hay un montón de problemas aquí:

  • Su función produce un valor de 32 bits, que no es suficiente para el hashing de contraseñas. Para tales hashes cortos es factible (y fácil) simplemente encontrar la contraseña de colisión (es decir, una contraseña que sea diferente de la original pero que aún tenga hashes al mismo valor);
  • La función parece lo suficientemente simple como para ser "reversible" en el sentido de que para un valor hash dado podría ser fácil calcular la contraseña coincidente (una vez más, esta no será la contraseña original, sino una clave);
  • La función es rápida y no requiere mucha memoria, lo que se considera una desventaja para el hashing de contraseñas, ya que permite el uso de GPU / ASIC.

Casi nunca es una buena idea inventar tu propio criptografía, incluidos los hashes de contraseña. Existen varias alternativas bien estudiadas que se consideran seguras, por lo que probablemente debería usarlas (ejemplos: PBKDF2 , script , bcrypt ). Si esas funciones no funcionan para usted por alguna razón, especifique por qué y qué otras restricciones puede tener. Esta información es importante ya que proporciona un contexto para su pregunta que actualmente falta.

    
respondido por el Andrey 17.09.2014 - 07:28
fuente
3

Como dijo @Andrey, problemas, problemas, problemas.

Y aquí hay una lista de algunas colisiones a Password1 . Puedo producir decenas en un segundo con un programa simple: HAPPOAAA AHPPOAAA HAPOPAAA AHPOPAAA HAOPPAAA AHOPPAAA ECPPPAAA CEPPPAAA NNFEOCAA NNEFOCAA EAPPPCAA AEPPPCAA NNFCOEAA NNCFOEAA CAPPPEAA ACPPPEAA NNCEOFAA ONOKOHAA NOOKOHAA AAPPOHAA AAPOPHAA AAOPPHAA ONOHOKAA NOOHOKAA NDPOONAA NDOPONAA NDOOPNAA HPAOAPAA APHOAPAA HOAPAPAA EPCPAPAA CPEPAPAA AOHPAPAA LPPPBPAA EPAPCPAA APEPCPAA ONNODPAA NONODPAA CPAPEPAA APCPEPAA APAOHPAA AOAPHPAA BPPPLPAA ONDONPAA NODONPAA PHAAOPAA PAHAOPAA PAAHOPAA FDBOOPAA DFBOOPAA FBDOOPAA BFDOOPAA DBFOOPAA BDFOOPAA LEPOOPAA ELPOOPAA LEOPOPAA

Como se dijo: ¡No lance su propio criptográfico!

    
respondido por el domen 17.09.2014 - 10:41
fuente

Lea otras preguntas en las etiquetas