¿Cómo se pueden descargar los archivos de datos iniciales de Blockchain de forma segura?

Veo varias fuentes de descargas binarias de la cadena de bloques de Bitcoin. ¿Se puede usar alguno de estos de forma segura?

¿Los Checkblocks ayudan en algo? - bitcointalk.org/index.php?topic=74858.0
No. Incluso en el nivel de verificación más alto, las firmas no se verifican.
URL para los archivos de datos de blockchain de Sourceforge: sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain
Creo que la mejor respuesta a esta pregunta es "permitiendo que bitcoind lo descargue de la red" (tenga en cuenta que puede usar -addnode o -connect= para conectarse directamente a un nodo confiable conocido). Además, tengo un parche listo para 0.7.0 que permitirá importar un archivo blk0000?.dat directamente, con la misma verificación que se hace para los bloques descargados de la red. Sin embargo, apenas es más lento que la descarga, ya que es necesario reconstruir el índice.

Respuestas (4)

Hasta donde yo sé, no existe un modelo de ataque concebible si va a utilizar la cadena de bloques para sembrar el cliente Bitcoin normal. No aceptará un bloque inválido. Y entiende que gana la cadena de bloques "más larga". Por lo tanto, un archivo comprometido que fuera más largo que la cadena de bloques oficial no puede existir, y un archivo comprometido que fuera más corto simplemente sería rechazado tan pronto como el cliente se conectara a la red.

En el inicio, el cliente verifica para asegurarse de que la cadena sea básicamente válida y contenga el punto de control más reciente.

Si hay algún ataque que funcione de esta manera, es un defecto en el cliente. Porque alguien también podría enviarle la misma cadena de bloques "rota" a través de la red.

Se realizan muchas más comprobaciones en los bloques recibidos de la red que en los bloques leídos del disco; el inicio sería insoportablemente lento si se hiciera una verificación completa de la cadena de bloques cada vez que se inicia.
Tenía la impresión de que se había realizado un control completo en cada bloque después del último punto de control. Si eso no es cierto,...
Las comprobaciones realizadas se pueden dividir en tres grupos: A) validez de bloque, B) vinculación y C) validez de script. A incluye reglas como prueba de trabajo, monto generado, ... B se trata de si las transacciones no son gastos dobles. C es si los gastos se realizan con la clave correcta. Al descargar bloques, se realizan A y B, y C después del último punto de control. Al inicio, solo se realiza A en los últimos 2500 bloques. Desde 0.6.0, puede usar -checklevel=N (con N>1) para verificar algunas de las reglas de B también al inicio.

[Actualización: con el cliente de Bitcoin v0.7, -loadblock= permitirá al cliente importar datos de la cadena de bloques, de forma segura, desde un archivo de la cadena de bloques local en lugar de hacerlo desde la red. La descarga de blockchain de BitcoinCharts.com se puede usar para esto. Copie el blk*.dat de esa descarga a un directorio temporal e inicie Bitcoin-qt -loadblock=temp/blk0001.dat y observe cómo se cargan los bloques rápidamente.]

Voy a tratar de responder la pregunta yo mismo.

Copias recientes de los archivos de datos de la cadena de bloques están disponibles (y firmadas digitalmente) por uno de los principales desarrolladores del equipo de Bitcoin.org.

La URL no es SSL, pero hay una firma digital que se puede usar para verificar que el binario descargado coincida.

Al usar estos, confío en que el desarrollador sea honesto y no haya alterado la cadena de bloques. Si este desarrollador lo intentara, se podrían inyectar datos no válidos en el archivo de datos de la cadena de bloques, lo que luego engañaría a mi cliente para que verificara transacciones que en otro lugar serían rechazadas como no válidas.

Incluso hay un archivo un poco más antiguo de Blockchain del sitio de distribución de Bitcoin Sourceforge:

Ahora veo que otros también proporcionan datos binarios de blockchain.

Este sitio no usa SSL ni tiene una firma digital para garantizar que la descarga sea la misma que la que aloja el autor.

Si bien estos métodos generalmente no se consideran seguros, puede haber situaciones en las que la seguridad se puede cambiar por la conveniencia. Por ejemplo, si solo gastará monedas recibidas previamente y no las recibirá, existe poco riesgo al usar uno de estos archivos de cadena de bloques.

Respuesta corta: si el cliente verifica los bloques, está bien. Los clientes no suelen hacer esto y la falta de certeza sobre la base de datos es riesgosa. Qué ataque es posible dependerá de las especificaciones del cliente, pero lo más probable es que existan ataques.

Tendría que confiar en esa persona y tener una medida de integridad de datos o revalidar la cadena descargada usted mismo. Recuerde que el cliente predeterminado trata los bloques ya descargados de manera bastante diferente a los bloques descargados.

Una solución de "baja tecnología" podría ser ejecutar el cliente bitcoin dos veces, una con y otra sin la cadena descargada. Configúralos para que se conecten entre sí. Ahora uno de los dos descargará y verificará la cadena localmente. No es la forma más eficiente, pero es tan confiable como la descarga desde la web.

Editar: después de una discusión con Pieter Wuille, estoy seguro de que no estoy seguro de qué tan seguras son las cadenas descargadas y eliminé las afirmaciones sobre seguridad.

No estoy del todo de acuerdo: si un sitio popular de descarga de cadenas de bloques entregara una cadena de bloques corrupta, y una parte significativa de la red la usara, existe el riesgo de que se divida el segundo en el que se dividen las transacciones corruptas.
No veo muy bien lo que quieres decir. Tenga en cuenta que los mineros están organizados en grupos y que estos grupos tendrán cadenas legítimas. La contribución de estos grupos determina la cadena más larga, no los usuarios finales. Después de algunas confirmaciones, una transacción puede ser bastante confiable, como todas las demás transacciones.
Pero si el 10% de los usuarios usan la misma descarga corrupta en sus nodos, una transacción podría parecerles inválida, después de lo cual ignoran la cadena más larga real. Si también tienen algo de poder de minería (usuarios de p2pool, por ejemplo), crearán una bifurcación de cadena de bloques (aunque inicialmente muy lentamente).
Ya veo. El cliente tendrá que evaluar los scripts, pero ese es el comportamiento predeterminado. Una cadena mala tan popular podría detectarse fácilmente, pero ese es un argumento débil. Es bastante sigiloso ya que muchas transacciones aún podrían procesarse normalmente. Este es un peligro justo. Verificar si el hash mercle más reciente es el mismo que uno publicado en algún lugar debería contrarrestar este ataque. Los puntos de control también matan estas malas cadenas, ya que ya no se alinean. ¿Introducir puntos de control diarios?
Ya veo. ¿No debería conectarse con otros nodos aleatorios para obtener los bloques legítimos como si estuviera en cualquier bifurcación? La cadena de bloques se bifurca un poco todo el tiempo, eso se resuelve muy decentemente. La parte posterior al último punto de control debe considerarse una bifurcación potencial, descargada o no.
Los hashes de Merkle están dentro de las transacciones, estamos hablando de bloques. Y todo lo que hacen los puntos de control es garantizar que cuando se descarga un bloque en particular, su hash es correcto, bloqueando eso y cada parte antes de él en la cadena. Sin embargo, si descarga toda la base de datos de bloques en forma final, todas estas comprobaciones ya se han realizado. No se vuelven a realizar al inicio después de la descarga... 0.7.0 introducirá una forma de cargar bloques desde un archivo (mientras los revisa por completo). Sin eso, la descarga de una base de datos de bloques debería considerarse arriesgada.
La interacción con otros nodos no ayuda en nada. Si su base de datos de blockchain está dañada, ya tiene los bloques. No se volverán a descargar, ya que tu cliente no se da cuenta de que los que ya tienes no son válidos.

Hay un archivo reciente con datos de blockchain sin procesar e instrucciones sobre cómo hacer que su cliente bitcoin-qt funcione rápidamente en:

He seguido las instrucciones y funcionó perfectamente. Tuve a mi cliente listo y funcionando en menos de 3 horas