El par de claves que bitcoin utiliza (la privada y la publica) se generan mediante SHA-256.
No, se generan mediante criptografía de curva elíptica. La clave privada es un número entero, como el 42, generado aleatoriamente. La clave pública es un punto en el plano, perteneciente a la curva, con sus coordenadas X e Y. La pública se obtiene "multiplicando" otro punto predefinido, llamado G, que también pertenece a la curva, por la clave privada. Las comillas son porque la multiplicación como tal no existe, sino que hay que sumar muchas veces. Para obtener la privada conociendo la pública, habría que "dividirla" por G, excepto que la división tampoco existe, y me parece que la resta tampoco. Por tanto sólo te queda la fuerza bruta: multiplicar G por 2 y ver si coincide con la pública, a continuación multiplicar por 3, luego por 4… hasta que te suene la flauta, y ya sabemos que el campo es demasiado grande para atacarlo de este modo.
Sé lo justito de EC así que si la he cagado en algo y alguien quiere hacer la buena acción del día, que me dé una colleja
.
La clave privada es un número más grande que la pública y este es redondeado, con lo que es imposible obtener la clave privada a partir de la pública.
Imagina que tu clave privada es un número del 1 al 1000 y que puedes obtener la clave pública a partir de la división entera entre 100 de la clave privada. Pues bien, si tu clave privada era 547, la pública sería 5, pero a partir del 5 no podrías saber que era 547.
No hay redondedos en este proceso. ¿Dónde has leído eso?
Simplificando mucho, la criptografía de clave pública (o asimétrica) se basa en el hecho de que es muy fácil multiplicar dos números primos muy grandes, pero es muy difícil factorizar un número muy grande en sus dos divisores primos.
RSA funciona así pero EC es diferente.
Por cierto SHA-256 utliza los numeros primos?
SHA256 sólo usa algunos números primos predefinidos en el momento de inicialización del algoritmo, no durante el cómputo del hash.
Respecto al "hash" : ¿es el resultado que da la clave privada al pasar por el algoritmo?. si es así, el hash es la clave publica?.
Un algoritmo de hash es una batidora, a la que le metes comida por un extremo y te echa una papilla por el otro extremo. Esta batidora tiene dos particularidades interesantes: una es que si le metes la misma comida, te devuelve siempre la misma papilla, y la otra es que si en lugar de meterle 5000 fresas le metes 4999, la papilla resultante es completamente diferente e impredecible. Hay varios algoritmos de hash, en bitcoin se usan RIPEMD160 y SHA256. Pero esto no tiene nada que ver con EC.
Bueno, en bitcoin tiene un poquito que ver: el funcionamiento de los brain wallets se basa en que tú coges un algo, por ejemplo el tercer párrafo de la página 87 de tu libro favorito, y lo pasas por SHA256. Esto te da un número de 256 bits
que es válido como una clave privada. Y como el número es impredecible a priori, podemos decir que sirve como "aleatorio". A partir de esta clave privada puedes generar una dirección de bitcoin, y la gracia es que puedes acceder a la clave privada (para gastar los fondos) a partir del párrafo del libro, sin necesidad de tenerla almacenada en ningún sitio físico, y mucho menos en un wallet expuesto a internet.
Por ejemplo, el SHA256 del párrafo anterior es 3989e4dd213851c0a18413f0ee42957d1bf2a4a71bfc1525d4bab41786da0582 (edito: he modificado el párrafo anterior después de calcular este hash, por lo que no coincide). Eso es un número entero, igual que el 42, simplemente está expresado en hexadecimal. Pero como buen número, te sirve como clave privada. Y sabiendo eso, puedes ir a bitaddress.org y ver cual es la dirección asociada, que en este caso es 12foV1wvYcbSVhysdNx1e1kiAAtoV5rx6h.
Si tienes más preguntas, dispara…