Ich weiß, dass die OAuth spec nichts über den Ursprung der ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret oder Verifier-Code angibt, aber ich bin neugierig, ob es Best Practices zum Erstellen signifikant sicherer Token (insbesondere Token) gibt/Geheime Kombinationen).Best Practices beim Generieren von OAuth-Token?
Wie ich es sehe, gibt es ein paar Ansätze, um die Token zu erstellen:
- Verwenden Sie einfach zufällige Bytes, Speichern in DB verbundenen Verbraucher/Nutzer
- Hash einige Benutzer/verbraucherspezifischen Daten, Speicher in DB zu Verbraucher/Nutzer
- Encrypt Benutzer/Verbraucher spezifische Daten zugeordnet
Vorteile (1) ist die Datenbank ist die einzige Quelle der Informationen, die die sicherste scheint. Es wäre schwieriger, einen Angriff gegen (2) oder (3) zu führen.
Das Hashing realer Daten (2) würde es ermöglichen, das Token aus vermutlich bereits bekannten Daten neu zu generieren. Könnte (1) wirklich keine Vorteile bieten, da sie sowieso gespeichert/gesucht werden müssten. Mehr CPU-intensiv als (1).
Durch das Verschlüsseln von echten Daten (3) kann die Entschlüsselung Informationen erkennen. Dies würde weniger Speicher benötigen & potenziell weniger Nachschlagewerke als (1) & (2), aber möglicherweise auch weniger sicher.
Gibt es andere Ansätze/Vorteile/Nachteile, die in Betracht gezogen werden sollten? Eine andere Überlegung ist, dass es irgendeine Art von Zufallswert in den Tokens geben muss, da es die Möglichkeit geben muss, neue Tokens ablaufen zu lassen und neu auszugeben, so dass es nicht nur aus echten Daten bestehen muss.
Folgen auf Fragen:
Gibt es eine Mindest Token Länge deutlich kryptographisch sicher zu machen? So wie ich es verstehe, würden längere Token Secrets sicherere Signaturen erstellen. Ist dieses Verständnis korrekt?
Gibt es Vorteile beim Verwenden einer bestimmten Codierung gegenüber einer anderen aus einer Hashing-Perspektive? Zum Beispiel sehe ich viele APIs mit Hex-Kodierungen (z. B. GUID-Strings). Im OAuth-Signaturalgorithmus wird das Token als Zeichenfolge verwendet. Bei einer Hex-Zeichenfolge wäre der verfügbare Zeichensatz viel kleiner (besser vorhersehbar) als bei einer Base64-Codierung. Es scheint mir, dass für zwei Strings gleicher Länge der mit dem größeren Zeichensatz eine bessere/breitere Hash-Verteilung hätte. Dies scheint mir, dass es die Sicherheit verbessern würde. Ist diese Annahme richtig?
Die OAuth-Spezifikation löst genau dieses Problem in 11.10 Entropy of Secrets.
Warum die Verschlüsselung? Ist Hashing nicht gut genug? Wenn Hashing gerade gut genug für ein Passwort ist, sollte es für längere Zugriffstoken nicht noch besser sein? –
Es ist 7,5 Jahre her, dass ich die Frage gestellt habe. Ich kann mich ehrlich nicht erinnern. – mckamey
Lesen wieder, Hashing und Verschlüsselung wurden zwei verschiedene Ansätze vorgeschlagen. Die Verschlüsselung würde dem Server erlauben, einige Informationen ohne eine DB-Suche zu erhalten. Es war ein Kompromiss unter vielen. – mckamey