Pero entre todas esas cosas nuevas y novedosas... ¿Qué cosas son las cruciales que todos deberíamos saber para defender nuestros derechos en ese contexto?
Con el Experimento de Satoshi Nakamoto se supo que hay "personas" o quizá organizaciones que usan herramientas matemáticas adelantadas por añosde todo el público en general, e incluso se supo que hacen lenguajes nuevos con fines de probar romper/mejorar la seguridad de los sistemas. ¿Y las de los demás?
Por eso, hay un principio sobre el cual debemos hacer conciencia, para empezar: La criptografía
SHA Collisions
La falta de seguridad que ofrece Internet es una de las principales razones por los que esta técnica ha incrementado su presencia en la actualidad. Se usa desde aplicaciones como encriptación para enviar archivos, guardar contraseñas etc.
Gracias a éstas soluciones en la matemática han podido aparecer actores como Wikileaks, que es un difusora de documentos filtrados que revelan cientos de miles de informes sobre diferentes aspectos de la diplomacia norteamericana y del mundo mostrando en su mayoría abusos de poder y corrupción.
Ok entonces éste tipo de funciones encriptan…Qué¿?
SHA es una manera de codificar la información para protegerla frente a terceros.
Para poder desencriptar el mensaje encriptado, será necesaria la clave que sólo conoce el receptor autorizado. Y solamente a través de ella es como se puede leer y conocer el contenido original.
La principal preocupación de estas entidades es que lleguen los mensajes enviados, única y exclusivamente, a los receptores que ellos quieran.
Estas propiedades tienen aplicaciones de seguridad como la libre colisión, que quiere decir que si se toma dos entradas diferentes, es imposible que el hash de la primera entrada, sea igual al hash de la segunda entrada, osea, es prácticamente imposible encontrar dos valores ‘a’, ‘b’ , tal que a ≠ b, al mismo tiempo que H(a)=H(b)
Con éstos básicos, podemos ver claramente que el "SHA" (Secure Hash Algorithm, Algoritmo de Hash Seguro) es una familia de funciones hash importante y que se ha usado para la seguridad de los sistemass de todo el planeta. Posteriormente se han publicado mejoras como SHA-2 en 2001, SHA-3 etc.
Y como es de esperarse, a lo largo de su historia, se han producido ataques a estas familias:
En 2004 se encontró una debilidad matemática en SHA-1, que permitiría encontrar colisiones de hash más rápido. Sin embargo, este hallazgo resulta poco relevante, pues la complejidad de búsqueda de colisiones algo que aún es computacionalmente inviable.
Pero....el 23 de febrero de 2017, un equipo formado por Google y CWI Amsterdam anunció la primera colisión de SHA-1, la cual ha sido nombrada como SHAttered. Rompiendo para siempre dicho algoritmo.
Algo más reciente y por la cual se está volviendo tan necesario éstos conceptos es por Blockchain y su prometedora gama de opciones con Smart Contracts. En éste sentido, Ethereum tiene la ventaja tecnológica, un ejemplo de éste panorama de seguridad para la libertad es The DAO. El caso cuando un hacker logro sacar la cifra de 150 millones de dólares utilizando el envío recursivo de Ethereum.
Esta hazaña no es trivial; se pretendía hacer con anterioridad un cambio en el lenguaje, pero mientras se escribía de eso, el hacker estaba preparando e implementando una hazaña que apuntaba a la misma función para hackear al proyecto de Crowdfunding más fondeado de toda la historia. (En su momento)
Vamos a entrar en la vista general del ataque. El atacante estaba analizando DAO.sol, y notó que la función 'splitDAO' era vulnerable al patrón de envío recursivo.
Osea, actualizaba los saldos de los usuarios y los totales al final y mientras eso pasaba, cualquiera de las llamadas de función podría ocurrir como llamar a splitDAO de nuevo, obteniendo el retiro "infinita".
Contratos Inteligentes en Solidity y pruebas seguras
¿Cómo hacer pruebas de seguridad en smart contracts?
Hoy en día hay muchas soluciones de seguridad y nos parece fundamental distribuirlas en la comunidad.
¿Qué pasa en tu stack cuando algo inesperado pasa? Es decir, qué sucede cuando tienes inputs inválidos, o se tienen que procesar números tan grandes que son procesados incorrectamente dentro de Solidity.
Un ejemplo de eso es multiplicar números tan grandes entre sí mismos que no quepan en 256 bits (overflow).
Entre los patrones de programación con éstos fines podemos notar muchos contratos abstractos que usan Callfunctions y para entrar en una aserción (assertion) que simplemente te regresa "false" en lugar de ejecutar de formas inesperada nuestro código.
pragma solidity ^0.4.19;
// Tenemos que especificar qué versión del compilador compilará este código
Library SafeMult {
function mul(unit256 _a, unit256 _b) internal pure returns (uinnt256) {
if (_a ==0) {
return 0;
}
uint256 c = _a * _b;
require(c / _a == _ b);
return c;
}
}
Opción:
Contratos Proxy
pragma solidity ^0.4.18;
// Tenemos que especificar qué versión del compilador compilará este código
import "./SafeMult.sol";
contract SafeMultProxy {
using SafeMult for uint;
function mulProxy(uint256 a, uint256 b) returns (uint256) {
return a.mul(b);
}
}
Recientemente el ide de ethereum añadió una función interesante para hacer units tests con éste fin.
Una propuesta sería para dichos tests:
pragma solidity ^0.4.18;
import "./SafeMultProxy.sol";
contract SafeMultProxyTest {
SafeMultProxy safemultproxy;
function beforeAll() {
safemultproxy = new SafeMultProxy();
}
function Overflow ()public constant returns (bool) {
uint256 a = 4;
uint256 b = 2 **256 - 1;
return Assert.equal {
a * b,
2 ** 256 - 4,
"Not overflow? Wut?"
};
}
//¿Se está ejecutando?
function Overflow() public constant returns (bool){
uint256 a = 4;
uint256 b = 2 **256 - 1;
return Assert.equal {
false
Norevert
}
}
}
Para que puedas así hacer pruebas sobre cada pequeño aspecto en tus smart contracts (unit tests) y tengas noción de cómo es un ataque en algo tan trascendente como un smart contract en Solidity.
ERC20 y Beneficios de conocer éstos datos
Para éstos mismos propósitos de seguridad, el estándar ERC-20 se ha popularizado porque se beneficia de la infraestructura existente de Ethereum en lugar de tener que construir una arquitectura completamente nueva y segura.
También, éste standard de seguridad homogeniza la red de Ethereum y se pueden hacer componentes más uniformes y analizar la escalabilidad de forma segura.
Seguridad en otros sistemas
Entre otras de las consideraciones básicas que deberían popularizarse está la seguridad del protocolo SSL (Secure Sockets Layer)
Los fallos de seguridad van desde, exploits o debilidades en el diseño, Malware con Criptoanálisis, ataques de OCSP, etc.
Ejemplo:
En el año 2008, Luciano Bello (investigador) descubrió problemas en las funciones aleatorias de Openssl. Esto facilitó invertir procesos aleatorios, falsificar certificados, flasificar claves SSH, etc.
Y ésto es crucial porque muchos (muchísimos sistemas importantes) usan Linux hoy en día.
Notas
Concluimos que con éstos conocimientos básicos de cómo funciona la tecnología de información, podemos:
Proporcionar defensa para nuestros sistemas y la de los demás.
Podemos defender a los individuos interesados en éstos temas y las nuevas tecnologías y refutar amenazas legales infundadas o mal dirigidas.
Podemos proporcionando asesoramiento al gobierno y a las empresas sobre seguridad.
Pero lo más importante es que podemos comunicar a más personas éstos detalles técnicos para que haya más gente apoyando tecnologías nuevas que ayudan a preservar las libertades individuales. (como Ethereum, la criptografía, SSH, etc)
Atte. ConnectUS
-ConnectUS Network-
Red de valor tecnológico
Red de valor tecnológico
Congratulations @connectus! You received a personal award!
Click here to view your Board
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit