Usuario de Monero… ¿eres tan anónimo como piensas?

martes, 30 de enero de 2018

Monero está de moda. Comenzamos hace unos meses a fijarnos en esta criptodivisa principalmente a raíz de la proliferación de proyectos destinados a cargar código Javascript de minado en el navegador y analizar por qué se está apostando por esta y no por otra más reconocida como Bitcoin. Monero utiliza el protocolo CryptoNote propuesto en octubre 2013 por un autor desconocido bajo el alias Nicolas van Saberhagen. Este no da pistas sobre quién es el emisor y receptor de una transacción al utilizar firmas circulares o en anillo que mezclan las transacciones de distintos usuarios. Además, desde enero de 2017, también se puede ocultar el saldo transferido en cada transacción reforzando la privacidad con la implementación de Ring Confidential Transactions, una mejora de su algoritmo.

Iconografía del proyecto Monero
Figura 1. Iconografia del proyecto Monero. 

¿Es posible no ser anónimo?
No existe mucha documentación en español que explique a bajo nivel cómo funciona el protocolo de Monero, pero sí es cierto que muchos hemos jugado con ella para explorar su capacidad de otorgar anonimato en los pagos por defecto. Pero, ¿implica este anonimato opacidad total? No necesariamente. Veámoslo con el siguiente caso.

Por cada cartera, vamos a tener una dirección pública y unas semillas, que serán las que se utilicen en el caso de querer recuperar o importar el monedero que estamos utilizando. Al igual que en Bitcoin. Sin embargo, en este sistema, existen dos pares de claves:
  • Llaves de gasto (secret spend key (b) y public spend key (B)): son las claves con las que se autorizan las transacciones. 
  • Llaves de vista (secret view key (a) y public view key (A)): son unas claves especiales propias de Monero que podemos utilizar para dárselas a un tercero de cara a que compruebe un pago.

Claves en Monero
Figura 2. Ejemplo de tipos de claves en Monero.

La public view key (A) y la public spend key (B) son las contrapartes de la secret view key (a) y de la secret spend key (b). Las claves públicas son las claves necesarias para generar la dirección pública.

Entoces, ¿cómo se construyen las direcciones?
Para empezar, vamos a trabajar a partir de la siguiente dirección de la testnet: A2HBujQ1S7SbzgQkhsPPMQGA4mbhYww3dW8DRjJE1zNG9Z6pNrcc8gUNyQKeMQowDs5MBhP95Hxq4jFSkWGsP5grQFhPJaQ.
  • Las direcciones de Monero, al igual que las de Bitcoin, están codificadas en Base58. Sin embargo, el proceso de generación de las direcciones es un poco diferente dado que en Bitcoin se codificaba toda la parte pública a la vez y aquí se hace por cachos. En primer lugar, los 95 caracteres se dividen en ocho bloques de 11 caracteres y un último bloque de 7 caracteres. Entonces, la dirección anterior quedaría dividida de la siguiente forma:
A2HBujQ1S7S
bzgQkhsPPMQ
GA4mbhYww3d
W8DRjJE1zNG
9Z6pNrcc8gU
NyQKeMQowDs
5MBhP95Hxq4
jFSkWGsP5gr
QFhPJaQ
  • El siguiente paso correspondería a decodificar cada una de las cadenas de Base58 a hexadecimal. Podemos utilizar, por ejemplo, la siguiente herramienta online: http://lenschulwitz.com/base58.
A2HBujQ1S7S --> 35F0782DFFE55EA9
bzgQkhsPPMQ --> D137E1BF857E0A87
GA4mbhYww3d --> 5A9D11E131320C10
W8DRjJE1zNG --> AE1F9169B3C903C5
9Z6pNrcc8gU --> 332343F929237AF5
NyQKeMQowDs --> 835D5CA3E7C297E2
5MBhP95Hxq4 --> 19FEBAB8369330DF
jFSkWGsP5gr --> FC97290B25FBF447
QFhPJaQ     --> CE1B93CF65
  • Si lo ponemos todo seguido, sería la siguiente cadena de 138 caracteres hexadecimales (69 bytes): 0x35F0782DFFE55EA9D137E1BF857E0A875A9D11E131320C10AE1F9169B3C903C5332343F929237AF5835D5CA3E7C297E219FEBAB8369330DFFC97290B25FBF447CE1B93CF65. 
  • Por definición, los cuatro últimos bytes (0x1B93CF65) se corresponden con los cuatro primeros del hash keecak del resto de la cadena. Hacen de checksum para identificar errores.
  • El primer byte de los 65 restantes (0x35) se corresponde con el identificador de una dirección de Monero de la testnet.
  • Y, por último, los 64 bytes restantes son las dos claves públicas asociadas a la dirección:
    1. Clave pública de gasto (B):0xF0782DFFE55EA9D137E1BF857E0A875A9D11E131320C10AE1F9169B3C903C533
    2. Clave pública de vista (A):0x2343F929237AF5835D5CA3E7C297E219FEBAB8369330DFFC97290B25FBF447CE
Lo podemos comprobar también introduciendo la dirección en un explorador como el de testnet.xmrchain.com o en el propio monedero que estemos utilizando.



Claves públicas asociadas a una dirección
Figura 3. Ejemplo de claves públicas asociadas a una dirección. 

Por otro lado, la secret spend key (b) será la clave con la que se firmen las transacciones, es decir, tendrían el mismo funcionamiento que la clave privada en el sistema de Bitcoin. Por defecto, la información que veríamos a partir de un transaction id es la que se puede ver en la figura siguiente.

Información pública a partir de una transacción
Figura 4. Información pública a partir de una transacción


Sin embargo, si le proporcionáramos la secret view key (a) correspondiente a nuestra dirección pública a un tercero, este será capaz de ver todos los inputs de dinero que ha tenido una dirección, pero no sabremos cuántas transacciones de salida ha realizado por lo que tampoco podremos saber cuál es el balance actual de la cuenta.


Información inputs de una dirección pública de Monero
Figura 5. información sobre los inputs que ha tenido una dirección pública de Monero. 


Además, también añadieron otra funcionalidad, la de verificar al receptor que la transacción ha sido emitida por una persona en concreto. Para ello necesitaríamos la clave privada de la transacción y la dirección del receptor de moneros. De esta forma, se contempla la posibilidad de que el emisor de la transacción pueda garantizar que ha realizado un determinado pago preservando el anonimato. 

Próximo pasos: el anonimato a nivel de red
Como hemos visto, Monero ofrece anonimato en los pagos. Sin embargo, es necesario recordar que en el momento en el que nos conectamos a la red, un observador podría identificar que somos usuarios de esta criptodivisa. Si bien es cierto que los usuarios podrían conectarse a redes como Tor o I2P para enmascarar su identidad, los desarrolladores de Monero están trabajando en un proyecto llamado Kovri, una tecnología descentralizada y anónima basada en las especificaciones abiertas de I2P. Aunque actualmente se encuentra en fase de desarrollo, esta es una línea de trabajo que la comunidad de Monero necesita seguir impulsado para hacer posible un ecosistema de pagos verdaderamente anónimo.


Félix Brezo
Equipo de Innovación y Laboratorio de ElevenPaths
Yaiza Rubio
Equipo de Innovación y Laboratorio de ElevenPaths

No hay comentarios:

Publicar un comentario