(Wird das jetzt zu Offtopic?)
Die brauche ich, um das Salt nachzuschlagen.
Klassischer Algorithmus: user "gwaaf" password "1234". Ich würfle als Salt "ab" und berechne hash("ab1234")=xyzzyx. Ich speichere Salt und Hash ab: "gwaaf"->"abxyzzyx". Jetzt kommt jemand und tippt user "gwaaf" password "7890" ein. Ich finde in der Tabelle für "gwaaf" den String "abxyzzyx", woraus ich das Salt "ab" entnehme. Ich berechne hash("ab7890")!=xyzzyx, also bist es nicht Du.
Dein Algorithmus, wenn ich Dich richtig verstehe: user "gwaaf" password "1234", würfle als Salt "ab", berechne hash("ab1234")=xyzzyx, speichere "gwaaf"->"xyzzyx" und lege "ab" in der Liste aller Salts ab. Jetzt kommt jemand und tippt user "gwaaf" password "7890" ein. Ich finde in der Tabelle für "gwaaf" den String "xyzzyx". Für alle gespeicherten Salts ii prüfe, ob hash("ii1234")==xyzzyx und melde Erfolg wenn ja.
Diesen Algorithmus kannte ich bislang nicht und halte ihn jedenfalls für unüblich. Zumindest nennt man das klassisch nicht mehr "salt".
Aber ja, prima facie würde er einen Rainbow-Table-Angriff zunichte machen, auf Kosten einer mit der Datenbankgröße logarithmisch (?) steigenden Laufzeit bei der Prüfung, was für HAM76's Use Case vermutlich egal wäre.
Auf den zweiten Blick halte ich dieses Vorgehen, falls Du es so gemeint hast, für schlechter als Pepper: De facto ist jetzt nämlich die Liste aller bekannten Salts die geheime Zusatzinformation, die in der reinen Lehre der Pepper wäre. Verfüge ich über sie, ist der Zusatzaufwand nur der Faktor des Betrags dieser Liste. Ist er klein, bleibt die Deanonymisierung (bei Kenntnis der Liste) einfach. Ist er (ausreichend) groß, ist die gewünschte Nutzung der Datenbank im gleichen Maß erschwert wie der Angriff. Und die Geheimhaltung dieser Zusatzinformation entspricht einer Verschlüsselung, nimmt der Datenbank also keineswegs den Personenbezug.
Jetzt würde mich interessieren, ob ich Dich richtig verstanden habe und, falls ja, ob Du eine Quelle für diesen Algorithmus für mich hast.