¿Qué tan seguro es Cardano? Traducción al español 🇪🇸 (Parte 1 de 2)

Ver Documento Original aquí.
Publicado por Undersearcher

Últimamente, los ataques al 51% a las criptomonedas han sido un tema candente. Particularmente el reciente ataque a Ethereum Classic dejó a comunidades de otras criptomonedas preguntándose si sus cadenas de bloque (blockchain) son realmente seguras. Esta larga lectura intenta dar una visión completa del modelo de seguridad de la Capa de Contabilidad (Settlement Layer) de Cardano. El artículo aborda en primer lugar la seguridad de Bitcoin, los ataques del 51% y los problemas comunes en el modelo de seguridad de la mayoría de las criptomonedas de prueba de participación (Proof of Stake - PoS) del mercado actual. El artículo continúa describiendo cómo funciona el mecanismo de consenso de Cardano (Ouroboros), la distribución inicial y actual de las monedas, cómo se incentiva la distribución del fondo común de inversiones y cómo se cierra con algunas ideas finales.´

¿Qué tan seguro es Cardano?

¿Por qué Bitcoin es seguro?

Para entender qué es lo que hace que una cadena de bloques sea segura en primer lugar, primero echemos un vistazo a Bitcoin, la criptomoneda que lo inició todo. Las dos propiedades siguientes son características clave de cualquier libro de contabilidad (ledger) distribuido, incluyendo Bitcoin:

  • Persistencia: Las operaciones anteriores en el libro de contabilidad deben ser inmutables.
  • Vitalidad: Las nuevas transacciones deben incluirse sin demoras indebidas.

En Bitcoin, la persistencia se consigue esencialmente combinando dos técnicas:

Prueba de trabajo (Proof of Work - PoW): Los nodos utilizan la potencia de cálculo (hash power) para resolver un algoritmo criptográfico. El nodo que primero hace esto consigue crear el siguiente bloque (siempre que se haga antes de que otro nodo resuelva el algoritmo y lo procese más rápido). Las posibilidades de un nodo de ganar' dependen de su poder de hash y algo de suerte. Por lo tanto, el PoW crea aleatorización, donde las posibilidades de los nodos de ganar’ los derechos para crear un bloque son proporcionales a la cantidad de hash power que (un grupo de) nodos contribuyen a la red.
La regla de cadena más larga y la regla de cadena más pesada: Cuando existen varias cadenas, por ejemplo, debido a ataques que intentan romper la inmutabilidad del libro contable, la cadena con la cadena de bloques más larga se seleccionó originalmente como “la versión verdadera” en Bitcoin. Dado que los bloques sólo pueden crearse a través de PoW, se consideró que la versión más larga era la más difícil de crear y, por lo tanto, podía ser la única “versión verdadera” del libro contable. Más recientemente, esto se ajustó a la ‘regla de la cadena más pesada’, en la que se selecciona la cadena que más ha sufrido el hash, haciendo más explícito este supuesto.

Cuando un nodo gana' y produce con éxito un nuevo bloque, recibe algo de Bitcoin recién explotado’ (BTC) y los honorarios que se pagan por cada transacción incluida. Esto crea un incentivo para cada transacción con suficientes cargos para ser incluidos en la cadena de bloqueo sin demoras indebidas, asegurando la vivacidad.

Bitcoin ha estado activo durante más de 10 años con un tiempo de actividad del 99,98% y cero infracciones de seguridad conocidas. Bitcoin ha funcionado bien en la práctica, pero en 2015, su modelo de seguridad también ha demostrado matemáticamente que es correcto. Por lo tanto, puede considerarse que Bitcoin es seguro, partiendo del supuesto de que la mayor parte del poder de hash del sistema está controlado por partidos honestos.

¿Qué es un ataque del 51%?

Cuando el supuesto mencionado anteriormente no se cumple, y una sola persona o un grupo de personas colaboradoras controlan más de la mitad del poder de hash total de la red, se puede ejecutar un ataque exitoso del 51%. En monedas de Prueba de Trabajo (PoW) como Bitcoin, esto significaría que el atacante es capaz de resolver los algoritmos criptográficos más rápido que el resto de la red, y así crear nuevos bloques más rápido que el resto de la red combinada.

Esta ventaja permite al atacante crear una versión alternativa del libro mayor que consiste en una cadena más larga de bloques y así reescribir el historial de transacciones. Como resultado, la cadena de bloques pierde su persistencia (inmutabilidad) y vitalidad (resistencia a la censura).

Si un atacante puede crear bloques más rápido que el resto, puede reescribir el historial de la cadena (fuente).

Mientras que el atacante no puede reescribir los saldos de las cuentas o ejecutar transacciones que nunca existieron, las transacciones anteriores pueden deshacerse, donde cuanto más poder de control tenga el atacante, más tiempo podrá “retroceder en el tiempo”. Esto significa que el atacante podría gastar las monedas que ya posee (por ejemplo, para un activo fuera de línea valioso, como oro o para fiat en una bolsa) y luego deshacer esta transacción en el libro mayor. El atacante entonces es dueño tanto del activo por el que intercambió como de las monedas originales que gastó en él. A esto se le llama “doble gasto”.

En el caso reciente del ataque del 51% al Ethereum Classic, hubo dos razones por las que era un blanco relativamente fácil. Primero, utiliza el mismo algoritmo que su’ cadena padre’ Ethereum, pero tiene una tasa de hash que es menor en magnitudes. Aunque se desconoce quién ejecutó el ataque, es posible que un gran minero de Ethereum haya cambiado parte de su poder de hash de la minería de Ethereum y haya comenzado a extraer Ethereum classic. Una segunda vulnerabilidad de Ethereum Classic es que su tasa de hash es tan baja que sólo cuesta ~$4,106 por hora en costos de energía para ejecutar un ataque del 51%[según el 15-1-2019]. Por lo tanto, el poder de hash requerido podría incluso alquilarse completamente en un servicio como NiceHash, lo que significa que un atacante ni siquiera necesitaría adquirir ningún hardware.

Ethereum Classic es a la vez ‘NiceHash-able’ y una cadena minoritaria, 15-01-2019 (fuente)

La mayoría de los ataques del 51% hasta la fecha, por lo tanto, se dirigieron a criptomonedas más pequeñas, o cadenas con un dominio minoritario en sus respectivos algoritmos mineros. Cuando se trata de Bitcoin, la distribución de su tasa de hash en los pools mineros es a menudo el tema de discusión. Por ejemplo, en julio de 2014, el grupo minero GHash.io controlaba más del 51% de la potencia total de hash de Bitcoin, creando un único punto de fallo en ese caso (sin consecuencias). La razón probable de esto es que cuando los participantes intentan maximizar sus beneficios, las simulaciones muestran que la distribución del fondo minero tiende hacia el uso de un solo fondo, creando centralización. Esto se conoce como la tragedia de los bienes comunes: aunque los participantes valoran la descentralización como un concepto, ninguno de ellos quiere cargar con ella individualmente. Sin embargo, los ideales y la moralidad de los mineros podrían llevarlos a comportarse de manera diferente.

El 20 de junio, publiqué un artículo en el que mencionaba que los tres mayores grupos mineros de Bitcoin controlaban el 52,3% de la tasa de hash total de la red en ese momento. Sin embargo, como consecuencia de la caída del mercado bajista en 2018 y de la caída de precios de Bitcoin, las explotaciones mineras han cerrado sus puertas a medida que la explotación minera de Bitcoin se ha vuelto menos rentable. Un ejemplo convincente es la reciente crisis de Bitmain, uno de los mayores desarrolladores de hardware para minería. Este mes, los mineros ‘desconocidos’ se convirtieron en el grupo más grande en la distribución de la tasa de hash de Bitcoin, una tendencia que parece estar en curso según esta publicación del equipo Coin Metrics de Nic Carter. Aunque esto podría ser una señal de que la distribución de la tasa de hash de Bitcoin se está descentralizando cada vez más, debe tenerse en cuenta que estos mineros podrían seguir participando en un fondo común, pero simplemente decidieron no compartir esta información.

Ratio de Distribución de Hash en Bitcoin 15/01/2019

¿En qué se diferencian los sistemas de Prueba de Participación?

Mientras pueda atraer suficientes participantes honestos que dificulten a los atacantes el control del poder de hash de la mayoría, el PoW ha demostrado ser seguro. No obstante, existen (potenciales) desventajas para la Prueba de Trabajo (Proof of Work -PoW), por ejemplo:

  • El uso intensivo de la potencia de cálculo consume mucha energía. Sin embargo, la eficiencia de los equipos mineros sigue mejorando, los mineros tienden a buscar fuentes de energía baratas (a menudo renovables) y se puede argumentar que el valor añadido de Bitcoin a la sociedad justifica su alto consumo de energía. De cualquier manera, un sistema que pueda lograr una seguridad similar con un menor consumo de energía sería favorable desde una perspectiva ambiental.
  • En las criptomonedas PoW con un suministro limitado (por ejemplo, Bitcoin), el número de monedas nuevas que se pueden extraer disminuye con el tiempo y, en algún momento, sólo hay disponibles tarifas como recompensas en bloque. Queda por ver si las recompensas por bloque basadas en honorarios serán lo suficientemente valiosas para cubrir los costos de los mineros y seguir incentivándolos a participar en el futuro (lejano).
  • En PoW, los poseedores de monedas sin un nodo (minero) no pueden participar directamente en la gobernanza de la red (además de “votar con los pies” al elegir qué tenedor apoyar u optar por no participar vendiendo sus monedas), mientras que sus intereses no se alinean necesariamente con los de los desarrolladores y mineros.

Los sistemas de Prueba de Participación (Proof of Stake - PoS) intentan mejorar estos aspectos. En PoS, los participantes en el mecanismo de consenso esencialmente ponen el dinero fiduciario “en juego” convirtiéndolo en el hardware y la electricidad necesarios para participar. En PoS, los participantes utilizan la propia moneda nativa de la cadena de bloques para demostrar que tienen “piel en el juego”. Como resultado, no se necesitan cálculos intensivos, reduciendo el consumo de energía y, en algunos casos, participando en la gobernanza de la red a través de la votación.

Esto puede parecer un home-run, pero los sistemas PoS también tienen problemas de diseño.

En primer lugar, está el problema de la simulación sin costes, que está relacionado con el problema de la nada en juego. Dado que no se requieren recursos físicos para producir bloques, es posible construir una historia alternativa de la cadena de bloques y así crear múltiples cadenas competidoras sin costo alguno, a diferencia de lo que ocurre en el PoW, donde los costos de energía deben hacerse para cada cadena competidora. Algo relacionado con esto es el problema de los ataques de molienda (grinding attacks) , que si los bloques mismos son la fuente de aleatoriedad utilizada para elegir a los creadores de los bloques, un atacante puede manipular esta aleatoriedad e infinitamente seleccionarse a sí mismo para `ganar’.

Algunos sistemas (por ejemplo, en Casper, el protocolo PoS sugerido por Ethereum) han propuesto que este problema podría resolverse congelando las monedas en participación y castigando a los nodos cortando sus monedas si se observa un comportamiento malicioso. Aunque esto puede desincentivar a los nodos para que no actúen maliciosamente, también limita la capacidad de los participantes honestos para gastar sus monedas e incluso puede poner en riesgo las monedas de los participantes honestos (por ejemplo, en caso de un ataque del 51%, que en el caso de Ethereum Casper sería un ataque del 34%).

Como resultado, la regla de la cadena más larga no es directamente aplicable en PoS de la misma manera que se utiliza en PoW. Los nodos que se(re)unen a la red por primera vez o después de estar fuera de línea durante un tiempo, necesitan confiar en la información que reciben de otros nodos. Esto se conoce como el problema de arranque (bootstrapping), que aumenta la vulnerabilidad de la red ante ataques de largo alcance. En un ataque de largo alcance, se ofrece a un nodo una versión alternativa de la cadena de bloques y el nodo tiene información limitada o no dispone de información reciente para distinguir si ésta es la versión correcta.

PoS no es un concepto nuevo, pero ningún sistema PoS hasta la fecha ha superado todos estos retos de diseño para alcanzar el mismo nivel de seguridad que Bitcoin.

¿Cómo intenta Cardano resolverlos?

Cuando el documento de Bitcoin fue lanzado el 31 de octubre de 2008 y la red se puso en marcha el 3 de enero de 2009, comenzó esencialmente como un experimento. Aunque el concepto estaba claramente muy, muy bien pensado, no se demostró matemáticamente que los reclamos de seguridad fueran correctos en un entorno académico hasta el año 2015. El concepto de PoW fue inventado en 1997 por Adam Back (ahora CEO de Blockstream) para Hashcash, un sistema que tenía como objetivo prevenir ataques de denegación de servicio (DoS) y spam por correo electrónico. Sin embargo, no fue hasta que se combinó con la estructura de incentivos de Bitcoin hasta que se convirtió en un éxito.

De manera similar, Cardano espera tomar el concepto de PoS y resolver sus deficiencias. A diferencia de Bitcoin, donde la práctica precedió a la teoría formal, su objetivo es hacerlo dejando que la teoría formal preceda a la práctica y demostrando que cada afirmación de seguridad es matemáticamente correcta antes de implementarla.

Cardano consta de dos capas: una capa de contabilidad (settlement layer) en la que se ejecutan las transacciones monetarias y una capa computacional (computational layer) que se utiliza para los contratos inteligentes. Al hablar de la seguridad de Cardano, obviamente ambos aspectos podrían ser tomados en cuenta. Este artículo se centrará estrictamente en la seguridad de la capa de contabilidad de Cardano, mientras que la seguridad de su capa de contratos inteligentes (por ejemplo, en comparación con Ethereum) se discutirá en un artículo futuro.

Aunque Cardano como ecosistema fue lanzado por Input Output Hong Kong (IOHK), Emurgo y la Fundación Cardano, es responsabilidad de IOHK desarrollar la tecnología de la propia cadena de bloques. Desde su lanzamiento en 2015, se han publicado más de 40 artículos académicos relacionados con Cardano, algunos de los cuales se pueden encontrar en la biblioteca de investigación del sitio web del IOHK. El programa de investigación para el mecanismo de consenso de la capa de contabilidad se tituló “Ouroboros”.

Ouroboros (Clásico)

La primera versión de Ouroboros (que ahora se conoce como Ouroboros Classic) se centró en la seguridad en un entorno síncrono; una situación en la que los nodos siempre están en línea y listos para producir bloques cuando sea necesario, mientras que todos sus relojes están funcionando en sincronización.

En Ouroboros, un período de tiempo llamado una “época” se divide en 21.600 “franjas” (slots) de tiempo que duran 20 segundos cada una, lo que significa que cada época es exactamente 5 días. Cada franja representa una ventana de tiempo de 20 segundos en la que el “líder de franja” (un nodo seleccionado) puede crear un bloque. Antes de que comience una época, todos los líderes de franja para esta época son elegidos al azar.

Para ello, en Ouroboros Classic se utiliza un método llamado “Follow-the-Satoshi”, inventado por el creador de Litecoin Charlie Lee en 2012. En pocas palabras, cada Lovelace (0.000001 ADA, similar a como 1 Satoshi es 0.00000001 BTC) que está participando representa un billete de lotería para ganar los derechos para crear un bloque. Esto significa que cualquier persona puede participar con cualquier cantidad de activos (incluso con 1 Lovelace) y que las posibilidades de ganar son proporcionales al número de monedas acumuladas - cuanta más acumulación, mayor es la posibilidad de ser elegido.

Sin embargo, una lotería necesita algo más que billetes de lotería, también necesita un método para seleccionar al azar al ganador. Para ello, en el bloque génesis de Cardano (el primer bloque generado), se colocó una semilla de números aleatorios que determinó a los líderes de las franjas durante la primera época. En Ouroboros Classic, la semilla de aleatoriedad para la siguiente época se genera utilizando un esquema criptográfico llamado compartición secreta públicamente verificable (PVSS). En esencia, cada vez que se crea un bloque, los nodos juegan un juego de tirar una moneda para generar un número aleatorio, y usan PVSS para encriptar los resultados en la cadena de bloques (una descripción más detallada se puede encontrar aquí), haciéndolos públicamente verificables. Al final de la época, estos números se combinan (usando un método llamado XOR) para producir un número aleatorio final que todos los participantes usan para elegir líderes de franja para la siguiente época. Puesto que los datos de la aleatoriedad creados durante la época alimentan la siguiente, se forma un lazo cerrado. Por eso el protocolo se llamó Ouroboros, en honor a una mítica serpiente que se mordió su propia cola.

Ouroboros

Ouroboros Classic fue el primer protocolo PoS que se demostró matemáticamente que garantiza la persistencia y la vitalidad en un entorno sincrónico, bajo el supuesto de que una mayoría honesta está participando. Sin embargo, los nodos pueden desconectarse accidentalmente (por ejemplo, un corte de energía o un fallo de la computadora) o intencionalmente (por ejemplo, el titular del nodo se detiene), y los relojes de Internet no suelen estar sincronizados en su totalidad, lo que significa que el “uso en el mundo real” del protocolo no suele ser un ajuste sincrónico. Además, la selección del líder de franja es totalmente transparente en Ouroboros Classic y los líderes de franja son conocidos de antemano, lo que no es ideal desde el punto de vista de la seguridad. Por eso, la segunda versión del protocolo, Ouroboros Praos, se centró en la seguridad en un entorno semisincrónico y en ocultar el proceso de selección de los líderes de franja.

Ouroboros Praos

Praos es el término griego antiguo para “relajarse”, que se refiere a la característica del protocolo que los participantes no necesitan enfatizar sobre el hecho de estar continuamente en línea con un reloj sincronizado. Para lograrlo, se combinan algunas técnicas.

Primero, el método PVSS fue reemplazado por una función criptográfica llamada Función Aleatoria Verificable (VRF). Los VRF fueron inventados originalmente por el ganador del Premio Turing Silvio Micali, quien actualmente es profesor en el MIT y está trabajando en una criptomoneda llamada Algorand. Durante cada época, los nodos participantes utilizan tres cosas en la elección del líder de la franja horaria:

  • la distribución instantánea de los activos (stake) para la época que se crea antes de que comience,
  • la semilla de aleatoriedad que se calcula en base a la época anterior,
  • y el propio VRF que se especifica en el protocolo como parte de la base de código de cada nodo.

La distribución instantánea de los activos es bastante sencilla. Antes de que comience una nueva época, se hace un panorama de todos los Lovelaces que están participando (staked) y que nodos controlan sus derechos de participación en ese momento. Dado que este panorama se utiliza durante toda la elección del líder de la franja, las monedas en juego nunca se congelan y, por lo tanto, se pueden gastar en todo momento.

Durante la época, los nodos utilizan el vistazo de la distribución de activos (stake) y la semilla de aleatoriedad que se calculó durante la época anterior como entradas para su VRF para crear un número pseudo-aleatorio que determina si ha ganado la elección. El nodo que gana la elección crea el bloque y cifra este número en la cabecera del bloque. Todos los demás nodos usan su propio VRF para validar si el número que fue encriptado en el bloque fue realmente el nodo que ganó la elección basado en la semilla de aleatoriedad. Por lo tanto, los nodos no descubren quién ganó la elección del líder de franja hasta que se firma el bloque (o si ganaron ellos mismos). Esto también significa que si un nodo está listo para crear un bloque pero está fuera de línea en ese momento, la oportunidad de hacerlo simplemente pasa y los otros nodos nunca averiguan quién se supone que creó este bloque. El bloque no puede ser creado por otro nodo (por ejemplo, un atacante), ya que sería reconocido como inválido por el resto.

Una vez cada época, (a ~3/4,) todos los números que fueron encriptados en las cabeceras de los bloques se combinan (también usando XOR, como en Ouroboros Classic). Todos los nodos usan esto como entrada para calcular localmente la semilla de aleatoriedad para la siguiente época. Dado que todos los nodos están tomando los mismos números de la misma cadena de bloques y utilizan el mismo método para combinarlos, todos los resultados coinciden, aunque los nodos los calculen localmente. Esta semilla de aleatoriedad recién creada y la nueva instantánea de la distribución de la estaca se utilizan en la siguiente época, creando un ciclo interminable que se repite a lo largo de cada época.

En Ouroboros Praos, las pruebas matemáticas ilustraron que la persistencia y la vitalidad pueden garantizarse incluso en un entorno semisincrónico, también bajo el supuesto de que una mayoría honesta está participando. Sin embargo, el problema del arranque aún no se había resuelto, por lo que se convirtió en el centro de atención de la tercera versión del protocolo: Ouroboros Genesis.

Ouroboros Genesis

Ouroboros Génesis

Como se ha descrito anteriormente, cuando un nuevo nodo o un nodo que ha estado fuera de línea durante un tiempo se(re)une a la red, necesita ser capaz de confiar en la información que le dan otros nodos sobre qué versión de la cadena de bloques representa la verdad. En el PoW, esto se puede hacer utilizando la regla de la cadena más larga, ya que la mayor parte del trabajo se dedicó a crearla y, por lo tanto, se la considera la “versión verdadera” del libro mayor, bajo el supuesto de que la mayoría de los mineros son honestos. Los protocolos PoS utilizan métodos alternativos (por ejemplo, puntos de control de movimiento locales o tolerancia a fallos bizantina), pero estos sólo funcionan en un entorno sincrónico en el que los nodos están siempre en línea, lo que es una suposición que es prácticamente imposible de mantener en un entorno del mundo real. En el artículo de Ouroboros Genesis, los autores llegan incluso a la conclusión de que ninguno de los sistemas PoS existentes en la actualidad puede realizar la funcionalidad completa del libro mayor de la misma manera que Bitcoin lo hace en un entorno de este tipo.

Para resolver el problema de arranque, se propone una nueva regla de selección de cadena llamada ‘Regla de Plenitud’ en Génesis de Ouroboros. Mientras que las pruebas matemáticas que se describen en el artículo de 64 páginas son difíciles de entender para los no criptógrafos (aunque este video de Aggelos Kiayias, uno de los autores, podría ser de ayuda), los autores muestran que las cadenas de bloques adversarias en Ouroboros exhiben una distribución de bloques menos densa después del punto en el que se separan de otras versiones de la cadena. En pocas palabras, la cadena del atacante contendrá menos bloques en el período de tiempo poco después del punto de divergencia, a pesar de que potencialmente contenga más bloques en conjunto y sea la cadena más larga.

Por lo tanto, cuando se dispone de múltiples cadenas de longitud similar, la Regla de Plenitud busca el punto en el que las cadenas divergen y `se fueron por su cuenta’ en cuanto a su distribución de bloques. Luego divide el pasado más reciente de la historia de la cadena en períodos y determina para qué versión la distribución de bloques después del punto de divergencia es la más densa - que es la cadena que se seleccionará. Debido a esta regla, los nodos que son nuevos en la red o que han estado fuera de línea por un tiempo pueden (re)unirse y tener la garantía de descargar la versión correcta de la cadena, siempre y cuando haya suficientes partes honestas. Esto resuelve el problema de arranque y ayuda a prevenir ataques de largo alcance.

Hay que tener en cuenta que la Regla de la Plenitud sólo funcionará en un protocolo como el de Ouroboros, donde el tiempo se divide en franjas horarias y se eligen de antemano los líderes de las franjas horarias para toda la época y los nodos pueden verificar si cada bloque fue creado por el nodo correcto. Esta combinación de características hace posible garantizar que nadie pueda falsificar su manera de crear un bloque durante la franja de otra persona. Como resultado, es imposible que un solo nodo cree una cadena falsa a menos que tenga muchas y muchas ranuras vacías - y por lo tanto se descarta automáticamente debido a la Regla de Plenitud, ya que es menos densa.

Desde la ‘actualización’ del protocolo de la versión de Génesis, Ouroboros es el primer protocolo PoS que ha demostrado matemáticamente que garantiza persistencia y vitalidad tanto en un entorno síncrono como semisíncrono - bajo el supuesto de que una mayoría honesta participa, al igual que Bitcoin. Por lo tanto, es más seguro que otros protocolos PoS que requieren al menos 2/3 de participantes honestos (por ejemplo, Ethereum Casper, Algorand) e igualmente seguro que Bitcoin, pero con un gasto energético mucho menor y un mejor rendimiento.

Mientras que Cardano es igualmente seguro que Bitcoin para prevenir ataques del 51%, Bitcoin tiene una ventaja sobre Cardano después de que se ejecuta un ataque del 51%. En Bitcoin, la minoría honesta podría simplemente añadir más poder de hash para recuperar el control sobre la red añadiendo nuevos mineros a la red. En Cardano, una vez que un atacante posee el 51% del suministro en participación (staked) o incluso en circulación (lo que también garantizaría al atacante tener la mayoría del suministro en participación), el control sobre la red sólo puede recuperarse si el atacante vende sus monedas o bifurcando (forking) la cadena de bloqueo. Sin embargo, ¿es probable que alguien pueda controlar una participación tan grande? Echemos un vistazo.

Continuar leyendo Parte 2 de 2

4 Likes