JCM Block
JCM Block
Autor:
Carlos Piris Yamuza
Director:
Albert Cabellos Aparicio
Codirector:
Jordi Paillissé Vilanova
Enero 2018
Índice general
1.1. Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Blockchain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3. Beneficios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.4. Contras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Retos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6. Contextualización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7.1. Bitcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
i
ÍNDICE GENERAL
1.7.2. Ethereum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7.3. Nem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Planificación temporal 11
2.1. Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5. Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.6. Imprevistos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
ii
ÍNDICE GENERAL
4. Transacción 21
4.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5. Peer-to-Peer 25
5.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.4. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.4.1. Bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6. Conclusión 30
iii
7. Trabajo futuro 31
7.1. Peer-to-peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.2. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Bibliografı́a 31
iv
Índice de tablas
1.1. Estructura común de un bloque . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
v
vi
Índice de figuras
1.1. Diagrama del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
vii
viii
1. Definición del alcance y contextualización
1.1. Contexto
1.1.1. Introducción
El objetivo principal del proyecto es construir un prototipo funcional de blockchain que ase-
gure la información del enrutamiento de Internet. Esta contendrá información sobre a quién
le pertenece un rango de direcciones IP y datos del protocolo LISP[2] (Locator/ID Separation
Protocol). Protocolo en el que trabajan los investigadores del DAC como posible solución al
problema de escalabilidad en Internet debido a la creciente cantidad de dispositivos conectados.
A continuación, se definirán los principales actores en este proyecto, es decir, toda persona u
organización que tenga algún tipo de relación con el proyecto o pueda estar interesada.
Director
Codirector
El codirector de este proyecto es Jordi Paillissé, es el desarrollador jefe, es quien tiene conoci-
miento de todas las partes del proyecto y está en constante contacto con los desarrolladores.
1
1.1. Contexto
Desarrolladores
El grupo de desarrolladores está formado por cuatro miembros, todos estudiantes de la FIB y
como proyecto de final de carrera para cada uno de los miembros. Cada miembro tiene asignada
una parte del prototipo independiente del resto de la cual es el responsable. Los miembros del
proyecto son Hamid Latif, Miquel Ferriol, Eric Garcia y yo mismo.
Organizaciones
La empresa Cisco colabora con el proyecto y espera ver los resultados para ver si puede sacar
un producto similar al mercado. Además, este proyecto ha sido presentado a la IETF (Internet
Engineering Task Force), organización que vela por la arquitectura de internet y los protocolos
que la conforman, como mejora para internet. El código fuente del proyecto será publicado bajo
una licencia libre para que cualquier organización podrá contribuir.
Internet ha ido creciendo exponencialmente en las últimas décadas lo que ha creado una gran y
compleja infraestructura de redes y protocolos junto a él. A medida que Internet sigue creciendo
va demandando cambios en la red que son muy costosos de realizar.
Una Overlay Network es una red virtual de nodos que está construida sobre una o más redes
subyacentes. Con el objetivo de implementar servicios que no están disponibles en las subya-
centes. OpenOverlayRouter es una plataforma de código abierto que permite crear este tipo de
redes utilizando el protocolo LISP.
Con estas tecnologı́as se puede modificar el comportamiento de una red, mejorándolo sin tener
que modificarlo fı́sicamente permitiendo ası́ abaratar los costes.
El problema surge en la seguridad de los datos. Las direcciones IP de Internet no tienen ningún
tipo de identificador para saber a quién pertenecen, ¿cómo podemos saber que no nos están
engañando?
Actualmente, el protocolo LISP para localizar un RLOC sabiendo un EID cuenta con un sistema
llamado DDT (Delegated Database Tree), es un directorio jerárquico compuesto por nodos en
una estructura en árbol, que permite encontrar la ruta deseada. Conceptualmente equivalente
al DNS. Este sistema es difı́cil de gestionar, se necesitan nodos diferentes y los cambios son
manuales. Además es un sistema centralizado y para asegurar la información se utiliza un
sistema de certificados digitales (PKI) que complica la configuración.
2
1.2. Blockchain
Los investigadores de la UPC vieron una forma mejor de asegurar los datos utilizando una
blockchain en lugar del sistema DDT. La tecnologı́a blockchain permite guardar información
de forma muy segura y además por su diseño cuenta con un registro histórico de todos los
cambios. También es un sistema descentralizado, no se depende de un organismo central, sino
que los propios usuarios.
La tecnologı́a blockchain también presenta una serie de retos, en parte debidos a la juventud
de esta tecnologı́a, por ello se pretende aprender sobre ella e investigar como se puede aplicar
a las redes de comunicaciones.
1.2. Blockchain
Esta tecnologı́a surgió en el año 2009 como parte de la criptomoneda Bitcoin[4]. Como su nombre
indica, esta guarda la información en una cadena de bloques, diseñada para evitar su modifi-
cación una vez un dato ha sido publicado dentro de uno de estos bloques. Conceptualmente
podemos decir que se trata de una gran base de datos segura y confiable.
Los datos almacenados son transacciones entre los usuarios. Un usuario adjunta datos en una
transacción junto con su firma digital y su llave pública. Normalmente los datos adjuntos son
algún tipo de activo o token, algo único que no se puede duplicar (ej, monedas en Bitcoin). A
continuación, una transacción es emitida al resto de nodos en la red, estos la guardan tempo-
ralmente hasta que uno de ellos, en un tiempo fijado, la introduzca en un nuevo bloque que
transmitirá de nuevo a la red. La red de conexión de los nodos es a través de una red Peer to
Peer (P2P).
Cada nodo en la red guarda la blockchain entera de forma local y verifica todo su contenido.
Además, la mayorı́a de blockchains dan una recompensa a los nodos cuando añaden un nuevo
bloque a la cadena, aunque no es estrictamente necesario. La tabla 1.1 presenta una visión
general de los elementos que contiene un bloque.
Se usan dos mecanismos básicos para proteger la información contenida en la cadena, la cadena
de firmas y el algoritmo de consenso.
La cadena de firmas opera a nivel de transacción. Cada remitente y receptor tiene su pareja
de llaves pública-privada. Para cambiar un token de propietario, el remitente debe generar una
transacción donde firma los datos y el hash de la llave pública del receptor con su llave privada.
3
1.2. Blockchain
El remitente también comparte su clave pública. La tabla 1.2 presenta la estructura de una
transacción.
Llave pública Firma remitente Hash (Llave
Datos
remitente (Llave privada) Publica recetor)
Estas normas aseguran por un lado el dueño del token tiene todo en control y solo él puede
autorizar una transferencia. Por otro lado, cuando se transfiere un token es irreversible ya que
el receptor pasa a tener todo el control.
Los algoritmos de consenso más populares son PoW (proof of work) y PoS (proof of stake)
En Proof of Work (prueba de trabajo) los nodos tienen que resolver un problema matemático
para poder añadir un bloque a la cadena. La cadena valida es aquella que más bloques contenga.
Si alguien intentase modificarla necesitarı́a un poder computacional más elevado que el resto
de nodos de la red juntos, algo poco probable y requerirı́a de mucha energı́a eléctrica.
El principal inconveniente es su enorme gasto de recursos, haciendo que no sea viable de aplicar
a nuestro prototipo. Además, requiere que se actualice el hardware frecuentemente.
En Proof of Stake (prueba de participación), los participantes con más participación en la red,
es decir, aquellos que más tokens poseen, tienen más probabilidad de añadir un bloque a la
cadena. Se asume que un usuario con mucha participación velará por la seguridad de la cadena
(no se perjudicarı́a a el mismo) de este modo los bloques que genere no serı́an maliciosos.
4
1.3. Objetivos
Por otro lado, PoS añade una seria de inconvenientes que permiten ataques si no se ponen
mecanismos para evitarlo. Investigaremos posibles formas de minimizar ataques.
Se propone usar PoS para el prototipo debido a sus ventajas frente a PoW, aunque este aumente
la complejidad del proyecto debido a que requiere de una serie de algoritmos que lo protejan
frente a los ataques.
1.2.3. Beneficios
El uso de la blockchain ofrece un nivel de seguridad en los datos equivalente a los certificados
(PKI) usados por DDT en LISP y además aporta facilidades en el manejo como por ejemplo
en el rekeying.
Al ser descentralizado una empresa puede gestionar sus direcciones IP a su manera sin necesidad
que pedir certificados a otros organismos.
Toda la información es pública, se envida cualquier tipo de censura y queda constancia de todos
los movimientos permitiendo ası́ la auditoria.
1.2.4. Contras
Es necesario que cada usuario guarde una copia de toda la cadena, podrı́a llegar a ocupar mucho
espacio, las estimaciones previstas no indican que pueda ser un problema. Para arrancar un
nodo nuevo en la red necesita descargar todos los bloques de la cadena, provocando una espera
en el inicio.
La veracidad de la cadena depende de que sean los propios usuarios los que se porten correcta-
mente. Si muchos usuarios se comportan mal, acabarı́a perjudicando a la blockchain.
En nuestra blockchain no se puede permitir que una dirección de internet quede perdida, si un
usuario perdiese sus llaves o emite una transacción a una dirección sin dueño hay que permitir
que se vuelvan a emitir esas direcciones que han quedado perdidas.
1.3. Objetivos
Debido a la magnitud del proyecto, este se divide en cuatro módulos independientes uno para
cada estudiante como mencione anteriormente. La figura 1.1, muestra un diagrama del proyecto.
Montar una transacción (llaves públicas-privadas, firmas, etc) que incluya las direcciones
de Internet junto con los EID y RLOC de LISP en lugar de dinero digital.
5
1.4. Retos
Crear una red de comunicación P2P que permita a los nodos de la red comunicarse, enviar
y recibir transacciones y bloques además del bootstrap inicial.
1.4. Retos
La blockchain que queremos construir presenta una serie de problemas con los que hay que
lidiar a diferencia de las blockchains que implementan las criptomonedas.
Cuando un usuario de una criptomoneda emite una transacción, este debe pagar una tasa al
usuario que la incluye en el bloque. La tasa es un incentivo para que la transacción sea incluida
en la cadena, esta puede ser cero, pero eso hará que quizás no se incluya nunca, en cambio una
tasa alta hará que entre más rápido. Nosotros no trabajamos con ningún tipo de dinero virtual
sino con direcciones de internet, lo cual hace imposible el pago de algún tipo de tasa. Esto podrı́a
provocar que no se incluyesen transacciones en un bloque, aunque es poco probable ya que los
6
1.5. Estado actual
usuarios son empresas que se beneficiarı́an de la seguridad que ofrece incluir la información. El
problema estarı́a en que dos usuarios podrı́an emitir la misma transacción entre ellos sin parar
ya que no existe ninguna tasa y llenarı́an la blockchain de datos inútiles.
Una blockchain no contempla la opción de prestar un token, en nuestro caso si una empresa
de telecomunicaciones quiere asignar una dirección IP a un cliente, este serı́a el dueño de la
dirección para siempre. Hay que añadir una nueva funcionalidad a la blockchain que permita
asignar una dirección a un cliente sin que este sea el propietario. No se pueden perder direcciones
IP, cuando un usuario de una criptomoneda pierde sus llaves o envı́a el dinero a un lugar
equivocado este no puede recuperarse de ninguna forma.
Criptográficamente una blockchain es muy segura pero una red de comunicaciones puede sufrir
un ataque como por ejemplo un denial of sevice (DoS) o un man in the middle. Actualmente
existen estudios como el de Maria Apostolaki et al.[5] que demuestran que se pueden aislar
nodos en la criptomoneda Bitcoin. Poder realizar este ataque en una blockchain tipo PoS
como la nuestra serı́a muy grave ya que aislando pocos nodos que tengan mucha participación
disminuirı́a la seguridad de nuestra cadena. Buscaremos métodos para impedir que esto pueda
ocurrir.
No he encontrado una blockchain que haya tratado de incluir direcciones IP en las transacciones.
Tampoco parece existir una solución a la seguridad de la red aunque actualmente existen
modelos que garantizan bastante seguridad.
1.6. Contextualización
En este proyecto se desarrollará un sistema blockchain basado en PoS, debido a la inviabilidad
de usar otro tipo de algoritmo de consenso, para reemplazar el sistema DDT del protocolo LISP.
Me corresponden las tareas montaje de las transacciones y creación de una red P2P. Además
investigar como minimizar los ataques a la red.
Para realizar nuestro proyecto hemos analizado las criptomonedas más populares en busca de
adaptar alguna de ellas a nuestras necesidades. En concreto hemos analizado dos de ellas Bitcoin
y Ethereum, en las que basamos para crear nuestra propia blockchain.
También hemos analizado la red P2P de la criptonomeda Nem, que puntúa los nodos para
detectar posibles nodos maliciosos.
7
1.7. Estado del arte
1.7.1. Bitcon
El hecho de ser la primera forma de blockchain hace que tenga algunos problemas en su diseño.
Utiliza un algoritmo de consenso tipo PoW, lo que hace que tenga un gasto eléctrico despropor-
cionado y requiere hardware especializado. También tiene problemas de escalabilidad, de media
solo llega a unas 7 transacciones por segundo que algunas veces ha generado congestiones en la
red, aunque en las últimas actualizaciones prometen mejorarlo.
Las transacciones de Bitcoin (Figura 1.2) están entrelazadas entre ellas, para poder emitir dinero
debes referenciar a una o varias transacciones anteriores en las que hayas recibido dinero. Para
ello incluyen un script de entrada y salida, el script de entrada debe desbloquear el script de
salida de la transaccion anterior y el script de salida son las condiciones que se deben cumplir
para desbloquear el dinero que estamos emitiendo.
Bitcoin cuenta con todo un lenguaje de scripting para poder generar todo tipo de condición a
la hora de desbloquear una transacción como por ejemplo multifirmas.
8
1.7. Estado del arte
1.7.2. Ethereum
Ethereum[6] es la segunda criptomoneda más popular y una de las blockchains más avanzadas.
Su diseño mejora en gran parte al de Bitcoin.
Si bien también utiliza un algoritmo de consenso tipo PoW trabajan para migrar a uno de
tipo PoS. Su sistema de transacciones ha sido simplificado a un sistema de cuentas, parecido
al sistema bancario que utilizamos. Esto le dota de mayor escalabilidad y un gasto menor en
espacio.
Al existir el concepto de balance, a la hora de enviar una transacción basta con indicar la
cantidad y el receptor. Toda la parte de verificación y validación no se incluye en la transacción
como en Bitcoin, esta parte la debe realizar la chain. Como resultado las transacciones ocupan
muy poco espacio y son muy fáciles de crear.
Ethereum permite incluir programas informáticos en la propia cadena, llamado Smart Contrat,
dotando sistema de la capacidad de trabajar no solo con monedas sino con cualquier cosa. Estos
programas son muy superiores a los scripts que se pueden generar en Bitcoin.
Además Ethereum cuenta con una serie de librerı́as como RLP (Recursive Length Prex) que
permite serializar objetos en datos binarios y también decodificarlos. También cuenta con li-
brerı́as para generar las firmas.
En cuanto a la red P2P Ethereum implementa una tabla de hash distribuida (DHT), en concreto
el algoritmo Kademlia[7]. Este algoritmo tiene mucha escalabilidad, permitiendo conectar miles
de nodos en la red ofreciendo baja latencia y gran velocidad de transmisión. Este algoritmo
genera una red muy robusta, aunque sigue existiendo la posibilidad de aislar un nodo, a su vez
es muy difı́cil de implementar.
1.7.3. Nem
Los nodos son puntuados con un valor de confianza que influye a la hora de elegir los peers con
los que comunicarse. Además cuenta con una lista negra por si detecta nodos maliciosos. Por
ejemplo un nodo bastante ocupado o con mucha latencia obtendrá peor puntuación.
Nem periódicamente atendiendo a los cambios que se producen en la red, preguntando direc-
tamente a sus peers, va actualizando su lista de nodos priorizando todos aquellos con los que
tiene más confianza.
De esta forma Nem consigue una red más resistente a posibles ataques que puedan ocurrir en
una blockchain tipo PoS como la nuestra.
9
1.8. Alcance
1.8. Alcance
Pretendemos poner en funcionamiento la blockchain y testear su funcionamiento si puede ser
con servidores en la nube alrededor del mundo para mostrar que es posible mejorar la seguridad
de internet usando esta nueva tecnologı́a. El proyecto debe ser una prueba de concepto.
En base al éxito esperamos que la IETF acepte como un nuevo estándar para internet el uso
de blockchains y que empresas como Cisco que colaboran en el desarrollo junto con otras
desarrollen una versión comercial del prototipo para su uso a nivel mundial, haciendo ası́ un
internet más seguro y descentralizado.
Queremos publicar un paper explicando los resultados obtenidos en las pruebas y un estudio
de los problemas que presenta el uso de una blockchain con una posible solución.
La metodologı́a de trabajo que se seguirá la metodologı́a ágil Scrum que nos permitirá gestionar
el proyecto de una forma más amena y motivadora que con un método mas tradicional.
Todo el código se comparte con el resto de desarrolladores a través de la plataforma GitHub que
además es un control de versiones. También se usa Google Drive para compartir documentos y
esquemas.
10
2. Planificación temporal
2.1. Programa
El proyecto tiene una duración estimada de 5 meses, desde principios de setiembre a finales de
enero, aunque durante los meses de verano de julio y agosto ya estuve trabajando en la parte
de investigación debido su complejidad y magnitud.
El jefe del proyecto busca información sobre el dominio del proyecto y prepara la repartición de
trabajo entre los 4 desarrolladores. Se resolverán las dudas y se expondrán todas las propuestas
encontradas. Esta fase no tiene ninguna dependencia de precedencia.
Investigación
Cada desarrollador investiga sobre todas las partes aunque no sea el encargado de programarla,
se analizan las diferentes blockchains que hay en la actualidad para ver cuál de adapta mejor y
ver qué cambios son necesarios para adaptarlas a nuestras necesitadas. Esta parte depende de
la repartición de trabajo.
11
2.5. Recursos
Se analizarán los requisitos necesarios para realizar cada una de las partes que nos han tocado
y su diseño. Esta parte depende de la investigación.
Estructura de la transacción
Red P2P
Independientemente del resto de partes, el proyecto necesita de una red de comunicación tipo
P2P para comunicar los ordenadores entre sı́. En esta parte de desarrollada esta red.
Resolución de forks
En esta parte se estudiará un algoritmo que gestione la resolución de forks que se puedan
producir en la blockchain. Esta parte depende de que la red P2P esté terminada.
Creación de la API
Esta parte es la última del desarrollo, una vez programadas las otras partes se pone a disposición
de los demás compañeros una API para poder interactuar con su código.
Documentación y Testeo
Una vez finalizadas las partes anteriores se terminará la documentación en la que se incluirán los
resultados de las pruebas y la experiencia obtenida durante el desarrollo. A parte, se preparará
la defensa del proyecto.
2.5. Recursos
Para la realización del proyecto se dispone de diferentes recursos hardware y software, se marcan
en la siguiente tabla.
12
2.6. Estimación de horas
13
2.6. Estimación de horas
14
2.7. Diagrama de Gantt
2.7. Diagrama de Gantt
15
Figura 2.1: Diagrama de Gantt del proyecto
3. Gestión Económica y Sostenibilidad
3.1. Gestión Económica
Una vez planteado el problema y diseñado una solución, vamos a realizar un estudio económico
y un estudio del impacto social y ambiental, para determinar la viabilidad del proyecto.
Para realizar este proyecto se utilizarán todos los elementos detallados en el apartado de recursos
comentados en el apartado anterior. Vamos a estimar el coste del proyecto de los recursos
humanos, hardware, software y costes indirectos.
Debido a que este proyecto se realiza dentro de la universidad con el material del que ya se
dispone, no implica comprar material nuevo, lo que se traduce a que la mayor parte de los
recursos ya están amortizados.
Debido a la naturaleza del proyecto, los recursos humanos somos estudiantes de la facultad que
no disponemos de una beca, por lo tanto, no cobramos un salario (estimaremos el coste). Por
otro lado, el jefe del proyecto sı́ que cobra un suelto de becario.
Vamos a analizar el coste de cada una de las partes del diagrama de Gantt: Inicio del proyecto,
Gestión del proyecto, Implementación, Testing, Mediciones y Documentación.
16
3.1. Gestión Económica
Para llevar a cabo la implementación del proyecto, necesitamos una serie de elementos hardware
para desarrollar y documentar el proyecto.
Total 5120e
17
3.1. Gestión Económica
En cuanto al software, se necesitarán las siguientes herramientas de software. Todas las utili-
zadas son gratuitas.
Total 0e
Dado que este proyecto se realiza en la universidad, el consumo energético, el coste de internet,
el coste en papel, etc. están incluidos en los gastos de la universidad.
Total 305e
En el caso de los desarrolladores no se cubre el gasto del transporte que lo deben aportar a
nivel personal.
3.1.6. Imprevistos
Averı́a en uno de los ordenadores: es poco probable, supondrı́a substituir o reparar el equipo,
pero no retrasarı́a el proyecto ya que disponemos de más equipos.
18
3.2. Sostenibilidad y compromiso social
Total 15.480e
En cuanto al tiempo de desarrollo es difı́cil de predecir si se podrı́an reducir los tiempos debido
a que se trata de un trabajo de investigación, no disponemos de un modelo a seguir.
Este proyecto aspira a tener un gran impacto en el mundo de internet, siendo uno de los
primeros en estudiar el uso de la nueva tecnologı́a blockchain en los protocolos de enrutamiento.
Pretendiendo ası́, impulsar el uso de esta nueva tecnologı́a.
Dependiendo del éxito final del proyecto esta propuesto para ser entrar en la IETF (The Internet
Engineering Task Force) y poder ser usado como estándar para el uso en la infraestructura de
internet. Podrı́a llegar a suponer que empresas como Cisco que colaboran con el proyecto sacasen
una versión comercial del producto.
Por lo que hace al área ambiental, este proyecto no tiene una gran intrusión, ya que se desarrolla
un software que no requiere de ningún tipo de hardware especializado para ejecutarse, a su vez,
tampoco requiere de un ordenador potente. Como se indica en la contextualización uno de los
objetivos principales del proyecto era usar un modelo de blockchain que solventara los graves
problemas ambientales, un gasto enorme de electricidad y recursos hardware, que traen consigo
las primeras versiones de esta tecnologı́a.
19
3.2. Sostenibilidad y compromiso social
20
4. Transacción
4.1. Requisitos
Una transacción debe indicar las IPs que se están emitiendo junto con la información que
requiere el protocolo LISP si esta es necesaria. Estas deben estar firmadas por el emisor y
indicar la llave pública del receptor.
Para la realización de este proyecto se ha elegido usar el lenguaje de programación Python. Por
ello he elegido la librerı́a de manipulación de IPs de Google ipaddr que me permite pasarlas a
binario y viceversa.
4.2. Diseño
Todas las blockchains que hemos analizado trabajan con monedas virtuales, para hacerlo, sim-
plemente indican la cantidad emitida. En nuestro caso debemos indicar que o cuales IP se
intercambian ya que cada una de ellas tiene su número y no se pueden repetir, es decir, solo un
usuario puede poseer una misma IP en un momento determinado.
Dado que IPv4 posibilita 232 direcciones e IPv6 2128 es inviable indicar en una transacción
todas las IP emitidas una a una. La mejor solución es usando rangos de direcciones, que es la
forma habitual con la que se trabaja, bastará con dar una IP y una máscara. De esta forma
si un usuario posee el rango 10.0.0.0/8, quiere decir que posee las IPs entre la 10.0.0.0 y la
10.255.255.255. Si se quiere hacer referencia a una única IP basta con usar la máscara 32 o 128
en el caso de IPv4 e IPv6 respectivamente. Para distinguir entre IPv4 e IPv6 hemos añadido
un campo llamado Afi que toma valor 1 en caso de IPv4 y 2 en caso de IPv6.
Cuando un usuario de una criptomoneda envı́a dinero a otro, este pierde por completo el control
de esa cantidad a partir de ese momento. En nuestro caso una empresa puede asignar a un cliente
una dirección IP pero esta tiene que seguir siendo la propietaria. Para poder dotar a nuestra
blockchain de esta propiedad, vamos a indicar con un campo en la transacción que el emisor
esta prestando las IPs. Además se ha decidido que el emisor indicará con una fecha dentro de
la transacción el dı́a y hora en el cual recuperará todas las direcciones IP emitidas. Durante el
tiempo que el receptor posee las IPs estas están bloqueadas.
Esta blockchain pretende substituir el sistema DDT de Lisp, por lo que debe almacenar toda la
información que este contiene, en él se encuentran las direcciones de los MapServer y Locator.
Estas direcciones no tienen ningún efecto en la blockchain, se han decidido guardar en su interior
por la seguridad que ofrece. Esta información se guardará en forma de metadatos, un usuario
enviará una transacción a si mismo con el rango de IPs al que se le asignarán los datos. Se
pueden emitir tantas transacciones con metadatos como se desee, la última de todas, al contener
21
4.3. Implementación
En el grafo de la figura 4.1 se muestra cuando un usuario puede generar cada uno de los
diferentes tipos de transacciones. Un usuario propietario de un rango de IPs puede emitirlo a
otro usuario (Allocate), puede prestarlo (Delegate) y puede asignar metadatos (MapServer y
Locator). Si se poseen unas IPs prestadas estas no se pueden ni emitir (Allocate) ni prestar
(Delegate). Para identificar el tipo de transacción se les ha asignado los siguientes números: 0
→ Allocate, 1 → Delegate, 2 → MapServer, 3 → Locator.
Allocate Delegate
0 1
2 3
MapServer Locator
4.3. Implementación
En el inicio del proyecto se tenı́a en mente seguir la estructura de la criptomoneda Bitcoin, lo
que trajo problemas a la hora de ver como implementábamos los scripts de entrada y salida
que pretendı́amos simplificar. Además la complejidad que suponı́a buscar y almacenar las tran-
sacciones en la base de datos junto con el tamaño de estas nos llevo a dejar de lado el modelo
de Bitcoin.
En Ethereum si que existe el concepto de balance, por lo tanto, a la hora de enviar una tran-
sacción basta con indicar la cantidad (en nuestro caso las IPs) y el receptor. Toda la parte de
22
4.3. Implementación
Los Smart Contrats no han sido implementados por no ser necesarios ya que estamos creando
nuestra propia blockchain dedicada.
Ethereum cuenta con la librerı́a RLP (Recursive Length Prefix) que permite serializar objetos
en datos binarios y también decodificarlos. Creamos una lista con todos los campos de la
transacción y RLP lo codifica. Utilizamos la misma estructura de Ethereum adaptada a nuestras
necesidades y los mismos algoritmos de hash (keccak-256) y encriptación (curvas elı́pticas).
Time: Campo opcional con el tiempo Unix para indicar el fin de un Delegate.
En el campo de metadatos si se trata de una transacción de tipo MapServer incluye una lista
de IPs con su Afi y una llave pública, esta no influye en la blockchain, para que el servidor
pueda firmar los paquetes emitidos. En el caso de Locator incluye una lista de IPs con su Afi.
Una vez rellenados todos los campos de una transacción, se hashea y se firma. Como resultado
obtenemos los valores V, R y S. Con el método de firmas usado no es necesario indicar el emisor,
está implı́cito en la firma. Ofreciendo ası́ transacciones lo más pequeñas posibles.
En la tabla 4.1 del siguiente apartado se muestra una transacción de ejemplo con la longitud
en bytes que ocupa cada campo. En la tabla 4.2 se muestra su codificación en binario resultado
de usar la librerı́a RLP. Se ha remarcado en color cada campo para que se pueda identificar.
23
4.3. Implementación
4.3.1. Ejemplo
• Time 0 1-4
• V 1c 1
• R 10466f7104039530d426d75ac53335929a467b985e2 32
0cc89f0d650791b787ed2
• S 6a53f8f9c22d232849428d302d96dab065c8eab7fe0 32
47c5c9d655b8e29771cd2
Tabla 4.1: Parámetros de una transacción tipo MapServer
Nota: Como es una transacción de tipo MapServer el emisor y receptor son el mismo usuario.
24
5. Peer-to-Peer
5.1. Requisitos
Se requiere de una red de comunicación que conecte las 6 maquinas virtuales en la nube (Amazon
Web Services) junto con la máquina local. Por esta red se enviarán tanto los bloques como las
transacciones que se generen, a su vez, esta misma debe realizar el bootstrap cuando se arranque
el sistema y responder a las peticiones del resto de nodos.
El bootstrap consiste en pedir a los peers los bloques que le faltan a la cadena y todas las
transacciones que se han emitido pero aun no han entrado en la cadena, a lo que llamaremos
el pozo de transacciones (transaction pool).
De la misma forma que las transacciones esta también debe ser programado en Python. Por
ello se tuvieron en cuenta una serie de librerı́as para crear redes.
pyP2P: Librerı́a especialmente diseñada para redes P2P, se tuvo que descartar por no
estar suficiente madura.
Asyncio: Es la librerı́a que trae python 3 por defecto para tratar funciones ası́ncronas, se
tuvo que descartar porque finalmente tuvimos que usar python 2 al tener problemas con
librerı́as de los módulos de mis compañeros.
Twisted: Librerı́a dirigida a programación por eventos, esta fue finalmente elegida por su
facilidad en implementación.
Debido a la complejidad que supone implementar un algoritmo de consenso para una block-
chain de tipo PoS y la difı́cil gestión de las bifurcaciones (forks) en la cadena, se ha decidido
eliminar la posibilidad de que ocurran. Ası́ tenemos una mejor modularidad del proyecto y más
posibilidades de éxito.
5.2. Diseño
Debido a que no se conectarán muchos dispositivos en las pruebas que queremos realizar, hemos
podido simplificar el diseño de la red para maximizar las probabilidades de éxito. La red tiene un
nodo hardcodeado para conectarse al inicio y descubrir el resto de peers, en este caso elegimos
el ordenador de la facultad como nodo inicial.
Cuando un nodo se conecta a la red descarga del nodo inicial toda la lista de peers y se conecta
a ellos. Después este empieza el bootstrap, pregunta cuantos bloques tiene la cadena y descarga
todos aquellos que le falten, luego descarga todo el pozo de transacciones.
25
5.3. Implementación
Una vez realizada la etapa de bootstrap, cuando un nodo genera una transacción nueva o un
bloque este lo envı́a por la red al resto. A su vez, cada 5 minutos un nodo hace un ping a todas
sus conexiones para ver que todos los nodos sigan vivos, sino cierra la conexión.
5.3. Implementación
Para que la red pueda trabajar paralelamente con el resto de módulos, esta se ejecuta en un
hilo separado. Dentro del bucle principal del programa se le pregunta si tiene alguna petición
de ser atendida o se le notifican los datos que tiene que enviar.
Todos los mensajes se envı́an serializados en un JSON, indicando el tipo de mensaje con el
campo msgtype y los datos.
Para poder realizar todas estas tareas utilizo las siguientes estructuras de datos. Además en
forma de contador se tiene constancia del último bloque generado.
Cuando el hilo principal del programa pregunta si hay nuevas transacciones o bloques, este le
responde y vacı́a el contenido. En caso contrario si otro modulo debe responder una petición
de un peer este le notifica la petición.
La librerı́a Twisted gestiona todas las conexiones de forma concurrente y cuenta con una serie
eventos que se disparan cuando se reciben datos o se conecta o desconecta algún nodo. Cuenta
con una clase global a la que pueden acceder todos los peers llamada factory donde se almacena
la información (se guardan todas las estructuras de datos mencionadas) y por cada peer se
ejecuta una instancia independiente del protocolo. Twisted ofrece los siguientes eventos.
write: Envı́a los datos a otro nodo. Lo usamos para transmitir la información.
LoopingCall: Ejecuta una función cada X tiempo. Se usa para hacer el Ping y consultar
cuando ha acabado el bootstrap.
deferLater: Ejecuta una función después de X tiempo. Se usa para comprobar en unos
segundos si el peer nos ha enviado los datos.
26
5.4. Rendimiento
5.4. Rendimiento
He realizado una prueba de rendimiento con 3 de nuestras máquinas en la nube. Para ello he
elegido una en cada continente buscando ası́ el peor escenario posible. La figura 5.1 muestra un
mapamundi con la localización de las máquinas.
1. Frankfurt
2. North California
3. Sydney
A continuación la tabla 5.1 muestra el tiempo de respuesta (ping) entre las tres máquinas
virtuales. Los resultados son bastante buenos, en el peor de los casos estamos por debajo de
300ms (Frankfurt-Sydney). La máquina de California es la que mejor conexión tiene tan solo
147ms con ambos continentes.
Frankfurt California Sydney
Frankfurt - 147ms 291ms
California 147ms - 147ms
Sydney 291ms 147ms -
Tabla 5.1: Tiempo de respuesta entre máquinas
27
5.4. Rendimiento
5.4.1. Bloques
Para calcular el tiempo que tarda un bloque en ser transmitido, he generado 100 bloques del
tamaño máximo permitido, en nuestro caso es 1MiB, y los he enviado entre todas las parejas
de máquinas obteniendo ası́ cien muestras de tiempo. La figura 5.2 muestra un boxplot de los
resultados y la tabla 5.2 sus estadı́sticas.
Observamos que un bloque te tamaño máximo tarda entre 1.1 y 1.7 segundos en enviarse de
media. Los bloques se generan cada minuto y en el peor de los casos un bloque ha tardado 13
segundos en llegar, seguramente por una congestión, estamos dentro de un intervalo de tiempo
que podemos asumir. Si se quisiera disminuir el tiempo de creación de un bloque este intervalo
no deberı́a ser menor a 15 segundos. Podemos ver que la máquina de California vuelve a ser la
que mejores resultados muestra.
Para medir el tiempo que tarda en enviarse el pozo de transacciones, he generado uno con
100mil transacciones y lo he enviado entre todas las parejas de máquinas 10 veces. He elegido
28
5.4. Rendimiento
transacciones de categorı́a 2 ya que estas son las más grandes debido a que contienen metada-
tos. La tabla 5.3 muestra los resultados obtenidos.
29
6. Conclusión
Hemos logrado introducir toda la información requerida por LISP en una transacción, MapSer-
vers y Locatos, también hemos ofreciendo la posibilidad de prestar direcciones a otros usuarios.
A su vez, las transacciones se verifican correctamente y se incluyen perfectamente en la chain.
A nivel local hemos obtenido resultados satisfactorios a falta de probarla a nivel global por
falta de tiempo. Han surgido bastantes problemas al querer implementar algo nuevo que con
esfuerzo hemos ido solucionando.
30
7. Trabajo futuro
7.1. Peer-to-peer
Como la cantidad de máquinas conectadas es muy pequeña, no ha requerido implementar una
tabla de hash distribuida (DHT) como hace Ethereum con Kademlia. Para poder probar la
blockchain con una cantidad mucho más grande de nodos, miles de ellos, se requerirı́a de la
programación de una de ellas. También harı́a la red mucho más robusta.
La red P2P como he comentado en la contextualización puede recibir ataques que tenemos que
minimizar, sobretodo si usamos un algoritmo tipo PoS. Serı́a interesante implementar algún
método de puntuación de nodos como el que utiliza la criptomoneda Nem para detectar nodos
maliciosos. De este modo podemos proteges a los nodos con más participación de ser excluidos
de la red.
Por otro lado se espera que se mejore el módulo del algoritmo de consenso lo que supondrá el
envió de muchos mensajes entre peers. Se tendrá que incluir nueva lógica para tratarlos.
7.2. Pruebas
A fecha de hoy, No hemos podido ejecutar todos los módulos de la blockchain en todas las
máquinas virtuales a nivel mundial por problemas de sincronización. En cambio, si que hemos
podido ejecutarlas en los servidores de la facultad.
Se generaron varias máquinas virtuales en el servidor del DAC y se inserto en la cadena la infor-
mación de las tablas BGP como prueba. La red de pruebas de LISP consultaba correctamente
los metadatos de las transacciones y respondı́a a los routers.
Hay que conseguir que funcione finalmente la blockchain a nivel mundial para poder obtener da-
tos de la ejecución y estudiar la viabilidad de esta almacenando la información de enrutamiento
de Internet. Necesitamos obtener mediciones de la latencia total del sistema.
31
Bibliografı́a
[1] Jordi Paillisse, Alberto Rodriguez-Natal, Vina Ermagan, Fabio Maino, and Al-
bert Cabellos-Aparicio. An analysis of the applicability of blockchain to secure
IP addresses allocation, delegation and bindings. https://tools.ietf.org/html/
draftpaillisse-sidrops-blockchain-00, 2017.
[5] Maria Apostolaki, Aviv Zohar, and Laurent Vanbever. Hijacking Bitcoin: Routing Attacks
on Cryptocurrencies. https://arxiv.org/pdf/1605.07524.pdf, 2016.
[6] Gavin Wood. Ethereum: A secure decentralised generalised transaction ledger. http:
//www.cryptopapers.net/papers/ethereum-yellowpaper.pdf, 2014.
32