División de la semilla
Oradores: Andreas Antonopoulos
Fecha: April 8, 2020
Transcripción De: Michael Folkson
Traducción Por: Blue Moon
Tags: Bip32, Security problems
Media: <https://www.youtube.com/watch?v=p5nSibpfHYE>
Tema: ¿Por qué es una mala idea dividir las semillas?
Localisación: Canal de YouTube de Andreas Antonopoulos
¿Por qué es una mala idea dividir las semillas?
Esto es algo que se discute todo el tiempo, especialmente en los foros de novatos. Realmente hay que tener mucho cuidado. Un amigo tuvo la idea de lograr una protección de 2 de 3 de la semilla de mi cartera almacenando la semilla de la siguiente manera:
Ubicación 1: palabras clave 1-8 y 9-16 Ubicación 2: palabras clave 1-8 y 17-24 Ubicación 3: palabras clave 9-16 y 17-24
Se parece mucho al esquema de compartir secretos de Shamir, pero más fácil. Una ubicación no revela toda la semilla pero cualquiera de dos de ellas es suficiente. ¿Esto es seguro?
No, en absoluto. Tu amigo está equivocado. No es en absoluto seguro dividir tu mnemotecnia en partes nunca. Nunca dividas tu frase mnemotécnica en partes y guardes esas partes por separado. Una frase mnemotécnica es para hacer una copia de seguridad. Usted hace una copia de seguridad de toda la frase en múltiples ubicaciones y eso es seguro y resistente. Si necesitas seguridad para evitar que alguien vea tu frase, tienes que asegurarla físicamente con dispositivos como almacenarla en acero en un dispositivo sellado a prueba de manipulaciones y ponerla en un sistema cerrado como una caja fuerte o una caja de seguridad. Si le preocupa aún más que alguien acceda a su semilla, añada una frase de paso que también necesita respaldar, preferiblemente en acero, en algún lugar separado y seguro. Si eres súper paranoico y quieres hacer algún tipo de esquema como este necesitas usar un estándar como SLIP39 que es un mecanismo para producir El esquema de reparto de secretos de Shamir esquema dividido en una frase mnemotécnica que puede recombinarse en un sistema de acciones k-de-n. Por ejemplo, se puede hacer una frase mnemotécnica que se divide 2-de-3 usando SLIP 39. Hay una diferencia fundamental entre el esquema de compartir secretos de Shamir y lo que describes. En un segundo repasaremos esa diferencia. Verás por qué esto no es seguro y tampoco es tan resistente.
El esquema de compartición de secretos de Shamir utiliza una función polinómica para garantizar que si has creado un esquema k-de-n bajo Shamir, si tienes menos de k, el quórum, es totalmente equivalente matemáticamente a tener una cantidad cero de información sobre la clave. Lo que significa que añadir una nueva acción es lo mismo que forzar brutalmente todo el espacio de claves. Es muy importante darse cuenta de esto. Veremos por qué en un segundo. Volvamos al ejemplo que ofreciste. Uno de tus recursos compartidos tiene claves del 1 al 8 y luego del 9 al 16 y luego del 17 al 24. Lo que estás describiendo aquí es dividir en 3 una frase mnemónica de 24 palabras que contiene 256 bits de entropía. 256 bits de entropía no pueden ser forzados. Veamos una de estas acciones. Una de estas acciones son las claves 1 a 8 o las palabras 1 a 8 y 9 a 16. Eso significa que esa frase mnemónica que has creado, esa división de tu frase mnemónica contiene 16 de 24 palabras. ¿Cuántas palabras quedan fuera de esa frase mnemónica? 8. Eso significa que faltan 8 palabras. Y lo que es peor, una de esas palabras es en realidad una suma de comprobación. Lo que significa que una de esas palabras puede ser adivinada mucho más fácilmente porque sólo la palabra que encaja perfectamente completa la suma de comprobación. Ni siquiera es necesario comprobar el equilibrio de la frase mnemónica acudiendo a una cadena de bloques. Esa es una de las ventajas de las frases mnemónicas pero también es una de las debilidades del sistema que has descrito. No importa cómo lo hagas una de estas cosas, uno de estos trozos de papel tendrá la palabra de suma de comprobación o la palabra de suma de comprobación será la que falte. En el primer ejemplo falta la palabra de suma de comprobación. Efectivamente eso significa que hay 7 palabras que contienen material clave en la parte que falta. ¿Cómo de difícil es crackear o hacer fuerza bruta con 7 palabras? ¿Es 3 veces más fácil que forzar las 24 palabras? Es sólo un tercio de las palabras, así que teóricamente sería 3 veces más fácil. No, ni de lejos. Esto es un exponencial. Estás hablando de forzar 80 bits en lugar de 256 bits. Forzar 80 bits no es 3 veces más fácil ni lleva un tercio del tiempo que forzar 2^256 bits de entropía. Forzar 80 bits de entropía es 2^176 veces más fácil, si estoy haciendo los cálculos correctamente, que forzar 256 bits. De hecho, forzar de forma bruta 80 bits en un diccionario en el que ya tienes la suma de comprobación y puedes comprobar si funciona rápidamente es tan fácil que se puede hacer potencialmente con un clúster de máquinas en la próxima década con alguien que tenga suficiente potencia de cálculo. Se podría hacer con ASICs, se podría hacer con FPGAs, se podría hacer con GPUs. Descifrar claves de 80 bits se considera sólo marginalmente seguro. Lo que hiciste es que acabas de reducir la seguridad de tu frase mnemónica de 256 bits a 80 bits, lo cual es una reducción catastrófica de la seguridad. Peor aún, si tienes algunos errores o pierdes partes de esto, este no es un sistema muy resistente. No sólo le das a un atacante la oportunidad de conseguir tu frase mnemotécnica simplemente buscando en dos lugares o forzando 8 palabras después de haber encontrado una de tus frases mnemotécnicas, sino que también has creado una situación en la que si pierdes dos de ellas estás acabado. Creo que sería mucho mejor si usaras un esquema real de compartir secretos de Shamir, pero como ya he dicho muchas veces, la complejidad no es sólo el enemigo de la seguridad. En muchos casos es el enemigo de la usabilidad. Lo que significa que cuanto más complejo sea el esquema, más probable será que tengas problemas para recuperar tus datos y ciertamente tus herederos tendrán tremendas dificultades para recuperar tus datos. El esquema que has descrito no es seguro y tampoco es resistente. Y no es un buen esquema. El que has descrito es probablemente mejor que algunos de los que he visto por ahí. He recibido docenas de correos electrónicos de personas que están desesperadas por ayuda porque dividieron su frase y perdieron una parte de ella. Todo lo que puedo decir es “Lo siento mucho, mucho. Probablemente se haya perdido para siempre”. Lo peor es que para algunas de estas personas que tienen suerte, es posible forzarla. Pero eso significa que están pasando por todo este dolor al tratar de forzarlo y en realidad no lograron una mejor seguridad porque un atacante determinado y bien equipado podría forzarlo tan rápido como ellos o más. Así que no consiguieron seguridad pero perdieron mucho en resiliencia. Esta es una idea terrible. No lo hagas. No hagas seguridad DIY. No hagas criptografía de bricolaje. Utiliza las normas escritas por expertos que equilibran cuidadosamente la necesidad de resiliencia, la necesidad de seguridad y el pensamiento sobre el modelo de amenaza y cómo abordar adecuadamente todos esos riesgos de una manera bien documentada, interoperable, basada en normas y predecible. Esa es una forma mucho mejor de hacerlo. No lo hagas.