¿Se pueden almacenar las claves privadas de forma segura en blockchain?

Ok, sé que blockchain es de conocimiento público. Pero, luego, hay experimentos como zcash que encriptan el remitente y el receptor y la cantidad de información y todavía funcionan.

Estoy considerando si el servicio de arbitraje blockchain p2p es posible. Por ejemplo, desea intercambiar ETH por BTC. Una cadena de bloques genera 2 direcciones, una de las cuales es para BTC y la otra para ETH. Una vez que se financian ambas direcciones, los fondos de ambas se envían a los destinatarios. Para hacer esto a través de blockchain, debe haber una forma segura de almacenar y usar claves privadas en blockchain.

¿Es esto completamente imposible, o hay alguna indicación de que uno podría hacer algo así?

Sí. Hay ejemplos de personas que adjuntan archivos binarios a la cadena de bloques. Si cifra las claves privadas, puede almacenarlas en la cadena de bloques. Si usa criptografía de clave pública, cífrela con la clave pública de alguien y solo ellos podrán descifrarla. Si usa el cifrado de clave simétrica, cífrelo con una contraseña y luego dígale a alguien la contraseña. Sin embargo, todo esto no es recomendable.

Respuestas (3)

No hay encriptación involucrada en ninguna parte de una cadena de bloques. No hay claves para cifrar, ya que cada nodo tiene la misma información que todos los demás. La criptografía está involucrada, pero para firmar/probar. No para cifrar.

Incluso en el caso de zcash, el cifrado no está involucrado. Todo lo que hacen las billeteras es demostrarle al resto de la red que tenían los fondos que están gastando. La única diferencia en comparación con Bitcoin es que revela menos información al hacerlo y, como resultado, las pruebas son mucho más complejas.

Las cadenas de bloques no generan claves privadas; eso no tiene sentido, ya que todos pueden ver la cadena.

Las carteras tienen claves privadas. Nunca se comparten con nadie. Entregan las claves públicas correspondientes para que se les pague, y usan la clave privada para luego demostrar a otros que poseen ciertas monedas.

El ejemplo que está describiendo con un intercambio que ocurre entre dos cadenas es posible usando una técnica llamada intercambio atómico de cadena cruzada . Se basa en una transacción bloqueada con hash donde la primera billetera que mueve su dinero en una cadena revela un valor aleatorio que se convierte en un valor que se conoce con anticipación. La otra parte luego usa esta preimagen para desbloquear fondos en el otro lado.

Alguien propuso algo similar, publicar archivos encriptados en la red IPFS (pública como, por ejemplo, la cadena de bloques de Ethereum) y luego enviar las claves a los participantes para que las descifren.

El fundador Juan Bennet destacó la siguiente cita:

'Ejemplo ingenuo: cifre el archivo con algún secreto y comparta el secreto con las personas que tienen "permiso de lectura"'

https://github.com/ipfs/ipfs/issues/86

Lo que realmente necesita es un sistema de capacidad descentralizado.

https://github.com/autocontracts/permissioned-blocks/blob/master/whitepaper.md

(Descargo de responsabilidad, este es un libro blanco que escribí)

No se recomienda enviar una clave asimétrica privada como una transacción de blockchain (que es un canal de comunicación) de esta manera.

Hay un buen documento sobre intercambios clave aquí:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.216.6107&rep=rep1&type=pdf

En este artículo, el autor también deja claro que enviar una clave privada a través de un canal no es un buen diseño:

"Cuando se envía una clave en un mensaje, solo se usa la clave pública, para ser explícitos... Ninguno de los protocolos estudiados en este documento envía una clave secreta por cable".

https://dominictarr.github.io/secret-handshake-paper/shs.pdf

Las claves públicas están diseñadas para enviar a través de un canal. No la clave privada. El cifrado se puede romper por la fuerza bruta. Una vez que alguien tiene la clave privada, puede descifrar todo lo que se cifró con esa clave.

Gracias por contribuir, pero esta respuesta no proporciona suficientes detalles para ser útil.
He actualizado mi comentario con algunos enlaces.
Esta respuesta sería mejor si explicara que la cadena de bloques se está utilizando como un canal y, por lo tanto, las fuentes que cita son relevantes. Esto es difícil de entender para un observador casual, que es probablemente la razón por la que te han votado negativo.
Gracias @Jestin. Sí, me votaron negativamente antes de poner los enlaces para explicar lo que quería decir. El primer comentario fue "No se recomienda enviar claves privadas cifradas a través de un canal", sin motivo alguno. Vota a favor si crees que la respuesta es mejor ahora :-)
La conexión que es difícil de hacer para la gente es blockchain data == channel. Es una conexión que creo que has asumido que la gente hace, pero dudo que todos lo hagan. Una oración que explique esto ayudaría, especialmente porque el término "canal" en este foro se usa más a menudo para significar "canal de pago".
DE ACUERDO. Buen punto, he actualizado. Por favor vote a favor.