UIF buscará regular lo que no entiende: Criptomonedas

El 5 de mayo de 2021 Gestión (Diario Peruano) publicó un artículo denominado «UIF buscará regular empresas de criptomonedas por riesgo de lavado» en la que se dice presentará una propuesta legislativa al Ministerio de Justicia. Se plantea que los proveedores de activos virtuales se inscriban en registro y reporten las operaciones sospechosas a UIF.

Para empezar debemos revisar que se entenderá por activo virtual, lamentablemente una búsqueda en el portal de la SBS sobre la definición de «activo virtual» no arroja ningun resultado. Solo encontramos un documento llamado CASOS Y TIPOLOGÍAS REGIONALES DEL GAFILAT 2017-2018 en donde se evalúa brevement el uso de criptomonedas (no habla de activos virtuales) como Bitcoin en el lavado de activos producto del tráfico ilícito de drogas. Según se entiende se trata de un caso en Brasil y que se detecta por el movimiento de dinero FIAT que luego pasa a una casa de cambio. El otro caso se refiere a un esquema ponzi, que claramente no es una forma de estafa exclusiva de las criptomonedas, sino que mas bien se utiliza el concepto de criptomonedas para vender un esquema de ganacia rapida, pero en la mayoria, sino todos, estos casos, el estafador nunca compra o vende criptomonedas, y solo recibe el dinero FIAT de las personas que caen en la trampa.

Pero regresando al tema de la definición, al menos en Perú no encontramos una. Miremos entonces la que se usa en México por el Banco de Mexico.

Un activo virtual es:

  1. una unidad de información que no representa la tenencia de algún activo subyacente a la par, y que es unívocamente identificable, incluso de manera fraccional, almacenada electrónicamente
  2. cuyo control de emisión está definido mediante protocolos predeterminados y a los que se pueden suscribir terceros
  3. y que cuenta con reglas que impiden que las réplicas de la unidad de información o sus fracciones se encuentren disponibles para ser transmitidas más de una vez en un mismo momento

La primera parte es aplicable a Bitcoin o Litecoin, pero existen Tokens que si representan un activo subyacente. Podriamos hablar por ejemplo de Tokens que representan un gramo de Oro (The Top 5 Gold-Backed Cryptocurrency Tokens), una propiedad virtual como un NFT (Virtual Property Sells for $1.5M in Ether, Smashing NFT Record), una casa (Tokenization of Real Estate: What, Why and How), e incluso dinero FIAT en el caso de un Stablecoin (USDT, USDC, BUSD). En este caso normalmente se consideran Securities, es decir un instrumento financiero, que ya tienen regulación. Asi que ya empezamos por ver que incluso el Banco de México tiene problemas con una definicion apropiada, por lo que el primer desafio para la SBS será definir un activo virtual.

Ahora bien, el articulo empieza diciendo que existe una fuerta expansion de criptomonedas en los ultimos años en Perú, y seguramente en estos últimos meses, pues resulta en una forma segura y comoda para transferir valor fuera del alcance de gobiernos que destruyen su propia moneda o que intentan o intentrán el control de divisas. Es pues, una forma de salir del sistema.

Lo increíble es que esa (incremento del uso de criptomonedas) y el documento de GAFILAT sean la excusa para establecer que éstas se usan para lavado de activos o financiamiento del terrorismo. Como se aprecia de GAFILAT el esquema ponzi no es exclusivo de las criptomonedas y probablemente ni las utilizan para la estafa, usan solamente las mistica detras del Bitcoin. Mas aun, las transacciones de Bitcoin no son anónimas, son pseudonimas y no es muy difícil identificar a la persona o empresa que este detrás de una transacción especifica, mas aún, cuando las casas de cambio en Perú hacen KYC (Know Your Customer) a todos sus usuarios.

El tema del anonimato es pues una gran mentira, en Bitcoin nada es anónimo, todas las transacciones estan registradas en su Blockchain y son accesibles por cualquiera, es incluso mas transparente que las transacciones bancarias donde se debe solictar la información formalmente, y donde hace poco se requería de una orden judicial (lamentablemente hoy ya no existe la confidencialidad financiera y estamos todos expuestos a un «leak» de información con la cual malos actores pueden atacarnos). Y como lo mencionamos anteriormente, existen mecanismos de identificación.

Finalmente el artículo habla de dinero sucio, sin embargo en un estudio publicado por CoinTelegraph observamos que por cada $1 en Bitcoin usado de forma illegal, se lavan $800 en cash, es decir, Bitcoin representa tan solo 0.125% del lavado illegal comparado contra el cash/efectivo.

De hecho, en la siguiente gráfica verán las mayores multas impuestas a los diferentes Bancos por violación de la regulación:

La siguiente es una lista de sólo unas pocas noticias que involucran Bancos en lavado de dinero:

Y si vamos a hablar de esquemas ponzi y similares deberiamos preguntarnos:

Derepente, solo derepente, y bajo la excusa de siempre (lavado, protección del consumidor, etc.), intentamos trabar el desarrollo de una tecnología nueva y disruptiva para seguir protegiendo a los mismos actores de siempre que tantas crisis han causado.

Esperamos sinceramente que tengan un profundo conocimiento de estas tecnologías (aunque sinceramente lo dudo) y estaremos atentos a las propuestas…

Entendiendo los Monederos (Wallets) para Bitcoin

Una vez que te convences de entrar al futuro del dinero y te preparas a comprar tu primer Bitcoin o fracción de el, veras que es necesario tener un monedero (wallet) para guardar tu dinero. Un monedero de Bitcoin (y otras criptomonedas) es un programa (software) que sirve para enviar, recibir y guardar tus Bitcoin. En realidad no guarda Bitcoin sino las Llaves Privadas (private keys) que te permiten consumir los Bitcoin de las direcciones publicas (Bitcoin address) a las cuales te dan acceso. La dirección publica o dirección Bitcoin es a su vez es una derivación de la Llave Pública.

Es decir, con la Llave Privada generas la Llave Pública, y con esta generas la dirección de Bitcoin (Bitcoin address, la que entregas para que te manden BTC). Todo esto lo hace tu wallet. Entonces, básicamente lo que tu wallet contiene es una lista de llaves privadas y su par de llaves públicas. Quien controla la llave privada es el dueño de los Bitcoin.

Por ejemplo si quieres recibir Bitcoin tu wallet crea una dirección para que otro usuario te puede enviar los Bitcoin. Lo que sucede por detrás es que tu wallet crea aleatoriamente una llave privada, con la cual crea una llave pública y finalmente te muestra la dirección Bitcoin generada de esta ultima.

Pero porque crear una dirección para cada transacción, no puedo hacer que envíen todo a la misma dirección, es decir, reutilizar la dirección? Es correcto, uno puede reutilizar la dirección y varias personas pueden enviar Bitcoin a la misma dirección, y como tu wallet tiene la llave privada puedes consumirlos. Pero existen dos potenciales problemas de seguridad:

  1. Es mas fácil saber de quien es la cuenta, y como la blockchain es transparente, cualquiera podría saber cuantos Bitcoin tienes en tu cuenta. Esto es el equivalente a que tu Banco publique tus nombres y apellidos con tu estado de cuenta.
  2. Cuando consumes tus Bitcoin de una cuenta debes firmar la transacción, y en esa firma se publica tu llave publica de la dirección usada. Si bien es extremadamente difícil derivar la llave privada de la publica, es aun mas difícil derivarla de la dirección Bitcoin (son 2 pasos versus 1 paso).

El punto 2 es la razón principal por la que se consume siempre la totalidad de Bitcoin de una dirección en cada transacción, lo cual nos lleva a otra función del wallet. Cuando consumes los Bitcoin de una dirección, es muy probable que no necesites consumir el total, es decir, se generara cambio. Este cambio es enviado en la transacción a otra cuenta generada por tu wallet (llave privada, publica y dirección) automáticamente. Es decir, de tu cuenta A que tiene 0.3 BTC enviás a B 0.1 BTC y tu wallet crea la cuenta C a donde dirige los 0.2 BTC de cambio.

Tu wallet guarda las llaves privadas en un archivo que por lo general se llama wallet.dat. Este archivo es vital, y si lo pierdes o te lo roban perderás todos tus Bitcoin. Entonces existen dos medidas de seguridad no negociables:

  1. Encripta tu wallet, es decir agrega una contraseña para poder leer el archivo wallet.dat. Tu wallet tiene una función para esto. Ahora si alguien roba tu archivo wallet.dat no podrá leerlo para hacerse de tus BTC.
  2. Haz copias de seguridad de tu wallet. Como podrás apreciar, después de cada transacción deberías hacer una copia de seguridad, pero por razones practicas, al menos al final de cada uso de tu wallet.

Este proceso de mantener un archivo con tu llaves puede ser tedioso y también peligroso si por alguna razón pierdes el backup del archivo, ademas que el mismo esta en una computadora que podría ser hackeada. Esto genero que los desarrolladores creen las hierarchical deterministic (HD) wallets. Estos monederos utilizan una lista de palabras, 12 o 24, para generar una llave privada raíz de la cual se pueden derivar innumerables llaves privadas, y con ellas innumerables llaves publicas y direcciones. Entonces ya no necesitamos guardar el archivo wallet.dat, sino solo necesitamos anotar las 12 o 24 palabras, y eso puede ser en una hoja de papel que no esta conectada a ninguna computadora y por lo tanto inhackeable. Claro que esta hoja debe ser también guardada en un lugar seguro, e idealmente, en varios lugares seguros.

Existen dos (2) categorías de wallets:

  1. Hot Wallet, aquellos que están constantemente conectados a Internet.
  2. Cold Wallet, aquellos que se conectan solo cuando es necesario mover BTC. Por ejemplo los Hardware Wallets y los Paper Wallets (wallets en papel).

Dentro de los Hot Wallet tenemos también tres diferencias:

  1. Lightweight o ligero, significa que el wallet lee la blockchain de otro nodo en Internet, lo cual da la ventaja de no consumir los mas de 200GB en tu disco duro para guardar la blockchain de Bitcoin.
  2. Full Node wallet, significa que el wallet baja a tu computadora la blockchain completa, lo cual de una ventaja de seguridad al no depender de un tercero.
  3. Web Wallet, que como su nombre dice son servicios de wallet en Internet. El problema es que en estos servicios no controlas tu llave privada y por lo tanto dependes de terceros, es la opción menos recomendable.

En los Cold Wallet exploraremos las dos opciones:

  1. Hardware Wallet, que guarda tu llave privada del tipo HD y te permite generar casi ilimitadas direcciones. Es muy segura porque solo la conectas a la PC e Internet cuando necesitas hacer transferencias.
  2. Paper Wallet, que lo que se entiende, un wallet de papel, donde esta escrita tu llave privada y dirección Bitcoin (así como el código QR). Esta también es muy segura porque no esta conectada a Internet, pero debes tomar en cuenta que para consumir los Bitcoin de la misma deberás importar tu llave privada a un Hot Wallet (software). Otro punto a tomar en cuenta es que siempre se consume el total, y por lo tanto el cambio lo recibirás en una nueva dirección que tu wallet generará, mientras que en la dirección del paper wallet no quedara nada.

Cual es el Wallet mas recomendable? Pues depende para que se quiere usar. Por ejemplo para el día a día, y montos pequeños, un wallet en el celular es bastante seguro y practico ya que permite leer códigos QR. Pero en general yo prefiero un hardware wallet como por ejemplo el Ledger Nano X.

Algunos Wallets:

  1. Mycelium (Android, IPhone)
  2. Unstoppable Wallet (IPhone)
  3. Electrum (Linux, Windows, Android, Mac)
  4. Exodus (Para principiantes, Linux, Windows, Mac, IPhone, Android)
  5. Atomic (Para principiantes, Linux, Windos, Mac, IPhone, Android)
  6. Bitcoin Core (Linux, Windows, Mac)
  7. Bitcoin Paper Wallet 
  8. Ledger Live, se usa con Ledger Nano (Linux, Windows, Mac, Androis, Iphone)

Ranking de seguridad de Wallets de peor a mejor:

  1. Servicio de custodia donde no controlas tu llave privada con interfaz web y sin 2FA (Two Factor Authentication), realmente quien guarde así sus criptos es un suicida. Ejemplo: Exchanges (Casas de Cambio)
  2. Servicio de custodia donde no controlas tu llave privada con interfaz web y con 2FA (Two Factor Autherntication). Ejemplo: Exchanges (Casas de Cambio, 2FA por SMS es un riesgo)
  3. Wallet basado en web no custodiado (es decir, uno mismo controla su llave privada) sin 2FA. El riesgo de phishing es alto. Ejemplo: blockchain.comMyEtherWallet usando el archivo Keystore
  4. Una PC con poca seguridad usando un wallet en caliente (hot wallet). Por ejemplo tener un Windows pirata, o un Windows sin todos los updates. Podrías tener instalado un troyano o keylogger.
  5. Apps de Wallet para el teléfono móvil donde controlas tu llave privada y tienes tu copia de Mnemonic keys.
  6. Hardware Wallet.

Ahora estas listo para iniciar tu camino por el futuro de la banca, la no banca, o la banca en tu bolsillo.

Montar un Nodo Completo de Bitcoin en Raspberry Pi

Esta vez haremos algo mas técnico, montar un nodo completo (Full Node) de Bitcoin en un Raspberry Pi (RBP). Un nodo completo de Bitcoin es un programa que valida las transacciones y bloques de la red Bitcoin. A su vez, la mayoría de nodos aceptan transacciones y bloques de otros nodos, los que validan y retransmiten a otros nodos.

Correr un nodo completo tiene su lado positivo:

  • Ayuda a la red de Bitcoin en la medida que la blockchain de Bitcoin siga las reglas, lo cual ayuda a evitar que muchos mineros se pongan de acuerdo para romperlas.
  • Mayor seguridad en la medida que tu monedero (wallet) no depende de un nodo que no controlas y en el cual debes confiar.
  • En caso de un hard-fork es una forma de votar por la blockchain que prefieras.
  • Mayor privacidad, en el caso que usas un nodo de terceros, ese nodo puede saber que direcciones IP se conectan.
  • No es difícil y no es caro.

Existen algunos lados negativos a considerar:

  • Asegurarse que Bitcoin no este prohibido en tu jurisdicción.
  • Mayor consumo de datos en tu conexión de Internet, verifica que no tengas limites de datos.

Veamos los requerimientos:

  • Raspberry Pi3 (o Pi4), con fuente e idealmente su caja (case
  • Monitor con conector HDMI y un teclado
  • Cable de red UTP 
  • Cable HDMI
  • Memoria SD con 512GB de alta velocidad (a la fecha Bitcoin consume 345GB) 
  • Lector/Grabador de memoria SD para nuestra PC 

Como primer paso debemos preparar la memoria SD e instalarle un sistema operativo. En este caso usaremos Ubuntu Server 20.04. Como el RBP solo reconoce hasta 64GB en FAT32 y las memorias mayores formatean en exFAT debemos formatear y forzar FAT32 antes de instalar el sistema operativo.

Para formatear la memoria podemos usar SD formatter. Lo bajamos, instalamos y ejecutamos para formatear la memoria SD.

Para migrar a FAT32 podemos usar GUIformat. Igualmente descargar, instalar y ejecutar.

Luego debemos bajar una imagen del sistema operativo Ubuntu Server 20.04 para ARM32 de aquí

Para grabar la imagen del sistema operativo a la memoria SD usaremos el Raspberry Pi Imager. Lo instalamos y ejecutamos y usamos la imagen de Ubuntu que descargamos para grabar la memoria SD.

Hasta ahi hemos terminado los preparativos para poder levantar el Raspberry Pi con Ubuntu. Ahora debemos pasar la memoria al Raspberry Pi3, conectar todos los cables, monitor, teclado y finalmente la fuente de poder para encenderlo.

Al ingreso veremos que nos recibe el Ubuntu con una terminal pidiendo el login. El usuario por defecto es ubuntu y su contraseña es ubuntu. Nos pedira cambiar la contraseña, escojan la que quieran pero anótenla e idealmente que sea segura.

Ahora viene lo bueno, empecemos a configurar el Ubuntu. Siempre iniciamos con una actualización:

sudo apt update
sudo apt upgrade
sudo reboot

Una vez reiniciado el sistema instalamos, configuramos y activamos el firewall:

sudo apt install ufw
sudo ufw allow 8333 comment “Bitcoin mainnet”
sudo ufw allow ssh
sudo ufw enable
sudo ufw status

También demos un nombre a nuestro servidor:

sudo hostnamectl set-hostname pi-bitcoin
hostnamectl

Cambiemos la IP dinámica (DHCP) a una estática:

ip a

Verificar el nombre de la conexión de red, usualmente es eth0. Para pasarla a estática debemos editar un archivo (adaptar de acuerdo a tu red):

sudo nano /etc/netplan/50-cloud-init.yaml
network:
   ethernets:
      eth0:
         addresses: [192.168.0.200/24]
         gateway4: 192.168.0.1
         nameservers:
            addresses: [8.8.8.8, 8.8.4.4]
   version: 2

Reiniciar la conexión de red y verificar el IP nuevo.

sudo netplan apply
ip a

Como el RBP tiene poca memoria RAM vamos a crear un archivo de SWAP de 4GB para que no nos quedemos sin memoria y el nodo se detenga:

sudo fallocate -l 4GB /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo reboot

Para no usar el usuario con acceso root (administrador) para ejecutar el nodo creamos otro usuario y pasa a su cuenta:

sudo adduser bitcoin
sudo su - bitcoin

Ya estamos listos para instalar el nodo de Bitcoin. Necesitamos descargar Bitcoin Core para ARM Linux de https://bitcoincore.org/en/download/. A la fecha de esta publicacion la version es v0.20.1.

wget https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz
tar xvf https://bitcoincore.org/bin/bitcoin-core-0.20.1/bitcoin-0.20.1-arm-linux-gnueabihf.tar.gz

Ahora tendrán el programa en el directorio bitcoin-core-0.20.1. Entren al directorio y pueden lanzar el servidor con:

bin/bitcoind

Eso debe funcionar, pero lo detenemos con CTRL-C porque necesitamos hacer unas configuraciones adicionales antes de dejarlo funcionando. Para eso editamos el archivo ~/.bitcoin/bitcoin.conf:

nano ~/.bitcoin/bitcoin.conf
daemon=1
disablewallet=1
maxconnections=40
logips=1

Lanzamos nuevamente el nodo:

bin/bitcoind

Esta vez ya no vemos el registro de eventos (log). Para verlo podemos usar el siguiente comando:

tail -f ~/.bitcoin/debug.log

De ser posible, configrar un DEST-NAT en el router para que las conexiones externas al puerto 8333 sean dirigidas el IP de nuestro RBP.

Para revisar que nuestro nodo realmente esta activo debemos primero verificar nuestro IP publico:

curl https://www.whatismyip.com/ | grep "Public IPv4 is"

Y luego ingresamos ese IP en un Web Browser (Brave o Firefox) en https://bitnodes.io/.

Listo, espero les haya servido y gracias por apoyar la red Bitcoin.

Referencias: