¿Por qué los hashes de contraseñas mysql se guardan internamente con una estrella (asterisco)?

9

Estaba leyendo algunas partes internas de mysql, cuando revisé la tabla mysql.user en mi mysqlshell, recibí

mysql> select * from mysql.user limit 1 \G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

La contraseña obviamente está cifrada, pero ¿por qué comienza con la estrella (asterisco)?

mu 無
fuente

Respuestas:

8

Además de la contraseña que comienza con un asterisco, aquí hay un algoritmo para CONTRASEÑA ()

SET @plaintextpassword = 'whatever password you want';
SELECT CONCAT('*',UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))));

EJEMPLO

mysql> SET @plaintextpassword = 'whatever password you want';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))) PWD_CREATION;
+------------------------------------------+
| PWD_CREATION                             |
+------------------------------------------+
| D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT PASSWORD(@plaintextpassword) PWD_FUNCTION;
+-------------------------------------------+
| PWD_FUNCTION                              |
+-------------------------------------------+
| *D09AF2704D843A5E4E84362830C7EC1CEA40DF8A |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql>

Aprendí este algoritmo hace mucho tiempo de algoritmo de hash en CONTRASEÑA MySQL ()

RolandoMySQLDBA
fuente
14

Ok, encontré esto en la documentación misma .

Este fue un cambio introducido en mysql 4.1 para que las longitudes de contraseña anteriores de 16 caracteres y las longitudes de contraseña más nuevas de 40 caracteres pudieran ser compatibles simultáneamente. La columna Contraseña tenía 41 bytes (caracteres) de longitud, y las contraseñas más nuevas comenzarían con una obligatoria* para identificarlas.

De la documentación :

Los hashes de contraseña en el formato 4.1 siempre comienzan con un carácter "*", mientras que las contraseñas en el formato anterior a 4.1 nunca lo hacen.

mu 無
fuente
Esa también fue mi suposición. Pero no retiene el agua. Podrían haber verificado la longitud para ver si se trataba de una contraseña nueva o antigua.
Rick James
3
@Rick James Ciertamente es posible verificar la longitud, pero existen argumentos para el uso del primer carácter como una "bandera" para permitir cambios futuros que aún podrían usar 40 caracteres pero un algoritmo diferente.
Monty Harder