Our website is made possible by displaying online advertisements to our visitors.
Please consider supporting us by disabling your ad blocker.

This White Paper is temporary. We are writing the final one that will be posted here. Check back when this warning is removed. Thanks for your patience.


Krypto₣ranc: El renacimiento de la moneda francesa

1. Introducción

En 1999, el euro sustituyó a la moneda francesa: el franco. A la gente de todo el mundo le quedaban 3 años para devolver todos sus francos. En 2002, el franco desapareció después de más de 700 años de existencia para hacer espacio para el euro. El franco fue una imagen fiel de la cultura francesa y el éxito. En 2010, el Banco Central francés estimó que más de 4 mil millones de francos no fueron devueltos y todavía estaban en circulación en manos del pueblo. Con el tiempo, la eliminación del franco dejó un sabor amargo. Si bien el crecimiento del PIB fue de + 3% en 1999, nunca se ha acercado a esta cifra desde entonces. Muchos vieron este sacrificio como el comienzo de la caída económica francesa y su pérdida de soberanía. En ese momento no era posible que la gente cambiara el curso de las cosas, había una campaña de propaganda pro-euro sin precedentes, todos los medios de comunicación principales y todas las personas más influyentes estaban presionando para eliminar el franco. Pero las cosas han cambiado desde entonces. Con la invención de la tecnología blockchain por Satoshi Nakamoto y el auge de bitCoin, ahora es posible que el equipo adecuado, con las habilidades técnicas adecuadas, cree una moneda sin la aprobación de ninguna autoridad. Somos este equipo, ¿por qué no hacerlo? El Krypto₣ranc es el increíble renacimiento del franco. Esta no es una nueva revolución tecnológica en el campo de blockchain, pero es una idea revolucionaria: rehacer lo que han sido borrados por los burócratas, por la gente para la gente, de código abierto, ¡gratis e imparable!

2. Tecnología

Para lograr este objetivo, no es necesario recrear la rueda. BitCoin es la criptomoneda más popular del mundo, con más de 500 colaboradores y más de 20,000 bifurcaciones en Github, el equipo de bitCoin mejora el trabajo de Satoshi y publica mejoras con regularidad. Queremos estar lo más cerca posible de bitCoin por esta razón. Krypto₣ranc debe ser una moneda confiable, basada en un concepto infalible, y no agregaremos ningún código exótico que pueda poner en peligro la seguridad del trabajo de ingeniería de Satoshi Nakamoto. Nos pegaremos lo más posible al núcleo de BitCoin, de modo que podamos actualizar Krypto₣ranc a lo largo de la ruta de la criptomoneda original y la más popular, lo más rápidamente posible después de cada actualización y cada nueva versión.

En pocas palabras, Krypto₣ranc es bitCoin pero con una cadena de bloques diferente, con un comportamiento diferente adaptado a este proyecto específico para que Krypto₣ranc se convierta en una de las principales monedas del mundo. Pero la tecnología de la blockchain es exactamente la misma.

Krypto₣ranc se basa en un sistema POW (Prueba de trabajo), ya que no puede fortalecer la seguridad de cada transacción y cadena de bloques en su conjunto, sin dificultar el descifrado, POW es la forma más segura y confiable de hacerlo. El método POW es esencial para proteger la cadena de bloques contra los atacantes y no introduciremos nada que pueda reducir su seguridad. También queremos seguir siendo compatibles con todos los mineros y grupos que ejecutan bitCoin: Krypto₣ranc es tan fácil de usar como bitCoin

¿Cuál es la diferencia entre USD y EUR? Sus características son las mismas, podemos comprar y vender. El mismo razonamiento se aplica a ambos blockchains. La diferencia real es el número de monedas impresas y la aceptación de personas. No hay duda en nuestra mente de que Krypto₣ranc será una moneda preferida de los usuarios del Franco en comparación con bitCoin, que muchos consideran una entidad especulativa y experimental pura.

3. La meta

El propósito de Krypto₣ranc es ser aceptado como moneda de reserva por el gobierno francés. Creemos que el sistema financiero experimentará una gran crisis y que el oro no podrá salvar al euro en este escenario. Sin la criptomoneda como moneda de reserva, la eurozona colapsará en un caos total. Cuando eso suceda, las personas no tendrán dónde guardar su riqueza más que la criptomoneda, será el único lugar seguro. Los franceses saben que el franco y Krypto₣ranc serán su opción alternativa en caso de un colapso financiero para reemplazar el dinero. Creemos que un país como Francia debería tener suficiente Krypto₣ranc para poder imprimir billetes y monedas desde la criptomoneda, lo que sería una medida segura para evitar una situación dramática en caso de que el efectivo faltante del euro no pueda impulsar la economía. También creemos que cada país de la zona euro debe tener un sistema de doble caja, con billetes en circulación en euros y en Krypto₣ranc, bitMark, bitLire, BitPesos, etc.

4. Emisión

Como se explicó anteriormente, la cadena de bloques Krypto₣ranc no será la misma que la de bitCoin. Emitiremos 6,55 mil millones de Krypto₣ranc entre el 1 de enero de 2019 y el 1 de enero de 2022. De esta manera igualaremos la capitalización del Banco Central de Francia. Luego, tendremos una generación de monedas deflacionarias que alcanzará un total de 20 mil millones en 200 años.

2.5 Billones de Krypto₣rancs serán minados y compartidos entre los autores de Krypto₣ranc, y se utilizarán para financiar el mantenimiento y el desarrollo futuro. Krypto₣ranc debe estar bien financiado para continuar su camino y ser apoyado a largo plazo.


Debido a que la tecnología blockchain que estamos usando es la misma que la creada por Satoshi Nakamoto, aquí está el Libro Blanco original de la cadena de bloques, traducido en múltiples idiomas por Google (use el menú desplegable con las banderas para cambiar el idioma).


Bitcoin: un sistema de efectivo electrónico punto a punto | Satoshi Nakamoto

Abstracto

Una versión puramente de igual a igual del efectivo electrónico permitiría que los pagos en línea se envíen directamente de una parte a otra sin pasar por una institución financiera. Las firmas digitales proporcionan parte de la solución, pero los beneficios principales se pierden si aún se requiere un tercero de confianza para evitar el doble gasto. Proponemos una solución al problema de doble gasto utilizando una red de igual a igual. La red marca las transacciones al tiempo que las mezcla en una cadena continua de prueba de trabajo basada en hash, formando un registro que no se puede cambiar sin rehacer la prueba de trabajo. La cadena más larga no solo sirve como prueba de la secuencia de eventos presenciados, sino como prueba de que proviene del mayor conjunto de potencia de la CPU. Siempre que la mayoría de la potencia de la CPU esté controlada por nodos que no cooperan para atacar la red, generarán la cadena más larga y atacarán a los atacantes. La red en sí misma requiere una estructura mínima. Los mensajes se transmiten de la mejor manera posible, y los nodos pueden salir y unirse a la red a voluntad, aceptando la cadena de prueba de trabajo más larga como prueba de lo que sucedió mientras ellos no estaban.

1. Introducción

El comercio en Internet ha llegado a depender casi exclusivamente de instituciones financieras que sirven como terceros confiables para procesar pagos electrónicos. Si bien el sistema funciona lo suficientemente bien para la mayoría de las transacciones, aún adolece de las debilidades inherentes al modelo basado en la confianza. Las transacciones completamente irreversibles no son realmente posibles, ya que las instituciones financieras no pueden evitar disputas mediáticas. El costo de la mediación aumenta los costos de transacción, limitando el tamaño mínimo de la transacción práctica y reduciendo la posibilidad de pequeñas transacciones casuales, y existe un costo más amplio en la pérdida de capacidad para realizar pagos no reversibles por servicios no reversibles. Con la posibilidad de reversión, la necesidad de confianza se extiende. Los comerciantes deben desconfiar de sus clientes, molestándolos por más información de la que de otra manera necesitarían. Se acepta un cierto porcentaje de fraude como inevitable. Estos costos e incertidumbres de pago se pueden evitar en persona mediante el uso de la moneda física, pero no existe ningún mecanismo para realizar pagos a través de un canal de comunicaciones sin una parte confiable.);

2. Actas

Definimos una moneda electrónica como una cadena de firmas digitales. Cada propietario transfiere la moneda a la siguiente al firmar digitalmente un hash de la transacción anterior y la clave pública del próximo propietario y agregarlas al final de la moneda. Un beneficiario puede verificar las firmas para verificar la cadena de propiedad.

El problema, por supuesto, es que el beneficiario no puede verificar que uno de los propietarios no haya gastado el doble de la moneda. Una solución común es introducir una autoridad central de confianza, o menta, que verifique cada transacción para el gasto doble. Después de cada transacción, la moneda debe devolverse a la menta para emitir una nueva moneda, y solo se confía en que las monedas emitidas directamente de la casa de la moneda no se gastarán el doble. El problema con esta solución es que el destino de todo el sistema de dinero depende de que la empresa ejecute el proyecto de ley, con cada transacción que tiene que pasar por ellos, al igual que un banco.

Necesitamos una manera para que el beneficiario sepa que los propietarios anteriores no firmaron ninguna transacción anterior. Para nuestros propósitos, la transacción más temprana es la que cuenta, por lo que no nos importan los intentos posteriores de gastar dos veces. La única forma de confirmar la ausencia de una transacción es conocer todas las transacciones. En el modelo basado en la menta, la casa de la moneda estaba al tanto de todas las transacciones y decidió cuál llegó primero. Para lograr esto sin una parte confiable, las transacciones deben anunciarse públicamente, y necesitamos un sistema para que los participantes acuerden un único historial del orden en el que se recibieron. El beneficiario necesita prueba de que, al momento de cada transacción, la mayoría de los nodos estaban de acuerdo en que fue el primero que recibió.

3. Servidor de marca de tiempo

La solución que proponemos comienza con un servidor de marca de tiempo. Un servidor de marca de tiempo funciona tomando un hash de un bloque de elementos para marcar el tiempo y publicando ampliamente el hash, como en un periódico o en una publicación de Usenet. La marca de tiempo demuestra que los datos deben haber existido en ese momento, obviamente, para ingresar al hash. Cada marca de tiempo incluye la marca de tiempo anterior en su hash, formando una cadena, con cada marca de tiempo adicional reforzando las anteriores.

4. Prueba de trabajo

Para implementar un servidor distribuido de fecha y hora de igual a igual, necesitaremos utilizar un sistema de prueba de trabajo similar al de Adam Back's Hashcash, en lugar de periódicos o publicaciones de Usenet. La prueba de trabajo implica buscar un valor que, al aplicar hash, como con SHA-256, el hash comienza con un número de bits cero. El trabajo promedio requerido es exponencial en el número de bits cero requeridos y se puede verificar ejecutando un solo hash.

Para nuestra red de marca de tiempo, implementamos la prueba de trabajo incrementando un nonce en el bloque hasta que se encuentra un valor que le da al hash del bloque los bits cero requeridos. Una vez que se ha gastado el esfuerzo de la CPU para que satisfaga la prueba de trabajo, el bloqueo no se puede cambiar sin rehacer el trabajo. A medida que los bloques posteriores se encadenan después, el trabajo para cambiar el bloque incluiría volver a hacer todos los bloques posteriores.

La prueba de trabajo también resuelve el problema de determinar la representación en la toma de decisiones de la mayoría. Si la mayoría se basa en un solo IP-dirección-uno-voto, podría ser subvertido por cualquiera capaz de asignar muchas direcciones IP. La prueba de trabajo es esencialmente una CPU con un voto. La decisión de la mayoría está representada por la cadena más larga, que tiene el mayor esfuerzo de prueba de trabajo invertido en ella. Si la mayoría de la potencia de la CPU está controlada por nodos honestos, la cadena honesta crecerá más rápido y superará a las cadenas competidoras. Para modificar un bloque pasado, un atacante tendría que volver a hacer la prueba de trabajo del bloque y todos los bloques posteriores y luego ponerse al día y superar el trabajo de los nodos honestos. Mostraremos más adelante que la probabilidad de que un atacante más lento se ponga al día disminuye exponencialmente a medida que se agregan los bloques subsiguientes.

Para compensar el aumento de la velocidad del hardware y el interés variable en ejecutar nodos a lo largo del tiempo, la dificultad de la prueba de trabajo está determinada por una media móvil que apunta a un número promedio de bloques por hora. Si se generan demasiado rápido, la dificultad aumenta.

5. Red

Los pasos para ejecutar la red son los siguientes:

  1. Las nuevas transacciones se transmiten a todos los nodos.
  2. Cada nodo recopila nuevas transacciones en un bloque.
  3. Cada nodo trabaja para encontrar una prueba de trabajo difícil para su bloque.
  4. Cuando un nodo encuentra una prueba de trabajo, transmite el bloque a todos los nodos.
  5. Los nodos aceptan el bloqueo solo si todas las transacciones en él son válidas y no se han gastado.
  6. Los nodos expresan su aceptación del bloque al trabajar en la creación del siguiente bloque de la cadena, utilizando el hash del bloque aceptado como el hash anterior.

Los nodos siempre consideran que la cadena más larga es la correcta y seguirán trabajando para ampliarla. Si dos nodos transmiten versiones diferentes del siguiente bloque simultáneamente, algunos nodos pueden recibir uno o el otro primero. En ese caso, trabajan en el primero que recibieron, pero guardan la otra rama en caso de que se alargue. El empate se romperá cuando se encuentre la siguiente prueba de trabajo y una rama sea más larga; los nodos que estaban trabajando en la otra rama se cambiarán a la más larga.

Las nuevas transmisiones de transacciones no necesariamente tienen que llegar a todos los nodos. Siempre y cuando lleguen a muchos nodos, entrarán en un bloque dentro de poco. Las transmisiones en bloque también son tolerantes a los mensajes descartados. Si un nodo no recibe un bloque, lo solicitará cuando reciba el siguiente bloque y se da cuenta de que perdió un bloque.

6. Incentivo

Por convención, la primera transacción en un bloque es una transacción especial que inicia una nueva moneda propiedad del creador del bloque. Esto agrega un incentivo para que los nodos admitan la red, y proporciona una forma de distribuir inicialmente las monedas en circulación, ya que no existe una autoridad central para emitirlas. La constante adición de una constante de cantidad de monedas nuevas es análoga a la de los mineros de oro que gastan recursos para agregar oro a la circulación. En nuestro caso, es el tiempo de CPU y la electricidad que se gasta.

El incentivo también puede ser financiado con tarifas de transacción. Si el valor de salida de una transacción es menor que su valor de entrada, la diferencia es una tarifa de transacción que se agrega al valor de incentivo del bloque que contiene la transacción. Una vez que una cantidad predeterminada de monedas ha entrado en circulación, el incentivo puede pasar a tarifas de transacción y estar completamente libre de inflación.

El incentivo puede ayudar a alentar a los nodos a mantenerse honestos. Si un atacante codicioso puede reunir más potencia de CPU que todos los nodos honestos, debería elegir entre usarlo para defraudar a las personas robando sus pagos o usándolo para generar nuevas monedas. Debería considerar más provechoso seguir las reglas, reglas que lo favorecen con más monedas nuevas que todas las demás combinadas, que socavar el sistema y la validez de su propia riqueza.

7. Recuperando espacio en disco

Una vez que la última transacción en una moneda está enterrada en suficientes bloques, las transacciones gastadas antes pueden descartarse para ahorrar espacio en el disco. Para facilitar esto sin romper el hash del bloque, las transacciones se procesan en un Merkle Tree, con solo la raíz incluida en el hash del bloque. Los bloques viejos pueden compactarse apagándose de las ramas del árbol. Los hash interiores no necesitan almacenarse.

Un encabezado de bloque sin transacciones sería de aproximadamente 80 bytes. Si suponemos que se generan bloques cada 10 minutos, 80 bytes * 6 * 24 * 365 = 4.2 MB por año. Con los sistemas informáticos que normalmente venden 2GB de RAM a partir de 2008, y la Ley de Moore prediciendo un crecimiento actual de 1.2GB por año, el almacenamiento no debería ser un problema, incluso si los encabezados de los bloques deben mantenerse en la memoria.

8. Verificación de pago simplificada

Es posible verificar los pagos sin ejecutar un nodo de red completo. Un usuario solo necesita conservar una copia de los encabezados de bloque de la cadena de prueba más larga, que puede obtener consultando los nodos de red hasta que esté convencido de que tiene la cadena más larga, y obtener la rama de Merkle que vincula la transacción a el bloque está sellado. No puede verificar la transacción por sí mismo, pero al vincularla a un lugar de la cadena, puede ver que un nodo de red lo ha aceptado y se han agregado bloques después de confirmar que la red tiene lo acepto

Como tal, la verificación es confiable siempre que los nodos honestos controlen la red, pero es más vulnerable si la red es vencida por un atacante. Mientras que los nodos de red pueden verificar transacciones por sí mismos, el método simplificado puede ser engañado por las transacciones fabricadas por un atacante mientras el atacante pueda continuar dominando la red. Una estrategia para protegerse de esto sería aceptar alertas de los nodos de la red cuando detectan un bloqueo no válido, lo que provoca que el software del usuario descargue el bloqueo completo y las transacciones alertadas para confirmar la incoherencia. Es probable que las empresas que reciben pagos frecuentes aún deseen ejecutar sus propios nodos para obtener una seguridad más independiente y una verificación más rápida.

9. Combinando y dividiendo valor

Aunque sería posible manejar las monedas individualmente, sería difícil realizar una transacción por cada centavo en una transferencia. Para permitir que el valor se divida y combine, las transacciones contienen múltiples entradas y salidas. Normalmente habrá una entrada única de una transacción anterior más grande o entradas múltiples que combinan cantidades más pequeñas, y como máximo dos salidas: una para el pago y otra que devuelve el cambio, si lo hay, al remitente.

Cabe señalar que el despliegue, donde una transacción depende de varias transacciones, y esas transacciones dependen de muchas más, no es un problema aquí. Nunca es necesario extraer una copia completa e independiente del historial de una transacción.

10. Intimidad

El modelo bancario tradicional logra un nivel de privacidad al limitar el acceso a la información a las partes involucradas y al tercero de confianza. La necesidad de anunciar públicamente todas las transacciones impide este método, pero la privacidad puede mantenerse rompiendo el flujo de información en otro lugar: manteniendo las claves públicas anónimas. El público puede ver que alguien está enviando un monto a otra persona, pero sin información que vincule la transacción con alguien. Esto es similar al nivel de información emitido por las bolsas de valores, donde el tiempo y el tamaño de los intercambios individuales, la 'cinta', se hacen públicos, pero sin decir quiénes eran las partes.

Como un firewall adicional, se debe usar un nuevo par de claves para cada transacción para evitar que se vinculen con un propietario común. Algunos enlaces aún son inevitables con las transacciones de múltiples entradas, que necesariamente revelan que sus entradas fueron propiedad del mismo propietario. El riesgo es que si se revela el propietario de una clave, la vinculación podría revelar otras transacciones que pertenecieron al mismo propietario.

11. Cálculos

Consideramos el escenario de un atacante tratando de generar una cadena alternativa más rápido que la cadena honesta. Incluso si esto se logra, el sistema no se abre a cambios arbitrarios, como crear valor de la nada o tomar dinero que nunca perteneció al atacante. Los nodos no aceptarán una transacción no válida como pago, y los nodos honestos nunca aceptarán un bloque que los contenga. Un atacante solo puede intentar cambiar una de sus propias transacciones para recuperar el dinero que gastó recientemente.

La carrera entre la cadena honesta y la cadena de atacantes se puede caracterizar como una Caminata aleatoria binomial. El caso de éxito es que la cadena honesta se amplía en un bloque, aumentando su ventaja en +1, y el evento de falla es la cadena del atacante que se extiende en un bloque, reduciendo la brecha en -1.

La probabilidad de que un atacante se ponga al día de un déficit determinado es análoga al problema de Ruina de un jugador. Supongamos que un jugador con crédito ilimitado comienza con un déficit y juega potencialmente un número infinito de pruebas para tratar de alcanzar el umbral de rentabilidad. Podemos calcular la probabilidad de que alcance el punto de equilibrio, o que un atacante alcance la cadena honesta, de la siguiente manera[8]:

p= probability an honest node finds the next blockq= probability the attacker finds the next blockqz= probability the attacker will ever catch up from z blocks behind

qz={1ifpq(q/p)zifp>q}

Dado nuestro supuesto de que p>q, la probabilidad cae exponencialmente a medida que aumenta el número de bloques que el atacante tiene que alcanzar. Con las probabilidades en su contra, si no hace una buena estocada desde el principio, sus posibilidades se vuelven infinitamente pequeñas a medida que se retrasa.

Ahora consideramos cuánto tiempo debe esperar el destinatario de una nueva transacción antes de estar lo suficientemente seguro de que el remitente no puede cambiar la transacción. Suponemos que el remitente es un atacante que quiere hacer que el destinatario crea que le pagó por un tiempo, luego lo cambia para devolverlo a sí mismo después de un tiempo. El receptor será alertado cuando eso suceda, pero el remitente espera que sea demasiado tarde.

El receptor genera un nuevo par de claves y le da la clave pública al remitente poco antes de la firma. Esto evita que el remitente prepare una cadena de bloques antes de tiempo trabajando en ello continuamente hasta que tenga la suerte de avanzar lo suficiente y luego ejecutar la transacción en ese momento. Una vez que se envía la transacción, el remitente deshonesto comienza a trabajar en secreto en una cadena paralela que contiene una versión alternativa de su transacción.

The recipient waits until the transaction has been added to a block and z bloques han sido vinculados después de eso. Él no sabe la cantidad exacta de progreso que ha hecho el atacante, pero suponiendo que los bloques honestos tomaron el tiempo promedio esperado por bloque, el progreso potencial del atacante será una distribución de Poisson con el valor esperado:

λ=zqp

Para obtener la probabilidad de que el atacante aún pueda ponerse al día ahora, multiplicamos la densidad de Poisson por cada cantidad de progreso que pudo haber hecho por la probabilidad que pudo alcanzar desde ese punto:

k=0λkeλk!{(q/p)(zk)ifkz1ifk>z}

Reordenando para evitar sumar la cola infinita de la distribución ...

1k=0zλkeλk!(1(q/p)(zk))

Convirtiendo a código C ...

#include 
double AttackerSuccessProbability(double q, int z)
{
	double p = 1.0 - q;
	double lambda = z * (q / p);
	double sum = 1.0;
	int i, k;
	for (k = 0; k <= z; k++)
	{
		double poisson = exp(-lambda);
		for (i = 1; i <= k; i++)
			poisson *= lambda / i;
		sum -= poisson * (1 - pow(q / p, z - k));
	}
	return sum;
}
			

Ejecutando algunos resultados, podemos ver la probabilidad de caer exponencialmente conz

q=0.1
z=0    P=1.0000000
z=1    P=0.2045873
z=2    P=0.0509779
z=3    P=0.0131722
z=4    P=0.0034552
z=5    P=0.0009137
z=6    P=0.0002428
z=7    P=0.0000647
z=8    P=0.0000173
z=9    P=0.0000046
z=10   P=0.0000012

q=0.3
z=0    P=1.0000000
z=5    P=0.1773523
z=10   P=0.0416605
z=15   P=0.0101008
z=20   P=0.0024804
z=25   P=0.0006132
z=30   P=0.0001522
z=35   P=0.0000379
z=40   P=0.0000095
z=45   P=0.0000024
z=50   P=0.0000006
			

Resolviendo para P menos del 0.1% ...

P < 0.001
q=0.10   z=5
q=0.15   z=8
q=0.20   z=11
q=0.25   z=15
q=0.30   z=24
q=0.35   z=41
q=0.40   z=89
q=0.45   z=340
			

12. Conclusión

Hemos propuesto un sistema para transacciones electrónicas sin confiar en la confianza. Comenzamos con el marco habitual de monedas hechas con firmas digitales, que proporciona un fuerte control de la propiedad, pero está incompleto sin una forma de evitar el doble gasto. Para resolver esto, propusimos una red de igual a igual utilizando pruebas de trabajo para registrar un historial público de transacciones que rápidamente se vuelven imprácticas desde el punto de vista computacional para que un atacante cambie si los nodos honestos controlan la mayoría del poder de la CPU. La red es robusta en su simplicidad desestructurada. Los nodos funcionan todos a la vez con poca coordinación. No es necesario identificarlos, ya que los mensajes no se enrutan a ningún lugar en particular y solo deben entregarse en el mejor de los casos. Los nodos pueden salir y unirse a la red a voluntad, aceptando la cadena de prueba de trabajo como prueba de lo que sucedió mientras ellos no estaban. Votan con el poder de su CPU, expresando su aceptación de los bloques válidos al trabajar en extenderlos y rechazar los bloques no válidos al negarse a trabajar en ellos. Todas las reglas e incentivos necesarios se pueden aplicar con este mecanismo de consenso.

References

  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998. 
  2. H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.  
  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. 
  4. D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. 
  5. S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.  
  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002. 
  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. 
  8. W. Feller, "An introduction to probability theory and its applications," 1957.