informe de investigaciÓn mejoramiento de la seguridad de...

87
INFORME DE INVESTIGACIÓN Mejoramiento de la seguridad de los servicios del Estado : verificación de identidad e integridad de documentos, a través de Blockchain. UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS Director de Investigación: Ingeniero Roberto Ferro Equipo de Investigación: Ingeniero Yakkay Bernal Ingeniero Jorge Tapicha

Upload: phamkien

Post on 16-Oct-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

INFORME DE INVESTIGACIÓN Mejoramiento de la seguridad de los servicios del Estado : verificación de identidad e integridad de documentos, a través de Blockchain.

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

Director de Investigación: Ingeniero Roberto Ferro Equipo de Investigación:

Ingeniero Yakkay Bernal Ingeniero Jorge Tapicha

Contenido GENERALIDADES DE LA INVESTIGACIÓN ............................................................................................. 2

1 Contexto de la investigación ....................................................................................................... 2

1.1 Palabras clave ...................................................................................................................... 2

1.2 Entidad Beneficiaria ............................................................................................................ 2

1.3 Necesidad de la Entidad Beneficiaria .................................................................................. 2

1.4 Reto ..................................................................................................................................... 2

1.5 Resultados ........................................................................................................................... 3

2 Alcance de la investigación ......................................................................................................... 3

2.1 El proyecto de investigación se enfoca en soluciones para: ............................................... 3

2.2 Cambios esperados en la entidad beneficiaria ................................................................... 4

3 Información adicional .................................................................................................................. 4

3.1 Contacte al Grupo de Investigación Líder de la Universidad Distrital Francisco José de Caldas 4

RESUMEN DE INVESTIGACIÓN ............................................................................................................ 4

1. Descripción .............................................................................................................................. 4

2. Impacto ................................................................................................................................... 4

3. Objetivo de Investigación ........................................................................................................ 4

4. Tipo de Investigación............................................................................................................... 4

5. Resumen Metodológico .......................................................................................................... 4

6. Elementos conceptuales de la investigación .......................................................................... 5

6.1. Glosario ............................................................................................................................... 5

7. Principales logros .................................................................................................................... 5

8. Principales aprendizajes .......................................................................................................... 5

9. Sostenibilidad .......................................................................................................................... 6

9.1. Lo que sigue en el futuro ..................................................................................................... 6

10. Conclusión ........................................................................................................................... 6

PROCESO DE INVESTIGACIÓN ............................................................................................................. 6

1. Investigación en Blockchain ........................................................................................................ 6

2. Proceso de Investigación ............................................................................................................. 7

3. Desarrollo de la Investigación ..................................................................................................... 8

3.1. Red Blockchain .................................................................................................................... 8

3.2. Caso de uso de autenticidad de diplomas mediante blockchain ........................................ 9

3.3. Componentes para autenticidad de diplomas mediante blockchain ............................... 14

3.4. Plataforma blockchain escogida ........................................................................................ 17

3.5. Creación de bloques .......................................................................................................... 18

3.6. topología general de red ................................................................................................... 18

3.7. Implementación de nodo ethereum ................................................................................. 21

3.8. Instalación GETH ............................................................................................................... 22

3.9. Implementando un nodo privado en la blockchain .......................................................... 23

3.10. Despliegue de un nodo blockchain en la testnet de ethereum. ................................... 40

3.11. Despliegue de plataforma de desarrollo ....................................................................... 45

3.12. Pruebas de aplicación web con blockchain ................................................................... 47

3.13. Roles y autenticación en la blockchain ......................................................................... 53

3.14. Codificación y extración de información de la blockchain ............................................ 54

3.15. Extracción de la información y decodificación .............................................................. 56

3.16. Transferencia de bienes digitales .................................................................................. 57

Entrega del sistema .......................................................................................................................... 58

1. Pruebas de Pentesting............................................................................................................... 58

2. Aplicativo mediante micro servicios ......................................................................................... 70

3. Guía de uso ................................................................................................................................ 77

GENERALIDADES DE LA INVESTIGACIÓN

1 Contexto de la investigación

1.1 Palabras clave

Transacción; Bloque; Blockchain; Minería; Nodo; Contrato inteligente

1.2 Entidad Beneficiaria

Dirección de Gobierno en Línea - MINTIC

1.3 Necesidad de la Entidad Beneficiaria

Hallar un mecanismo que genere mayor seguridad a las personas y a las entidades cuando realizan actuaciones administrativas ante el Estado.

1.4 Reto

Aplicación potencial de Blockchain para mejorar los niveles de seguridad y confiabilidad en el proceso de verificación de la autenticidad de documentos y personas cuando realizan actuaciones administrativas ante el Estado.

1.5 Resultados

El resultado global de investigación es un prototipo que genere posibilidades de valor en los servicios ciudadanos digitales. De acuerdo con la metodología, se esperan los siguientes resultados: Resultado 1 Desplegar los nodos de la cadena de bloques y ejecutar comunicación sincrónica, asincrónica y descentralizada entre estos. Resultado 2 Entorno de desarrollo y lógico montado para empezar con los desarrollos específicos del proyecto. Resultado 3 Éxito en el desarrollo de todos los componentes de la aplicación blockchain y pruebas exitosas en el funcionamiento independiente de cada uno de estos. Resultado 4 Funcionamiento de toda la plataforma blockchain con todos los test de funcionamiento y pruebas documentadas. Resultado 5 Informe de pentesting, verificación y retroalimentación de las vulnerabilidades y falencias de seguridad en la plataforma, con el fin de corregir estas y presentar una plataforma sólida y segura frente a ataques informáticos. Resultado 6. Presentación del aplicativo mediante el uso de micro servicios en contenedores docker con las instrucciones para su despliegue y puesta en producción. Resultado 7: Presentación del proyecto piloto, entrega de documentación, entrega del aplicativo desarrollado e instrucciones de despliegue.

2 Alcance de la investigación

2.1 El proyecto de investigación se enfoca en soluciones para:

☒ a) Incrementar la eficiencia en los procesos internos

☒ b) Incrementar la calidad en los servicios prestados

☐ c) Mejorar la difusión y escalamiento (masificación) de servicios

☐ d) Elevar la satisfacción de usuarios

☐ e) Alcanzar objetivos de política

☐ f) Incrementar la capacidad de respuesta

☒ g) Elevar la transparencia y rendición de cuentas

☐ h) Hacer frente a desafíos sociales

☐ i) Reducir costos de operación

☒ j) Aumentar la cultura y las competencias en innovación digital de usuarios internos

☒ k) Aumentar la cultura y las competencias en innovación digital de usuarios externos

☐ l) Otro:

2.2 Cambios esperados en la entidad beneficiaria

De adoptarse el producto de esta investigación por la entidad beneficiaria, se espera poder ofrecer a

la ciudadanía la posibilidad de verificar la integridad de cualquier documento digital previamente

registrado en dicho producto, disminuir la falsificación en documentos, disminuir tiempos en los

trámites entre la entidad y la ciudadanía.

3 Información adicional

3.1 Contacte al Grupo de Investigación Líder de la Universidad Distrital Francisco José de

Caldas

Dirección: Carrera 8 No. 40b-62 sótano 3, Bogotá.

E-mail: [email protected] [email protected]

Sitio web: http://comunidad.udistrital.edu.co/grupolider/

RESUMEN DE INVESTIGACIÓN

1. Descripción

La investigación pretende comprender la funcionalidad de Blockchain bajo el contexto colombiano, particularmente en el sector gobierno. Se espera determinar la manera cómo Blockchain podría ser usada para verificar la autenticidad de documentos y personas cuando realizan actuaciones administrativas ante el Estado y obtener un modelo técnico probado a través de un piloto, donde se demuestre la utilidad de Blockchain para verificar la autenticidad de documentos y personas.

2. Impacto

Aportar en el aumento de los niveles de transparencia en todos los actos administrativos ante el Estado así como en el manejo de documentos digitales a otros niveles.

3. Objetivo de Investigación

Reducir a su mínima expresión el riesgo de falsificación de documentos y alteración de credenciales de usuario mediante la inserción de estos en una cadena de bloques (BlockChain) que será inalterable y mantendrá la integridad del documento.

4. Tipo de Investigación

Investigación aplicada

5. Resumen Metodológico

Para alcanzar el objetivo de investigación se propone metodológicamente:

1)ingeniería de software

2)experimentación y pruebas con la plataforma opensource

3)desarrollo de software

4)verificación y encapsulamiento del piloto aplicativo de cadena de bloques

6. Elementos conceptuales de la investigación

El principal elemento conceptual de esta investigación es la tecnología blockchain sin embargo entran en juego otros conceptos como la criptografía, la generación de resúmenes mediante la función Hash, la utilización de llaves privadas y llaves públicas, así como la programación en distintos lenguajes destacando el lenguaje Solidity usado para la generación de contratos inteligentes que se Ejecutan en la blockchain.

6.1. Glosario

Transacción. Es la transferencia de un valor representado digitalmente desde un propietario a otro, por ejemplo un diploma Bloque: Es un conjunto de transacciones verificadas y codificadas por todos los nodos de la red Blockchain: Es el almacenamiento inalterable de todas las transacciones de una red replicado en muchos nodos Minería: Es el proceso de construcción de bloques a partir del estado de la blockchain y las transacciones Nodo. Es uno de muchos puntos que construye bloques de la blockchain a partir de transacciones y estados Contrato inteligente. Son programas que se ejecutan sobre la blockchain y por ende todos los nodos los verifican.

7. Principales logros

1. Prototipo de la aplicación de validación de credenciales de usuario e integridad de un documento, como por ejemplo un acta de grado mediante el uso de Blockchain.

2. Código fuente de la aplicación. 3. Documentación de los procesos realizados en el desarrollo del reto de innovación. 4. Instructivo de despliegue de la aplicación a partir del código fuente entregado. 5. Artículo sobre el "Desarrollo de una aplicación Blockchain para los servicios ciudadanos

digitales"

8. Principales aprendizajes

1. Con la tecnología blockchain es posible dar a la ciudadanía la posibilidad de verificar cualquier documento relacionado a algún acto administrativo ante el estado o algún otro

tipo de archivo digital siempre y cuando haya sido previamente registrado en la plataforma blockchain

2. Con la tecnología blockchain se evita el riesgo de distribuir información falsificada entre las distintas copias de las bases de datos.

3. La implementación de este producto de investigación aumenta los niveles de transparencia ya que los administradores de sistemas de información no estarán en capacidad de alterar ningún tipo de información.

9. Sostenibilidad

Inicialmente el producto de investigación se mantendrá activo en los servidores de la universidad distrital, se espera que la entidad beneficiaria pueda apropiar los resultados de investigación para sus procesos internos; el sistema está diseñado para ser desplegado sobre servicios en la nube a bajo costo, o si se desea, en servidores locales sobre una máquina virtual de prestaciones estándar.

9.1. Lo que sigue en el futuro

Se espera poder integrar el producto de esta investigación con los sistemas de información que

posee la entidad beneficiaria a fin de incrementar los niveles de transparencia. Para tal fin no es

necesario tener acceso al contenido de dichos sistemas ya que la plataforma blockchain de este

producto de investigación fue diseñada de tal forma que almacena un resumen digital a partir del

cual no es posible conocer la información original, pero permite validar la integridad del contenido.

El producto de esta investigación puede ser extrapolado a casos como la integridad de documentos

que demuestran la propiedad sobre terrenos, así como evidencia digital en procesos judiciales.

10. Conclusión

La tecnología blockchain es muy eficiente para incrementar los niveles de seguridad y transparencia en el manejo de documentos digitales del Estado, a través de esta plataforma se evita la alteración de documentos a la vez que abre la posibilidad para que cualquier ciudadano verifique la integridad de cualquier archivo digital que haya sido previamente registrado en esta plataforma.

PROCESO DE INVESTIGACIÓN

1. Investigación en Blockchain

La tecnología de Blockchain actualmente es usada para garantizar la integridad de bienes digitales que tienen un valor transferible y que por ende puede cambiar de propietario. Es por esta razón que su aplicación más conocida es la transferencia de dinero digital, sin embargo no está limitado a este campo. En efecto el blockchain permite evitar el fraude digital en campos como la autenticación de documentos y la verificación de identidad. La investigación en Blockchain aquí presentada, pretende mejorar la seguridad de servicios del Estado que involucren el uso o generación de documentos y que requieran la verificación de identidad y autenticidad.

Se hace uso de la tecnología Blockchain para eliminar el riesgo de falsificación de documentos mediante la encriptación, codificación de documentos y marcas temporales asignadas a los mismos que serán almacenados en bases de datos distribuidas con el objetivo de evitar el fraude digital al detectar hasta el más mínimo cambio en los documentos. Adicionalmente se lleva un registro descentralizado de todas las operaciones realizadas por los ciudadanos ante el Estado colombiano respecto a los servicios que usen esta tecnología para construir un árbol de operaciones codificado con el cual se detecta de forma automática cualquier inconsistencia en los procedimientos llevados ante el Estado colombiano y se garantiza la disponibilidad de la información de forma confiable independientemente de los ataques que se realicen a las plataformas que conformarán este sistema.

2. Proceso de Investigación

El desarrollo de la investigación se da en 4 etapas:

Etapa 1. Consiste en levantar todos los requerimientos del proyecto y hacer la ingeniería de software

correspondiente al modelado de la plataforma a implementar:

Levantamiento de requerimientos.

Casos de uso.

Diagrama de actividades.

Diagrama de componentes.

Etapa 2. La segunda etapa de desarrollo del proyecto es la experimentación y pruebas con la

plataforma opensource escogida para la realización del proyecto de investigación la cual consta de:

Implementación de la plataforma opensource escogida para la realización del proyecto.

Despliegue de los nodos blockchain de pruebas en la plataforma.

Pruebas del funcionamiento de los nodos blockchain

Despliegue de la plataforma opensource o interfaz de programación nativa donde se van a

realizar los aplicativos de front-end y backend de la aplicación.

Pruebas de todo el entorno de desarrollo desplegado y verificación de test de correcto

funcionamiento de los nodos blockchain y aplicativos externos anidados a la plataforma.

Etapa 3. Desarrollo de software de todos los componentes necesarios para el proyecto en gestión,

estos contienen los aplicativos del cliente y de la lógica del sistema de blockchain que permite

generar un esquema inicial del proceso de autenticación de usuarios y de documentos.

Tal desarrollo contempla:

Diseño técnico de todos los protocolos técnicos a usar en la plataforma.

Desarrollo del proceso de autenticación de usuarios y sus respectivos roles en la plataforma.

Desarrollo del proceso de comunicación descentralizada entre los blockchain.

Desarrollo de los protocolos de codificación, decodificación y extracción de información en

los nodos blockchain

Desarrollo del proceso de transferencia de bienes digitales punto a punto.

Etapa 4. Esta etapa consta de:

integración, verificación y encapsulamiento de todos los módulos creados para el

funcionamiento del piloto aplicativo de la cadena de bloques en el proceso de autenticación

de identidades de usuario y documentos, los procesos a realizar son:

Integración de todos los módulos de la plataforma.

Prueba global de la plataforma creada y test de verificación de errores.

plataforma en micro servicios mediante el uso de docker.

Orquestación y creación de plantillas para el despliegue del contenedor docker relacionado

con un nodo blockchain.

Puesta en producción del piloto para la verificación exitosa de la ejecución del proyecto de

investigación.

3. Desarrollo de la Investigación

3.1. Red Blockchain

Requerimientos funcionales La aplicación debe implementar un caso de uso replicable a otro tipo de documentos y en particular al caso de seguridad y confiabilidad en el proceso de verificación de la autenticidad de documentos y personas cuando realizan actuaciones administrativas ante el Estado. En este caso debe permitir a cualquier usuario consultar un diploma y validar la integridad de este con la blockchain. Se debe crear un módulo de autenticación para la Universidad Distrital y los representantes de esta. Se va a tener un módulo de creación de representantes de la universidad Distrital. Estos van a ser limitados por la plataforma. La aplicación va a validar los permisos de subida de diplomas por medio de contratos inteligentes en la blockchain. Requerimientos no funcionales La aplicación debe garantizar la seguridad de los procedimientos realizados sobre la cadena de bloques de la aplicación. Algunos módulos de la aplicación deben poderse encapsular en microservicios y ser desplegados mediante el uso de contenedores de software docker. Se deben generar plantillas de orquestación para el despliegue de los microservicios. Se debe constar de un explorador de bloques donde se puedan validar las transacciones en la blockchain.

3.2. Caso de uso de autenticidad de diplomas mediante blockchain

En una primera instancia la dirección de la Universidad crea los funcionarios que van a tener autoridad para subir diplomas en la plataforma. Con el fin de verificar la identidad como institución se ejecuta un algoritmo de consenso en la red BlockChain en el que funcionarios certificadores dan el aval a funcionarios de creación de diplomas para realizar la generación de nuevos diplomas sobre la cadena de bloques en la que se almacenará el hash del mismo y opcionalmente la información con la que se genera como puede ser Titulo, Nombre, carrera u otros datos que conforman el documento. En una segunda instancia cualquier ciudadano con acceso a internet puede verificar la autenticidad de un diploma introduciendo el código del diploma y enviando el hash del mismo que se genera automáticamente en el navegador web. Dicho hash es comparado con el almacenado en la blockchain para detectar hasta el más mínimo cambio en el documento.

Ilustración 1 Diagrama de casos de uso

Actores:

Ciudadanos: Pueden consultar la validez de un diploma frente a la blockchain. Funcionarios Universidad Distrital: Se encargan de subir los diplomas a la blockchain. Dirección Universidad Distrital: Puede crear funcionarios de la Universidad en la plataforma Casos de uso Verificar integridad de diploma: Cualquier ciudadano puede verificar la integridad de un diploma en formato digital sin necesidad de autenticarse. El diploma puede haber sido obtenido del dueño del diploma o de la institución.

Crear funcionarios en la plataforma: El rol de Dirección Universidad Distrital es el encargado de realizar esta acción la cual requiere la acción Autenticarse en la plataforma que a su vez esta depende de Ingresar a la plataforma. Una vez el rol es autenticado podrá ejecutar la acción Crear funcionarios en la plataforma. La autenticación se hace mediante el uso de contraseña y el uso de llave privada generada por un nodo blockchain.

Subir diploma a la plataforma: El rol de funcionarios de la Universidad Distrital es el encargado de realizar esta acción la cual requiere la acción Autenticarse en la plataforma que a su vez esta depende de Ingresar a la plataforma. Una vez el rol de usuario es autenticado podrá ejecutar la acción Subir diploma a la plataforma la cual se puede ejecutar solo si la acción Obtener aval por consenso es afirmativa.

Obtener aval por consenso: Un grupo de funcionarios certificadores dan el aval a los funcionarios creadores de diplomas para generar dichos documentos. El proceso de dar el aval consiste en transferir un toquen y el conceso se alcanza cuando el funcionario creador reúne suficientes token para poder generar diplomas. Actividades para autenticidad de diplomas mediante blockchain A continuación se presentan varios diagramas que dan cuenta de lo presentado anteriormente.

Ilustración 2 Diagrama de actividades del ciudadano

Ilustración 3 Desglose actividades del ciudadano

Para realizar la búsqueda del hash el ciudadano proporciona el código del diploma y a continuación la blockchain comprueba la integridad del mismo.

Ilustración 4 Diagrama de actividades de funcionario

El funcionario creador de diplomas envía el hash para ser almacenado en la blockchain y opcionalmente puede enviar la información de los campos con los que se generó el documento como por ejemplo el Titulo, el nombre, cédula etc. Es de aclarar que para verificar la autenticidad del documento solo se requiere r el hash.

Ilustración 5 Desglose diagrama de actividades de Funcionario

Ilustración 6 Diagrama de actividades de dirección

Ilustración 7 Desglose actividades de dirección

3.3. Componentes para autenticidad de diplomas mediante blockchain

El sistema de autenticidad de diplomas mediante blockchain tiene dos componentes principales que son la aplicación del cliente o ciudadano que quiere verificar la autenticidad de un diploma y le red blockchain que realiza dicho proceso. Adicionalmente se incluye un componente de exploración de bloques que sirve para explorar el funcionamiento de la red. A continuación se exponen los diagramas de componentes con sus respectivos elementos internos.

Ilustración 8 Diagrama de componentes

El siguiente es el detalle de cada componente:

Ilustración 9 Componente de aplicación web del cliente

FrontEnd: Compone todas las vistas que va a poder ver el usuario desde el navegador.

Backend: En este componente se trabajan el manejo de variables y de acciones que genera el usuario, en el momento en que se van a generar las diferentes transacciones correspondientes de cada acción se envían al componente que va a conectar a la blockchain denominado web3js. Web3js: Es un API que permite al cliente conectarse con la red ethereum, entre los métodos que usa esta API podemos encontrar el eth que ejecuta métodos en la cadena de bloques, el net nos permite saber el estado de los nodos de la red y shh para realizar mensajería P2P. Json RPC: Protocolo que nos permite generar comunicaciones AJAX entre el cliente y el servidor, para este caso es la forma como web3js se comunicaría con los nodos ethereum.

Ilustración 10 Diagrama de componente Red Ethereum

Nodo EVM: Ethereum Virtual Machine como su nombre lo indica es una máquina virtual que se encarga de desplegar un nodo en la red etheruem con sus diferentes componentes: Contratos inteligentes: Son programas informáticos que facilitan, aseguran, ejecutan y hacen cumplir un determinado acuerdo entre diferentes partes de una red, por ejemplo en esta aplicación es necesaria la autorización de los funcionarios para poder empezar a subir diplomas. Los contratos inteligentes se programan usando Solidity un lenguaje de programación orientado a contratos creado por ethereum.

GETH: Es una interfaz de línea de comandos que se usa para desplegar y ejecutar diferentes métodos sobre un nodo Ethereum.

Blockchain: Es la cadena de bloques. Representa la base de datos distribuida que se replica en cada nodo.

Ilustración 11 Diagrama de componente Explorador de bloques

Es la herramienta a usar para poder consultar las operaciones y eventos en la cadena de bloques. Va a ser usada a nivel de desarrollo para poder comprobar que las transacciones se están ejecutando con éxito y almacenando en la cadena de bloques.

3.4. Plataforma blockchain escogida

Para le elección de la plataforma de Blockcahin se limitó las posibilidades a las que tiene licencia de software libre que permite trabajar directamente sobre el código fuente, tienen amplia documentación y se encuentran en estado de desarrollo estable. A partir de esta selección se obtuvieron las candidatas de nombre Hyperledger Fabric [1] y Ethereum [2].

La distribución de Hyperledger Fabric cumple con los requisitos de selección[4] al ser de código abierto, estar en etapa de desarrollo estable y contar con suficiente documentación. Está enfocada a redes privadas con control de acceso para los nodos, es decir que no cualquier persona puede conectarse a esta red.

La distribución Ethereum cumple con los requisitos de selección al ser de código abierto, estar en etapa de desarrollo estable y contar con suficiente documentación[3][5]. A diferencia de Hyperledger Fabric, Ethereum no solo está en estado estable sino que además está en producción en red global, permite operar en tres tipos de red los cuales son Live, TestNet y Private cuya diferencia principal es el público al cual permiten el acceso.

La plataforma escogida es Ethereum ya que tiene la opción de trabajar tanto en una red privada como en Live y red de pruebas usando miles de nodos que hacen parte de la red Ethereum a nivel global. Adicionalmente Ethereum cuenta con mayor tiempo de creación en el cual se han corregido fallos, se han creado aplicaciones en producción y se cuenta con mayor cantidad de documentación en el desarrollo de aplicaciones a nivel industrial. Tipos de red de la plataforma escogida ethereum Ethereum permite operar tres modos distintos de red. La primera es Live, en la cual se usa la infraestructura de miles de nodos públicos conectados a nivel global y en la cual se cobran pequeñas cuotas por el uso de la capacidad de procesamiento y almacenamiento mediante el uso de la criptomoneda Ether. En esta red se hacen transferencias de dinero en criptomoneda con costo real y se ejecutan programas sobre la infraestructura de la red pública.

El segundo tipo de red Ethereum es la TestNet que básicamente es una infraestructura pública que opera de forma idéntica a la red Live pero sin costo real por la ejecución de programas y el almacenamiento. En esta red las operaciones tienen costo en Ether sin valor comercial, es decir que la operación es gratuita y por ende susceptible a ataques de degradación de servicio por bucles infinitos. El tercer tipo de implementación de Ethereum es la Private Network que generalmente es usada para desarrollo o para redes privadas con restricción de acceso. En este caso toda la infraestructura debe ser provista por el desarrollador u operador. La ejecución no tiene costo real en términos de criptomonedas pero a cambio se debe contar con el hardware para ejecutar todos los nodos que se requieran.

3.5. Creación de bloques

Los bloques son conjuntos de transacciones válidas u operaciones exitosas en las cuales se transfiere un valor digital desde una cuenta a otra. El primer paso para la creación de bloques es validar las transacciones, proceso que se lleva a cabo en los nodos. Una vez se han validado suficientes transacciones se agrupan en un bloque y el nodo procede a ejecutar la prueba de trabajo PoW que consiste en obtener un Nonce o palabra clave tal que al concatenarla con el bloque y aplicar la función hash se obtenga un número determinado de ceros al inicio del hash resultante. De esta manera el primer nodo en obtener dicha palabra difunden su bloque a los demás nodos que procede a validarlo.

3.6. topología general de red

A continuación se presenta la topología general de la red blockchain la cual tiene dos componentes principales: los nodos Ethereum y las Aplicaciones descentralizadas DAP, por sus siglas en inglés. Las aplicaciones descentralizadas permiten realizar consultas a la cadena de bloques, enviar transacciones y contratos inteligentes. El término enviar transacciones hace referencia a la

transferencia de algún bien digital como puede ser una criptomoneda mientras que los contratos inteligentes hacen referencia a programas que interactúan con la cadena de bloques. Los nodos Ethereum se encargan de 1. Desplegar los contratos, 2. Ejecutar los contratos, 3. Minería, 4. Validación. Desplegar contratos: Los nodos reciben los contratos inteligentes desde aplicaciones descentralizadas o desde otros nodos y los despliegan para su ejecución cuando sean requeridos. Ejecutar los contratos: Los nodos llevan a cabo los contratos inteligentes cuando estos son requeridos Minería: Los nodos llevan a cabo el proceso de ordenamiento de todas las transacciones en un grupo denominado bloque para ser adjuntado a una cadena de bloques. Compiten para que su propio bloque de transacciones sea incluido en la cadena mediante un algoritmo de prueba de trabajo PoW por sus siglas en inglés que consisten en obtener una palabra clave por prueba y error para descifrar un código obtenido a partir de su bloque. Validación: Los nodos validan las transacciones enviadas desde aplicaciones descentralizadas o desde otros nodos.

Ilustración 12 Esquema general de red

Los nodos Ethereum se comunican entre sí mediante protocolo DEVp2p a través del puerto 30303 y con las aplicaciones descentralizadas a través del puerto 8545 mediante protocolo JSON - RPC. Adicionalmente la comunicación vía web con los nodos se hace mediante el usa de la API de JavaScript. Por su parte los nodos almacenan toda la información que requieran en base de datos LevelDB la cual maneja la estructura Llave - valor e implementa las funciones de consulta, adición y borrado.

Ilustración 13 protocolos de comunicación en el esquema general de red

Comandos de configuracion del nodo Los nodos pueden recibir comandos[7] de configuración de manera local con la instrucción “geth” seguida de algunas opciones y la instrucción como tal. Adicionalmente se pueden enviar comandos de manera remota encapsulados en protocolo JSON. Las opciones básicas más usadas son: --logging “valor de 0 a 6” Es la cantidad de información de logs que presenta --testnet configura el nodo para conectarse a la red de pruebas --dev configura el nodo para trabajar en red privada en modo de desarrollo --networkid establece el id de la red a la que se conecta el nodo --datadir establece el directorio de almacenamiento del nodo --keystore configura el almacenamiento de las llaves privadas --fast configura el nodo para sincronización rápida con los demás nodos --preload “archivos” carga un archivos JavaScript para poder usar sus funciones --jspath “dirección de archivo” ruta para guardar un archivo javascript --exec “declaración javascript” ejecuta una función javascript --mine habilita la minería en el nodo --minethreads configura la cantidad de procesos o hilos de minería --etherbase configura la cuenta donde se almacena la recompensa por mineria --extradata “información” Añade alguna información al bloque minado

Los comandos básicos más utilizados son: console Inicia una terminal interactiva de comandos javascript attach “ruta”Inicia una terminal comandos javascript indicando la ubicación del nodo account new Crea una nueva cuenta

account list lista las cuentas account update “Cuenta”Permite actualizar la contraseña de una cuenta Configuracion del primer bloque La primera vez que se inicia un nodo de desarrollo se deben inicializar varios parámetros y generar el primer bloque o “Bloque génesis” mediante un archivo de configuración en formato JSON “genesis.json cuya estructura es la siguiente: Config etiqueta de configuración de la cadena de bloques chainID Id de la cadena para protección contra ataque de réplica o suplantación homesteadBlock la distribución de Ethereum que usa el nodo eip155Block contribuciones y mejoras de la distribución de Ethereum eip158Block contribuciones y mejoras de la distribución de Ethereum difficulty la dificultad del proceso de minería gaslimit límite de gas,una unidad de medida de la criptomoneda Ether, por bloque alloc direcciones iniciales de la blockchain y parámetros de ethers con los que pueden iniciar estas cuentas.

3.7. Implementación de nodo ethereum

Ilustración 14 Componentes de un nodo

El objeto de estas pruebas es mostrar la implementación de un nodo privado blockchain tipo Ethereum y ejecutar diferentes funciones sobre este, que van desde actividades de minado, creación de cuentas, ejecución y consulta de transacciones. Se va a instalar el cliente en los servidores de la red RITA, los recursos a utilizar para estas primeras pruebas de implementación son una plataforma tecnológica con las siguientes características: Sistema Operativo: Ubuntu 16.04 Núcleos de procesamiento: 4 Memoria RAM: 8196

3.8. Instalación GETH

Lo primero que se debe hacer para instalar GETH (go-etheruem), es instalar golang, para eso descargamos el source de go y exportamos las variables de entorno necesarias para su instalación.

Ilustración 15 Descargando el source de golang

Ilustración 16 Descomprimiendo el fichero

Ilustración 17 Moviendo el fichero y exportando las variables de entorno

Ilustración 18 Comprobando la versión del go

Después de instalar la versión del golang, se procede a descargar el go-ethereum, para ello se va a buscar una versión estable de la página del desarrollador[6].

Ilustración 19 Página de descarga del GETH

Para esta instalación se descargó el source y se puso sobre el directorio /home/servidores/src/github.com/ethereum/go-ethereum después de esto se ejecutan los siguientes comandos:

Ilustración 20 Comandos para instalación del source de geth

Para comprobar que quedó instalado correctamente escribimos el comando geth version:

Ilustración 21 versión instalación geth

3.9. Implementando un nodo privado en la blockchain

Lo primero que se va a realizar es crear una cuenta privada en la blockchain:

Ilustración 22 Creación de cuenta en la blockchain

Las cuentas quedan alojadas en el directorio .Ethereum/keystore.

Ilustración 23 Revisión de cuenta creada.

Si agregamos otra cuenta aparece ahí mismo:

Ilustración 24 Creación segunda cuenta.

Ilustración 25 Revisión de las dos cuentas creadas. Hasta el momento estamos construyendo las cuentas para la blockchain privada, al ser una blockchain privada, no tiene bloques por lo que es necesario crear el bloque inicial de la cadena de bloques, este se configura mediante un JSON, se muestra a continuación: { "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "200000000", "gasLimit": "2100000", "alloc": { "a37ac0f75327eedaf69aeba51d04356c1c14b5e3": { "balance": "300000" }, "ddca37fa52c80baabccd677c7d14a067452bd244": { "balance": "400000" } } }

Este crea en un archivo .json al que vamos a denominar bloquegenerico.json, una vez creado lo inicializamos con el siguiente comando:

Ilustración 26 Inicialización cadena de bloques Una vez se inicializa el bloque, tienen lugar los directorios chaindata y lightchaindata en el directorio .ethereum/geth. El paso a seguir es dar inicio a nuestro nodo de blockchain privado activando mineria de datos, sin descubirmiento de nodos, con un maximo de nodos adicionales de 0, con id de red etheruem de 13, activación del protocolo JSON-RPC y permiento protocolos JSON-RPC desde cualquier dominio.El cual lo hacemos mediante el comando: geth --mine --nodiscover --maxpeers 0 --networkid 13 --rpc --rpccorsdomain "*"

Ilustración 27 Lanzamiento red ethereum privada de un nodo.

Una vez se lanza la blockchain, antes de empezar el proceso de minería de bloques es necesario generar los DAG, el conjunto necesario de datos para que la blockchain ejecute son algoritmos de minado, llamados en ethereum pruebas de trabajo.

Ilustración 28 Generación de los DAG

Ilustración 29 Inicio minería de datos ethereum

Como podemos observar en la Fig. . hemos inicializado la cadena de bloques para que procese cadena de bloques y escuche llamadas RPC, podemos probar el protocolo JSON-RPC mediante el envío de json[8], como mostramos a continuación: curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' http://localhost:8545 Este json nos devuelve el número de peers al que estamos conectados: 0.

Ilustración 30 Respuesta del json ante el metodo net_peerCount.

Ahora procedemos a sacar un listado de las cuentas anidadas a nuestra blockchain privada: geth account list Este comando nos arroja la listas de las cuentas propias creadas en nuestra blockchain y donde están almacenadas dichas llaves.

Ilustración 31 Lista de las cuentas creadas en la blockchain privada

Un método que podemos ejecutar mediante el protocolo JSON-RPC es verificar el balance_eth de cada cuenta, el cual arroja el valor en wei la unidad más pequeña de un ether,según el json de inicialización de bloque este es 300000 para la cuenta a37ac0f75327eedaf69aeba51d04356c1c14b5e3 y 400000 para la cuenta ddca37fa52c80baabccd677c7d14a067452bd244. Se puede verificar el valor actual mediante JSON-RPC: curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xcuenta, "latest"],"id":1}' http://localhost:8545 Para la cuenta #0:

Ilustración 32 Lista de las cuentas creadas en la blockchain privada

Para la cuenta #1:

Ilustración 33 Balance de ether cuenta 1.

Los valores obtenidos son entregados en hexadecimal, al convertirlos a decimal obtenemos que para la cuenta #1 el valor es 400000, el inicial, mientras que para la cuenta #0 el valor actual es 0xd02ab486cee093e0 el cual en decimal representa 1.5e19 wei convirtiéndolos a ether da un total de 15 ethers. por defecto la minería de bloques se está asignando a la cuenta #0, se muestra una imagen del proceso de minado.

Ilustración 34 Proceso de minado actual.

Cuando se llegue al mining work number=5, se consultará el valor de wei de la cuenta # 0. Se esperaron aproximadamente 50 minutos, cuando paso al mining work number=6, el valor de la cuenta # 0 en

Ilustración 35 Valor de wei en mining work number=5

Al convertir ese valor tenemos 20 ethers[9].

Ilustración 36 Proceso de minado actual.

Ahora vamos a proceder a probar la consola javascript de GETH esta la podemos lanzar mediante el comando: geth --verbosity "0" --nodiscover --maxpeers 0 --networkid 13 --rpc --rpccorsdomain "*" --fast console Se quita el comando --mine para dejar de hacer procesos de minado de bloques, agregamos un --verbosity “0” para no mostrar logs de arranque, y se pone el comando console para ingresar a la consola en modo interactivo.

Ilustración 37 Pruebas modo interactivo JavaScript API.

Como se observa en la Fig. ., podemos usar el API de Javascript de forma interactiva, aprovechando las ventajas de web3 se van a ejecutar algunos comandos para transferir ether de una cuenta á otra. Para ejecutar transacciones la cuenta que hace la transacción debe ser desbloqueada, para esto al modo interactivo se le añade --unlock “0”: geth --verbosity "0" --networkid 13 console --unlock "0"

Ilustración 38 Modo interactivo con cuenta 0 desbloqueada.

Se hace la revisión correspondiente de ethers de cada una de las cuentas:

Ilustración 39 Revisión de ethers de las cuentas.

Se van a transferir 4 ethers de la cuenta 0 a la cuenta 1, por lo tanto los comandos son los siguientes:

Ilustración 40 Comandos proceso envío de ethers de un punto a otro.

En la ilustración anterior se genera el proceso de seleccionar el monto a enviar, quién envía la transacción, quien recibe la transacción, el método correspondiente al envío de la transacción que devuelve un identificador de transacción, el cual se puede consultar con el método eth.getTransaction(address). Después de ejecutar la acción podemos comprobar los ethers de la cuenta a la cual se hizo la transferencia:

Ilustración 41 Ethers cuenta a la cual se hizo la transferencia.

Como se observa en la Fig. . la cuenta no ha cambiado, esto es porque al ser un nodo privado este mismo nodo es el encargado de minar las transacciones, por lo tanto es importante poner el nodo a minar, para que verifique la transacción, valide la transferencia y mine el bloque.

Ilustración 42 Proceso de minería blockchain privada.

Podemos comprobar si se verificó la transferencia mediante el protocolo JSON-RPC o por la consola de forma interactiva.

Ilustración 43 Comprobación cuenta mediante JSON-RPC.

Ilustración 44 Comprobación cuenta mediante la consola JavaScript API de geth.

La cuenta a la que se le hizo transferencia de 4 ethers ha sido exitosa, antes tenía 0.1 ether y ahora tiene 4.1. Despliegue de nodos y comunicación Una vez se ha configurado un nodo se procede a desplegar todos los nodos que sean necesarios y establecer una red Blockchain. Los nodos pueden hacer parte tanto de una red pública blockchain ya sea de costo real o de pruebas, sin restricción de acceso, como de una red privada ideal para desarrollo y esquemas de red exclusivo para miembros autorizados. Esquema De Red Privada ETHEREUM

El esquema de red privada es ideal para el desarrollo de la aplicación y el sistema blockchain ya que ofrece un entorno controlado para experimentación en el que no hay acceso público a la cadena de bloques y los nodos están restringidos a máquinas.

Ilustración 45 Esquema de red privada Ethereum reto 2

Despliegue y sincronización de una red blockchain privada con 3 nodos

En esta sección se va a desplegar una red blockchain con 3 nodos, estos van a ser agregados de forma manual y de forma automática, con el propósito de entender la dinámica a la hora de trabajar con redes privadas en ethereum. La siguiente tabla muestra los nodos que van a ser desplegados en la red blockchain privada:

Tabla 1 Nodos red Blockchain reto 2

Nombre nodo Dirección nodo Ubicación nodo

nodo1 172.16.5.170 RITA

nodo2 172.16.5.171 RITA

nodo3 172.16.51.176 CECAD

EL proceso para la creación de los nodos se describe a continuación: Crear una cuenta inicial en el nodo 1:

geth --datadir "./nodo1" account new

Ilustración 46 Cuenta creadal nodo 1.

se va iniciar la cadena de bloques por medio de un genesis.json: este json se inicializa en cada uno de los nodos de la cadena. El archivo genesis.json tendrá los siguientes datos:

Ilustración 47 Archivo genesis.json

En estas pruebas se le asigna un id a la cadena de bloques desde el archivo genesis.json se observa que este es “8124”. para inicializar cada uno de los nodos se ejecutan los siguientes comandos en cada uno de estos: geth --datadir "./nodo1" init genesis.json geth --datadir "./nodo2" init genesis.json geth --datadir "./nodo3" init genesis.json Agregar los nodos a la red privada de forma manual.

EL proceso siguiente a la inicializacion de los nodos , es desplegar estos, para ello se ejecutan los siguientes comandos en cada uno de los nodos: geth --networkid 8124 --datadir "./nodo1" --nodiscover --ipcdisable console geth --networkid 8124 --datadir "./nodo1" --nodiscover --ipcdisable console geth --networkid 8124 --datadir "./nodo3" --nodiscover - --ipcdisable console De esta forma se despliega la red privada blockchain con id de red 8124 y en modo consola para permitir la ejecución de comandos.

Ilustración 48 Despliegue red ethereum privada nodo 1.

Ilustración 49 Despliegue red ethereum privada nodo 2.

Ilustración 50 Despliegue red ethereum privada nodo 3.

Para verificar si cada uno de los nodos están conectados a otros nodos se usa el comando admin.peer y para verificar el número de nodos con los que está conectado cada nodo se usa el comando admin.peer.lenght Como aún no se han conectado los nodos entre ellos las respuestas a estos dos comandos son: admin.peer [] y admin.peer.lenght 0. Para poder agregar un nodo es necesario conocer el identificador de cada nodo, este se puede conocer mediante el comando admin.nodeInfo.enode ejecutandolo en cada nodo, los identificadores de los nodos desplegados se muestran a continuación:

Tabla 2 Identificador de cada nodo

Nombre de nodo

identificador de nodo

nodo1 enode://5a74a92e6cc5e0c9758519e1429e0777e22561565ed87f3ccc7806f7099856c6b65b71071aac3bb385afa2e5a0a88221bc916eb063045dd752ef2d32b0b70776@172.16.5.170:30303?discport=0"

nodo2 enode://2458a34219d1cf0a9387c6d0ece6c6e5f77f859fa5567f9bf4027a9b9a272a89ed13a3df3b599647a66f609ec2ca13bbeab3917ed1e7bdc52077dda022fe5c91@172.16.5.171:30303?discport=0"

nodo3 enode://4d15f181fe4b508459f2c05f9eadb4458a8711fdcc8b6f4441f3160585391f103a5c6789ef528d299b4dd5f5a193a4aa7521230763d67a3c4be61c9d89df79ae@172.16.5.172:30303?discport=0"

para agregar los nodos se usa el comando admin.addPerr(“identificadordenodo”): Como es un protocolo peer to peer se deben agregar uno a uno en cualquier combinación, para esta prueba se agregaron de la siguiente forma: nodo1 agrega nodo2, nodo3 agrega nodo2, nodo3 agrega nodo1.

al revisar la cantidad de los nodos con los que estos están conectados se muestra que cada nodo está conectado con 2 nodos, con admin.peers podemos ver la información de los nodos con los que está conectado cada nodo respectivamente.

Ilustración 51 admin.peers nodo1

Ilustración 52 admin.peers nodo2

Ilustración 53 admin.peers nodo3

De esta forma se agregan los nodos manualmente, el inconveniente de este método es que cada vez que un nodo se desconecta y se conecte, es necesario volver a agregarlo. este método se puede

realizar de forma automática si se crea un archivo static-nodes.json con los identificadores de cada nodo en el directorio geth, de esta manera al desconectar y conectar un nodo este va agregar los nodos que están listados en el archivo.

Ilustración 54 Ejemplo archivo static-nodes.json

La fig . describe cómo va compuesto un archivo static-nodes.json, para este caso es el archivo del nodo 2 que está agregando los nodos 3 y 1. Se crea el archivo correspondiente en cada nodo, y al ejecutar los nodos se van agregar los unos a los otros automáticamente. Se revisa el estado de ethers de la cuenta 1 desde cualquier nodo y se va a verificar que la consulta se realice exitosamente desde cualquier nodo.

Ilustración 55 Consulta cuenta nodo 1 consultada desde el nodo 2.

Como ya se tiene la red de 3 nodos implementada, para validar pruebas en estas se va a crear una cuenta en el nodo 2 a la cual se le va a transferir 20 ethers, y otra cuenta en el nodo 3 que va a minar la transacción. los pasos a realizar son los siguientes: Crear las cuentas en el nodo 2 y nodo 3, y revisar sus respectivos balances:

Tabla 3 Cuentas en cada nodo

Cuentas Address Ethers

Nodo 1 "0x2c54dbf773158007d2c58a2eca64e5855d1eb640" 100

Nodo 2 “0x3de386023c6e542d54523b57e74fd52d2c1eb522” 0

Nodo 3 “0x7f52059e5b18c2fb9d1e91b47c6602613a793d86” 0

Realizar una transacción de 20 ethers de la cuenta 1 a la cuenta 2.

Ilustración 56 Comandos para realizar la transacción.

En la Fig. se puede observar el comando txpool.status el cual muestra el estado de las transacciones, este es pendiente cuando la validación de la transacción está pendiente a ser minada y validada, y queued que está en cola de espera. también podemos ver el valor que toma la transacción: addr= "0x1219a5b21e8c9a48ed935b3ae38af83bcf4fe989eb0228a8e59f9505c35ecbe9" El valor de la transacción sirve para después consultar datos de dicha transacción en la cadena de bloques. Como no hay ningún nodo minando la transacción no se va a hacer efectiva la transacción, se pone a minar el nodo 3 para que la transacción sea efectiva. Una vez se hace efectiva se pueden comprobar los valores en las cuenta del nodo 1 y la cuenta del nodo 2, estos son:

Tabla 4 Balance de cada cuenta

Cuentas Address Ethers

Nodo 1 "0x2c54dbf773158007d2c58a2eca64e5855d1eb640" 79.999622

Nodo 2 “0x3de386023c6e542d54523b57e74fd52d2c1eb522” 20

Como se observa en la tabla . el nodo 2 ha quedado con 20 ethers y el nodo 1 con 79.9962, no son 80 ethers para este nodo ya que hay una pequeña recompensa para el nodo que mino esa transacción. para ver mejor esto se va a consultar la transacción enviada.

Ilustración 57 Consulta de la transacción de 20 ethers.

Como se observa en la Fig. . aparecen dos cantidades asociadas a las variables gas y gasprice, el producto de estas es una cantidad representada en wei equivalente a la recompensa que recibe el nodo que mina la transacción.

3.10. Despliegue de un nodo blockchain en la testnet de ethereum.

En esta sección se desplagará un nodo Ethereum conectado a la red pública de pruebas o Tesnet con el fin de validar la soncronización en este tipo de red.

Ilustración 58 Conexión entre nodos en una Testnet

Esta primera parte de las pruebas realizadas muestra el despliegue de un nodo de ethereum en la testnet , con el objeto de sincronizar este con otros nodos de la red de prueba a la cual se está conectando. Proceso: Se crea una cuenta y se escoge el directorio de la red a la cual se va a conectar. geth --testnet --datadir testnet1 account new

Ilustración 59 Creación cuenta de la testnet.

Se Despliega el nodo a la red ethereum testnet.

geth --testnet --datadir testnet1

Ilustración 60 Despliegue del nodo en la testnet.

Una vez el nodo es lanzado se comienza a sincronizar y comunicar el nodo mediante el protocolo dev2peer para empezar a descargar los bloques que representan el estado actual de la cadena de la red testnet.

Ilustración 61 Proceso de generación y sincronización de bloques

Ilustración 62 Proceso de descarga de bloques en el directorio chaindata.

Se obtiene información de la red etheruem testnet a la que el nodo se esta conectando. Mediante el protocolo ipc se puede establecer conexión a la consola para ejecutar comandos que brinden información sobre la red y los procesos de la cadena de bloques.

Ilustración 63 Conexión a la terminal remota del nodo

Para ver la información del nodo lanzado se ejecuta el comando admin.nodeInfo.

Ilustración 64 Información del nodo lanzado

Una vez el nodo está conectado a la red testnet se puede se va obtener información Una vez estamos conectados a la terminal del nodo podemos ver diferente información de la red ethereum a la que estamos conectados, para esta caso se verificarán el número de peers a los que el nodo está conectado, y la información de estos nodos:

Para saber el número de peers con los cuales se ha establecido informacion se usa el comando admin.peers.length.

Ilustración 65 Números de peers con los que se establece conexión.

En la Fig. Podemos observar que se ejecutó múltiples veces el comando admin.peers.length, Esto se debe a que al ser una red de prueba brindada por ethereum, establecer conexión con todos los nodos de la red se vuelve complejo y que estos nodos está en constante desconexión. Cuando el valor de nodos conectados dio 6, se ejecuta el comando admin.peers para revisar información relacionada con los nodos a los que se conecta el nodo desplegado.

Ilustración 66 Información de conexión con los nodos de la red.

Se resume a continuación la información de las direcciones ip con los nodos con el fin de realizar el diagrama de conexión de la testnet para cuando se establece una conexión con 6 nodos.

Tabla 5 Nodos de sincronización conectados a la Testnet

Dirección Ip nodos locación geográfica nodo

188.116.39.23 Polonia

54.237.222.235 Estados Unidos

51.15.35.2 Francia

73.139.134.150 Estados unidos

46.101.132.175 Alemania

51.15.67.119 Francia

3.11. Despliegue de plataforma de desarrollo

BACKEND El backend es realizado en node js y adicionalmente se usan otros componentes y librerías, para preparar el entorno de desarrollo estas son: ● express JS: Es un framework que nos permite gestionar las aplicaciones web en node js y reestructurarse en MVC ( Modelo vista controlador). ● Nodemon JS: Se usa para mejorar los tiempos de desarrollo de la aplicación, de manera que si se hace un cambio en el servicio web en desarrollo este se reinicia automáticamente. ● Pm2 js: Se usa una vez la aplicación está en producción para que esta inicie de forma automática. Adicionalmente al entorno de desarrollo de backend implementado, se necesita de unas librerías específicas para conectarnos a la blockchain, estas son: ● Web3.0 js: Es la librería brindada por JavaScript para comunicarse con la blockchain usando el protocolo JSON-RPC

FRONTEND Para el diseño y la estética de la página web se van a usar los siguientes componentes: ● HTML5: Es el lenguaje usado para estructurar y presentar el contenido en la web. ● Boostrap: Es un Framework desarrollado y liberado por Twitter que tiene como objetivo facilitar el diseño web y presentar contenidos más dinámicos. ● CSS: Son las hojas de estilo que le brindan mayor presentación al diseño web. Los componentes que van a interactuar con la lógica del cliente y la comunicación con el servidor son los siguientes:

● Javascript: lenguaje de programación que permite crear acciones en el FrontEnd de la aplicación para que interactúan los usuarios. ● JQuery: Librería de javascript que permite interactuar de una manera más sencilla interacciones entre el navegador web y el servidor web. ● AJAX: Es una extensión de Javascript de forma asyncrona que nos permite intercambiar informacion con el servidor sin necesidad de refrescar la pagina y en tiempo real. Las aplicaciones centralizadas usan el FrontEnd para servir la parte con la que va a interactuar el cliente, y el backend para la logica del servidor, en la parte del backend los datos de los usuarios o bienes que va a manejar cualquier aplicacion se almacenan en la base de datos, estas aplicaciones pueden usar diferentes protocolos tecnicos para mantener la seguridad de la aplicacion, estos van desde planes de contigencia, replicacion de bases de datos, balanceadores de carga.. ETC. todo con el fin de garantizar la seguridad de la aplicacion y la alta disponibilidad del servicio, pero si se cambia un dato en estos modelos de replicación, este dato cambiado se va replicar en todas las bases de datos, sin que quede rastro del dato anterior, otro problema del modelo centralizado de aplicaciones es que las personas que brindan el servicio podrian llegar a manipular los datos para su propia conveniencia. A diferencia del blockchain que es inalterable, que esta sea inalterable no significa que los datos no se puedan borrar ni cambiar, sin embargo debido a la naturalez del protocolo, esta hace que si se borra o cambia un dato esto genere una transaccion de que el dato fue cambiado, por lo tanto queda la huella de que paso con este dato de forma descentralizada y distruibuida en todos los nodos que tenga esa cadena de bloques. Por la razon anterior para el desarrollo de esta aplicación no se van a manejar bases de datos locales, si no que toda la informacion y logica de almacenamiento y diferentes acciones con los datos se va a hacer en la blockchain y esto es posible gracias al uso de contratos inteligentes, para el desarrollo de estos es necesario los siguientes componentes: ● Solc: Se usa para compilar los contratos inteligentes y poderlos transaccionar en la blockchain mediante los dos formatos requeridos para pasar un contrato a esta .bin y .abi.json. ● Solidity: Es un lenguaje de alto nivel orientado a contratos inteligentes y basado en Javascript, es de proposito especifico para usar en las redes blockchian etheruem. ● Remix: Plataforma web donde se pueden simular las acciones de los contratos inteligentes antes de que estos se compilen y lanzen a la blockchain.

Ilustración 67 Plataforma de desarrollo blockchain reto2.

3.12. Pruebas de aplicación web con blockchain

Para las pruebas del entorno de desarrollo y verificar el correcto funcionamiento de la blockchain, se realiza un ejemplo de cambios de cédulas, en el cual se puede consultar la cédula y así mismo se puede cambiar esta. Cada vez que se realiza un cambio de cédula este queda registrado en la blockchain. Los procesos creados para la ejecución del ejemplo son los siguientes: Creación del contrato inteligente: El contrato inteligente va a tener todas las funciones respectivas al cambio de cédula y consulta de la misma, estos contratos son creados en la blockchain, y se ejecutan desde esta, mediante el uso de web3 js se comunica las aplicaciones con las funciones creadas en los contratos inteligentes.

Ilustración 68 Contrato inteligente cambio de cédula.

Para el contrato de cambio de cédula diseñado, se pone la condición de seguridad que solo la dirección que desplegó el contrato pueda ejecutarlo, con eso garantizamos que no puedan interactuar con este desde aplicaciones ajenas u otras cuentas. El siguiente paso con respecto a los contratos inteligentes es desplegarlo, esto se hace mediante un script en Node Js que usa la librería web3 js. Mediante el uso de web3 js se despliega el contrato inteligente, para esto se requiere compilarlo en formato .json.abi y binario mediante el uso de solc. Se hace con los siguientes comandos: solc contratointeligente.sol --bin contratointeligente.bin ( Formato binario del contrato) solc contratointeligente.sol --abi contratointeligente.abi.json (Formato .abi.json del contrato)

Ilustración 4 Salida del despliegue del contrato, transacción del contrato y dirección del contrato.

Ilustración 69 Despliegue del contrato usando web3 js.

Ilustración 5 Información de la transacción minada.

Creación del FrontEnd y Backend de la aplicación: Se diseñan las plantillas del front end y con estas la parte de la lógica de la aplicación, Backend, que es la encargada de ejecutar las funciones de los contratos inteligentes con la blockchain. Para el diseño del FrontEnd se crearon dos plantillas de experimentación previas al desarrollo final, una en https://peing.udistrital.edu.co/demo y otra en https://peing.udistrital.edu.co/cedulatrasparente,

Ilustración 70 Aplicación de experimentación en https://peing.udistrital.edu.co/demo.

La aplicación de la ilustración 6 muestra el proceso que se necesita realizar para poder ejecutar la función “Cambiar cedula”, el cual se resume a continuación: La aplicación debe establecer conexión con alguno de los nodos de la blockchain. Una vez conectado a un nodo blockchain ya se puede entablar comunicación con esta por medio del protocolo JSON-RPC y mediante el módulo web3 js para node js. Dependiendo del nodo al que se conecta la aplicación, se puede hacer uso de las cuentas (address) que estén en ese nodo, por ejemplo:

Ilustración 71 Cuentas nodo1.

Ilustración 72 7 Cuentas nodo2.

Para el contrato inteligente de cambio de cédula se puso una política de seguridad la cual indica que solo la cuenta que inicia en 0x2c54dbf773158007d2… puede hacer transacciones, por lo tanto sólo desde esa cuenta será efectivo un cambio de cédula. La función “Consultar cedula” es de orden público, por lo que cualquier persona podrá ejecutar dicha función sin ningún problema.

Ilustración 73 .https://peing.udistrital.edu.co/cedulatrasparente.

La aplicación de la ilustración 8 realiza las mismas funciones que la de la ilustración 7 pero de forma transparente, de esta manera se le presenta al usuario una aplicación agradable en cuanto a usabilidad y experiencia de usuario. Todos los procesos que se realizan en la blockchain trabajan por debajo de forma transparente para el usuario. Algunas de las transacciones realizadas de forma secuencial en la aplicación de cambio de cédula fueron las siguientes: Tabla 1 transacciones cambio de cédula realizadas por la cuenta 0x2c54dbf773158007d2c58a2eca64e5855d1eb640.

Cuenta que realiza la transacción: 0x2c54dbf773158007d2c58a2eca64e5855d1eb640

ID transacción dato

0xfa028ff5e71300a52c7126611def9ba6c6305cce6ddd7b68903e8a87240ab8ab 1

0xc608f8045971344dd4f14c1766807da6b6ca0c7eda48a2f3ebe50e1ac2b6381d 2

0x1b5afdb3ebce33b55fc7c4f7dcdea824d3a4adb6f3fd0cb418a1c974e0c64487 3

0xdb49b66507f89462e37b281d74e592d7a1512f9b1e24964b04df4efb8ac3fb18 5

Se revisa en la blockchain el contenido de la transacción minada con id: 0x1b5afdb3ebce33b55fc7c4f7dcdea824d3a4adb6f3fd0cb418a1c974e0c64487.

Ilustración 74 Información de la transacción minada.

El parámetro data de la transacción minada es el siguiente: data: "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003" Como se observa en el parámetro data contiene el valor anterior de la cédula(2) y el valor por el que fue cambiada (3), y así sucesivamente queda en la blockchain los cambios de cédulas si quien realiza la transacción es la cuenta 0x2c54dbf773158007d2c58a2eca64e5855d1eb640. Sin embargo para otra cuenta diferente a la que desplegó el contrato se obtuvieron los siguientes resultados:

Tabla 2 transacciones cambio de cédula realizadas por la cuenta 0x3de386023c6e542d54523b57e74fd52d2c1eb522.

Cuenta que realiza la transacción: 0x3de386023c6e542d54523b57e74fd52d2c1eb522

ID transacción dato

0xe192f4710388603ea2cff9c24009816d936614edf7cc1241a6e0f4f2d5d32ba1 60

0x61ef20a3b9a5a6c96ca7347dfbafae450750412dea66ec391ae271a5156be50f

70

0xcae02ac8372ea2a0faadf60f12442a37d126acdfca6f55e74e6f11dbb2904da4 70

0x2f8d4530d55a8adabf6bae7530093f529ec232987bcbc581356c859744a5b806 220

Se revisa en la blockchain el contenido de la transacción minada con id: 0x2f8d4530d55a8adabf6bae7530093f529ec232987bcbc581356c859744a5b806.

Ilustración 75 Información de la transacción minada.

Como se observa en la ilustración 75 no contiene el parámetro data, esto es porque la cuenta desde donde se hace la transacción no está autorizada para realizar cambios en los datos, en este caso el dato cedula.

3.13. Roles y autenticación en la blockchain

El proceso de autenticación de los funcionarios en la Blockchain se hace teniendo en cuenta la siguiente estructura de funcionario: struct Funcionario { //Estructura del Funcionario uint cedula; string nombre; bytes32 contrasena; bytes32 documentoSecreto;

uint rol;//Director: 2, Funcionario: 3 Retirado, 5: Inválido: 0 bytes32 sesion;//Hash del sesionIDTemporla, identifica la sesión bytes32 sesionIDTemporal;//almacenamiento temporal del SesionID bool sesionActiva;//sesion activa o inactiva uint tiempoInicial; bool habilitado; ;//Habilitado para cargar hash de diploma } Para la autenticación inicialmente se tienen en cuenta los parámetros de cédula, el hash de la contraseña y el hash del documento secreto de cada usuario que tiene permisos en la plataforma. Estos parámetros se comparan con el hash de los mismos que se tiene almacenado en la Blockchain. Si el hash de los parámetros es idéntico se genera una clave de sesión obtenida de hacer hash de la concatenación de la contraseña del funcionario y una marca de tiempo de la Blockchain. function ingresar(uint cedula,string contrasena,string documentoSecreto)public { require(msg.sender == creador); if (funcionarios[cedula].contrasena == keccak256(contrasena) && funcionarios[cedula].documentoSecreto == keccak256(documentoSecreto)) { funcionarios[cedula].sesionIDTemporal = keccak256(block.timestamp,contrasena); //Se genera un identificador de sesión con el hash del tiempo de bloque y la contraseña bytes32 sesionID = funcionarios[cedula].sesionIDTemporal; funcionarios[cedula].sesion = keccak256(sesionID); //se almacena el hash del sesionID funcionarios[cedula].tiempoInicial = block.timestamp; funcionarios[cedula].sesionActiva = true; EventoIngresar(cedula); } } Una vez se han verificado la cédula, el hash de la contraseña y el hash del documento secreto y se asigna la clave temporal o sesionID se activa la sesión del funcionario. Para poder ejecutar cada una de las funciones de la plataforma se verifica la coincidencia del sesionID con la cédula y el parámetro de sesión habilitada. Adicionalmente se consulta en la estructura del funcionario almacenada en la blockchain que el rol correspondiente a dicho funcionario le permita ejecutar la función solicitada. function desabilitarFuncionario(uint cedula,bytes32 sesionID,uint cedulaFuncionario)public { require(msg.sender == creador); //verificarDuracionSesion(cedula); if (funcionarios[cedula].sesionActiva && funcionarios[cedula].sesion == keccak256(sesionID) && funcionarios[cedula].rol == 2) { funcionarios[cedulaFuncionario].habilitado = false; EventoDeshabilitarFuncionario(cedulaFuncionario); } } La función deshabilitarFuncionario() solo puede ser ejecutada por un funcionario de rol igual 2.

3.14. Codificación y extración de información de la blockchain

Codificación y almacenamiento en la blockchain En la blockchain se almacena la siguiente información de modo que quedan registrados todos y cada uno de los cambios que se realizan. Adicionalmente existe un mecanismo adicional de almacenamiento de información tipo logs en el que se almacena el evento ocurrido con la información que se considere pertinente como fecha y datos de la operación address creador; uint duracionSesion = 300;//Despues de 300 segundos al tratar de ejecutar una función se desactiva la sesión uint cantidadDiplomas = 0;//conteo de diplomas mapping(bytes32 => bytes32) diplomas;//Relación código a hash del diploma mapping(bytes32 => bytes32) listaDiplomas;//Indexa con el código y almacena el código para poder establecer si ya existe mapping(uint => Funcionario) funcionarios; //Lista indexada de Funcionarios de estructura Funcionario, el indice es la cédula uint[] cedulasFuncionarios;// Permite visualizar la lista completa de cédulas struct Funcionario { //Estructura del Funcionario uint cedula; string nombre; bytes32 contrasena; bytes32 documentoSecreto; uint rol;//2: Director, 3: Funcionario, 5: retirado, 0: inválido bytes32 sesion;//Hash del sesionID aleatorio que identifica cada sesion bytes32 sesionIDTemporal;//almacenamiento temporal del SesionID en texto plano bool sesionActiva;//sesion activa o inactiva uint tiempoInicial; bool habilitado;//habilitado para subir hash } /*----------------------- Eventos--------------------------------------*/ event EventoIngresar(uint indexed cedula); event EventoSalir(uint indexed cedula); event EventoAgregarFuncionario(uint indexed cedula); event EventoCambiarContrasena(uint indexed cedula); event EventoHabilitarFuncionario(uint indexed cedulaRol3,uint indexed cedulaRol4); event EventoAgregarDiploma(uint indexed cedula,bytes32 indexed codigo,bytes32 indexed hashDiploma); event EventoDeshabilitarFuncionario(uint indexed cedula); Toda la información sensible se codifica mediante la función hash Keccak-256 equivalente a SHA3. El hash del diploma que se recibe se le aplica la función Keccak-256 para almacenarlo en la blockchain al igual que sucede con las contraseñas, documentos secretos y claves temporales de sesión o sesionID. function agregarDiploma (uint cedula,bytes32 sesionID,string nuevoHash,bytes32 nuevoCodigo)public { require(msg.sender == creador); //verificarDuracionSesion(cedula); if (funcionarios[cedula].sesionActiva && funcionarios[cedula].sesion == keccak256(sesionID) && funcionarios[cedula].rol == 3 && funcionarios[cedula].habilitado) {

if (listaDiplomas[nuevoCodigo] != nuevoCodigo) { cantidadDiplomas += 1; diplomas[nuevoCodigo] = keccak256(nuevoHash);//Se almacena el hash del hash del diploma listaDiplomas[nuevoCodigo] = nuevoCodigo; EventoAgregarDiploma(cedula,nuevoCodigo,diplomas[nuevoCodigo]); } } } En el caso de Agregar funcionarios con determinado rol al sistema sobre la blockchain se primero se verifican las credenciales, que la sesión esté activa y adicionalmente que el rol del funcionario le permita realizar la operación de almacenamiento en la blockchain, posteriormente se codifica la información sensible para ser almacenada: function agregarFuncionario(uint cedula,bytes32 sesionID,uint nuevaCedula,string nuevaContrasena,string nuevoDocumentoSecreto,string nuevoNombre, uint nuevoRol)public { require(msg.sender == creador);//solo un nodo con el address del creador puede realizar operaciones if (funcionarios[cedula].sesionActiva && funcionarios[cedula].sesion == keccak256(sesionID) && funcionarios[cedula].rol == 2) { if (nuevaCedula != funcionarios[nuevaCedula].cedula) { funcionarios[nuevaCedula].cedula = nuevaCedula; funcionarios[nuevaCedula].nombre = nuevoNombre; funcionarios[nuevaCedula].contrasena = keccak256(nuevaContrasena); //Se almacena el hash de la contraseña funcionarios[nuevaCedula].documentoSecreto = keccak256(nuevoDocumentoSecreto); funcionarios[nuevaCedula].rol = nuevoRol; funcionarios[nuevaCedula].sesion = "0"; funcionarios[nuevaCedula].habilitado = false; cedulasFuncionarios.push(nuevaCedula); EventoAgregarFuncionario(cedula); } } }

3.15. Extracción de la información y decodificación

La información codificada mediante la función hash Keccak256 no puede ser decodificada por la tanto se usa para realizar comparaciones y saber si la información recibida ha sido modificada o se encuentra intacta, éste es el caso de las contraseñas, clave temporal de sesión, documento secreto y hash de diploma. Para realizar consultas de la información almacenada en la blockchain se utilizan funciones constantes que no afectan el estado de la blockchain, sin embargo dentro de dicahs funciones se verifica el rol de quien está haciendo la consulta le permita acceder a la información. En el caso de la verificación de diplomas cualquier persona puede realizar la consulta. function conteoDiplomas()public constant returns(uint) { return cantidadDiplomas;

} Cualquier persona puede consultar la cantidad de diplomas Solo un funcionario con sesión activa y credenciales válidas puede consultar información de otro funcionario. function verFuncionario(uint cedula,bytes32 sesionID,uint cedulaFuncionario)public constant returns(string nombre, uint rol,bool habilitado) { if (funcionarios[cedula].sesionActiva && funcionarios[cedula].sesion == keccak256(sesionID)) { nombre = funcionarios[cedulaFuncionario].nombre; rol = funcionarios[cedulaFuncionario].rol; habilitado = funcionarios[cedulaFuncionario].habilitado; return (nombre,rol,habilitado); } } Cualquier persona puede verificar la autenticidad de un diploma function verificarDiploma(bytes32 codigoDiploma, string hashVerificar)public constant returns(string mensaje) { if (diplomas[codigoDiploma] == keccak256(hashVerificar)) { mensaje = "El diploma es auténtico"; }else { mensaje = "El diploma ha sido alterado"; } return mensaje; }

3.16. Transferencia de bienes digitales

La transferencia de un bien digital en blockchain se da al garantizar que determinada información no se falsifique al asignar la posesión a determinado usuario. En este sentido el sistema verifica los valores existentes en la blockchain antes de almacenar nueva información y asignar un propietario. En el caso de del hash de diploma existe una relación de pertenencia única entre el código del diploma y el hash del diploma. Como no se puede alterar el código almacenado, ni la relación del código con el hash del diploma, ni el hash almacenado entonces es posible garantizar la autenticidad de un diploma. En el caso del documento secreto con el que cada funcionario se autentica en la blockchain existe una relación única de pertenencia entre cada documento secreto y cada funcionario que no puede ser alterada al igual así como el hash del documento secreto tampoco puede ser alterado. La asignación de este bien digital, Documento secreto se realiza al crear el funcionario, junto con el resto de parámetros de creación del funcionario: funcionarios[nuevaCedula].documentoSecreto = keccak256(nuevoDocumentoSecreto);

function agregarFuncionario(uint cedula,bytes32 sesionID,uint nuevaCedula,string nuevaContrasena,string nuevoDocumentoSecreto,string nuevoNombre, uint nuevoRol)public { //Se agrega un funcionario a la lista de funcionarios require(msg.sender == creador);//solo un nodo con el address del creador puede realizar operaciones if (funcionarios[cedula].sesionActiva && funcionarios[cedula].sesion == keccak256(sesionID) && funcionarios[cedula].rol == 2) { if (nuevaCedula != funcionarios[nuevaCedula].cedula) { funcionarios[nuevaCedula].cedula = nuevaCedula; funcionarios[nuevaCedula].nombre = nuevoNombre; funcionarios[nuevaCedula].contrasena = keccak256(nuevaContrasena); //Se almacena el hash de la contraseña funcionarios[nuevaCedula].documentoSecreto = keccak256(nuevoDocumentoSecreto); funcionarios[nuevaCedula].rol = nuevoRol; funcionarios[nuevaCedula].sesion = "0"; funcionarios[nuevaCedula].habilitado = false; cedulasFuncionarios.push(nuevaCedula); EventoAgregarFuncionario(cedula); } } } En el caso de la contraseña el único que puede modificar dicho parámetro es el mismo funcionario una vez se han comprobado sus credenciales actuales: function cambiarContrasena(uint cedula,string contrasena,bytes32 sesionID,string nuevaContrasena)public { require(msg.sender == creador); if (funcionarios[cedula].sesionActiva && funcionarios[cedula].contrasena == keccak256(contrasena) && funcionarios[cedula].sesion == keccak256(sesionID)) { funcionarios[cedula].contrasena = keccak256(nuevaContrasena); EventoCambiarContrasena(cedula); } }

Entrega del sistema

1. Pruebas de Pentesting Se realiza unas pruebas de pentesting básicas para la plataforma de integridad de diplomas de grados con blockchain realizando análisis de vulnerabilidades usando Nessus, explorando los servicios por medio de wireshark, al no encontrar las direcciones de los nodos blockchain se parte de que estas se conocen para analizarlos directamente y ver si se encuentra alguna vulnerabilidad que ponga en riesgo la información en la Blockchain.

SUPUESTOS ● EL análisis parte desde la misma LAN donde se encuentran los nodos y los servidores.

● Se conocen las direcciones ip donde se encuentran los nodos.

● Se conoce la dirección IP de la aplicación blockchain.

OBJETIVOS ● Realizar un escaneo de puertos y servicios de la plataforma Reto 2 blockchain.

● Encontrar las vulnerabilidades asociadas a los puertos y servicios encontrados con el

escaneo previamente realizado.

● Revisar casos de riesgo con los que podrían verse afectada la aplicación blockchain.

RESUMEN DE HALLAZGOS

● Se analizó la página principal de la plataforma blockchain usando Nmap, Nessus y wireshark

en la que no se encontraron vulnerabilidades asociados al desarrollo de la plataforma y

rastros de la ubicación de los nodos blockchain con la que esta se conecta.

● Partiendo de que se conocen las direcciones ip de los nodos blockchain se encontraron

puertos asociados a procesos blockchain los cuales fueron el 8545 y el 30303.

● Haciendo pruebas de los puertos usados en la red blockchain se encuentra que el

puerto 8545 hace referencia al protocolo de conexión JSON-RPC con el nodo

blockchain analizado, por lo tanto se puede extraer cierta información de la red

blockchain como números de nodos, números de bloques, cuentas, información de

algunos bloques..etc.

RECOMENDACIONES PARA LA IMPLEMENTACIÓN DE UNA PLATAFORMA BLOCKCHAIN EN PRODUCCIÓN

● Los servidores donde se despliegan los nodos blockchain deben tener procesos de

hardening donde garanticen la seguridad de todos sus protocolos.

● Se deben implementar políticas de acceso de las direcciones ip que pueden acceder al

protocolo de la blockchain.

● Se recomienda que las únicas direcciones ip que puedan usar el protocolo JSON-RPC las

tengan la plataforma donde se implementan las aplicaciones.

RECONOCIMIENTO O RECOLECCIÓN DE INFORMACIÓN

● Infraestructura: Se conoce el servicio web de integración de diplomas que se está

ofreciendo en la url https://peing.udistrital.edu.co.

Ilustración 76 Servicio web sistemas de integración de diplomas.

ESCANEO

El primer proceso de escaneo es el descubrimiento de puertos, servicios y versiones de los servicios de la máquina que se requiere penetrar, para esto empezamos usando el comando nmap en sus diferentes facetas. así que manos a la obra:

Ilustración 77 nmap-descubrimiento de puertos.

Para un análisis completo de nmap, vamos a enviar un comando que incluya la detección de sistema operativo, el análisis de puertos y servicios, y elementos adicionales a configuraciones detectadas en el sistema.

Ilustración 78 Salida de nmap más detallado.

Del escaneo detallado se encuentra el nombre del servidor web que se esta usando “nginx”, sin embargo no esta la version del servidor, por lo que no implica un hueco de seguridad ya que sin la version es muy dificil encontrar vulnerabilidades a nivel de servidor web. Tampoco se encuentran direcciones ip asociadas a los nodos de conexión blockchain.

Se intentan descubrir donde estan ubicados los nodos de la cadena de bloques, por lo tanto se va a usar un software profesional para el análisis de vulnerabilidades a ver si se encuentra alguna.

Ilustración 79 Escaneos vulnerabilidades dominio.

Como se observa en la figura, no se encuentran vulnerabilidades asociadas, y mediante los análisis que se lanzaron, no se detecta información de donde estan los nodos y de donde se encuentra la aplicación web, por lo que no es posible desde la raiz encontrar en donde esta la direccion ip web del proyecto de blockchain. Ya que no se encuentran las direcciones asociadas, sin embargo se encuentran los path webs asociados a ese dominio.

Ilustración 80 paths asociados al dominio peing.udistrital.edu.co

Se puede empezar a explorar en los paths para ver cuales están relacionados con blockchain, los cuales se encuentran los siguientes:

Ilustración 81 https://peing.udistrital.edu.co/direccion.

Ilustración 82 https://peing.udistrital.edu.co/funcionario.

Ilustración 83 https://peing.udistrital.edu.co/ingresar.

Con las tres direcciones localizadas y mediante el uso de inspeccionadores de elementos y wireshark se van a revisar los protocolos y acciones que manejan las páginas web del lado del cliente para ver si es posible encontrar otras paginas relacionados o protocolos web que apunten a los nodos de la blockchain.

Ilustración 84 Trafico wireshark

A pesar de que se hacen diferentes peticiones no se logra evidenciar una dirección ip diferente a la de los nodos.

Mediante el uso de escaneo de vulnerabilidades y revisión del trafico de red hacia la plataforma blockchain https://peing.udistrital.edu.co, no se encuentran direcciones asociadas a donde estan los nodos de la cadena blockchain a la que apunta la aplicación. Sin embargo, suponiendo que se conoce la ubicación de los nodos, se les va hacer un escaneo de vulnerabilidades a dos de estos con el fin de verificar si presentan vulnerabilidades algunas con respecto a la blockchain. Para el nodo 1 se encuentran los siguientes resultados:

Ilustración 85 Vulnerabilidades asociadas nodo1.

Como se observa en la Fig.10 que no se encuentran vulnerabilidades de ningún rango, solo informaciones que brinda el sistema en el escaneo, al revisarlas detenidamente ninguna se asocia con un nodo blockchain.

Ilustración 86. Detección de servicio nodo1.

Como se observa en la Fig.11 del nodo solo se detecta un servicio ssh, pero ninguno relacionado al puerto de comunicación de la blockchain 8545, ni el puerto 30303 tcp con los que establece comunicación con los otros nodos.

Ilustración 87 escaneo de vulnerabilidades nodo 2.

Para el nodo 2, no se encuentran tampoco vulnerabilidades de ningún rango, a diferencia del nodo1, en las informaciones encontradas no hay una deteccion de servicio.

Ilustración 88 Información direcciones ip y puertos.

A diferencia del nodo1, el nodo 2 si muestra 3 servicios diferentes al ssh, el 8545, y el 30303, por lo que se va a establecer conexión http con estos puertos.

Ilustración 89 Web encontrada.

Ilustración 90 No hay servicio http.

Si una persona logra asociar el puerto 8545 a el protocolo JSON-RPC blockchain podria enviar peticiones a esta, como por ejemplo:

Ilustración 91 Nodos de la blockchain.

Sin embargo el atacante podría obtener información de la blockchain que es publica, pero no puede borrar información de esta o desplegar aplicaciones sobre esta.

Ilustración 92 Obtencion de cuentas del nodo.

Al encontrar las cuentas de la blockchain la persona tendría que hacer un ataque de fuerza bruta para encontrar la contraseña, en caso de encontrarla podría desplegar contratos inteligentes, para aprovechar esta blockchain en sus propias aplicaciones.

Ilustración 93 Números de bloques blockchain en hexadecimal.

Se puede encontrar el número de bloques de la cadena. 293261 bloques en la cadena.

2. Aplicativo mediante micro servicios APLICACIÓN BLOCKCHAIN COMO MICROSERVICIO

Con el propósito de utilizar paradigmas tecnológicos de última generación y encapsular la aplicación desarrollada de manera que sea de un fácil despliegue, se va aplicar tecnologías orientadas a micro servicios y orquestación. Para la implementación del aplicativo Blockchain en micro servicios se va a usar Docker y para la orquestación de la aplicación web completa, servidor de producción y servicio web Blockchain, entre las ventajas de usar micro servicios, podemos encontrar las siguientes:

● Fácil despliegue: se despliegan con un comando.

● Tamaño reducido: son encapsulados que contienen únicamente las dependencias

necesarias para el funcionamiento de la aplicación.

● Altamente reutilizables: facilita el despliegue de múltiples aplicaciones o versiones del

micro servicio.

● Independientes: son independientes de la versión del sistema operativo que haya en el

host.

Con el uso de micro servicios nos evitamos el problema de la configuración de los sistemas operativos para desplegar múltiples aplicaciones. Ya que la instalación de dependencias en un sistema no son las mismas que en otro. IMPLEMENTACIÓN DEL SERVICIO WEB DE LA APLICACIÓN BLOCKCHAIN COMO MICROSERVICIO

Para la implementación del micro servicio de la aplicación Blockchain es necesario verificar la versión de Node JS, y las acciones necesarias para desplegar estas las cuales son:

1. Dockerización del servidor Node JS versión utilizada, dependencias.

2. Configuraciones para pasar el código Node JS a al contenedor Docker.

3. Instalación de las librerías necesarias para que funcione la aplicación web Blockchain.

4. Despliegue del servidor Node js.

Ilustración 94 Dockerfile servicio web Blockchain Node js.

Una vez se crea el DockerFile este debe ser construido, con los pasos anteriormente descritos para el despliegue de la aplicación. Para construir el micro servicio se usa el siguiente comando:

docker build . -t dockerchainrita

Ilustración 95 Construcción micro servicio web Blockchain.

Una vez se construye la imagen del contenedor esta se puede desplegar de una manera supremamente sencilla sin afectar los procesos del sistema. Para el despliegue del micro servicio web se usa el siguiente comando: docker run -d -p 3000:3000 dockerchain

Las sintaxis del despliegue del micro servicio es la siguiente: docker run -d: despliega el micro servicio en segundo plano. -p 3000:3000: Gestiona los puertos de despliegue del micro servicio, como podemos observar el parámetro de despliegue es puertoenelhost:puertoenelcontenedor, para el despliegue de este micro servicio solo se modifica el “puertoenelhost”. dockerchainrita: nombre de la imagen que contiene el micro servicio de Node js.

Ilustración 96 Despliegue micro servicio web Blockchain.

IMPLEMENTACIÓN DEL SERVICIO WEB DE LA APLICACIÓN BLOCKCHAIN COMO MICROSERVICIO

Ilustración 97 micro servicio Node js puerto 3000.

El servicio de Node js usa por defecto el puerto 3000, muchas veces cuando se implementa el servicio web en Node js ocurre que en el sistema donde se implementa ese puerto ya esta ocupado por otro servicio y se vuelven tediosas las configuraciones para correr el servicio por otro puerto. Mediante el uso de micro servicios en contenedores logramos solucionar esto simplemente pasando el puerto que queremos que corra el servicio en el sistema operativo.

Ilustración 98 Despliegue micro servicio Node js puerto 4000.

Orquestación y creación de plantillas Para el despliegue de la aplicación Blockchain en un entorno de producción es necesario usar un servidor web de producción el cual es Nginx, y el micro servicio de Node js. Ya que cuando un proyecto se lanza en producción se aconseja usar un servidor como Nginx o apache, para lograr conectar esos dos micro servicios es necesario usar el servicio de orquestación y recetas de infraestructuras basadas en micro servicios.

Ilustración 99 Despliegue de los micro servicios.

Una vez desplegado ya podemos acceder a este desde la máquina que se despliega:

Ilustración 100 Despliegue micro servicios puerto 80.

En los sistemas operativos orientados a la implementación de servicios mail, ftp, servidores web, bases de datos, se encuentra el problema de que estos servicios se implementan en un determinado puerto, mediante el uso de contenedores de software y orquestación, podemos solucionar el puerto en el que se despliega la aplicación, para esto se crea una plantilla de orquestación usando docker-compose, la cual se muestra a continuación:

Ilustración 101 Plantilla de orquestación micro servicios Blockchain.

En caso de tener ocupado el puerto en el que se va a desplegar la aplicación, este se cambia, proporcionando el despliegue de la aplicación en el otro puerto.

Ilustración 102 Nueva plantilla de orquestación cambio en el puerto 80:80.

Ilustración 103 Despliegue servidor Blockchain puerto 8080.

3. Guía de uso ACCIONES DEL CIUDADANO Cualquier persona puede verificar la autenticidad de un documento previamente cargado en la Blockchain por una institución accediendo a la dirección https://peing.udistrital.edu.co

Ilustración 104 Verificar un diploma

Para verificar la integridad de un documento debe poseer: 1. Documento digital proporcionado por la institución. 2. Código del documento.

Si el documento ingresado en la plataforma no ha sido modificado de ninguna manera la plataforma informará que el mismo es auténtico, de lo contrario se informará que ha sido alterado.

Ilustración 105 Mensaje de integridad del documento

INGRESO DE FUNCIONARIOS En la plataforma existen funcionarios de Dirección y funcionarios estándar. Ambos ingresan por la dirección web https://peing.udistrital.edu.co/ingresar

Ilustración 106 Ingreso de funcionarios

Para acceder el funcionario debe proporcionar: 1. Número de cédula 2. Contraseña 3. Documento secreto

El documento secreto es cualquier tipo de archivo que el funcionario debe tener en su posesión para acceder y que fue relacionado a su usuario en el momento de creación. ACCIONES DE LA DIRECCION Una vez ha ingresado, el funcionario Director puede:

1. Agregar otros funcionarios estándar o director 2. Consultar los funcionarios existentes 3. Habilitar o deshabilitar los funcionarios estándar para que no puedan cargar nuevos Hash

de diploma a la Blockchain.

Ilustración 107 Funciones del Director

ACCIONES DEL FUNCIONARIO ESTÁNDAR Una vez ha ingresado, el funcionario estándar puede agregar hash de un documento seleccionando el mismo y enviándolo a la blockchain.

Ilustración 108 Función del funcionario estándar

ANEXO DE FUNCIONAMIENTO

Ilustración 109 Actividades generales de la cadena de bloques

En la ilustración 109 podemos observar 4 parámetros que se muestran en la url https://peing.udistrital.edu.co , estos hacen referencia a:

● número de bloques: los bloques son encapsulamientos de procesos de minado en nodos blockchain, los cuales pueden contener transacciones o simplemente se minan para aumentar el grado de dificultad de la cadena, es decir que si no hay transacciones igual se van minando los bloques constantemente sobre el estado de la blockchain ya existente. sin embargo una transacción como el ingreso de un funcionario. habilitar funcionario, subir un diploma, entre otras hace referencia a una sola transacción en la blockchain y por ende a un solo bloque.

Ejemplo:

Se va a crear el funcionario del mintic con el rol de director, el proceso es el siguiente:

Ilustración 110 agregar funcionario

El proceso de la ilustración 110 genera una transacción, la cual debe ser minada para que la creación del usuario tenga éxito. La transacción generada es:

0x2f460f6e61a0286e5aaa175293a8043ea70d94503c853952225ce1823c106bd2 una vez es minada, esta genera un bloque de la cadena correspondiente a dicha transacción, la consulta de la transacción minada es la siguiente:

Ilustración 111 Consulta de la transacción minada agregar usuario director mintic

Como se observa en la ilustración 111, la transacción agregar funcionario director del mintic, genera un bloque en la cadena, cuyo número es el 12856.

Al finalizar la creación del funcionario podemos consultar el usuario creado:

Ilustración 112 Consulta funcionario mintic.

● Nodos: Muestra el número de nodos que componen la blockchain del proyecto, este número es variable, se va agregar un nodo temporal a la cadena para mostrar su cambio en tiempo real.

Ilustración 113 despliegue nodo 3.

Como se observa en la ilustración 113 se desplegó el nodo 3, este muestra un número de bloques de 42813, por lo que automáticamente este empieza a sincronizarse con los otros nodos hasta tener la misma integridad (cantidad de bloques y cadenas de hash de todos los bloques enlazadas correctamente).

Ilustración 114 3 nodos en la plataforma blockchain.

● Nodos Conectado: Representa el nodo al que se conecta en un instante de tiempo para extraer información, la cadena de bloques se conecta automáticamente a cualquier nodo que esté activo, sin importar el nodo al que se conecte, el resultado debe ser el mismo.

● Diplomas: Cantidad de diplomas que hay en la aplicación de integridad de diplomas de grado, Actualmente son 15, se muestra a continuación el proceso de creación de un diploma, los requisitos para esta es tener un usuario con rol de funcionario y que este habilitado.

Ilustración 115 funcion agregar diploma.

Por debajo esta transacción al ser minada genera un bloque que corresponde a la creación de un nuevo diploma.