¿Es seguro crear una dirección Bitcoin a partir de una clave privada generada por Rand () en lugar de una curva elíptica criptográfica?

3

Estoy escribiendo una aplicación C ++ que crea una dirección de Bitcoin. Me cuesta mucho instalar openssl para Windows y hacer que funcione para Visual Studio

Entonces, me pregunto si creo una clave privada, digamos una cadena hexadecimal de 64 caracteres, simplemente ejecutando rand () varias veces, y luego creo una dirección pública de Bitcoin a partir de eso.

¿Y si agrego más aleatoriedad al solicitar al usuario que mueva el mouse al azar y recopilar datos como semillas aleatorias?

    
pregunta WereAskingIt 22.08.2015 - 04:12
fuente

2 respuestas

3

Usar el mouse es una buena opción para generar entropía, pero existen mejores métodos para generar buenos números aleatorios.

Para generar una única dirección de bitcoin para uso personal, el generador aleatorio es probable lo suficientemente bueno, pero es mucho más débil que una clave aleatoria adecuada.

Si esto es para cualquier tipo de sistema que generará muchas direcciones (y por lo tanto será un objetivo bastante atractivo para los malos), no es lo suficientemente seguro.

Para cualquier combinación dada de SO / hardware / lenguaje de programación, se puede deducir un poco sobre el estado del generador aleatorio, especialmente si las personas pueden hacer varias direcciones, para que puedan recopilar datos. Desde allí es un salto de salto y un salto para predecir las direcciones / claves de otras personas. Esto se convierte en un problema aún peor si se implementa como cualquier tipo de servicio compartido en la nube donde la misma instancia de un generador puede crear claves para muchos usuarios

El uso de un verdadero generador de psudeorandom crypographic es como 2-3 líneas adicionales de código, y vale la pena el esfuerzo.

    
respondido por el Jason Coyne 22.08.2015 - 04:36
fuente
1

No : el uso de rand () para este propósito no es seguro.

El problema con rand () es que solo tiene una pequeña cantidad de estado interno, creo que de 32 bits. Cuando lo llama varias veces, obtiene más de 32 bits de datos, pero solo hay 2 ^ 32 estados posibles. Entonces, si usa 2048 bits para generar una clave, solo hay 2 ^ 32 claves diferentes que la configuración podría generar. Si un atacante sabe que ha usado rand (), puede configurar una fuerza bruta de esas 2 ^ 32 claves posibles, y esto se completaría en un tiempo razonable. Entonces sabrían la clave privada que corresponde a su clave pública y podrían gastar sus Bitcoins.

Hubo una vulnerabilidad en Debian OpenSSL relacionada con la vulnerabilidad aleatoria.

El uso del movimiento del ratón es aceptable para generar aleatoriedad adicional. Sin embargo, recomendaría usar el CryptGenRandom función.

    
respondido por el paj28 23.08.2015 - 10:21
fuente

Lea otras preguntas en las etiquetas