Añadiendo propósito
Si la imagen parcial previa x de y = H (x) es aleatoria, es solo una prueba de trabajo desconectada para nada, todos pueden ver que usted hizo el trabajo, pero no saben por qué, por lo que los usuarios podría reutilizar el mismo trabajo para diferentes servicios. Para hacer que la prueba de trabajo se vincule a un servicio o propósito, el hash debe incluir s, una cadena de servicio para que el trabajo se convierta en encontrar H (s, c) / 2 ^ (nk) = 0. El minero varía en el contador c hasta que esto sea cierto. La cadena de servicio podría ser un nombre de dominio de servidor web, una dirección de correo electrónico de destinatarios, o en bitcoin un bloque del ledger blockchain de bitcoin.
Un problema adicional es que si varias personas están extrayendo, usando la misma cadena de servicio, no deben comenzar con la misma x o pueden terminar con la misma prueba, y cualquiera que lo mire no respetará una copia duplicada del mismo trabajo. como podría haber sido copiado sin trabajo, el primero en presentarlo será recompensado, y otros encontrarán su trabajo rechazado. Para evitar el riesgo de perder el trabajo de esta manera, es necesario que haya un punto de partida aleatorio, por lo que el trabajo se convierte en encontrar H (s, x, c) / 2 ^ (nk) = 0 donde x es aleatorio (por ejemplo, 128 bits para que sea estadísticamente inviable que dos usuarios inicien maliciosa o accidentalmente en el mismo punto), y c es el contador que varía, y s es la cadena de servicio.
Esto es lo que tiene la versión 1 de hashcash y bitcoin. De hecho, en bitcoin, la cadena de servicio es la base de monedas y la base de monedas incluye la dirección de recompensa de los destinatarios, así como las transacciones para validar en el bloque. Bitcoin en realidad no incluye un punto de inicio aleatorio x, reutilizando la dirección de recompensa como el factor de aleatorización para evitar colisiones para este propósito de punto de inicio aleatorio, lo que ahorra 16 bytes de espacio en la base de monedas. Para privacidad, bitcoin espera que el minero use una dirección de recompensa diferente en cada bloque exitoso.
Trabajo más preciso
Hashcash como se propuso originalmente tiene trabajo 2 ^ k donde k es un número entero, esto significa que la dificultad solo se puede escalar en potencias de 2, esto es un poco más simple ya que puedes ver y medir completamente la dificultad solo contando 0s en hexadecimal / binario y adecuado para usos anteriores. (Muchas de las opciones de diseño de hashcash están motivadas por la simplicidad).
Pero debido a que Bitcoin necesita un control de trabajo más preciso y dinámico (para enfocar con precisión el intervalo de bloque de 10 minutos), cambia k para que sea un punto fraccional (coma flotante), por lo que se vuelve a encontrar H (s, x, c) <2 ^ (nk) que es equivalente si k es un número entero. Bitcoin define target = 2 ^ (nk), por lo que el trabajo se puede escribir de forma más simple para encontrar H (s, x, c) <target. Por supuesto, debido a la suerte, el tiempo de bloqueo en realidad tiene una varianza bastante alta, pero el promedio sigue siendo el blanco más preciso por la introducción de k fraccional.
Trabajo, dificultad y seguridad criptográfica
Hashcash expresa margen de seguridad en los términos estándar de seguridad criptográfica O (2 ^ k) donde, para comparación, DES ofrece k = 56 bits de seguridad, ECDSA-256 ofrece k = 128 bits de seguridad, y porque es ampliamente utilizada esta forma log2 de expresar trabajo y seguridad también puede ser útil para hacer comparaciones de seguridad.
La tasa de trabajo de Bitcoin se llama hashrate de red en GH / sec. Como el intervalo del bloque objetivo es de 10 minutos que se puede convertir a seguridad criptográfica como log2 (hashrate * 600), de modo que el hashrate de noviembre de 2013 es 4 petahash / seg y el hashcash de 256 bits de 256 bits de pruebas de trabajo de Bitcoin son 62 bits (incluyendo +1 para doble hash).
Bitcoin también define una nueva noción de dificultad (relativa) que es el trabajo requerido para que en el hashrate actual de la red se espere que se encuentre un bloque cada 10 minutos. Se expresa en relación con una unidad mínima de trabajo de 2 ^ 32 iteraciones (aproximadamente, el trabajo técnicamente mínimo es 0xFFFF0000 debido a los detalles del nivel de implementación de bitcoin). La dificultad de Bitcoin es simple para convertir aproximadamente a seguridad criptográfica log2: k = log2 (dificultad) +32 (o para log2 de alta precisión (dificultad * 0xFFFF0000)). La dificultad está relacionada con el objetivo simplemente como dificultad = objetivo / 0xFFFF0000.
Tal vez sea más fácil lidiar con las altas dificultades en la escala log2 (un petahash / segundo es un número de 16 dígitos decimales de hash por segundo), y los hace comparables con otras declaraciones de seguridad criptográfica. Por ejemplo, el proyecto EFF "deepcrack" DES cracker construyó una máquina de fuerza bruta de hardware capaz de romper una clave DES en 56 horas para dejar en claro que el DES de 56 bits era demasiado débil en 1998 a un costo de $ 250,000 (más tiempo de diseño voluntario) ) En comparación, la red de bitcoin hace 62 bits (incluyendo +1 para hash doble) cada 10 minutos y es 537,000 veces más poderosa que deepcrack, o podría si se centrara en DES en lugar de SHA256 descifrar una tecla DES en 9 segundos para deepcracks 56 horas
Privacidad del minero
En principio, un minero debería, por lo tanto, utilizar de forma privada una dirección de recompensa diferente para cada bloque (y restablecer el contador a 0). El por qué los bitcoins minados de Satoshi se vincularon potencialmente, fue porque mientras él cambiaba las direcciones de recompensa, se olvidó de reiniciar el contador después de cada mina exitosa, que es un error de privacidad de minería de bitcoin. De hecho, con el bitcoin, el contador también debería ocultarse, de lo contrario, revelaría su nivel de esfuerzo, y si tiene mucho poder de minería, eso puede implicar a quién pertenece la moneda. Bitcoin hace esto a través de nonce y extra-nonce. Nonce comienza en 0, pero el nonce extra es aleatorio.
Juntos forman un contador aleatorio que oculta la cantidad de esfuerzo que se incluyó en la prueba, por lo que nadie puede decir si fue un minero poderoso pero desafortunado que trabajó duro, o un minero débil que tuvo mucha suerte.
Además con la [introducción de pools de minería] (/ bitcoin-mining-pools /), si el minero usa la misma dirección de recompensa para todos los usuarios, que es lo que hacen los protocolos de minería actuales, existe el riesgo de que los usuarios puedan rehacer el trabajo. Para evitar que los usuarios rehagan el trabajo, los mineros reparten el trabajo definido para que lo hagan los usuarios. Sin embargo, esto crea una comunicación innecesaria de ida y vuelta y en las primeras versiones del protocolo quizás fue un factor en la decisión de enviar el bloque al mío, lo que significa que los mineros no están validando sus propios bloques, lo que delega la autoridad de validación, aunque no funciona. , al operador de la agrupación, reduciendo la seguridad de la red bitcoin.



Comentarios