¿Cuál es el método más seguro para administrar una gran cantidad de direcciones de Bitcoin receptoras?

Digamos que quiero ejecutar un gran proyecto, donde los usuarios puedan solicitar continuamente nuevas direcciones para depositar Bitcoins en su cuenta en línea. Supongo que tendré que generar previamente miles de pares de claves de Bitcoin e importarlos a una instancia en ejecución de bitcoind en mi servidor. Cada vez que un usuario solicite una nueva dirección para depositar Bitcoins en su cuenta, le asignaré una nueva dirección. Luego, bitcoind me notificará cuando alguna de las direcciones importadas reciba una transacción.

Primera pregunta: ¿Bitcoind es capaz de monitorear miles de direcciones en tiempo real? ¿Debo planificar una máquina dedicada para esto?

Segunda pregunta: dado que tendré que mover los Bitcoins recibidos a un almacenamiento en frío y también realizar pagos automáticamente muchas veces al día, también tendré que almacenar las claves privadas en el servidor en línea. Puedo tener wallet.dat protegido con contraseña, pero ¿cuál es el método más seguro para desbloquear automáticamente la billetera, mover fondos y luego volver a bloquearla sin que la contraseña se vea comprometida? No lo considero seguro si la contraseña aparece en algún lugar del código, la configuración o la base de datos. Y no quiero ingresar la contraseña manualmente varias veces al día.

Tercera pregunta: ¿bitcoind generará un nuevo "cambio de dirección" cada vez que traslade fondos de la dirección de recepción a pagos y almacenamiento en frío? Pregunto porque si bitcoind usó una de las direcciones importadas para el cambio, parecería que el cliente recibió Bitcoins.

Su pregunta es similar a la mía bitcoin.stackexchange.com/questions/21496/… . He leído que Cryptsy usa billeteras frías, entonces, ¿significa que operan con saldos virtuales y cuando se realiza el pago, mueven el dinero de la billetera fría a la billetera?

Respuestas (2)

No desea almacenar claves financiadas del lado del servidor, hay un flujo casi constante de hosts que se ven comprometidos para robar fondos. La mayoría de los sistemas de Bitcoin usan algo llamado "billetera caliente" y mueven el resto a billeteras de papel individuales fuera del control de los servidores. Entonces es el papel de los administradores mover los fondos de un lado a otro para mantener la billetera caliente financiada. Esto reduce significativamente el riesgo y significa que un atacante puede obtener como máximo la cantidad de fondos en la billetera caliente.

¿Bitcoind es capaz de monitorear miles de direcciones en tiempo real?

Sí, pero realmente no desea almacenar nada más que una pequeña billetera caliente en un servidor. Si su seguridad no es perfecta, simplemente la van a robar. si estaba acostumbrado

¿Cuál es el método más seguro para desbloquear automáticamente la billetera, mover fondos y luego volver a bloquearla sin que la contraseña se vea comprometida?

No puedes estar seguro. Incluso si la billetera está "encriptada", un atacante puede sentarse en el servidor y esperar a que la desbloquees. Nuevamente, esta es la razón por la que necesita usar almacenamiento fuera de línea y billeteras activas para mitigar el daño del servidor comprometido.

¿Generará bitcoind un nuevo "cambio de dirección" cada vez que traslade fondos de la dirección de recepción a pagos y almacenamiento en frío?

Sí. Es por esto que todas las direcciones presentadas al cliente son de un solo uso. Usted crea una nueva dirección de recepción cada vez para la billetera caliente bitcoindy nunca se la vuelve a mostrar al cliente. No necesitan hacerlo, sus fondos no están restringidos a ninguna salida de Bitcoin en particular. Su saldo es solo un valor externo en su base de datos para el que tiene los fondos.

Idealmente, la configuración se ve así:

Servidor:

  • Una bitcoindbilletera caliente crea nuevas direcciones de recepción y se las presenta a un cliente. Usando walletnotifyo blocknotifyactualiza los saldos recibidos para cada usuario a una base de datos externa como Postgres o Redis.
  • Un script de verificación se asegura de que bitcoindnunca almacene más de 50 BTC en su billetera, si el saldo supera los 50 BTC, se ejecuta un script que genera una nueva clave con una clave pública determinista (el servidor nunca tiene que conocer la clave privada para hacer esto) o utiliza una lista generada previamente. Envía el exceso a esta dirección para mantenerlo seguro.
  • Si la billetera no tiene los fondos para pagar a un usuario cuando realiza una solicitud de retiro, muestre un esfuerzo suave y notifique al administrador que la billetera activa debe recargarse. Explique que esto es para la protección del usuario.

Desconectado:

  • Una billetera Armory que contiene las claves privadas de la billetera fría. Idealmente, esto sería completamente fuera de línea, con una copia de seguridad en papel en una caja de seguridad.

  • El control es solo del administrador, quien conoce la dirección de recarga de la billetera caliente en el servidor. Cuando es necesario, vuelven a mover los fondos al servidor según las notificaciones.

Muy complicado, pero es más o menos cómo funcionan otros sistemas, y tiene que ser así a menos que quieras terminar como http://inputs.io/ que perdió una billetera caliente completa de 4000 BTC debido a una negligencia. Nunca se puede ser demasiado paranoico en situaciones como esta. Su pérdida máxima en este caso sería la billetera caliente de 50 BTC, que es mejor que perderlo todo.

Juega seguro.

Me gusta esta solución. Sin embargo, digamos que un pirata informático está esperando en silencio en el servidor hasta que algún cliente deposite una cantidad muy grande, digamos 1000 BTC. Si la clave privada de esta dirección de recepción también estuviera en el servidor, ¿el pirata informático podría enviarse rápidamente los Bitcoins a sí mismo antes de que el script de verificación pudiera transferirlos al almacenamiento en frío?
Ese es un riesgo que también se puede mitigar, y es una buena idea darse cuenta de que existe. Si solo presenta las direcciones generadas por Armory a los usuarios (todavía puede ver su saldo sin la clave privada), entonces los saldos grandes nunca estarán en la billetera caliente, pero aún puede contarlos con su base de datos externa. Eso no quiere decir que deba ser negligente con la seguridad de los servidores calientes, un compromiso sigue siendo un problema enorme para todos los involucrados, solo usar un sistema frío-calor lo hace un poco menos costoso financieramente si lo es.
@ user10507 Debo mencionar que estoy muy contento de que esté pensando en esto con mucho cuidado. Este es más trabajo de diseño que el que muchos servicios parecen haber puesto en sus sistemas. Piensa maliciosamente y trabaja para mitigar.

¿Cuál es el método más seguro para desbloquear automáticamente la billetera, mover fondos y luego volver a bloquearla sin que la contraseña se vea comprometida?

Quiere dos cosas fundamentalmente opuestas aquí, por un lado, quiere que su billetera sea accesible para procesos automatizados. Por otro lado, no desea que esté disponible para los piratas informáticos que comprometen el sistema que ejecuta dichos procesos automatizados. Básicamente, no puedes tener ambos.

Es por eso que tiene una "billetera caliente" y una "billetera fría". La billetera caliente contiene una cantidad de bitcoins que puede permitirse perder. La billetera fría tiene bitcoins en almacenamiento a largo plazo.

En un día a día normal, el dinero que ingresa generalmente excederá el dinero que sale. Su sistema automatizado debe estar diseñado para mover dinero a la billetera fría si se acumula demasiado en la billetera activa.

Ocasionalmente, puede descubrir que el dinero que sale supera al dinero que ingresa. En este caso, su sistema deberá alertarlo de que la billetera activa se está agotando. Luego deberá auditar cuidadosamente la situación antes de mover manualmente el dinero de la billetera fría.