Autor Tema: Desarrollos internacionales por encargo.  (Leído 15660 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Desarrollos internacionales por encargo.
« Respuesta #60 en: 06 de Septiembre de 2017, 15:58:41 »
Lo termine implementando de la siguiente manera y a ver si alguien me dice cuan mal esta... yo necesitaba un número aleatorio de 4 cifras, había un timer iniciado y contando directamente desde los pulsos del reloj interno a 20MHZ, cuando pulsaba un boton externo ponía en marcha un segundo timer y lo dejaba en marcha desbordandose hasta que el usuario liberaba el boton, allí paraba ambos timers, y multiplicaba sus valores...  nunca volvía a cero el segundo timer, así que la próxima vez seguía desde donde había quedado y se desbordaba...
Rebuscado?, si, aleatorio entiendo que tambíen, el usuario nunca presionaba el mismo tiempo el botón, al menos no en microsegundos exactos, y como el primer timer corría libre y ambos eran de 16 bits me pareció correcto. Además luego uno puede elegir números al azar dentro del resultado...


Si todo depende de cuando se apriete un pulsador, podrías usar la función millis() en Arduino, HAL_GetTick() en STM32 y otras similares en cada familia de microcontrolador. Esa función te da cuanto a transcurrido desde que se puso en marcha el microcontrolador, así no tienes que programar nada especial, lees ese valor cuando se apriete el pulsador o cuando se suelte y lo usas como semilla.

Yo también lo puedo usar en mi diseño de ruleta, porque el jugador tiene que apretar botones, y eso siempre va a ser en tiempos diferentes.
« Última modificación: 06 de Septiembre de 2017, 16:01:33 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Desarrollos internacionales por encargo.
« Respuesta #61 en: 06 de Septiembre de 2017, 16:17:20 »
Pero no seria aleatorio. Ya que conociendo cuando arranca el micro y cuanto tiempo presionado esta el boton se puede determinar exactamente el valor.
Y si uno tuviera esos valores que no es facil, representa un problema. Aun asi no lo considero como aleatorio. Uno no deberia tener forma de saber de forma exacta el valor que va a obtener.

Ademas por ejemplo, uno si presiona el boton muy rapidamente, y de forma constante, podria ver que el numero siempre es incremental en algun punto y luego cae (1er timer a 0) , incrementa y cae (cuando el segundo timer se haga 0) y se repite.
« Última modificación: 06 de Septiembre de 2017, 16:33:51 por KILLERJC »

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Desarrollos internacionales por encargo.
« Respuesta #62 en: 06 de Septiembre de 2017, 16:32:46 »
Pero no seria aleatorio. Ya que conociendo cuando arranca el micro y cuanto tiempo presionado esta el boton se puede determinar exactamente el valor.
Y si uno necesitaria saber exactamente esos valores que no es poco. Aun asi no lo considero como aleatorio. Uno no deberia tener forma de saber de forma exacta el valor que va a obtener.


Eso es prácticamente imposible, que alguien sea capaz de calcular con precisión cuando arranca el micro, cuando pulsa el botón y cuando lo suelta. Con que tan solo haya una diferencia de microsegundos, ya el valor va a ser distinto y también la semilla.

Desconectado nico

  • PIC16
  • ***
  • Mensajes: 180
Re:Desarrollos internacionales por encargo.
« Respuesta #63 en: 06 de Septiembre de 2017, 18:37:57 »
Yo opino, modestamente, que es imposible saber, si el oscilador se estabiliza dos microsegundos mas tarde, o si presionaste el pulsador un microsegundo antes o después, ya no te permitiran saber mas, ya que el primer timer esta corriendo libre, quieres mas complejidad, utiliza el valor obtenido como semilla para una funcion rand(), incluso puedes hacer la conbinación de ambos timer´s + boton(tiempo humano aleatorio), mas número obtenido en el timer libre al apagar la última vez la maquina, guardando ese número en una eeprom cada vez que apagas.
Ya si sabes que número había en el timer cuando la desenchufaste y sabes que operación hace, y puedes sensar el encendido, estabilización del oscilador, tiempo de pulsación.. pues  ((:-))

Salutes.
« Última modificación: 06 de Septiembre de 2017, 18:40:55 por nico »

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re:Desarrollos internacionales por encargo.
« Respuesta #64 en: 06 de Septiembre de 2017, 18:53:02 »
También hay micros que tienen periféricos que hacen justo eso, generar un número aleatorio, pero con los timers y el tiempo humano de pulsación parece suficiente.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re:Desarrollos internacionales por encargo.
« Respuesta #65 en: 07 de Septiembre de 2017, 10:18:01 »
Coincido con Killer, el resultado obtenido mediante este tipo de métodos será siempre pseudo-aleatorio.

Una secuencia PRNG, por muy bien creado que esté su algoritmo, es determinista y periódica, mientras que una
secuencia TRNG es no determinista y aperiódica; el primer caso puede llegar a ser muy difícil de predecir mientras que el segundo es imposible.
Una secuencia PRNG se repetirá con el tiempo (existencia de un patrón) y se puede predecir si se conoce la semilla o el mecanismo que la genera, dado que para una misma semilla el PRNG producirá el mismo resultado (la misma secuencia).

El TRNG recurre a fenómenos físicos externos de mayor o menor complejidad para generar la secuencia. Como ejemplo de algo simple, si habéis usado el generador de claves para SSH de PuTTy sabréis que hay que mover el ratón sobre un recuadro durante un rato para generar las claves.
Ejemplos habituales son la lectura de ruido o los chips dotados de entropía.

La importancia no está en los números en sí, si no en las secuencias y la existencia de un patrón detectable en las mismas. Os dejo un par de enlaces donde se explica mucho mejor de lo que pueda hacerlo yo:
https://boallen.com/random-numbers.html
https://www.random.org/randomness/

un saludo

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re:Desarrollos internacionales por encargo.
« Respuesta #66 en: 07 de Septiembre de 2017, 10:21:38 »
En el caso de las máquinas de juego con un chip RNG parece ser que éste está funcionando en todo momento y será un determinado evento (la pulsación de un botón, por ejemplo) el desencadenante.
En una máquina con tres reels dicho evento provocará la selección de tres números aleatorios que 'mapearán' el posicionamiento de dichos reels.



Este otro vídeo, sumado al enlace que puse en un mensaje anterior sobre el hackin ruso, es una prueba de por qué no sería una buena idea usar PRNG en una máquina de azar:


saludo

pd: mi inglés no es gran cosa pero activando los subtítulos no tuve problemas para entender los vídeos.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Desarrollos internacionales por encargo.
« Respuesta #67 en: 07 de Septiembre de 2017, 11:58:58 »
Coincido con Killer, el resultado obtenido mediante este tipo de métodos será siempre pseudo-aleatorio.


Bueno, lo que dice Killer es que alguien puede calcular con precisión ese valor. Una cosa es que sea pseudoaleatorio, y otra que alguien sea capaz de calcular mentalmente al microsegundo, el tiempo transcurrido desde que arrancó el microcontrolador, y sea capaz de pulsar y mantener pulsado el botón una cantidad de microsegundos exacta y precisa.

A mi eso me parece imposible, si alguien lo consigue que lo diga, será un Forrest Gump en potencia, que se vaya al Go Talent UK y se hará famoso en medio mundo. Con que haya una diferencia de microsegundos, la semilla ya será distinta y la secuencia de números aleatorios, también.



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Desarrollos internacionales por encargo.
« Respuesta #68 en: 07 de Septiembre de 2017, 14:47:30 »
Ojo, dije que es muy dificil ( no es poca cosa o facil ) obtener esos resultados. En una aplicacion que no solo tiene la interfaz de los botones y el tiempo, es ciertamente imposible que alguien vaya de forma manual a lograr predecir el resultado.

Pero eso no quita, que teniendo un equipo en mano y probarlo exaustivamente arroje la conclusion de que no es aleaotrio. Y que posee una cierta periodicidad como dice xocas.

Para la aplicacion tal ves basta y sobra. Creo que el principal problema no es generar los numeros aleatorios o pseudo-aletorios, es lograr que esos numeros correspondan al porcentaje de ganancia/perdida que deba tener la maquina.