Monederos que firman transacciones utilizando números aleatorios verdaderos

De https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm :

Otra forma en que la firma ECDSA puede filtrar claves privadas es cuando un generador de números aleatorios defectuoso genera 'k'.

Sería bueno si una billetera, en lugar de obligarlo a confiar ciegamente en un PRNG específico, le permitiera aumentar la aleatoriedad de 'k', por ejemplo, moviendo el mouse (como en https://www.bitaddress.org ) cada vez usted está a punto de hacer una transacción.

¿Hay alguna billetera Ethereum o Bitcoin que permita tal cosa? Si no, ¿hay alguna razón técnica detrás de esto?

Respuestas (2)

El mundo de bitcoin solía usar valores k aleatorios, pero en gran medida lo ha pensado mejor, porque necesita una forma de hacer números aleatorios, y esto es propenso a errores de implementación o plataforma como la generación de números aleatorios de Android que resulta ser una mierda o tirando un número de una URL HTTP en random.org y termina usando algo como "HTTP ahora está deshabilitado. Utilice HTTPS".

La solución, que también se menciona en la página de Wikipedia vinculada, es usar un número determinista en lugar de uno aleatorio. El número se basa en parte en el mensaje que se está firmando, por lo que puede estar seguro de que no generará de forma determinista el mismo valor dos veces para diferentes mensajes. Esto es lo que hace prácticamente todo el software de billetera de criptomonedas hoy en día, y si no lo hacen, es una señal de alerta.

Consulte esta respuesta para obtener más información sobre los pros y los contras de esto (básicamente todos los pros), incluidos algunos comentarios de Pieter Wuille, quien escribió libsecp256k1, la biblioteca ECDSA que se usa tanto en Bitcoin como en Ethereum.

Tenga en cuenta que aunque puede hacer la firma sin un número aleatorio, aún necesita números aleatorios para generar las claves en primer lugar, y ese puede ser un buen lugar para mover el mouse o lo que sea.

Excelente respuesta, muchas gracias! De hecho, tiene perfecto sentido utilizar una k determinista derivada tanto del mensaje como de la clave privada. Es bueno saber que esto ya se usa ampliamente en el software de billetera criptográfica.

La fuente de aleatoriedad, como mover el mouse, podría usarse como semilla (que debe ser completamente aleatoria) para un RNG. Sin embargo, creo que dicha fuente no ofreció una alta entropía y no olvide que hay algunas personas perezosas que no proporcionarán un buen movimiento del mouse. Además, usamos el RNG estandarizado porque fue probado y, por ejemplo, podríamos verificar si hay algún problema como con el generador Dual_EC_DRBG que fue respaldado por la NSA. El único problema que queda es sobre los parámetros que se utilizan en los estándares para ECDSA, no sabemos cómo se eligieron. Creo que la comunidad ahora se está moviendo hacia la adopción del algoritmo Schnorr, que es un algoritmo probablemente seguro pero aún no estandarizado.