¿Por qué las direcciones de Bitcoin son hashes de claves públicas?

Actualmente, las direcciones de Bitcoin y sus sumas de verificación se construyen a partir de la clave pública mediante el uso de hashing repetido con SHA256 y RIPEMD160. Ahora entiendo el razonamiento detrás del uso de hashing para construir la suma de verificación, pero ¿por qué no se usó solo la clave pública original con una suma de verificación agregada? ¿Es solo por las direcciones más cortas o hay otras implicaciones de privacidad/seguridad al usar hashes de claves públicas en lugar de solo claves públicas?

Respuestas (1)

Es solo para obtener direcciones más cortas. Las claves públicas normales tienen una longitud de 65 bytes, que es demasiado larga para ser conveniente. Las claves públicas comprimidas tienen 33 bytes y podrían usarse potencialmente en lugar de hashes, aunque estos son un poco más largos que los hashes de 20 bytes. También parece probable que Satoshi no supiera acerca de las claves públicas comprimidas o no se sintiera cómodo usándolas cuando diseñó Bitcoin.

Los hashes parecen ayudar contra ciertos ataques (algunos ataques contra ECDSA, por ejemplo), aunque también abren la posibilidad de otros ataques (como ataques contra RIPEMD-160). No me queda claro si mejoran la seguridad en general.

Satoshi tampoco imaginó el envío a la dirección como la forma normal de realizar pagos, eran algo que podría usarse en lugar del envío a IP cuando el destinatario no estaba conectado. Dicho esto, ayudan un poco a la seguridad (aunque es posible que Satoshi tampoco lo supiera), un atacante no puede comenzar a atacar ECDSA (que solo tiene seguridad de 128 bits) antes de que se conozca la clave pública (y encontrar la clave pública de una dirección requiere una preimagen de 160 bits).
Para profundizar en el comentario de Pieter: puede haber sido una parte intencional del diseño para fortalecer la seguridad de la red. En caso de que se encuentre una falla en la criptografía de curva elíptica, que le permitiría a alguien derivar la clave privada de la clave pública, alguien podría enviar sus bitcoins al hash de una clave pública de 'reemplazo' recién generada de otro algoritmo (RSA por ejemplo ) y sería un comportamiento válido. Más adelante, cuando la red sea totalmente compatible con el algoritmo de 'reemplazo', las monedas se podrán volver a utilizar, sin volver a ser vulnerables al robo o la piratería.
@liamzebedee ¿No es discutible ese punto una vez que se ha realizado una transacción , ya que incluye la clave pública completa? Por otra parte, ese es un argumento sólido para nunca usar la misma clave dos veces, aunque es imposible evitar que alguien te transfiera fondos...
En lo que respecta a la seguridad, ¿podría uno averiguar la clave pública correspondiente al hash de la clave pública de alguien mirando el scriptSig la primera vez que realiza una transacción?
@liamzebedee, ¿significa que no es seguro exponer nuestras claves públicas?