Me doy cuenta de que el OAuth spec no especifica nada sobre el origen de los códigos ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret o Verifier, pero tengo curiosidad por saber si existen prácticas recomendadas para crear tokens significativamente seguros (especialmente Token/Combinaciones secretas).¿Mejores prácticas para generar tokens de OAuth?
Tal como lo veo, hay algunos enfoques para la creación de las fichas:
- Sólo tiene que utilizar bytes aleatorios, almacenar en el DB asociado al consumidor/usuario
- Hash algunos/datos de consumo específico de usuarios, tienda en DB asociado al consumidor/usuario/datos de consumo específico
- usuario Cifrar
Ventajas para (1) es la base de datos es la única fuente de la información, que parece el más seguro. Sería más difícil ejecutar un ataque contra que (2) o (3).
Los datos reales hash (2) permitirían volver a generar el token de datos presuntamente ya conocidos. Puede que no proporcione ninguna ventaja a (1) ya que necesitaría almacenar/buscar de todos modos. Más CPU intensiva que (1).
El cifrado de datos reales (3) permitiría descifrar la información. Esto requeriría menos almacenamiento & potencialmente menos búsquedas que (1) & (2), pero potencialmente menos seguro también.
¿Hay otros enfoques/ventajas/desventajas que se deben considerar?
EDIT: otra consideración es que debe haber algún tipo de valor aleatorio en las fichas ya que debe existir la posibilidad de caducar y vuelva a emitir nuevas fichas por lo que no se debe únicamente compuesto por datos reales.
seguir con respecto:
¿Existe una longitud mínima de emergencia para hacer significativamente criptográficamente seguro? Según tengo entendido, Token Secrets más largo crearía firmas más seguras. ¿Es este entendimiento correcto?
¿Existen ventajas al usar una codificación particular sobre otra desde una perspectiva de hash? Por ejemplo, veo muchas API que usan codificaciones hexadecimales (por ejemplo, cadenas GUID). En el algoritmo de firma OAuth, el token se utiliza como una cadena. Con una cadena hexadecimal, el juego de caracteres disponible sería mucho más pequeño (más predecible) que, por ejemplo, con una codificación Base64. Me parece que para dos cadenas de igual longitud, la que tiene el conjunto de caracteres más grande tendría una distribución de hash mejor/más amplia. Esto me parece que mejoraría la seguridad. ¿Es correcta esta suposición?
La especificación OAuth plantea este mismo problema en 11.10 Entropy of Secrets.
¿Por qué el cifrado? ¿No es lo suficientemente bueno? Si solo el hashing es lo suficientemente bueno para la contraseña, ¿no debería ser aún mejor para los tokens de acceso más largos? –
Han pasado 7,5 años desde que hice la pregunta. Honestamente no puedo recordar. – mckamey
Leer de nuevo, hash y cifrado fueron dos enfoques diferentes sugeridos. La encriptación permitiría al servidor obtener información sin una búsqueda de base de datos. Fue una transacción entre muchos. – mckamey