Descentralizando tudo

Esse artigo é baseado na palestra de mesmo título criada por mim e pelo Gabriel Rhama para a Campus Party de Brasília1. Como o conteúdo é bem legal, achei que colocar ele por escrito seria também interessante. Pra facilitar, devo escrever em várias partes, uma pra cada um dos temas que abordamos na palestra.

Introdução

A primeira coisa que vem à mente quando falamos de criptomoedas2 é descentralização3. Criptomoedas são descentralizadas, Blockchain é consenso descentralizado. Mas o que isso quer dizer? Pra que serve isso? Porque isso é tão importante?

TCP/IP4

Vamos voltar um pouco no passado e falar sobre a internet. Na década de 1960 o governo americano financiou um projeto de pesquisa para a criação de uma rede de computadores. Não é a primeira rede, já existiam outras, abrangendo universidades, empresas, etc. Essa nova rede tinha um objetivo específico: resistir a ataques nucleares que tirassem do ar um ou mais dos computadores envolvidos. Até então, as redes eram estruturadas de forma centralizada (um computador central que se comunica com vários terminais) ou hierárquica (sem apenas um computador central, mas computadores ligados de forma em que alguns são concentradores das informações vindas dos outros). Redes com esses formatos são extremamente frágeis em caso de ataque. Atacando um único computador você interrompe toda a rede.

A Darpa5, agência de pesquisa do departamento de defesa dos EUA, junto com algumas universidades norte-americanas, desenvolveu então a ARPANET, e seu protocolo de comunicação, o TCP/IP. A ARPANET, que depois evoluiu e veio a se chamar Internet6, usava de um protocolo descentralizado, onde nenhum computador é mais importante que o outro e onde os caminhos entre um computador e outro se adaptavam de acordo com a disponibilidade dos mesmos. Com isso, se um computador saísse do ar por qualquer motivo, os outros continuavam se comunicando normalmente. Não havia um ponto central de falha. Tínhamos aí o primeiro uso da descentralização: Resistência a falhas e ataques.

O TCP/IP foi o primeiro passo em direção a descentralização, a descentralização dos canais de comunicação.

Bitcoin78

Em 2008, Satoshi Nakamoto9 deu mais um passo em direção a descentralização: O Bitcoin10. Bitcoin é uma moeda digital descentralizada que funciona sobre um protocolo criptográfico. Era logo depois da crise de 200811, onde os bancos haviam criado uma bolha econômica e depois recorreram aos governos dos seus países para evitarem a falência, enriquecendo com dinheiro público ao mesmo tempo em que transformavam em pó as economias da população. A ideia do Satoshi era dar ao cidadão comum uma alternativa ao dinheiro digital que não fosse controlada pelos bancos.

Não tenho certeza se o Satoshi tinha noção de quão revolucionário era o sistema que ele criou. Acredito que, pra ele, era só mais uma evolução dos sistemas de moedas criptográficas que tinham vindo antes, como o bit-gold12 ou o hashcash13. Inclusive, muitas das ideias que ele usou foram tiradas dessas precursoras.

Com o Bitcoin, o Satoshi se aproveita de mais uma vantagem da descentralização: Resistência à censura. Os bancos não podem mais fechar sua conta e recusar seu crédito, eles não tem mais controle sobre seu dinheiro.

O Bitcoin trouxe a descentralização do dinheiro!

Blockchain14

Esse é um caso bem especial. Para o Satoshi Nakamoto, só existia o Bitcoin15. Só depois de lançado o Bitcoin é que outros desenvolvedores e cientistas perceberam que dentro do Bitcoin existia mais uma inovação, que poderia ter vida própria: A Blockchain! A Blockchain, ou cadeia de blocos, é a estrutura de dados que dá suporte ao Bitcoin. É o banco de dados por trás do Bitcoin, e de todas as criptomoedas.

Não vou entrar aqui no debate filosófico se Blockchain existe sem o Bitcoin ou não. Alguns acham que sim, outros que não. Enfim, não é o meu debate e daria para uma nova série de artigos. Afirmo apenas que ela tem uso que não é simplesmente dar suporte ao Bitcoin, precisando do Bitcoin para existir ou não.1617

A Blockchain trouxe mais uma inovação: ela permite o registro de dados, não somente de dados financeiros, mas quaisquer dados, de forma descentralizada. Enquanto o Bitcoin usa a Blockchain apenas para o fim específico de realizar transações financeiras, outros sistemas podem se aproveitar dessa mesma infraestrutura para registrar todo tipo de dados.

É bom tomar cuidado com isso. Descentralização não é algo barato. Uma Blockchain vai ser replicada em TODOS os computadores que formam a rede descentralizada onde ela opera. Isso tem um custo. Esse custo é refletido nas famosas "taxas de transação" do Bitcoin, ou no "gas" da rede Ethereum. Então enquanto Blockchain é uma ferramenta fantástica, ela não é bala de prata. Ela é uma solução cara para problemas específicos.

A Blockchain é então outro degrau no nosso caminho rumo a descentralização: descentralização do armazenamento de informações.

Smart-Contracts1819

Apesar de já existirem no Bitcoin os smart-contracts "simples", foi com a Ethereum e o Vitalik que surgiram os smart-contracts como entendemos hoje. Uma coisa importante que é preciso entender sobre smart-contracts é que, apesar do nome, eles não são contratos como nós entendemos. São trechos de código capazes de serem executados de forma descentralizada. Você escreve um trecho de código, registra ele na Blockchain, e depois ele pode ser executado por você ou por terceiros para processar as informações e registrá-las também na Blockchain. Um smart-contract vai ser executado simultaneamente em todos os nós participantes da sua rede de forma a validar se os dados gerados por ele podem ou não ser gravados na Blockchain. De novo, como toda descentralização, esse processo é caro. Por isso existem restrições quanto ao tamanho e funcionalidade do código a ser executado. E essa execução tem um preço a ser pago: o "gas"20, a ser pago aos mineradores em troca desse serviço.

Smart-contracts então não são contratos, são uma forma de estender as regras de consenso de uma Blockchain. Com um smart-contract o usuário cria novas validações, novas regras de consenso, novas funcionalidades em cima de uma Blockchain existente, sem precisar criar uma nova Blockchain. Isso permitiu coisas com os tokens ERC2021, e consequentemente as ICOs22. E permite que você estenda sua Blockchain para armazenar e processar virtualmente qualquer tipo de dado.

Smart-contracts são a descentralização do processamento de dados.

Decred23

Em 2013, Tacotime, criador da Monero24, propôs uma moeda chamada Memcoin2 (MC2), usando um sistema híbrido de Proof-of-Work (PoW) e Proof-of-Stake (PoS)2526. Logo em seguida, e de forma independente, o Charlie Lee27, da Litecoin propôs um sistema similar que ele chamou de Proof-of-Activity (PoA)2829. As ideias por trás da MC2 acabaram indo parar nos ouvidos da Company 0, empresa responsável pelo btcsuite, e a equipe então usou essas ideias em uma nova moeda, a Decred30. O foco principal da Decred seria prover governança descentralizada para evitar os problemas de governança constantes na Criptoesfera que geram tantos forks, novas moedas e brigas políticas.

A Decred dispõe de um sistema de votação onchain, um sistema de registro de documentos (Dcrtime) e de apresentação de propostas para a moeda (Politeia).

Decred é a descentralização da governança.

Resumo da primeira parte e conclusão

Nesse primeiro artigo vimos a evolução das tecnologias e criptomoedas em direção à descentralização:

  • TCP/IP é a descentralização dos canais de comunicação.
  • Bitcoin é a descentralização do dinheiro
  • A Blockchain é a descentralização do armazenamento de informações.
  • Smart-contracts são a descentralização do processamento de dados.
  • Decred é a descentralização da governança.

Em especial vimos a importância da descentralização em:

  • Resistência a falhas
  • Resistência a ataques
  • Resistência a censura.

Descentralização é uma ferramenta de resiliência para sistemas de informação. Com a descentralização, busca-se garantir que nenhum tipo de falha, ataque, ou entidade em posição de autoridade interrompa, censure ou interfira na operação dos sistemas.

 

eeebuntu, ubuntu-eee, crunchee e eeexubuntu: Impressões de uma semana depois de comprar um cartão SD de 8Gb

Semana passada eu disse que tinha comprado um cartão de memória de 8Gb pra rodar outros OSs no meu eeepc 701. Essa semana eu conto o que achei, tendo experimentado um pouco de tudo.

O primeiro que eu instalei foi o ubunutu-eee. Achei bacana, mas o tempo de boot era pobrinho. Pedi sugestões e esses foram os que me indicaram:

Ubuntu-eee no meu eeePC

Ubuntu-eee no meu eeePC

A comparação que eu fiz é muito mais intuitiva do que qualquer outra coisa, por isso a percepção de outras pessoas pode ser completamente diferente da minha. Vou dividir as impressões de acordo com o que eu encontrei de diferenças relevantes entre os sistemas, seja porque me agradou, seja porque desagradou.

Pros apressados, uma tabela:

eeebuntu Ubuntu-eee cruncheee eeexubuntu xandros (pre instalado)
Tempo de boot ~2 min ~2 min ~2 min ~1min 20 sec 20 sec (+20 sec para conectar na rede wi-fi)
Interface com o usuário Excelente Excelente (mas mais feio) Ruim Péssima Razoável
Programas pré instalados Ruim Muito bom Bom Ruim Razoável
Configurações especificas para o modelo Bom Ruim Excelente Ruim Pré-configurado

Pros menos apressados... Continue reading

Segurança no desenvolvimento de sistemas em Java

Pra quem acha que segurança é só colocar um firewall, rodar um anti-virus e boas, precisa ler esse site do sapão. É um compêndio de técnicas de programação em Java (mas a maioria pode ser "portada" para outras linguagens) para melhorar a segurança das aplicações.

As dicas vão desde o básico, aplicável a todo trecho de código, até tópicos específicos sobre identificadores de seção em servidores de aplicação, uso de SSL nas conexões e proteção de arquivos de dados. São dicas simples mas com resultados efetivos para evitar não só falhas na segurança da aplicação, como também erros inesperados nos sistemas.

É interessante pra todo desenvolvedor, e também para os profissionais de segurança da informação, que muitas vezes se distanciam da programação e tratam a segurança apenas do lado da infraestrutura de TI. Além do que, nas palavras dele: vou precisar de colaboradores, então quem estiver disposto pode entrar em contato comigo. Recomendo a todos!

O site é: http://java.sapao.net/

E o post do lançamento oficial: http://blog.sapao.net/2008/08/segurana-em-java.html

Informix, zope, plone e python...

Essa semana foi corrida. Entre as tarefas que tomaram meu tempo estava fazer o zope/plone, que serve o portal da repartição onde eu trabalho, conversar com o Informix (sim, vocês ouviram bem, Informix! Isso ainda existe...). Enfim, uma tarefa árdua e dura, e que ninguém mais no mundo deve ter feito antes de mim 😉 (exageros a parte, o número de downloads do "adaptor" de informix para o zope estava em míseros 530 quando escrevi esse post).

E como esse é maaaaaais um post técnico e chato, vou aproveitar pra testar o "leia mais" desse diabo de blog... Continue reading