Ver y gastar desde una gran cantidad de claves privadas fuera de línea

Planeamos aceptar bitcoins en nuestro sitio web de eshop. Lo que queremos planear hacer es:

1) Mantenga todas las claves privadas siempre fuera de línea (almacenamiento en frío).

2) Generar al menos 100.000 pares de claves de los cuales solo uno se almacenará en nuestro servidor web.

3) Cambiar con frecuencia nuestras direcciones de Bitcoin en nuestro servidor web para evitar que terceros sepan cuántos Bitcoins hemos recibido en total. El servidor web solo contendrá nuestra clave pública (direcciones de Bitcoin), ninguna de las claves privadas.

Ahora mis preguntas son:

I) ¿Hay alguna manera de monitorear la SUMA de todos los bitcoins enviados a TODAS nuestras direcciones?

¿Algo así como una billetera que admita la importación de una gran cantidad de direcciones de "solo visualización" sin requerir la importación de claves privadas? Si la billetera es una aplicación, debe admitir conexiones de proxy SOCKS. (Armory permite claves de solo visualización, pero no sé si es compatible con la importación masiva masiva y los proxies SOCKS. Además, parece estar sufriendo graves errores de uso excesivo de RAM a partir de ahora, según su desarrollador...).

II) ¿Hay alguna forma de vender la SUMA de todos los bitcoins enviados a TODAS nuestras direcciones A LA VEZ?

III) ¿Podrá un atacante saber cuántos bitcoins hemos ganado en total?

¡Gracias!

Is there a way to sell the SUM of all bitcoins ever sent to ALL of our addresses AT ONCE?Esto parece una pregunta no relacionada. Creo que podrías preguntarlo por separado.

Respuestas (2)

Respuestas directas a sus preguntas:

I) Técnicamente esto no es demasiado difícil. Recorrer cada nueva transacción en cada nuevo bloque recibido no requiere demasiados recursos y verificar cada transacción con 100,000 claves públicas no es ningún problema. Sin embargo, no conozco una herramienta que haga exactamente eso. (Por ejemplo, blockparser puede generar todos los saldos de todas las direcciones en toda la cadena de bloques en menos de un minuto).

II) No. No puede transferir todos los bitcoins recibidos en una transacción ya que el tamaño máximo de una transacción es de 1 megabyte. Eso podría gastar el dinero en, digamos, 4000 direcciones diferentes a la vez, pero no más. Por supuesto, puede dar todas las claves privadas a otra persona "todas a la vez", lo que les permite gastar las monedas, pero es poco probable que esa parte acepte la venta como exitosa antes de transferir todas las monedas a nuevas direcciones. en caso de que también hayas guardado las claves privadas.

III) No, si evitas que el atacante conozca todas las claves públicas. Si, por ejemplo, la clave pública actualmente en el servidor web se puede ver fácilmente, el atacante puede simplemente sondear su sitio web, anotar todas las claves públicas vistas y luego verificar todas las transacciones en busca de las claves. Sin embargo, si revela las claves públicas solo a compradores legítimos (o algo así) o no reutiliza las claves nunca, el atacante no tiene forma de conocer el conjunto completo de claves que le pertenecen. Esto también requiere cierto cuidado en el lado del gasto de las monedas: si realiza una transacción que vincula las monedas a su sitio de alguna manera, esto se puede observar.

Sin embargo, existen algunos métodos más avanzados para usar claves públicas de bitcoin que lograrán más de lo que ha pedido aquí. Puede ver, por ejemplo , Monederos deterministas jerárquicos . Las opciones son numerosas y la mejor manera de lograr sus objetivos puede no ser la más obvia.

Para que su servidor controle todas las direcciones, deberá tenerlas todas en el servidor, lo que contraviene su requisito de que un hacker no pueda ver su saldo combinado.

Con eso en mente, por lo que yo veo, tienes dos opciones:

1) Usa una aplicación de escritorio. Armory, QT, etc., aunque no estoy seguro de qué tan bien manejarían más de 1 millón de direcciones o claves, y estoy 75% seguro de que no tienen una importación masiva.

2) Use otro servidor, alojado o incluso en su red doméstica (¿alguien quiere Raspberry Pi?) que conozca todas sus claves públicas pero que esté completamente separado de su servidor frontend. Luego puede usar una API de Bitcoin (Blockchain, BTCBalance.net, blockexplorer) y revisar periódicamente todas las claves de 1M para verificar su saldo. Desde dentro de su red (esto es ideal ya que hay muy pocas posibilidades de acceso externo sin estar en el sitio) puede llamar al servidor y le dirá cuántos Bitcoins tiene en total en su último conteo. Actualmente tengo una configuración de Raspberry Pi para realizar operaciones repetitivas similares (aunque con copias de seguridad no con Bitcoin) y hace un trabajo fantástico.

También es probable que pueda enrutar la opción 2) a través de un proxy.

Gracias, pero ninguna de las respuestas me ayudó. 1) El uso de un servidor externo para la API de bitcoin nos expone al ataque, ya que esos servicios pueden agregar nuestras solicitudes y ver cuánto ganamos. 2) También pregunté si hay alguna manera de VENDER (o al menos transferir a otra dirección de bitcoin) la suma de todos los bitcoins de todas las claves privadas. Dices "Usar Armory pero no estoy seguro de si hace lo que quieres"... Gracias, pero mis preguntas no están realmente respondidas.
Por eso sugerí usar algo dentro de su propia red, como una Raspberry Pi. Puede usar diferentes API si le preocupa que agreguen cuánto dinero tiene,