Claves Privadas
¿Qué es una clave privada?
Una clave privada es un número grande generado aleatoriamente.
Por ejemplo:
108165236279178312660610114131826512483935470542850824183737259708197206310322 Pero, para ser más precisos, una clave privada es un número aleatorio de 256 bits:
111011110010001101011010101011001111100100001101100111110100101010101101110110001100100100101110010010110010010101100010111000011101100111101011100101111111000011011111100110111010001110110101000010000000100101100001110011100111001011000000010011110110110010 Sí, eso sigue siendo un número. Solo está en binario, que es como se almacenan los números en una computadora. Porque, ya sabes, Bitcoin es un programa de computadora al fin y al cabo.
En fin, podemos convertir fácilmente esta clave privada de binario a decimal:
108165236279178312660610114131826512483935470542850824183737259708197206310322 O a hexadecimal:
ef235aacf90d9f4aadd8c92e4b2562e1d9eb97f0df9ba3b508258739cb013db2 No hace diferencia. Todos son el mismo número, y todos son la misma clave privada.
Conversor de Números
Porque, al final, una clave privada es solo un número.
Una clave privada en bruto normalmente se muestra en formato hexadecimal.
¿Qué es un número de 256 bits?
Un número de 256 bits es un número que puede almacenarse dentro de 256 bits de datos.
¿Qué es un bit?
Un bit es la unidad más pequeña de datos dentro de una computadora.
| Unidad | Tamaño |
|---|---|
| gigabyte | 1000 megabytes |
| megabyte | 1000 kilobytes |
| kilobyte | 1000 bytes |
| byte | 8 bits |
| bit |
De hecho, un bit es tan pequeño que solo puede guardar un valor de 1 o 0:
Aun así, puedes usar bits para representar otros tipos de datos, como números cotidianos.
Por ejemplo, así es como almacenarías los números decimales de 0 a 8 en una computadora usando bits:
Por lo tanto, un número de 256 bits es un número que puede representarse usando 256 de esos bits:
O, en otras palabras, un número de 256 bits está entre:
mín: 0
máx: 115792089237316195423570985008687907853269984665640564039457584007913129639935
Así que, como puedes ver, 256 bits te dan espacio para usar números muy grandes.
Y eso es todo lo que son los números de 256 bits: números que caben dentro de 256 bits de datos.
La cantidad máxima de números de 256 bits es igual a 2256.
¿De dónde vienen las claves privadas?
No estaba mintiendo cuando dije que se generan aleatoriamente.
Honestamente, cuando usas cualquier tipo de software de bitcoin para generar una clave privada, no está haciendo magia: solo te está dando un número aleatorio de 256 bits.
Por lo tanto, no hay razón para que no puedas crear tu propia clave privada. Todo lo que necesitas es poder generar un número aleatorio de 256 bits de forma segura.
Puedes hacerlo de varias (ja) formas:
1. Lanza una moneda 256 veces.
Lanzar una moneda 256 veces te permite generar una clave privada de 256 bits en binario:
Ese resultado binario de 256 bits puede luego convertirse a hexadecimal.
Conversor de Números
2. Usa tu lenguaje de programación favorito.
Esto te dará una clave privada en decimal:
# es necesario usar el generador de números aleatorios del sistema operativo por seguridad
import random
random.SystemRandom().randint(1, 115792089237316195423570985008687907852837564279074904382605163141518161494336) Ten cuidado al generar números aleatorios usando un lenguaje de programación. Las funciones "aleatorias" estándar de la mayoría de los lenguajes normalmente no son lo bastante aleatorias, así que asegúrate de que la función que estás usando esté descrita como "criptográficamente segura".
3. Haz hash de algunos datos aleatorios usando la función de hash SHA-256.
Ingresar datos aleatorios en SHA-256 devuelve un resultado hexadecimal de 32 bytes (256 bits), que puede usarse como clave privada:
SHA-256 (Texto)
Los datos a los que les hagas hash tienen que ser suficientemente grandes y aleatorios. Poner la palabra "bitcoin" en la función de hash SHA256 (y usar eso como clave privada) no será seguro.
Todos esos métodos te darán un número de 256 bits. Y si tienes un número de 256 bits, tienes una clave privada.
Tus claves privadas necesitan ser aleatorias.
Si usas un generador de números aleatorios que no sea confiablemente aleatorio (es decir, que tenga patrones en la forma en que genera los números), quedas vulnerable ante cualquiera que conozca las debilidades del generador que usaste.
Y si alguien logra recrear la misma clave privada que tú, puede quedarse con tus bitcoins.
Como resultado, la mayoría de las guías te asustan para que no generes tus propias claves privadas, porque nadie quiere ser responsable de tus errores.
Pero no dejes que ese alarmismo te detenga. Mientras seas cuidadoso, todo estará bien.
Una clave privada válida es, en realidad, un poco menor que el número máximo de 256 bits. Así que, si estás generando una clave privada, tendrás que comprobar que esté dentro del rango válido antes de intentar usarla. Es raro que pase, pero es importante comprobarlo.
El hecho de que cualquiera pueda crear su propia "cuenta" simplemente generando un número aleatorio es una característica importante de Bitcoin. Significa que nadie controla la emisión de cuentas, lo que hace que bitcoin sea accesible para cualquiera que pueda generar un número aleatorio grande.
¿Y si alguien genera la misma clave privada que yo?
Entonces esa persona podrá robar tus bitcoins.
Pero no te preocupes, nadie va a generar aleatoriamente la misma clave privada que tú.
¿Pero podrían hacerlo realmente?
Bueno, teóricamente sí podrían, pero debido al rango de claves privadas posibles, es algo "improbable".
Por ejemplo, si yo tuviera un millón de monos que pudieran generar cada uno un millón de claves privadas por segundo (los entrené bien), les llevaría cerca de 3.671.743.063.080.803.235.470.924.132.853.876.261.056.103.149.731.840 millones de años generar todas las claves privadas posibles.
Ahora, si estás intentando una búsqueda por fuerza bruta para encontrar la clave privada de otra persona, en promedio tendrás que recorrer la mitad de todas las claves privadas posibles antes de encontrar la que buscas, lo que significa que esos monos se enfrentan a 1.835.871.531.540.401.617.735.462.066.426.938.130.528.051.574.865.920 millones de años de trabajo si quieren generar exactamente la misma clave privada que tú.
claves = 115792089237316195423570985008687907852837564279074904382605163141518161494336
monos = 1000000
ritmo = 1000000
clavesPorSegundo = monos * ritmo
segundos = claves / clavesPorSegundo
minutos = segundos / 60
horas = minutos / 60
dias = horas / 24
años = dias / 365
millonesDeAños = años / 1000000
print(round(millonesDeAños)) #=> 3671743063080803235470924132853876261056103149731840 (todas las claves)
print(round(millonesDeAños / 2)) #=> 1835871531540401617735462066426938130528051574865920 (tiempo medio para encontrar la clave de otra persona) Así que, como puedes ver, no tengo precisamente el tiempo ni el poder de monos de mi lado. Y nadie más lo tiene.
Hay tantas claves privadas posibles que elegir una al azar ya es seguro por sí solo.
Claro.
Aún no he terminado.
El rango de números de 256 bits (y por tanto la cantidad de claves privadas posibles) es inimaginablemente grande. Así como es imposible para la mente humana visualizar la verdadera escala del universo, también es imposible comprender el tamaño absurdo de los números de 256 bits.
Así que, si dudas de la seguridad de tu número de 256 bits, es porque no usaste un generador de números aleatorios lo bastante confiable, o porque no aprecias la magnitud de los números con los que estamos trabajando.
Ahora sal de mi oficina.