Articulo de referencia

Hashcash

Hashcash es un sistema de prueba de trabajo utilizado para limitar el spam de correo electrónico y los ataques de denegación de servicio . Hashcash fue propuesto en 1997 por Ada...

Hashcash es un sistema de prueba de trabajo utilizado para limitar el spam de correo electrónico y los ataques de denegación de servicio . Hashcash fue propuesto en 1997 por Adam Back [ 1 ] y descrito de forma más formal en su artículo de 2002, "Hashcash: una contramedida contra la denegación de servicio" [ 2 ] . En Hashcash, el cliente debe concatenar un número aleatorio con una cadena varias veces y aplicar una función hash a esta nueva cadena. Luego, debe repetir este proceso una y otra vez hasta encontrar un hash que comience con una cierta cantidad de ceros [ 3 ] .

Fondo

La idea de "...requerir que un usuario calcule una función moderadamente difícil, pero no intratable..." fue propuesta por Cynthia Dwork y Moni Naor en su artículo de 1992 "Pricing via Processing or Combatting Junk Mail". [ 4 ]

Cómo funciona

Hashcash es un algoritmo criptográfico de prueba de trabajo basado en hash que requiere una cantidad de trabajo seleccionable para su cálculo, pero la prueba se puede verificar de manera eficiente. Para su uso en correo electrónico, se agrega una codificación textual de un sello hashcash al encabezado del correo para demostrar que el remitente ha invertido una cantidad moderada de tiempo de CPU en calcular el sello antes de enviar el correo. En otras palabras, dado que el remitente ha dedicado cierto tiempo a generar el sello y enviar el correo, es improbable que sea un remitente de spam. El receptor puede, con un costo computacional insignificante, verificar que el sello es válido. Sin embargo, la única forma conocida de encontrar un encabezado con las propiedades necesarias es mediante fuerza bruta , probando valores aleatorios hasta encontrar la respuesta; aunque probar una cadena individual es fácil, las respuestas satisfactorias son tan raras que requerirá un número considerable de intentos para encontrar la solución.

La hipótesis es que los remitentes de spam, cuyo modelo de negocio se basa en enviar grandes cantidades de correos electrónicos a un costo mínimo por mensaje, dejarán de ser rentables si existe incluso un pequeño costo por cada correo no deseado que envían. Los destinatarios pueden verificar si un remitente realizó dicha inversión y utilizar los resultados para filtrar el correo electrónico.

Detalles técnicos

La línea de encabezado se ve algo así: [ 5 ]

X-Hashcash: 1:20:1303030600:adam@cypherspace.org::McMybZIhxKXu57jd:ckvi

El encabezado contiene:

  • ver : Versión del formato Hashcash, 1 (que reemplaza a la versión 0).
  • bits : Número de bits de "preimagen parcial" (cero) en el código hash.
  • fecha : La hora en que se envió el mensaje, en el formato YYMMDD[hhmm[ss]].
  • recurso : cadena de datos del recurso que se transmite, por ejemplo, una dirección IP o una dirección de correo electrónico .
  • ext : Extensión (opcional; se ignora en la versión 1).
  • rand : Cadena de caracteres aleatorios, codificada en formato base-64 .
  • contador : Contador binario, codificado en formato base-64.

El encabezado contiene la dirección de correo electrónico del destinatario, la fecha del mensaje e información que certifica que se ha realizado el cálculo necesario. La presencia de la dirección de correo electrónico del destinatario requiere que se calcule un encabezado diferente para cada uno. La fecha permite al destinatario registrar los encabezados recibidos recientemente y garantizar que el encabezado sea único para cada mensaje.

Lado del remitente

El remitente prepara una cabecera y añade un contador inicializado con un número aleatorio. A continuación, calcula el hash SHA-1 de 160 bits de la cabecera. Si los primeros 20 bits (es decir, los 5 dígitos hexadecimales más significativos) del hash son todos ceros, la cabecera es válida. De lo contrario, el remitente incrementa el contador y vuelve a intentar el hash. De 2¹⁶⁰ posibles valores de hash, hay 2¹⁴⁰ que cumplen este criterio. Por lo tanto, la probabilidad de seleccionar aleatoriamente una cabecera con 20 ceros al inicio del hash es de 1 entre 2²⁰ (aproximadamente 10⁶ , o alrededor de una entre un millón). El número de intentos que el remitente necesita para obtener un valor de hash válido se modela mediante una distribución geométrica . Por consiguiente, el remitente tendrá que probar, en promedio, 2²⁰ valores para encontrar una cabecera válida. Con estimaciones razonables del tiempo necesario para calcular el hash, esto tardaría aproximadamente un segundo. No se conoce ningún método más eficiente que este enfoque de fuerza bruta para encontrar un encabezado válido.

Un usuario normal de un ordenador de sobremesa no se vería afectado significativamente por el tiempo de procesamiento necesario para generar la cadena Hashcash. Sin embargo, los spammers sufrirían considerablemente debido a la gran cantidad de mensajes no deseados que envían.

Lado del destinatario

Técnicamente, el sistema se implementa siguiendo los siguientes pasos:

  • El ordenador del destinatario calcula el hash SHA-1 de 160 bits de toda la cadena (por ejemplo, ). Esto tarda aproximadamente dos microsegundos en un ordenador de 1 GHz, mucho menos tiempo que el que tarda en recibirse el resto del correo electrónico. Si los primeros 20 bits no son todos cero, el hash no es válido. (Las versiones posteriores podrían requerir que más bits sean cero a medida que aumente la velocidad de procesamiento de los ordenadores)."1:20:060408:adam@cypherspace.org::1QTjaYd7niiQA/sc:ePa" 
  • El ordenador del destinatario comprueba la fecha del encabezado (por ejemplo, "060408", que representa el 8 de abril de 2006). Si no está dentro de los dos días posteriores a la fecha actual, no es válida. (El margen de dos días compensa la desviación horaria y el tiempo de enrutamiento de la red entre los distintos sistemas).
  • El ordenador del destinatario comprueba si la dirección de correo electrónico de la cadena hash coincide con alguna de las direcciones válidas registradas por el destinatario o con alguna de las listas de correo a las que está suscrito. Si no encuentra ninguna coincidencia, la cadena hash no es válida.
  • El ordenador del destinatario inserta la cadena hash en una base de datos. Si la cadena ya se encuentra en la base de datos (lo que indica que se está intentando reutilizar la cadena hash), no es válida.

Si la cadena hash supera todas estas pruebas, se considera válida. Todas estas pruebas requieren mucho menos tiempo y espacio en disco que recibir el contenido del correo electrónico.

Esfuerzo requerido

El tiempo necesario para calcular una preimagen parcial de hash de este tipo es exponencial con respecto al número de bits cero. Por lo tanto, se pueden añadir bits cero adicionales (duplicando el tiempo necesario para calcular un hash con cada bit cero adicional) hasta que resulte demasiado costoso para los spammers generar líneas de encabezado válidas.

Confirmar que el encabezado es válido es mucho más rápido y siempre lleva el mismo tiempo, independientemente de cuántos bits cero se requieran para un encabezado válido, ya que esto solo requiere una única operación de hash.

Ventajas y desventajas

El sistema Hashcash tiene la ventaja, frente a las propuestas de micropago para correos electrónicos legítimos, de que no implica dinero real. Ni el remitente ni el destinatario tienen que pagar, evitando así los problemas administrativos propios de cualquier sistema de micropago y las cuestiones éticas relacionadas con el cobro por correo electrónico.

Por otro lado, dado que Hashcash requiere una cantidad considerable de recursos computacionales para cada correo electrónico enviado, resulta algo difícil ajustar el tiempo promedio ideal que los clientes deben dedicar al cálculo de una cabecera válida. Esto puede implicar sacrificar la accesibilidad desde sistemas embebidos de gama baja o correr el riesgo de que los hosts maliciosos no se vean suficientemente desafiados como para proporcionar un filtro eficaz contra el spam.

Hashcash también es bastante sencillo de implementar en clientes de correo electrónico y filtros de spam. No se necesita un servidor central. Hashcash se puede implementar de forma incremental: el encabezado Hashcash adicional se ignora cuando lo reciben clientes de correo que no lo reconocen.

Un análisis plausible [ 6 ] concluyó que solo es probable uno de los siguientes casos: o bien los correos electrónicos legítimos se atascarán debido a la falta de capacidad de procesamiento del remitente, o bien los correos electrónicos no deseados seguirán llegando a su destino. Ejemplos de cada caso incluyen, respectivamente, una topología de correo electrónico centralizada (como una lista de correo ), en la que un servidor envía una enorme cantidad de correos electrónicos legítimos , y botnets o granjas de clústeres con las que los spammers pueden aumentar enormemente su capacidad de procesamiento.

La mayoría de estos problemas pueden solucionarse. Por ejemplo, las botnets podrían desaparecer más rápido porque los usuarios notarían la alta carga de CPU y tomarían medidas para evitarlo, y los servidores de listas de correo podrían registrarse en listas blancas en los equipos de los suscriptores, quedando así exentos de los desafíos de hashcash.

Otro problema previsto es que, según la ley de Moore , las computadoras siguen aumentando su velocidad . Por lo tanto, la complejidad de los cálculos necesarios debe incrementarse con el tiempo. Sin embargo, es probable que los países en desarrollo utilicen hardware obsoleto, lo que significa que les resultará cada vez más difícil participar en el sistema de correo electrónico. Esto también se aplica a las personas de bajos ingresos en los países desarrollados, que no pueden permitirse el hardware más reciente.

Al igual que Hashcash, las criptomonedas utilizan una función hash como sistema de prueba de trabajo. El auge de las criptomonedas ha generado una demanda de máquinas de minería basadas en ASIC . Si bien la mayoría de las criptomonedas utilizan la función hash SHA-256 , la misma tecnología ASIC podría emplearse para crear solucionadores de Hashcash tres órdenes de magnitud más rápidos que una CPU de consumo, lo que reduciría la dificultad computacional para los spammers.

Aplicaciones

minería de Bitcoin

A diferencia de Hashcash en las aplicaciones de correo electrónico, que requiere que los destinatarios establezcan manualmente una cantidad de trabajo para disuadir a los remitentes maliciosos, la red de criptomonedas Bitcoin emplea un desafío de prueba de trabajo basado en hash diferente para permitir la minería competitiva de Bitcoin . Un minero de Bitcoin ejecuta un programa informático que recopila transacciones no confirmadas de los usuarios de la red. Juntas, estas pueden formar un "bloque" y generar un pago para el minero, pero un bloque solo es aceptado por la red si su hash cumple con el objetivo de dificultad de la red. Por lo tanto, como en Hashcash, los mineros deben descubrir por fuerza bruta el "nonce" que, al incluirse en el bloque, da como resultado un hash aceptable.

Filtros de spam

Hashcash se utilizó como una posible solución para los falsos positivos con los sistemas automatizados de filtrado de spam, ya que los usuarios legítimos rara vez se verán perjudicados por el tiempo adicional que lleva minar un sello. [ 7 ] SpamAssassin pudo verificar los sellos Hashcash desde la versión 2.70 hasta la versión 3.4.2, asignando una puntuación negativa (es decir, menos probable que sea spam) a los sellos Hashcash válidos y no gastados. Sin embargo, aunque el complemento hashcash está activado por defecto, aún necesita configurarse con una lista de patrones de direcciones que deben coincidir con el campo de recurso Hashcash antes de que se utilice. [ 8 ] El soporte se eliminó del tronco de SpamAssassin el 26/06/2019, afectando a la versión 3.4.3 y posteriores. [ 9 ]

Clientes de correo electrónico

El proyecto de software Penny Post [ 10 ] en SourceForge implementa Hashcash en el cliente de correo electrónico Mozilla Thunderbird . [ 11 ] El proyecto recibe su nombre por la disponibilidad histórica de servicios de correo convencionales que le costaban al remitente solo un centavo; consulte Penny Post para obtener información sobre dichos servicios de correo en la historia.

Sello postal del correo electrónico

Microsoft también diseñó e implementó una especificación abierta ahora obsoleta [ 12 ] llamada "Email Postmark". Es similar a Hashcash. [ 13 ] Esto fue parte de la Iniciativa Coordinada de Reducción de Spam (CSRI) de Microsoft. [ 14 ] La variante de Microsoft email postmark de Hashcash está implementada en los componentes de infraestructura de correo de Microsoft Exchange, Outlook y Hotmail. Las diferencias de formato entre Hashcash y email postmark de Microsoft son que postmark aplica un hash al cuerpo además del destinatario, usa un SHA-1 modificado como función hash y usa múltiples subpuzzles para reducir la varianza de la prueba de trabajo.

Blogs

Al igual que el correo electrónico, los blogs suelen ser víctimas del spam en los comentarios . Algunos propietarios de blogs han utilizado scripts de hashcash escritos en JavaScript para frenar a los spammers de comentarios. [ 15 ] Algunos scripts (como wp-hashcash) afirman implementar hashcash, pero en realidad dependen de la ofuscación de JavaScript para forzar al cliente a generar una clave coincidente; si bien esto requiere cierta capacidad de procesamiento, no utiliza el algoritmo de hashcash ni los sellos de hashcash.

Reputación

En un mercado digital, los proveedores de servicios pueden usar hashcash para construir reputación y atraer clientes. Para ello, primero seleccionan una clave pública como su ID y luego descubren por fuerza bruta un nonce que, al concatenarse con el ID, produce un resumen hash con varios ceros iniciales. Cuantos más ceros, mayor es la reputación. [ 16 ]

Propiedad intelectual

Hashcash no está patentado, y la implementación de referencia [ 17 ] y la mayoría de las demás implementaciones son software libre. Hashcash está incluido o disponible para muchas distribuciones de Linux .

RSA Security ha hecho declaraciones sobre derechos de propiedad intelectual al IETF sobre client-puzzles [ 18 ] en el contexto de un RFC [ 19 ] que describía client-puzzles (no hashcash). El RFC incluía hashcash en el título y hacía referencia a hashcash, pero el mecanismo descrito en él es un desafío interactivo de solución conocida que se asemeja más a Client-Puzzles; hashcash no es interactivo y, por lo tanto, no tiene una solución conocida. En cualquier caso, la declaración de IPR de RSA no puede aplicarse a hashcash porque hashcash es anterior a [ 1 ] (marzo de 1997) la publicación de client-puzzles [ 20 ] (febrero de 1999) y la solicitud de patente de client-puzzles US7197639 [ 21 ] (febrero de 2000).

Véase también

Notas

  1. 1 2 "Un esquema de franqueo basado en colisión de hash parcial" (Txt) . Hashcash.org . Consultado el 13 de octubre de 2014 .
  2. "Hashcash – Una contramedida contra ataques de denegación de servicio" (PDF) . hashcash.org. 1 de agosto de 2002. Consultado el 2 de enero de 2019 .
  3. "Mitigación de ataques DoS mediante prueba de trabajo" (PDF) . Archivado del original (PDF) el 24 de octubre de 2015.
  4. Dwork, Cynthia; Naor, Moni (18 de mayo de 2001). «Precios mediante procesamiento o lucha contra el correo basura». Avances en criptología — CRYPTO' 92. Notas de clase en ciencias de la computación. Vol. 740. Springer. págs. 139–147 . doi : 10.1007/3-540-48071-4_10 . ISBN   978-3-540-57340-1.
  5. "hashcash – herramienta de contramedidas contra spam/denegación de servicio de hashcash" (Txt) . Hashcash.org . Consultado el 13 de octubre de 2014 .
  6. "Documento de prueba de trabajo de Hashcash" (PDF) . Hashcash.org . Consultado el 13 de octubre de 2014 .
  7. "Preguntas frecuentes sobre Hashcash" . Hashcash.org. 26 de junio de 2003. Consultado el 11 de febrero de 2014 .
  8. "Mail::SpamAssassin::Plugin::Hashcash – realizar pruebas de verificación de hashcash" . spamassassin.apache.org . Consultado el 11 de noviembre de 2021 .
  9. "Error 7728: Eliminar la compatibilidad con HashCash del repositorio principal" . Consultado el 22 de septiembre de 2023 .
  10. "Proyecto de software Penny Post en SourceForge" . Pennypost.sourceforge.net . Consultado el 13 de octubre de 2014 .
  11. "Penny Post: ¿Qué significa sello postal?" . Pennypost.sourceforge.net. 16 de junio de 2008. Archivado del original el 19 de febrero de 2014. Recuperado el 11 de febrero de 2014 .
  12. "Funciones descontinuadas y funcionalidad modificada en Outlook 2010" . Office.microsoft.com . Consultado el 13 de octubre de 2014 .
  13. "Algoritmo de validación de matasellos de correo electrónico" (PDF) . download.microsoft.com . Consultado el 13 de octubre de 2014 .
  14. "Iniciativa coordinada para la reducción del spam: una propuesta tecnológica y política" (PDF) . Archivado del original (PDF) el 21 de octubre de 2013. Consultado el 11 de febrero de 2014 .
  15. WP-Hashcash, un plugin para el software de blogs de WordPress Archivado el 27/10/2005 en la Wayback Machine que implementa una función similar a Hashcash, escrito en JavaScript, por Elliott Back
  16. Rahimpour, Sonbol; Khabbazian, Majid (3 de mayo de 2021). "Reputación con hash y su aplicación en el diseño de torres de vigilancia" . Conferencia Internacional IEEE de 2021 sobre Blockchain y Criptomonedas (ICBC) . IEEE. págs. 1–9 . arXiv : 2012.10825 . doi : 10.1109/icbc51069.2021.9461123 . ISBN  978-1-6654-3578-9. S2CID 229340600 . 
  17. "Implementación de referencia en C" . hashcash.org . Consultado el 13 de octubre de 2014 .
  18. Linn, John. "Declaración de RSA Security sobre los derechos de propiedad intelectual reclamados en draft-ietf-ipsec-properties-00 y draft-jennings-sip-hashcash-00" . Ietf.org. Archivado del original (Txt) el 12 de enero de 2005. Recuperado el 13 de octubre de 2014 .
  19. "SIP Computational Puzzles" . Tools.ietf.org . Consultado el 13 de octubre de 2014 .
  20. "Acertijos del cliente" (PDF) . Consultado el 13 de octubre de 2014 .
  21. "Solicitud de patente de rompecabezas del cliente" . Consultado el 13 de octubre de 2014 .

Referencias

  • Adam Back, "Hashcash: una contramedida contra la denegación de servicio", informe técnico, agosto de 2002 (PDF) .
  • Ben Laurie y Richard Clayton, "'Proof-of-Work' Proves Not to Work", WEIS 04. (PDF) .
  • Dwork, C. y Naor, M. (1992) "Fijación de precios mediante el procesamiento o la lucha contra el correo basura", Crypto '92, págs.  139–147. (PDF)
  • Página principal de Hashcash
  • Combate el spam con hashcash. Artículo de David Mertz sobre hashcash, sus aplicaciones y una implementación en Python.
  • Nota de RSA sobre propiedad intelectual dirigida al IETF acerca de hashcash (2004)

Obtenido de " https://en.wikipedia.org/w/index.php?title=Hashcash&oldid=1342600323 "