Almacenar contraseñas como enteros

0

Se me ocurrió la idea de que puedo almacenar contraseñas como enteros que ocupan 4 u 8 bytes en lugar de un hash que toma como 150 bytes o algo así. Escribí esta función que convierte una cadena en un entero en función de algunas matemáticas elementales.

function pass($pass) {
    $value = 0;

    for ($i = 0, $l = strlen($pass); $i < $l; $i++) {
        $value += pow(ord(~$pass[$i]), 1/2);
    }

    return (int)round(pow($value, (int)('1.' . $value)) * 10000000000);
}

var_dump(pass('M'));
var_dump(pass('m'));
  

int (133416640641)
  int (120830459736)

Como lo veo para ser hackeado primero, el hacker necesita saber el valor int almacenado para la contraseña y el algoritmo. Pueden obtener el valor ya sea si piratean mi base de datos o si toman un archivo de copia de seguridad antiguo, que se sabe que es el exploit más común (supongo), pero aún así, si no conocen el algoritmo, ¿no podrían romperlo?

No creo que sea posible revertir un valor convertido a la cadena original, ya que sería un problema con la complejidad de la cantidad de caracteres que contiene la cadena, ¿no?

La otra posibilidad es si ingresan accidentalmente un valor que se convierte al mismo valor de la contraseña original, en teoría supongo que debería haber una cantidad infinita de cadenas que pueden convertirse al mismo valor pero no estoy seguro Las posibilidades reales de que esto ocurra, así como este problema, también están presentes en los algoritmos de hash conocidos como colisión.

Como probablemente ya adivinaste, estoy muy lejos de ser un experto en seguridad y supongo que todo esto es basura de lo que estoy hablando en este momento, pero quiero saber por qué.

    
pregunta php_nub_qq 24.06.2016 - 10:58
fuente

2 respuestas

3

Esto es seguridad a través de la oscuridad , y en violación de principio de kerchoffs .

  

Si no conocen el algoritmo, no podrían descifrarlo.

Tal vez. Y tal vez analizar las entradas lleva a la revelación del algoritmo.

Y una vez que un atacante obtiene el algoritmo, a través del análisis, accediendo a su servidor, porque lo publicó aquí, tiene acceso automático a todas las contraseñas.

Este no es el caso cuando el hash, porque una propiedad importante de las funciones criptográficas de hashing es que son lentos .

  

La otra posibilidad es si ingresan accidentalmente un valor que se convierte al mismo valor de la contraseña original, en teoría supongo que debería haber una cantidad infinita de cadenas que pueden convertirse al mismo valor pero no estoy seguro Las posibilidades reales de que esto ocurra, así como este problema, también están presentes en los algoritmos de hash conocidos como colisión.
  [...]
  enteros que ocupan 4 u 8 bytes en lugar de un hash que toma como 150 bytes o algo así

Si reduce el tamaño, las colisiones son más probables, ya que todavía tiene el mismo tamaño de entrada, pero un área objetivo más pequeña.

  

Como probablemente ya adivinaste, estoy muy lejos de ser un experto en seguridad

Es por eso que nunca debes rodar tu propia (pero yo Supongo que esto es más una pregunta teórica que aprender, no algo que realmente quieras usar en la práctica.

    
respondido por el tim 24.06.2016 - 11:12
fuente
1

Si usa 4 u 8 bytes de enteros para almacenar sus contraseñas, está facilitando mucho el trabajo de los forzados brutos. Porque, si entiendo su situación correctamente, un atacante solo tendría que crear una cadena para que su valor convertido (convertido para verificar los valores en DB) coincida con el valor de la contraseña almacenada.

Teniendo en cuenta el poder de cómputo en las computadoras de hoy, uno encontraría una cadena coincidente en lugar de su contraseña de 8 bytes muy rápidamente, ni siquiera estoy hablando de lo fácil que es verificar el valor de 32 bits (4 bytes).

    
respondido por el Makif 24.06.2016 - 11:14
fuente

Lea otras preguntas en las etiquetas