Sono andato a spulciare i sorgenti della libbreria libmysql.dll.
Questi sono i passi:
1) il client si collega al server
2) il server risponde inviando alcune info tipo la versione e le sue caratteristiche supportate. Il server invia anche un codice generato casualmente.
3) il client prepara i dati dell'utente per l'autenticazione. Per la password: a seconda delle info mandate dal server si procede a creare l'hash della password (16 o 40 cifre) e a fare uno scramble con il codice casuale inviato dal server (credo si tratti di uno XOR)
4) il client invia i dati utente al server
probabilmente la vecchia libbreria libmysql.dll distribuita con versioni di PHP precedenti alla 5.0.3 (accanto a libmysqli.dll che adesso non esiste più) non gestiva la doppia conversione in hash.
P.S. adesso mi tocca fare un po' di modifiche all'articolo...