Skip to content

Glossary

Pepper

Ein Pepper ist ein geheimer Wert, der jedem Passwort vor dem Hashing hinzugefügt und außerhalb der Datenbank aufbewahrt wird, sodass ein Datenbank-Leak ihn nicht offenlegt.

Ein Pepper ist ein geheimer Wert, der vor dem Hashing in jedes Passwort gemischt wird, ähnlich einem Salt, aber mit einem entscheidenden Unterschied: Er ist für alle Nutzer identisch und wird nie zusammen mit dem Hash gespeichert. Während ein Salt offen sichtbar neben seinem Hash in der Datenbank liegt, lebt ein Pepper ganz woanders — in einer Umgebungsvariable, einer Konfigurationsdatei oder einem Hardware-Sicherheitsmodul —, sodass der Diebstahl der Passwort-Datenbank den Pepper nicht gleich mitliefert.

Genau diese Trennung ist der Sinn der Sache. Erbeutet ein Angreifer die Datenbank, bekommt er Hashes und Salts, aber nicht den Pepper, und kann daher nicht einmal richtig mit dem Testen von Vermutungen beginnen, ohne zusätzlich den Anwendungsserver oder den Secrets-Speicher zu kompromittieren. Ein Salt allein kann das nicht leisten, da er nur dazu dient, Rainbow Tables auszuhebeln und zu verhindern, dass identische Passwörter denselben Hash erzeugen — er setzt voraus, dass der Angreifer ihn bereits besitzt.

Ein Pepper ist eine Defense-in-Depth-Maßnahme, kein Ersatz für einen langsamen Algorithmus. Üblicherweise wird er als HMAC-Schlüssel umgesetzt, der vor (oder zusätzlich zu) einer echten Passwort-Hashing-Funktion wie bcrypt oder Argon2 angewendet wird; siehe Argon2 vs bcrypt vs scrypt, um die KDF auszuwählen, auf der ein Pepper aufsetzen sollte.