- Genere una clave, K, que es una cadena de bytes arbitraria, y compártala de forma segura con el cliente.
- Acuerde un T0, el tiempo de Unix para comenzar a contar los pasos de tiempo, y un intervalo, TI, que se utilizará para calcular el valor del contador C (los valores predeterminados son la época de Unix como T0 y 30 segundos como TI)
- Acuerde un método hash criptográfico (el valor predeterminado es SHA-1)
- Acuerde la longitud del token, N (el valor predeterminado es 6)
Una vez acordados los parámetros, la generación de tokens es la siguiente:
- Calcule C como el número de veces que TI ha transcurrido después de T0.
- Calcule el hash HMAC H con C como mensaje y K como clave (el algoritmo HMAC se define en la sección anterior, pero también la mayoría de las bibliotecas criptográficas lo admiten). K debe pasarse como está, C debe pasarse como un entero sin signo de 64 bits sin procesar.
- Tome los menos 4 bits significativos de H y úselo como compensación, O.
- Tome 4 bytes de H comenzando en O bytes MSB, descarte el bit más significativo y almacene el resto como un entero (sin signo) de 32 bits, I.
- El token son los N dígitos más bajos de I en la base 10. Si el resultado tiene menos dígitos que N, rellene con ceros desde la izquierda.
Tanto el servidor como el cliente calculan el token, luego el servidor verifica si el token suministrado por el cliente coincide con el token generado localmente. Algunos servidores permiten códigos que deberían haberse generado antes o después de la hora actual para dar cuenta de ligeros sesgos de reloj, latencia de red y retrasos de los usuarios.
Fuente: Wikipedia
- ¿Qué pasos se deben seguir para diseñar una aplicación de Android que tenga una nueva apariencia pero que también sea compatible con 2.3.3?
- ¿Cómo es posible hacer una aplicación multiplataforma en iOS y Android en Xamarin usando C #?
- ¿Hay alguna manera de exigir que un método solo se llame desde la interfaz de usuario / hilo principal?
- ¿Cuál es la mejor agencia de desarrollo de aplicaciones de Android en Isla del Príncipe Eduardo?
- ¿Cuál es la mejor biblioteca de gráficos de código abierto disponible para Android?