Tengo una clave privada y quiero almacenar una versión en papel de la misma. Me gustaría dividirlo en 2 partes iguales (los primeros 32 números y los últimos 32 números) y almacenarlos en 2 ubicaciones diferentes. Supongamos que estoy 100% seguro de que nadie puede acceder a ambas partes, pero es posible que alguien pueda robar una de ellas.
¿Cuánto estoy comprometido?
Para explicar la pregunta: entiendo que el atacante necesita adivinar solo 32 números hexadecimales en lugar de 64 para completar la clave privada. ¿Es eso mucho más fácil que adivinar 64? ¿Esto socava seriamente la seguridad de mi cuenta? ¿Y hay algo que me estoy perdiendo que lo hace aún más fácil que adivinar los 32 números restantes (por ejemplo: dados los primeros 32 números, solo es posible un posible subconjunto de los 32 números restantes debido a alguna restricción)?
Para números de 64 dígitos hexadecimales, hay 16 ^ 64
= 115792089237316195423570985008687907853269984665640564039457584007913129639936
posibilidades.
Para números de 32 dígitos hexadecimales, hay 16 ^ 32
= 340282366920938463463374607431768211456
posibilidades.
Si alguien tiene la mitad de su clave privada, su seguridad se ha reducido en un factor de 340282366920938463463374607431768211456
. Ese es un factor importante, pero la cantidad de posibilidades que necesitarían verificar para forzar su billetera sigue siendo gigante. Probablemente todavía no serían capaces de entrar.
Sin embargo, para evitar cualquier pérdida de seguridad si una pieza se ve comprometida, recomendaría un esquema diferente, por ejemplo:
Genere otro número hexadecimal aleatorio de 64 dígitos, diferente de su clave privada. XOR este nuevo número junto con su clave privada. Ahora, almacene el nuevo número aleatorio y el resultado de la operación XOR en las dos ubicaciones diferentes.
Para recuperar su clave privada, necesitaría ambas piezas y XOR juntas. De esta manera, su seguridad no se ve comprometida en absoluto si alguien tiene algunas pero no todas las piezas.
Puedes usar este mismo esquema con cualquier cantidad de piezas.
Solo asegúrate de hacerlo bien :-)
¿Cuánto estoy comprometido?
Más de lo que sugeriría el simple análisis.
La clave privada se utiliza como clave ECDSA. Resulta que, para una clave privada con n bits desconocidos, es posible recuperar la clave completa en 2**(n/2) veces.
Con n=256 (es decir, no conoce ninguno de los bits inicialmente), esto es 2**128, que generalmente se supone que es demasiado difícil para cualquiera.
Sin embargo, si le das al atacante la mitad de la clave (y así tienes n=128), bueno, esto significa que recuperar el resto de la clave es 2**64 veces; esto ciertamente no es trivial (y, por lo tanto, no tendría que preocuparse de que nadie lo resuelva en su computadora portátil), sin embargo, esto sería práctico para adversarios grandes y bien financiados.
Por lo tanto, ciertamente aceptaría la sugerencia de Jesse de hacer un xor en lugar de una simple concatenación; de esa manera, el atacante no aprende nada de una parte del secreto.
01
una clave de 4 bits, ¿tengo que considerar 01xx
, 0x1x
, 0xx1
, x01x
, x0x1
y xx01
por separado, o el 2**(n/2)
algoritmo de tiempo tiene en cuenta la posición desconocida?
Tobias Kienzler