Je me rends compte que la spécification OAuth ne spécifie rien sur l'origine du code ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret ou Verifier, mais je suis curieux de savoir s'il existe des meilleures pratiques pour créer des jetons considérablement sécurisés (en particulier Token / Combinaisons secrètes).
Comme je le vois, il existe quelques approches pour créer les jetons:
- Utilisez simplement des octets aléatoires, stockez dans la base de données associée au consommateur / utilisateur
- Hash certaines données spécifiques à l'utilisateur / consommateur, stocker dans la base de données associée au consommateur / utilisateur
- Crypter les données spécifiques aux utilisateurs / consommateurs
Les avantages de (1) sont que la base de données est la seule source d'informations qui semble la plus sûre. Il serait plus difficile de lancer une attaque contre (2) ou (3).
Le hachage de données réelles (2) permettrait de régénérer le jeton à partir de données probablement déjà connues. Peut ne pas vraiment fournir d'avantages à (1) car il faudrait de toute façon stocker / rechercher. Plus gourmand en CPU que (1).
Crypter des données réelles (3) permettrait de décoder des informations. Cela nécessiterait moins de stockage et potentiellement moins de recherches que (1) et (2), mais potentiellement moins sécurisé également.
Y a-t-il d'autres approches / avantages / inconvénients à considérer?
EDIT: une autre considération est qu'il DOIT y avoir une sorte de valeur aléatoire dans les jetons car il doit exister la capacité d'expirer et de réémettre de nouveaux jetons, de sorte qu'ils ne doivent pas être uniquement composés de données réelles.
Suivez les questions :
Existe-t-il une longueur minimale de jeton pour assurer une sécurité cryptographique significative? Si je comprends bien, des secrets de jeton plus longs créeraient des signatures plus sécurisées. Cette compréhension est-elle correcte?
Y a-t-il des avantages à utiliser un encodage particulier par rapport à un autre du point de vue du hachage? Par exemple, je vois beaucoup d'API utilisant des encodages hexadécimaux (par exemple des chaînes GUID). Dans l'algorithme de signature OAuth, le jeton est utilisé sous forme de chaîne. Avec une chaîne hexadécimale, le jeu de caractères disponible serait beaucoup plus petit (plus prévisible) qu'avec un encodage Base64. Il me semble que pour deux chaînes de longueur égale, celle avec le plus grand jeu de caractères aurait une distribution de hachage meilleure / plus large. Cela me semble que cela améliorerait la sécurité. Cette hypothèse est-elle correcte?
La spécification OAuth soulève ce problème même dans 11.10 Entropy of Secrets .