¿Quién podrá descifrar la leyenda que te ha contado Fantasy Westward Journey?
Como todos sabemos, tu leyenda cambiará la contraseña de 6 dígitos cada minuto, comúnmente conocida como contraseña dinámica. Dado que el cliente (su leyenda) no tiene contacto físico directo con el servidor después de salir de fábrica, el mayor problema es cómo mantener la sincronización lógica con el servidor, es decir, cómo garantizar que la contraseña dinámica generada por el cliente y la dinámica ¿La contraseña verificada por el servidor es la misma contraseña?
Adivina: la contraseña dinámica generada por el cliente es una contraseña dinámica relacionada con el tiempo, es decir, existe una relación entre la contraseña M y el tiempo t: M=rand(TX), rand() es un función aleatoria, y TX es la semilla de la función aleatoria, x es otro factor, como el número de serie de su leyenda.
Aquí, X es una variable conocida en el lado del servidor y se ha configurado en fábrica. La mayor posibilidad es el número de serie, número de servicio o un factor correspondiente al número de serie y número de servicio de su leyenda. Cuando los datos iniciales se escriben en la leyenda del producto, se siembran tanto en el lado del cliente como en el del servidor. Debido a que el número de serie y el número de servicio de cada una de sus leyendas son únicos, es imposible saber X y la contraseña dinámica M sin su leyenda.
Obviamente, solo el factor X no es suficiente. M=rand(X) genera una contraseña M, pero obviamente no se puede cambiar dinámicamente y pierde su significado. Por tanto, el factor t es indispensable.
En este punto, algunas personas pueden decir: ¿por qué no simplemente implantar T juntos? Después del análisis, después de implantar T, el servidor T1 se ve afectado por el reloj del servidor y el cliente T2 se ve afectado por el reloj del cliente, lo que causa problemas. ¿Cómo garantizar que T1 = T2 después de ejecutarse durante un período de tiempo? Un método consiste en utilizar materiales de alta precisión para garantizar T1 = T2 en un plazo de tres años, lo que obviamente es muy costoso. Tomando como ejemplo un reloj electrónico que vale unos 30 yuanes en el mercado, no hay garantía de que el error de un reloj electrónico de 1.000 yuanes no supere 1 minuto en tres años. Por tanto, debe haber una corrección lógica con respecto a t.
Hipótesis audaz: el servidor fija T0, introduce un factor Δt y el servidor implanta Δt. Esta es la diferencia entre el reloj del cliente y el reloj del servidor, es decir, Δt = t2-t1. De esta forma, la contraseña del cliente (su leyenda) es M=rand(T2X), y la contraseña del servidor es M = rand"(t 1+△t)x". De esta manera, miles de clientes (su leyenda) solo necesitan registrar Δt en el lado del servidor. Este △t se puede implantar en el servidor y registrar cuando se genera en su leyenda. En este caso, el problema de la sincronización entre las dos partes sigue sin resolverse.
Los problemas de sincronización se pueden resolver ajustando dinámicamente △t en el lado del servidor. Cuando abre su leyenda y envía el número de serie y la contraseña dinámica, el servidor calcula m = rand〖T 1+△t〗x〗Sobre la base de △T, calcule..., △t-5*60, △ T -4 * 60, △ T-3 * 60, △t La longitud de la serie específica depende de las necesidades. Debido a que es una función aleatoria de 6 bits, no habrá m repetidos en esta secuencia. De esta manera, se puede calcular la contraseña m generada por la diferencia de N minutos antes y después de △t, y △t se puede ajustar dinámicamente comparando el valor en la secuencia correspondiente de la contraseña dinámica enviada. Suponiendo que la contraseña dinámica es la misma que la contraseña correspondiente a △t-2*60, puede ajustar △t=△t-2*60. Esto soluciona el error de tiempo entre que el terminal de usuario (su leyenda) sale de fábrica hasta que se pone en uso. Este N se determina en función de las necesidades reales. Si la fábrica está a pocas horas de enero, tu leyenda será de mala calidad.
Al utilizar leyendas, la sincronización se puede lograr de la misma manera. Después de determinar △t, el servidor solo necesita calcular M 1 = RAND”(T 1+△T-Y)X”, M = RAND”(T 1+△T)X”, M2 = RAND”(T 65438+) para uso real, se ha detectado que hay un error de tiempo en su leyenda. Si la M del servidor es diferente de la M de su leyenda, pero la M1 del servidor es la misma que la M de su leyenda, puede hacerlo. ajusta dinámicamente △t=△t-y en tiempo real para lograr tu objetivo. La leyenda está sincronizada con la hora del servidor. Parece difícil para alguien descifrar tu leyenda. Una es que no conocen X y la otra es que sí. No sé △T, por lo que tu leyenda se mantiene en secreto.