# Zerocoin

Zerocoin es una criptoconversión propuesta por el profesor Matthew D. Green, de la Universidad Johns Hopkins, y los estudiantes Ian Miers y Christina Garman, como una extensión del protocolo Bitcoin que añadiría cierto anonimato criptográfico a las transacciones Bitcoin. Zerocoin se implementó por primera vez en una criptomoneda completamente funcional, lanzada al público por Poramin Insom, como el Zcoin. Zerocoin proporciona anonimato por la introducción de un servicio de mezcla separado, conocido como zerocoin, que se almacena en la cadena de bloques Bitcoin. Aunque inicialmente se propuso para su uso con la red Bitcoin, zerocoin podría ser integrado en cualquier criptoconversión.

## Fundamento

Las transacciones de Bitcoin se almacenan, por diseño, en un ledger público (the blockchain) accesible a todo el mundo. Estas transacciones proporcionan privacidad a través del seudonimato, en el cual, mientras cada transacción está asociada con la dirección pública del remitente y del receptor, los nombres de los propietarios de estas direcciones no son dados a conocer en ningún momento a la red Bitcoin. Para aumentar la privacidad, cada persona puede crear tantas direcciones públicas como desee, lo que dificulta vincular las transacciones a la misma persona. Si se requiere privacidad adicional, es posible lavar el Bitcoin a través de un tercero de confianza, donde las monedas de entrada se mezclan en una gran piscina y dan salida a una nueva dirección.
Independientemente de las mejoras en precaución, mediante la minería de datos de blockchain, en ciertos casos es posible vincular un conjunto de direcciones públicas a un individuo específico (sin nombre). Por ejemplo, esto podría hacerse mediante el análisis de los hábitos de consumo, o haciendo que el cambio de una transacción de una dirección pública sea enviado a otro. Además, mediante la utilización de información externa a blockchain, tales como las direcciones Bitcoin publicadas en un sitio web, o la dirección postal utilizada con una compra Bitcoin, existe la posibilidad de que se pueda determinar cada transacción Bitcoin individual de una persona determinada.
Los Zerocoins se compran con Bitcoin, en denominaciones fijas por una transacción de zerocoin. Posteriormente, estos zerocoins se pueden canjear por Bitcoin en una dirección Bitcoin diferente por una transacción de gasto zerocoin. Mediante el uso de acumuladores criptográficos y compromisos digitales con pruebas en el conocimiento cero, no es posible vincular la dirección Bitcoin que se usó para la acuñación del zerocoin original a la dirección Bitcoin utilizada para redimir el zerocoin.

## Protocolo Zerocoin

La extensión de zerocoin a bitcoin habría funcionado como una piscina de lavado de dinero, agrupando temporalmente bitcoins juntos a cambio de una moneda temporal llamada zerocoins. Mientras que el grupo de lavado es un concepto establecido ya utilizado por varios servicios de lavado de divisas, zerocoin habría implementado esto a nivel de protocolo, eliminando cualquier dependencia de terceros de confianza. Anonimiza los intercambios hacia y desde la agrupación, usando principios criptográficos; y como una extensión propuesta al protocolo bitcoin, habría registrado las transacciones dentro de la cadena de bloque existente de bitcoin (blockchain).
El anonimato proporcionado por zerocoin, es el resultado de las operaciones criptográficas involucradas con las transacciones separadas de menta y zerocoin. Para acuñar un zerocoin, una persona genera un número de serie S al azar, y cifra esto en una moneda C mediante el uso del segundo número aleatorio r. En la práctica, C es un Compromiso Pedersen. La moneda C se añade a un acumulador criptográfico por los mineros, y al mismo tiempo, se añade la cantidad de bitcoin, igual en valor a la denominación de la zerocoin, a una reserva de fideicomiso zerocoin.
Para redimir el zerocoin en bitcoin (preferiblemente a una nueva dirección pública), el propietario de la moneda tiene que demostrar dos cosas por medio de una prueba de cero-conocimiento. (Una prueba de cero-conocimiento es un método por el cual una parte puede demostrar a otra que una determinada afirmación es verdadera, sin transmitir ninguna información adicional aparte del hecho de que la declaración es verdadera). La primera es que saben que una moneda C pertenece al conjunto de todos los otros zerocoins acuñados (C1, C2,... Cn), sin revelar qué moneda es. En la práctica, esto se hace rápidamente mediante el uso de un acumulador unidireccional que no revela los miembros del conjunto. La segunda es que la persona conoce un número r, que junto con el número de serie S corresponde a un zerocoin. La prueba y el número de serie S se contabilizan como una transacción de gastos zerocoin, donde los mineros verifican la prueba y que el número de serie S no se ha gastado previamente. Después de la verificación, la transacción se contabiliza en la cadena de bloques y la cantidad de bitcoin, igual a la denominación de zerocoin, se transfiere desde el grupo de garantías zerocoin. El anonimato en la transacción está asegurado porque la moneda acuñada C no está vinculada al número de serie S, usado para redimir la moneda.
El acumulador utilizado para la prueba de conocimiento cero tendría que ser recalculado cada vez que se verifique una transacción de gasto, y aunque esto puede hacerse de forma incremental si el punto de control del acumulador se lleva desde bloques anteriores al nuevo bloque, todavía se tendría que añadir algo de sobrecarga al proceso de verificación. Además, tanto el punto de control del acumulador como todos los números de serie del zerocoin, tendrían que añadirse a cada bloque bitcoin, aumentando así el tamaño (aunque no sustancialmente).
Dado que el proceso de verificación para zerocoins es computacionalmente mucho más pesado que para bitcoins, el tiempo de verificación para un bloque aumentaría hasta 6 veces dependiendo de la relación entre bitcoins y zerocoins. Las pruebas preliminares realizadas por los desarrolladores, demuestran que incluso con el aumento del tiempo de verificación y bloques de dos veces el tamaño de los bloques de bitcoin actuales, el tiempo de verificación para un bloque completo no excedería de cinco minutos, y dado que un nuevo bloque bitcoin se crea cada diez minutos en promedio, el aumento del tiempo de verificación no debería ser un problema.

### ZeroVert (ZER)

ZeroVert (ZER) es una moneda del algoritmo de Scrypt-N, merge-minable en la cadena de VTC con una circulación total de 8.4 millones de ZER.

### Zcoin (XZC)

Zerocoin se implementó por primera vez en una criptocurrencia completamente funcional llamada Zcoin (XZC), un proyecto que se puso en marcha el 28 de septiembre de 2016 a las 12AM UTC. El software testnet de los proyectos, fue lanzado por primera vez al público el 18 de diciembre de 2015 bajo el nombre Moneta, antes de que fuera denominado Zcoin.
Las tres diferencias principales entre Zcoin (Protocolo Zerocoin) y Zcash (Protocolo Zerocash) son las siguientes:
* Zcash oculta la cantidad de dinero que se envía en cada transacción, mientras que Zcoin no. Así que Zcash es menos propenso a los ataques de privacidad de tiempo que Zcoin. Por otro lado, esto viene con una gran desventaja para Zcash, en forma de hiperinflación potencialmente no detectada en la oferta monetaria de Zerocash.
* Zcash requiere un mayor uso de la memoria con mucho más tiempo necesario para enviar una transacción privada que Zcoin. Por otro lado, Zcoin, actualmente, requiere mucho más espacio de almacenamiento que Zcash.

## Protocolo Zerocash

La versión mejorada del protocolo "que reduce el tamaño de la prueba en un 98% y permite pagos anónimos directos que ocultan el importe del pago" fue anunciada el 16 de noviembre de 2013. Los desarrolladores presentaron su documento técnico en 2014 en el IEEE Seguridad & Simposio de privacidad junto con el lanzamiento del sitio.
El nuevo protocolo se llama Zerocash. Ahora no es una extensión del bitcoin, sino más bien una tecnología independiente con los mismos principios básicos que blockchain y las transacciones, que fue planeada para poner en práctica alt-coin. Zerocash utiliza argumentos concisos no-interactivos en el conocimiento cero del conocimiento (también conocido como zk-SNARKs), un tipo especial de conocimiento cero, un método para probar la integridad de los cálculos. Dichas pruebas tienen menos de 300 bytes de longitud y se pueden verificar en sólo unos pocos milisegundos. Sin embargo, los zk-SNARK requieren una gran base de datos inicial para la verificación (aproximadamente 1,2 GB) y mucho tiempo para producir una prueba (el gasto de la moneda): de 87 segundos a 178 segundos.

### Zcash (ZEC)

Entre el 5 de octubre de 2015 y el 11 de enero de 2016, la página web de Zerocash comenzó a señalar que "el protocolo Zerocash se está convirtiendo en una moneda digital de pleno derecho, Zcash".

## CredaCash

Se creó una ejecución más rápida de conocimiento cero usando pruebas ZK-snarks para una nueva criptocurrencia llamada CredaCash. CredaCash requiere sólo unos 3 segundos y 85 KB de memoria para crear una prueba de transacción. Similar a Zerocash, CredaCash es una alt-coin con su propia cadena de bloques (blockchain) y protocolo de transacción. El desarrollador de CredaCash espera poder ofrecer CredaCash al mercado en 2016.

## Recepción

Una crítica al zerocoin es el tiempo de cálculo adicional requerido por el proceso, que tendría que haber sido realizado principalmente por mineros bitcoin. Si las pruebas se publicaron en la cadena de bloques, esto también aumentaría drásticamente el tamaño de la blockchain. Sin embargo, como declaró el autor original, las pruebas podrían ser almacenadas fuera de la cadena de bloques. Para contrarrestar las críticas de que el anonimato ofrecido por zerocoin facilitaría la actividad ilegal, se ha sugerido que una puerta trasera u otras características podrían añadirse al protocolo zerocoin para permitir a la policía rastrear el lavado de dinero, pero esto no fue defendido en el documento original.
Puesto que un zerocoin tendrá la misma denominación que el bitcoin usado para la acuñación de la zerocoin, el anonimato sería puesto en peligro si no hay otros zerocoins (o pocos zerocoins) con la misma denominación con la que actualmente están acuñados, pero no utilizados. Una solución potencial a este problema sería permitir solamente zerocoins de denominaciones específicas del sistema, sin embargo, esto aumentaría el tiempo de cálculo necesario ya que podrían ser necesarios múltiples zerocoins para una transacción. Dependiendo de la aplicación específica, el protocolo zerocoin se basaría en una o más partes de confianza para generar dos grandes números primos, p y q, por lo que n = p q. Puesto que n tiene que ser difícil de factorizar, p y q, para ser seguro, deben ser desconocidas para los usuarios normales de zerocoin. El protocolo podría depender de objetos unfactorable RSA para evitar tener una parte de confianza para el proceso de instalación. Sin embargo, esta configuración no es posible con el nuevo protocolo Zerocash.