...
Además si se detecta posibles vulnerabilidades en el generador de entropía de bitcoin-qt y electrum. Se recomienda hacer otro monedero de papel y transferir todo el saldo del que se encuentre sospechoso.
HOla, disculpen la interrupción pero quisiera preguntar algo: ¿a qué se refieren con "entropía"?
Conozco el término en física, pero no entiendo en qué sentido se lo nombra aquí, para esta tecnología.
Gracias
Uno de los inconvenientes con los computadores es que son malos generando números totalmente al azar, los números generados en un programa de computador de sobremesa son el resultado de una función determinista (a la misma entrada, la misma salida), la función depende necesariamente de parámetros de entrada y otras constantes, las funciones hash permiten que la respuesta de la función sea muy diferente en la presencia de parámetros de entrada similares, pero el punto delicado está en determinar cuáles parámetros de entrada son los adecuados, no sé si entiendes la dificultad, tenemos que escoger un parámetro en donde aseguremos que el resultado de la ejecución de la función en otro momento, o en otro computador sea distinta, si no se escogen bien estos parámetros, la función podría tender a usar las mismas entradas, y aumentar así el riesgo de que por ejemplo, dos clientes bitcoin generen la misma llave privada. Para la gente normal parece fácil escoger un parámetro cualquiera, pero cuando se trata de asegurar el azar total, es un problema muy complejo para cualquier ingeniero o matemático.
Supongamos que somos los desarrolladores del programa generador de llaves privadas, se nos ocurre escoger como parámetro de entrada el tiempo en milisegundos en el cual se ejecuta la función hash, al principio resulta racional pensar que ningún cliente va a ejecutar la función en el mismo milisegundo, pero nadie podría confiar totalmente en eso con los miles de clientes y las miles de direcciones que cada uno puede generar, tendríamos demasiado riesgo de colisión. Pero el mayor peligro estaría en que alguien con el conocimiento de cómo trabaja nuestra función podría simplemente recorrer el espacio de posibles entradas (todos los milisegundos desde que se lanzó bitcoin hasta hoy), y así obtendría todas las llaves privadas que existen.
Hay muchas "soluciones", unas mejores que otras, el ejemplo que puse es un ejemplo de juguete, el verdadero problema existe en asegurar que los parámetros de entrada son distintos (o totalmente aleatorios), en todas las ocasiones que se ejecute la función, en todos los computadores que se ejecute nuestro programa. Se podría pensar en agregar parámetros "imposibles" de predecir, en éste momento se me ocurre la temperatura, pero si sabemos que la temperatura de la mayoría de lugares se mueven entre ciertos rangos, y que hay un límite de precisión, cualquiera podría también recorrer todos los posibles valores para la temperatura, además depender de que el cliente tenga el hardware necesario para medir la temperatura es impráctico.
Otras soluciones toman variables generadas por el mismo usuario, los humanos somos mucho mejores en generar comportamientos aleatorios, así, algunos programas usan variables como la cantidad de memoria usada en ese momento (la cual depende de los programas y acciones que el usuario se encuentre ejecutando en ese momento), movimientos recientes del mouse, historial reciente de entradas del teclado, etc. Por eso algunos programas que pretenden ser muy seguros te piden que tu generes la aleatoriedad necesaria, como por ejemplo te piden que muevas el mouse, a medida que lo mueves el programa lee la ubicación del puntero y genera así el parámetro aleatorio. Esta clase de técnicas funcionan bien, pero al usuario le resulta extraño que le pidas hacer cosas extrañas, además, también se podría por ejemplo encontrar una tendencia de cómo un cliente promedio mueve su mouse cuando el programa se lo pide, el rango de memoria usada en el computador promedio, las teclas que un cliente usa generalmente, etc, y así nuevamente recorrer una buena cantidad de posibles valores, causando las colisiones. Aunque los humanos somos mejores que los computadores en esto, seguimos siendo muy malos para generar aleatoriedad absoluta, pues todos tendemos a regirnos por patrones de comportamiento medibles, replicables y en muchos casos predecibles.
No estoy seguro de cómo el cliente bitcoin actual genera los números al azar de las llaves privadas, sería interesante verlo, pero el problema es difícil de resolver, por eso siempre hay riesgo de que alguien se de cuenta de que esos parámetros siguen una tendencia replicable, en cuyo caso se podría emitir un parche para mejorar la aleatoriedad, o tal vez sea muy tarde y esto signifique un robo masivo, o incluso llegue a colapsar la moneda, es improbable que ésto suceda en este momento con tanta gente inteligente al rededor del desarrollo bitcoin, pero de tanto en tanto podríamos ver estos pequeños parches para mejorar aún más la aleatoriedad.