{"id":15286,"date":"2019-08-30T09:13:31","date_gmt":"2019-08-30T15:13:31","guid":{"rendered":"https:\/\/latam.kaspersky.com\/blog\/?p=15286"},"modified":"2019-11-22T02:46:21","modified_gmt":"2019-11-22T08:46:21","slug":"integer-overflow-ethereum","status":"publish","type":"post","link":"https:\/\/latam.kaspersky.com\/blog\/integer-overflow-ethereum\/15286\/","title":{"rendered":"Contratos inteligentes: dinero a cambio de nada"},"content":{"rendered":"<p>\u00bfTe interesan los contratos inteligentes? \u00bfSabes lo que es un desbordamiento de enteros? El desbordamiento de enteros es un problema del mundo de la programaci\u00f3n, pero un contrato inteligente es b\u00e1sicamente un programa, por lo que seguramente te interese conocer de qu\u00e9 se trata.<\/p>\n<p>En pocas palabras, si un entero sin signo se almacena en una \u00fanica celda de memoria de bytes, solo podr\u00e1 tomar los valores que van de 0 a 255. Por tanto, si no se especifica lo contrario, 255 + 1 = 0, pero, lo que es m\u00e1s preocupante: 0 \u2013 1 = 255. De esta forma procesan sus datos los procesadores modernos.<\/p>\n<p>En muchos lenguajes de programaci\u00f3n modernos, el mismo programa controla si ha habido un desbordamiento durante las operaciones aritm\u00e9ticas. De ser as\u00ed, es muy probable que no fuera lo que el programador ten\u00eda en mente, por lo que es mejor interrumpir el programa y asegurarse de que no cause errores m\u00e1s adelante.<\/p>\n<h2><strong>Pero \u00bfqu\u00e9 relaci\u00f3n guardan los contratos inteligentes con todo esto?<\/strong><\/h2>\n<p>Este control no se realiza en los contratos inteligentes de Ethereum cuando se procesa dinero. Es decir, si tienes cero <em>tokens<\/em> y env\u00edas uno a un amigo, recibir\u00e1s un trill\u00f3n de <em>tokens<\/em>. Evidentemente, se deber\u00eda interrumpir el programa de inmediato y cancelar la transacci\u00f3n incorrecta.<\/p>\n<p>Resulta todo un misterio por qu\u00e9 los desarrolladores de Ethereum implementar\u00edan su aritm\u00e9tica de esa forma. Pero para que las reglas universales de las matem\u00e1ticas humanas se apliquen a los contratos inteligentes, cada programador debe a\u00f1adir m\u00e1s de 100 l\u00edneas de c\u00f3digo que contengan funciones habituales para la suma, multiplicaci\u00f3n, etc.<\/p>\n<p>No obstante, con un trill\u00f3n en su cuenta, no hay l\u00edmites. Un estafador podr\u00eda acceder a una plataforma de intercambio de criptomonedas y comprar todos los <em>bitcoins<\/em> o <em>ether<\/em> que desee y a cualquier precio.<\/p>\n<p>Pero esta situaci\u00f3n es m\u00e1s que una teor\u00eda, pues ya ha ocurrido varias veces con diferentes tipos de criptomonedas. Como norma general, descubrimos el problema en el c\u00f3digo <a href=\"https:\/\/etherscan.io\/tx\/0xfd2d1ab0bb7ca5df5228aa3ac714ba160f57e6bc153e10b490e92bf50dc9f566\" target=\"_blank\" rel=\"noopener nofollow\">cuando el criminal ya ha realizado el truco<\/a> y ha desaparecido con los bolsillos llenos. Despu\u00e9s, nada se puede hacer: los contratos inteligentes est\u00e1n tallados en piedra, no se pueden modificar ni parchar.<\/p>\n<h2><strong>Bitcoin y el desbordamiento<\/strong><\/h2>\n<p>A decir verdad, el problema del desbordamiento de enteros no se limita a Ethereum. Bitcoin ya se enfrent\u00f3 al problema mucho antes.<\/p>\n<p>El desbordamiento de enteros provoc\u00f3 que dos monederos de Bitcoin <a href=\"https:\/\/en.bitcoin.it\/wiki\/Value_overflow_incident\" target=\"_blank\" rel=\"noopener nofollow\">acabaran<\/a> con 148 mil millones de <em>bitcoins<\/em> el 15 de agosto del 2010. Est\u00e1 de m\u00e1s decir que los fundadores (con Satoshi Nakamoto entre ellos) no recibieron muy bien la noticia; modificaron r\u00e1pidamente el c\u00f3digo, solucionaron el error, restauraron el historial financiero e hicieron como si no hubiera pasado nada.<\/p>\n<p>Pero \u00bfqu\u00e9 significa esto? Pongamos un ejemplo: si yo hubiera comprado <em>bitcoins<\/em> por el valor de 10000 d\u00f3lares ese d\u00eda en concreto, esta restauraci\u00f3n hubiese provocado que mis <em>bitcoins<\/em> volvieran al vendedor y que yo recuperara mis d\u00f3lares. Pero si la restauraci\u00f3n tuviera lugar ahora y no en el 2010, las consecuencias ser\u00edan enormes, ya que todos los d\u00edas se mueven alrededor de 5 mil millones de d\u00f3lares en transacciones de <em>bitcoin<\/em>.<\/p>\n<p>El precedente, al igual que otros casos, demuestra que, si todo sale seg\u00fan lo establecido, no podremos cambiar la cadena de bloques. De lo contrario, se pueden alterar tanto el plan como la propia cadena.<\/p>\n<h2><strong>Sigamos con los contratos inteligentes<\/strong><\/h2>\n<p>La decisi\u00f3n de los desarrolladores de Ethereum resulta muy extra\u00f1a: parece como si estuvieran tendiendo una trampa a los programadores de contratos inteligentes. Tienes que ser muy experimentado o estar muy centrado (o ambos) para evitar que t\u00fa o tus inversores sufran grandes p\u00e9rdidas de dinero de la noche a la ma\u00f1ana. Y este es otro de los motivos por los que el c\u00f3digo de los contratos inteligentes exige una comprobaci\u00f3n exhaustiva. Como parte de Kaspersky Token Offering Security, nuestros expertos analizan el c\u00f3digo de los contratos inteligentes en busca de vulnerabilidades y caracter\u00edsticas que no est\u00e9n registradas. Para saber m\u00e1s sobre este tema, visita nuestra p\u00e1gina <a href=\"https:\/\/www.kaspersky.com\/enterprise-security\/ico-sto-security\" target=\"_blank\" rel=\"noopener nofollow\">Token Offering Security<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es el desbordamiento de enteros y por qu\u00e9 deber\u00edas conocer el tema?<\/p>\n","protected":false},"author":669,"featured_media":15287,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2795,3539,3540],"tags":[2546,3157,3156],"class_list":{"0":"post-15286","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-cadena-de-bloques","11":"tag-contratos-inteligentes","12":"tag-ethereum"},"hreflang":[{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/integer-overflow-ethereum\/15286\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/integer-overflow-ethereum\/16601\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/integer-overflow-ethereum\/13993\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/integer-overflow-ethereum\/18541\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/integer-overflow-ethereum\/16633\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/integer-overflow-ethereum\/19176\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/integer-overflow-ethereum\/17870\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/integer-overflow-ethereum\/28140\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/integer-overflow-ethereum\/28188\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/integer-overflow-ethereum\/12204\/"},{"hreflang":"pl","url":"https:\/\/plblog.kaspersky.com\/integer-overflow-ethereum\/11109\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/integer-overflow-ethereum\/20008\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/integer-overflow-ethereum\/24216\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/integer-overflow-ethereum\/22060\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/integer-overflow-ethereum\/23322\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/integer-overflow-ethereum\/23233\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/latam.kaspersky.com\/blog\/tag\/contratos-inteligentes\/","name":"contratos inteligentes"},"_links":{"self":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/15286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/users\/669"}],"replies":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/comments?post=15286"}],"version-history":[{"count":4,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/15286\/revisions"}],"predecessor-version":[{"id":15782,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/15286\/revisions\/15782"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/15287"}],"wp:attachment":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=15286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=15286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=15286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}