Mir ist klar, dass die OAuth- Spezifikation nichts über die Herkunft des ConsumerKey-, ConsumerSecret-, AccessToken-, RequestToken-, TokenSecret- oder Verifier-Codes angibt, aber ich bin gespannt, ob es bewährte Methoden zum Erstellen signifikant sicherer Token gibt (insbesondere Token / Geheime Kombinationen).
Aus meiner Sicht gibt es einige Ansätze zum Erstellen der Token:
- Verwenden Sie einfach zufällige Bytes und speichern Sie sie in der Datenbank, die dem Verbraucher / Benutzer zugeordnet ist
- Hash einige benutzer- / verbraucherspezifische Daten, die in der mit Verbraucher / Benutzer verknüpften Datenbank gespeichert sind
- Benutzer- / verbraucherspezifische Daten verschlüsseln
Vorteile von (1) sind, dass die Datenbank die einzige Informationsquelle ist, die am sichersten erscheint. Es wäre schwieriger, einen Angriff auszuführen als (2) oder (3).
Das Hashing von realen Daten (2) würde es ermöglichen, das Token aus vermutlich bereits bekannten Daten neu zu generieren. Könnte (1) keine wirklichen Vorteile bieten, da es sowieso gespeichert / nachgeschlagen werden müsste. CPU-intensiver als (1).
Das Verschlüsseln realer Daten (3) würde das Entschlüsseln ermöglichen, um Informationen zu kennen. Dies würde weniger Speicherplatz und möglicherweise weniger Suchvorgänge als (1) und (2) erfordern, aber möglicherweise auch weniger sicher.
Gibt es andere Ansätze / Vor- / Nachteile, die berücksichtigt werden sollten?
BEARBEITEN: Eine weitere Überlegung ist, dass die Token einen zufälligen Wert enthalten MÜSSEN, da die Möglichkeit vorhanden sein muss, neue Token abzulaufen und erneut auszugeben, damit sie nicht nur aus realen Daten bestehen dürfen.
Folgen Sie den Fragen :
Gibt es eine Mindestlänge für Token, um eine kryptografisch signifikante Sicherheit zu gewährleisten? Soweit ich weiß, würden längere Token-Geheimnisse sicherere Signaturen erzeugen. Ist dieses Verständnis richtig?
Gibt es aus Hashing-Sicht Vorteile bei der Verwendung einer bestimmten Codierung gegenüber einer anderen? Zum Beispiel sehe ich viele APIs, die Hex-Codierungen verwenden (z. B. GUID-Zeichenfolgen). Im OAuth-Signaturalgorithmus wird das Token als Zeichenfolge verwendet. Mit einer Hex-Zeichenfolge wäre der verfügbare Zeichensatz viel kleiner (vorhersehbarer) als beispielsweise mit einer Base64-Codierung. Es scheint mir, dass für zwei gleich lange Zeichenfolgen die mit dem größeren Zeichensatz eine bessere / breitere Hash-Verteilung haben würde. Dies scheint mir, dass es die Sicherheit verbessern würde. Ist diese Annahme richtig?
Die OAuth-Spezifikation wirft genau dieses Problem in 11.10 Entropy of Secrets auf .