Warum werden MySQL-Passwort-Hashes intern mit einem Stern (Sternchen) gespeichert?

9

Ich habe einige MySQL-Interna gelesen, als ich die mysql.user-Tabelle in meiner mysqlShell durchgesehen habe

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

Das Passwort ist offensichtlich gehasht, aber warum beginnt es mit dem Stern (Sternchen)?

mu 無
quelle

Antworten:

7

Zusätzlich zu dem Passwort, das mit einem Stern beginnt, gibt es hier einen Algorithmus für PASSWORD ()

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

BEISPIEL

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>

Ich habe diesen Algorithmus vor langer Zeit vom Hashing-Algorithmus in MySQL PASSWORD () gelernt.

RolandoMySQLDBA
quelle
14

Ok, darüber in der Dokumentation selbst gefunden .

Dies war eine Änderung, die in MySQL 4.1 eingeführt wurde, damit die früheren Kennwortlängen von 16 Zeichen und die neueren Kennwortlängen von 40 Zeichen gleichzeitig unterstützt werden konnten. Die Kennwortspalte wurde 41 Byte (Zeichen) lang gemacht, und die neueren Kennwörter würden mit einer obligatorischen *Kennzeichnung beginnen , um sie zu identifizieren.

Aus der Dokumentation :

Passwort-Hashes im 4.1-Format beginnen immer mit einem "*", während Passwörter im Pre-4.1-Format dies niemals tun.

mu 無
quelle
Das war auch meine Vermutung. Aber es hält kein Wasser. Sie hätten die Länge überprüfen können, um festzustellen, ob es sich um ein neues oder ein altes Passwort handelt.
Rick James
3
@ Rick James Es ist sicherlich möglich, die Länge zu überprüfen, aber es gibt Argumente für die Verwendung des ersten Zeichens als "Flag", um zukünftige Änderungen zu ermöglichen, die möglicherweise noch 40 Zeichen, aber einen anderen Algorithmus verwenden.
Monty Harder