Verificación formal en contratos inteligentes

La verificación formal de los contratos inteligentes es una tendencia emergente en el espacio de las criptomonedas centrada en reducir las instancias de errores y vulnerabilidades de los contratos inteligentes que han dado lugar a numerosos ataques de alto perfil y problemas de seguridad endémicos..

La verificación formal tiene una amplia variedad de aplicaciones en lo que respecta a los sistemas de hardware y software. Se ha vuelto sumamente importante a medida que aumenta la complejidad de los sistemas, particularmente con el hardware. En las redes blockchain, la letanía de vulnerabilidades y exploits de contratos inteligentes ha llevado a la necesidad de mejorar la programación y auditoría de contratos inteligentes..

Verificación formal en contratos inteligentes

Antecedentes de la verificación formal

Usos de verificación formal métodos formales para comprobar si el diseño de un sistema de hardware o software cumple o no un conjunto específico de propiedades. Los métodos formales son un tipo particular de técnica matemática para la especificación, desarrollo y verificación de sistemas de hardware y software. El uso de métodos formales para probar o refutar la exactitud de los algoritmos previstos se conoce como verificación formal..

A Martin Davis se le atribuye el desarrollo de la primera prueba matemática generada por computadora en 1954. El concepto comenzó a ganar fuerza en la década de 1960 para verificar la exactitud de los programas de computadora en los primeros lenguajes como Pascal y Java. Siguiendo algunos errores informáticos de alto perfil, como el Error de Pentium FDIV En 1994, el sentimiento de que la verificación formal debía ser ubicua comenzó a crecer como una bola de nieve..

La prueba de un sistema de software o hardware se puede dividir en dos fases generales:

  1. Validación
  2. Verificación

La validación es determinar si el producto satisface las necesidades del usuario..

La verificación consiste en probar si el producto se ajusta o no a las especificaciones..

La verificación consiste en producir un modelo matemático abstracto que se correlaciona con las especificaciones de diseño del producto (es decir, algoritmo, chip de hardware), mientras que los métodos formales utilizados para generar el modelo provienen principalmente de los fundamentos teóricos de la informática..

El uso de la verificación formal se ha vuelto extremadamente importante en los sistemas de hardware, donde casi todos los principales fabricantes de hardware la utilizan para garantizar la solidez de sus productos. Sin embargo, su uso no es tan frecuente en software como en hardware, lo que se atribuye principalmente a la naturaleza comercial de la fabricación de hardware..

Sin embargo, esa dinámica está comenzando a cambiar con el advenimiento de las cadenas de bloques y las criptomonedas, donde considerables transferencias de valor se ejecutan de forma autónoma a través de una red descentralizada. Con más valor en juego que los sistemas tradicionales, la corrección de los contratos inteligentes se ha convertido en una preocupación apremiante.

A breve historia de exploits de contratos inteligentes es todo lo que se necesita para comprender las consecuencias de vulnerabilidades simples en el código del contrato.

Por qué usarlo para contratos inteligentes?

Según un reciente estudio realizado en casi 1 millón de contratos inteligentes de Ethereum, 34.200 de ellos fueron marcados como vulnerables, en 10 segundos por contrato. Ese número asombroso se alcanzó analizando las vulnerabilidades de seguimiento de los contratos inteligentes, que incluyen:

  • Encontrar contratos que bloqueen fondos indefinidamente
  • Contratos que filtran fondos descuidadamente a usuarios arbitrarios
  • Contratos que cualquiera puede matar

Junto con la complejidad lógica general y la novedad asociadas con la programación de contratos inteligentes para cadenas de bloques, su naturaleza inmutable, una vez que están comprometidos con la cadena de bloques, hace que las vulnerabilidades sean potencialmente mucho más dañinas..

Brian Marick y Daejun Park ofrecen una excelente análisis de las vulnerabilidades de los contratos inteligentes y cómo la verificación formal puede ayudar a mitigar sus instancias. Básicamente, hay dos formas en las que un desarrollador puede no obtener lo que quiere de un contrato inteligente..

  1. Intención incomprendida
  2. Cometer un error al implementar esa intención

Muchos de estos errores estándar pueden conducir a enormes sumas de fondos bloqueados como con el Cartera de paridad o con Ethereum exploit de envío recursivo en el Incidente de DAO. La verificación formal se utiliza como una forma de confirmar matemáticamente que vulnerabilidades específicas no conducirán a vectores de explotación dañinos..

Se utiliza una especificación formal como el resultado o salida precisa que busca un contrato inteligente, que una computadora puede verificar. Posteriormente, la verificación tiene lugar una vez que el contrato se compila con el código de bytes y la verificación formal demuestra que el código de bytes compilado implementa la especificación. Sin embargo, realizar verificaciones formales manualmente es un proceso arduo y, a veces, conlleva sus propios errores. Incluso la verificación de los resultados de las pruebas formales puede tener sus matices.

Herramientas como la Asistente de prueba de Coq se han desarrollado para ayudar a facilitar las pruebas mecanizadas sobre las propiedades de los programas y actualmente es utilizado por varias criptomonedas emergentes con los lenguajes que utilizan incrustados en Coq.

Si bien la auditoría de contratos inteligentes proporciona una capa de garantía muy necesaria a través de revisiones de código, la verificación formal de contratos inteligentes puede ayudar a reducir aún más los casos de vulnerabilidades a través del análisis matemático. Con los contratos inteligentes cada vez más frecuentes, parece natural que la aplicación de la verificación formal se generalice más en la industria..

Aplicaciones actuales de la verificación formal

Varias plataformas ya están integrando la verificación formal o planean hacerlo pronto. La evaluación de la seguridad y la protección de los contratos inteligentes que operan dentro de estas plataformas será vital para medir su efectividad a la hora de detener las vulnerabilidades críticas..

Zilliqa

Zilliqa es una cadena de bloques de alto rendimiento diseñada para alojar aplicaciones descentralizadas (dapps) escalables y seguras. Varios de los desarrolladores técnicos detrás de Zilliqa fueron autores del estudio anterior que descubrió las miles de debilidades de los contratos inteligentes..

Zilliqa

Zilliqa utiliza un nuevo lenguaje de programación llamado Scilla, diseñado por miembros del equipo de Zilliqa y algunos otros afiliados. Scilla es un lenguaje de nivel intermedio que está integrado en Coq Proof Assistant. Está destinado a ser un objetivo de traducción para idiomas de nivel superior para realizar análisis y verificación antes de que los contratos se compilen en bytecode..

Tezos

Tezos está escrito en OCaml y su lenguaje de contrato inteligente es Michelson, basado en OCaml. OCaml fue seleccionado por sus ofertas de programación funcional de velocidad, sintaxis y semántica inequívocas, y capacidades para implementar pruebas formales. Tezos también utiliza Coq Proof Assistant para facilitar la verificación formal de contratos inteligentes..

Guía de Tezos

Arthur Breitman, el cofundador de Tezos, al corriente detalles sobre la verificación de algunos Contratos de Michelson en Coq, incluido un contrato multi-sig en su testnet el año pasado. Tezos se lanzó recientemente, por lo que su aplicación de verificación formal debería proporcionar un indicador excelente del estado de seguridad mejorada de los contratos inteligentes que utilizan el método. Si los exploits que han plagado los contratos de Solidity se desarrollarán o no en Tezos, llevará algún tiempo desarrollarse, pero evaluar qué tan seguros se vuelven los contratos inteligentes en Tezos podría ser muy indicativo de una tendencia continua..

Cardano

Cardano está escrito en Haskell y su lenguaje de contrato inteligente es Plutus, que se basa en Haskell.

Guía de Cardano

Cardano está diseñado con una capa de cálculo de Cardano (CCL) que consta de 2 capas:

  1. Una máquina virtual y un marco de lenguaje formalmente especificados
  2. Idiomas formalmente especificados que facilitan la verificación del código de contrato inteligente

El objetivo es crear un entorno que agilice el proceso de garantizar que un contrato funcione según lo diseñado sin vulnerabilidades catastróficas. En particular, Cardano no utiliza un diseño de pila acotado como el EVM de Ethereum, por lo que no preocuparse por el flujo aritmético de la pila le permite verificar formalmente los contratos inteligentes mucho más fácilmente..

Ethereum

Ethereum ha estado investigando la incorporación de la verificación formal durante bastante tiempo, con varios proyectos investigando su potencial. Una de esas publicaciones, “Hacer que los contratos inteligentes sean más inteligentes,”Se centra en los errores de contratos inteligentes y sugiere formas de mitigarlos, incluida la mejora de la semántica operativa de Ethereum para fomentar la verificación formal..

Guía de Ethereum

Los límites de gas en Ethereum lo hacen desafiante para implementar la verificación formal. Además, la única forma de conocer el significado de un programa Solidity es compilarlo en código de bytes. El compilador cambia rápidamente, por lo que las herramientas de verificación también deberían ajustarse a la tasa de cambio. Teniendo en cuenta la red y el historial establecidos de Ethereum, la verificación formal de los contratos inteligentes en Ethereum proporcionaría aparentemente el mejor indicador de su eficacia para mitigar las vulnerabilidades si la verificación formal se utilizara ampliamente en la red..

Conclusión

La verificación formal es una tarea muy compleja y ardua. A pesar de esto, se ha convertido en un estándar universal en la industria del hardware y es probable que continúe ganando impulso en el espacio del software. Las cadenas de bloques y las redes de criptomonedas, donde las transferencias de alto valor son comunes, seguramente acelerarán este efecto. Medir el impacto positivo de la verificación formal de los contratos inteligentes probablemente tardará varios años en desarrollarse, ya que solo estamos viendo los comienzos de lo que debería convertirse en una tendencia mucho más amplia en la industria..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me