Ramificaciones de crear semillas Electrum 2.x que no son BIP39

Las semillas de Electrum 2.0 (frases mnemotécnicas) se crean con un algoritmo basado en la suma de comprobación (tal que hmac_sha512comienza con 01. Por lo general, es una semilla de 13 palabras, pero puede tener 12 en algunas circunstancias.

Si todas las semillas de Electrum 2.x de 12 palabras se filtraron de tal manera que no son compatibles con BIP39 , ¿cuál será la disminución de la entropía?

=> La pregunta se refiere a este código de Python

Supongo que el problema se puede resumir así:

  1. ¿Cuál es el porcentaje de semillas de Electrum 2.x de 12 palabras (en relación con semillas de 13 palabras)?
  2. ¿Cuál es el porcentaje de semillas Electrum 2.x (12 palabras) que no cumplen con el estándar BIP39? (La última palabra decide la suma de control)

Respuestas (1)

Para los propósitos de esta respuesta, supondré que solo estamos hablando de mnemónicos que Electrum 2.x puede generar , y no de los que Electrum 2.x simplemente acepta para restaurar (el último número es infinito).


  1. ¿Cuál es el porcentaje de semillas de Electrum 2.x de 12 palabras (en relación con semillas de 13 palabras)?

Las semillas de Electrum 2.x por defecto codifican 136 bits de datos. Los bits cero iniciales se ignoran durante la codificación, por lo que la longitud mnemotécnica resultante varía.

Cada palabra codifica log 2 (word_list_length) bits de datos, por lo que para la mayoría de las listas de palabras* de Electrum 2.x, eso es log 2 (2048) = 11 bits por palabra.

Por lo tanto, los nemotécnicos largos de 13 y 12 palabras pueden codificar hasta 143 y 132 bits de datos respectivamente. Para que una semilla de 136 bits se codifique en 132 bits (12 palabras), al menos los primeros 4 bits deben ser cero, lo que sucede con una probabilidad de 1 en 2 4 , por lo que 1 de 16 mnemotécnicos aleatorios tendrá una longitud de 12 o menos _

Del mismo modo, para un mnemotécnico de 11 palabras, la codificación de 136 bits en 121 bits requiere que 15 bits iniciales sean cero, por lo que 1 en 2 15 o 1 en 32768 tendrá una longitud de 11 o menos .

Finalmente , si necesita una respuesta exacta , sería 1/16 - 1/32768 = 2048/32768 - 1/32768 = 2047 en 32768 tendrá una longitud de 12 exactamente .

* Para la lista de palabras en portugués, es log 2 (1626) ≈ 10,67 bits por palabra


  1. ¿Cuál es el porcentaje de semillas Electrum 2.x (12 palabras) que no cumplen con el estándar BIP39?

Los mnemotécnicos BIP-39 de 12 palabras de longitud tienen 4 bits de suma de comprobación , por lo que 1 de 2 4 mnemotécnicos Electrum 2.x de 12 palabras generados serán válidos BIP-39, y 15 de 16 Electrum no serán válidos para BIP- 39.


Si todas las semillas de Electrum 2.x de 12 palabras se filtraron de tal manera que no son compatibles con BIP39, ¿cuál será la disminución de la entropía?

Interpreto esto como una pregunta: si se requiriera que los mnemotécnicos válidos de Electrum 2.x fueran BIP-39 no válidos, ¿en cuánto disminuiría esto su entropía?

Wolfram|Alpha dice muy pequeño: alrededor de 0,0056 bits según esta entrada:

solve  (2^n - 1) / 2^n = 2047/32768 × 1/16  for n
¡Guau! ¡Fantástico trabajo! Veré qué piensa @ThomasV de esto para diferenciar BIP39 y Electrum 2.x: parece una buena consideración. Además, noté que el portugués se desvía hacia el tamaño de la lista de palabras de Electrum 1.x y me pregunté, ¿qué diablos está pasando?
@WizardOfOzzie ¡Gracias! IIUC, Monero Core tomó prestado el método de generación de semillas de Electrum 1.x y la lista original de palabras en inglés, y luego agregó nuevas listas de palabras, todas del mismo tamaño que la lista de Electrum 1.x, y luego Electrum 2.x tomó prestada (atrás) una de las nuevas listas de palabras que no tenían equivalente BIP-39. Dado que Electrum 2.x puede funcionar con listas de palabras de cualquier tamaño positivo, asumo que ThomasV no vio ninguna razón para crear una lista de palabras en portugués de tamaño BIP-39.
Revisé las listas de palabras de Electrum 2.x ayer y coinciden exactamente con BIP39 para japonés, inglés y español. Cuando dice que Electrum 2.x "tomó prestada" una lista de palabras que no es BIP39, ¿se refiere al portugués?
@WizardOfOzzie Correcto, quise decir que usaron las listas de palabras de Monero para portugués que no tenían una lista BIP-39 correspondiente. No tengo idea de cuáles son los planes, si los hay, para el chino, y no tengo idea si se usará la lista de palabras en francés BIP-39, o la parcialmente completada Electrum 2.x.
sí, la lista de palabras en francés BIP39 tiene problemas reales, ya que comparte 100 palabras con el inglés; github.com/simcity4242/pybitcointools/blob/master/bitcoin/…
@WizardOfOzzie Nos estamos desviando un poco del tema aquí;) ... pero en realidad no estoy de acuerdo contigo en GitHub PR aquí , FWIW.