A priviacidade é necessária para uma sociedade aberta na era eletrônica. Privacidade não é sigilo. Um assunto privado é algo que a pessoa não quer que o mundo inteiro saiba, mas um assunto sigiloso é algo que a pessoa não quer que ninguém saiba. Privacidade é o poder de revelar-se seletivamente ao mundo.
Se duas partes tem algum tipo de acordo, então cada uma tem sua própria memória da interação. Cada parte pode falar sobre sua própria memória disso; como impedir isto? Poderíamos passar leis contra isso, mas a liberdade de expressão, ainda mais que a privacidade, é fundamental para uma sociedade aberta; Nós buscamos não restringir nenhum discurso. Se muitas partes falam juntas em um fórum, cada uma pode falar a todas as outras e agregar a sabedoria de cada uma das partes. O poder da comunicação eletrônica possibilitou este tipo de discurso em grupo, e isso não vai sumir simplesmente porque talvez nós queiramos isso.
Já que desejamos privacidade, temos que garantir que cada parte da transação tenha conhecimento apenas sobre aquilo que é diretamente necessário para a transação. Já que podemos falar sobre qualquer informação, temos que garantir que revelamos o mínimo possível. Na maioria dos casos, uma identidade pessoal não é necessária. Quando eu compro uma revista em uma loja e entrego dinheiro ao caixa, não existe necessidade de saber quem eu sou. Quando eu peço ao meu provedor de e-mail para enviar e receber mensagens, meu provedor não precisa saber com quem estou falando, o que estou falando ou o que outros estão falando para mim; meu provedor precisa saber apenas como levar a mensagem até seu destino e quanto eu devo em taxas. Quando minha identidade é revelada por mecanismos subliminares da transação, eu não tenho privacidade. Eu não posso me revelar seletivamente, eu tenho que me revelar SEMPRE.
Portanto, a privacidade em uma sociedade aberta, também necessita de criptografia. Se eu digo alguma coisa, eu quero que ela seja ouvida apenas por quem eu tinha a intenção de me comunicar. Se o conteúdo da minha fala está aberto para o mundo, eu não tenho privacidade. Criptografar é indicar desejo de privacidade, e usar criptografia fraca é indicar desejo por pouca privacidade. Além disso, revelar a identidade de alguém com certeza, quando o padrão é o anonimato, requer uma assinatura criptográfica.
Nós não podemos esperar que governos, corporações ou outras organizações grandes e sem alma garantam nossa privacidade em detrimento de seu próprio benefício. É vantagem deles falar sobre nós, e devemos esperar que o façam. Tentar impedir sua fala, é lutar contra a realidade da informação. Informação não só quer ser livre, como luta por isso. Informação se expande para preencher o espaço de armazenamento disponível.
Nós precisamos defender nossa própria privacidade se esperamos ter alguma. Precisamos nos unir e criar sistemas que permitam a realização de transações anônimas. As pessoas vêm defendendo sua privacidade há séculos com sussurros, escuridão, envelopes, portas fechadas, sinais secretos e mensageiros. As tecnologias do passado não permitiam uma privacidade forte, mas a tecnologia eletrônica permite.
Nós, os cypherpunks, nos dedicamos a construir sistemas anônimos. Nós estamos defendendo nossa privacidade com criptografia, com sistemas de encaminhamento de email anônimos, com assinaturas digitais, e com dinheiro eletrônico.
Cypherpunks escrevem código. Nós sabemos que alguém tem que escrever software para defender a privacidade, e já que não podemos ter privacidade a não ser que todos tenhamos, nós escreveremos o software. Nós publicamos nosso código para que nosso colega Cypherpunk possa praticar. Nosso código é livre para que todos usem, no mundo inteiro. Nós não nos importamos se você não aprova o software que escrevemos. Nós sabemos que software não pode ser destruído, e que um sistema amplamente disperso não pode ser derrubado.
Cypherpunks deploram regulações na criptografia, pois a criptografia é um ato fundamentalmente privado. O ato de criptografar, na verdade, remove informação do reino público. Mesmo leis contra a criptografia alcançam apenas tanto quanto o braço de violência de uma fronteira alcança. Criptograifa vai se espalhar intelectualmente através de todo o globo, e com ela, as transações anônimas que ela possibilita.
Para que a criptografia seja difundida, é necessário que ela seja parte do contrato social. As pessoas precisam se unir e implantar estes sistemas para o bem comum. A criptografia se extende apenas enquanto há cooperação na sociedade. Nós os Cypherpunks buscamos atender às suas preocupações e suas dúvidas, e esperamos poder envolvê-lo para que não possamos nos enganar. Nós não vamos, entretanto, nos desviar de nosso caminho porque você discorda de nosso objetivo.
Os Cypherpunks estão ativamente engajados em tornar as redes mais seguras para a privacidade. Que possamos prosseguir juntos em paz.
Avante.
CriptoArauto
Arise, you have nothing to lose but your barbed wire fences!
domingo, 6 de dezembro de 2015
segunda-feira, 9 de novembro de 2015
O Manifesto Cripto Anarquista
Um espectro está assombrando o mundo moderno.
A ciência da computação está a ponto de fornecer a grupos e indivíduos a capacidade de se comunicar e interagir uns com os outros de maneira totalmente anônima. Duas pessoas podem trocar mensagens, conduzir negócios e realizar contratos digitais sem nunca saber o verdadeiro nome ou identidade legal da outra parte. Interações em rede serão irrastreáveis, através de um extensivo re-roteamento de pacotes criptografados e caixas invioláveis que implementam protocolos de criptografia com segurança quase perfeita contra qualquer adulteração. Reputações terão importância central, mais importância em negociações até do que as análises de crédito tem hoje. Estes desenvolvimentos irão alterar completamente a natureza da regulamentação do governo, a capacidade de taxar e controlar as interações econômicas, a capacidade de manter a informação em segredo, e até mesmo alterar a natureza da confiança e da reputação.
A tecnologia para esta revolução - que certamente será tanto uma revolução social quanto econômica - já existia em teoria durante a última década. Os métodos são baseados em criptografia de chave pública, sistemas zero-knowledge interativos, e vários protocolos de software para interação, autenticação e verificação. O foco até agora tem sido em conferências acadêmicas na Europa e nos EUA, conferências monitoradas de perto pela Agência de Segurança Nacional. Mas só recentemente as redes de computadores e os computadores pessoais alcançaram velocidade suficiente para fazer as idéias praticamente realizáveis. E os próximos dez anos trarão velocidade suficiente para fazer as idéias economicamente viáveis e essencialmente imbatíveis. Redes de alta velocidade, RDSI, caixas invioláveis, cartões inteligentes, satélites, transmissores de Ku-band, computadores pessoais multi-MIPS, e chips de criptografia agora em desenvolvimento vão ser algumas das tecnologias facilitadoras.
O Estado irá, claro, tentar retardar ou parar a disseminação desta tecnologia, citando preocupações de segurança nacional, o uso da tecnologia por traficantes de drogas e evasores fiscais, e temores de desintegração social. Muitas destas preocupações serão válidas; cripto anarquia permitirá que segredos nacionais sejam vendidos livremente e permitirá que materiais ilícitos e roubados sejam comercializados. Um mercado informatizado anônimo vai tornar possíveis mercados abomináveis para assassinatos e extorsões. Vários elementos estrangeiros e criminosos serão usuários ativos da CryptoNet. Mas isso não vai parar a propagação da Cripto Anarquia.
Assim como a tecnologia da impressão alterou e reduziu o poder de guildas medievais e a estrutura do poder social, os protocolos de criptografia também vão alterar a natureza das interferências cometidas por empresas e governos nas transações econômicas. Combinada com mercados emergentes de informação, a cripto anarquia irá criar um mercado líquido para todo e qualquer material que possa ser colocado em palavras e imagens. E, assim como uma invenção aparentemente menor, como arame farpado possibilitou a demarcação de vastas fazendas e territórios, alterando para sempre os conceitos de terra e direitos de propriedade na fronteira ocidental, também a descoberta aparentemente menor de um ramo arcano da matemática se tornará o cortador de arame que irá desmantelar o arame farpado em torno da propriedade intelectual.
Ergam-se, vocês não tem nada a perder a não ser suas cercas de arame farpado!
segunda-feira, 5 de outubro de 2015
Está tudo quebrado
O texto a seguir é uma tradução, o texto original está aqui. O texto é meio antigo mas acho que se mantém atual, e vale a pena ler :)
Uma vez, um amigo meu acidentalmente tomou controle de milhares de computadores. Ele havia encontrado uma vulnerabilidade em um pedaço de software e começou a brincar com ela. No processo, ele descobriu como obter acesso total de administração de uma rede. Ele colocou em um script, e executou para ver o que iria acontecer, em seguida, foi para a cama por cerca de quatro horas. Na
manhã seguinte, no caminho para o trabalho ele checou o script para ver como estava indo,
e descobriu que ele era agora mestre e senhor de cerca de 50.000
computadores. Depois de quase vomitar de medo ele matou a coisa toda e apagou todos os arquivos associados ao script. No final, ele disse que ele jogou o disco rígido em uma fogueira. Eu
não posso te dizer quem ele é, porque ele não quer ir para a prisão
Federal, que é o que poderia ter acontecido se ele tivesse contado a qualquer um que pudesse consertar o bug que ele tinha encontrado. Será que esse bug foi consertado? Provavelmente, mas não pelo meu amigo. Esta história não é extraordinária. Passe muito tempo na cena hacker e de segurança, e você vai ouvir histórias como esta e piores.
É difícil explicar às pessoas normais o quão mal a tecnologia funciona, quanto a infra-estrutura de nossas vidas é mantida junta pelo equivalente de TI a um arame.
Computadores e a computação, estão quebrados.
Construa mal, e eles virão
Para alguns de nós, especialmente aqueles que acompanhavam os casos de segurança e escutas telefônicas ilegais, as revelações não foram grandes surpresas. Não sabíamos os detalhes, mas as pessoas que mantinham um olho no software sabiam que a tecnologia estava doente e quebrada. Sabemos há anos que aqueles que querem tirar proveito desse fato tendem a circular como urubus. A NSA não era, e não é, o grande predador da internet, é apenas a maior carniceira. Ela não está indo tão bem, porque é o todo-poderoso mágico da matemática demoníaca.
A NSA está indo tão bem, porque software é uma merda.
Oito meses antes das revelações de Snowden eu tweetei isto:
Spoiler Alert:Tudo tem 0 dias, todos são rastreados, toda informação vaza, todas as coisas são vulneráveis. Estão todos fudidos.
(Nota do tradutor: 0 dias é um tipo de vulnerabilidade desconhecida, e por definição, impossível de se proteger contra)
Isto foi meu reconhecimento exasperado de que procurar software de qualidade tem sido uma batalha perdida. Escritos por pessoas ou sem tempo ou sem dinheiro, a maioria do software é entregue no momento em que funciona bem o suficiente para deixar alguém ir para casa e ver sua família. E o que recebemos é terrível.
Software é ruim assim porque é extremamente complexo, e porque ele está tentando falar com outros programas no mesmo computador, ou através de ligações a outros computadores. Mesmo o computador é meio que mais de um computador, caixas dentro de caixas, e cada um desses computadores está cheio de pequenos programas que tentam coordenar suas ações e falar uns com os outros. Computadores tornaram-se incrivelmente complexos, enquanto as pessoas têm se mantido a mesma lama cinza com pretensões de divindade.
Seu pedaço de merda normal chamado Windows é tão complexo que ninguém na Terra sabe realmente tudo o que ele está fazendo, ou como.
Seu pedaço de merda normal chamado Windows é tão complexo que ninguém na Terra sabe realmente tudo o que ele está fazendo, ou como.
Agora imagine bilhões de pequenas caixas dentro de milhões de caixas desconhecidas constantemente tentando falar e coordenar as tarefas ao mesmo tempo, compartilhando bits de dados e passando comandos ao redor do menor programa para algo enorme, como um navegador - isto é a internet. Tudo isso tem de acontecer de forma quase que simultânea e sem problemas, ou você dá um chilique porque o carrinho de compras esqueceu os seus bilhetes de cinema.
Nós muitas vezes dizemos que o telefone que você usa principalmente para jogar jogos casuais e fica deixando cair no banheiro em bares é mais poderoso do que toda a computação utilizada para ir ao espaço por décadas.
NASA tinha uma equipe enorme de gênios para entender e cuidar do software deles. Seu telefone tem você.
Mais um sistema de atualização automática que você fica adiando, porque você está no meio de um jogo de Candy Crush sempre que ele pede.
Por tudo isso, a segurança é terrível. Além de ser cheio de bugs irritantes e mensagens ininteligíveis, os programas têm, frequentemente, um tipo especial de vulnerabilidade chamados 0 dias pela cena de segurança. Ninguém pode se proteger de 0 dias. É sua característica definidora - 0 é o número de dias que você teve para lidar com esta forma de ataque. Existem ataques 0 dias "meh" que não são tão ruins, existem 0 dias muito ruins, e há 0 dias catastróficos que entregam as chaves da casa para quem quer que passe por perto. Eu prometo que agora mesmo você está lendo isso em um dispositivo com todos os três tipos de 0 dias. "Mas, Quinn," eu posso ouvir você dizer: "Se ninguém sabe sobre eles, como você sabe que eu tenho eles?" Porque mesmo o software bom tem que trabalhar com software terrível. O número de pessoas cujo trabalho é fazer com que o software seja seguro praticamente cabe em um bar grande, e eu já vi eles bebendo. Não é nada reconfortante. Não é uma questão de se você vai ser atacado, é apenas uma questão de quando.
![]() |
| Isto é algo que aconteceu, para se livrar de uma mensagem de erro, um programador apagou algumas linhas sem perceber que isto deixava sua criptografia aberta a ataques. |
Veja desta forma - toda vez que receber uma atualização de segurança (parece ser quase diariamente na minha caixa de Linux), o que quer que está sendo atualizado estava quebrado, deitado lá vulnerável, por sabe-se lá quanto tempo. Às vezes dias, às vezes anos. Ninguém nunca anuncia esta parte das atualizações. As pessoas dizem "Você deve fazer este, é uma atualização crítica!" E deixam de fora o "... porque os desenvolvedores fuderam tudo a ponto das identidades dos seus filhos provavelmente estarem sendo vendidas à máfia da Estónia por script kiddies viciados em heroína agora mesmo."
Os bugs realmente ruins (e quem sabe quais são quando clicam no botão "Reiniciar mais tarde"?) Podem ser engolidos por hackers, governos e outros horrores da internet que estão varrendo tudo a procura de versões do software que eles sabem que podem explorar. Qualquer computador que aparece em uma varredura dizendo "Hey! Eu! Eu sou vulnerável!" Pode tornar-se parte de uma botnet, juntamente com milhares, ou centenas de milhares de outros computadores. Computadores zumbificados frequentemente são possuídos de novo e tornam-se parte de mais uma botnet. Algumas botnets consertam computadores para jogar fora as outras botnets e eles não terem que compartilhar você com outros hackers. Como você pode saber se isso está acontecendo? Você não pode! Divirta-se perguntando se você está tendo sua vida online alugada por hora!
Recentemente, um hacker anônimo escreveu um script que penetrou dispositivos Linux embarcados. Estes computadores escanearam todo o resto da internet e criaram uma pesquisa que nos disse mais do que sabíamos sobre a forma da internet. As caixinhas hackeadas relataram seus dados de volta (um total de 10 TBs) e silenciosamente desativaram o hack. Foi um exemplo doce e útil de alguém que hackeou o planeta à merda. Se o malware tivesse sido realmente malicioso, estaríamos muito fudidos.
Isso ocorre porque todos os computadores são seguramente ruins: os de hospitais e governos e bancos, os do seu telefone, os que controlam interruptores de luz e medidores inteligentes e sistemas de controle de tráfego aéreo. Computadores industriais que mantêm infra-estrutura e de fabricação são ainda piores. Eu não sei todos os detalhes, mas aqueles que sabem são as pessoas mais alcoólicas e niilistas em segurança de computadores. Outro amigo meu acidentalmente fechou uma fábrica com um ping mal formado no início de um teste de penetração. Para aqueles de vocês que não sabem, um ping é apenas a menor requisição que você pode fazer a outro computador na rede. Levou um dia inteiro para ligarem tudo em volta.
Especialistas em computação gostam de fingir que eles usam toda uma classe diferente, mais incrível de software que eles entendem, que é feito de perfeição matemática brilhante e cujas interfaces parecem ter sido cagadas pelas partes de um burro colérico. Isso é uma mentira. A principal forma de segurança oferecida assim é através da obscuridade - tão poucas pessoas conseguem usar este software que não há nenhum motivo para a construção de ferramentas que possam atacá-los. A menos que, como a NSA, você pretenda atacar administradores de sistemas.
Vamos dar um exemplo que especialistas em informática gostam de menosprezar pessoas normais por não utilizarem: OTR. OTR, ou Off The Record Chat, insere uma camada de criptografia nas mensagens instantâneas de texto simples normal. É como se você usasse o AIM ou Jabber ou o que quer que use para conversar, em código. Exceto que o computador está fazendo o código para você. OTR é inteligente e sólido, tem sido examinado com cuidado, e temos bastante certeza de que não tem nenhum destes 0 dias desagradáveis.
Há um padrão para software OTR, e uma biblioteca, mas ela não faz nada por conta própria. Ela será implementada em software por seres humanos bocós para que outros seres humanos bocós possam utilizá-las. Neste ponto, você já sabe que isto termina em lágrimas.
A principal coisa que usa OTR é outro pedaço de software que utiliza uma biblioteca chamada libpurple. Se você quiser ver pessoas de segurança arrogantes parecerem tão fudidos quanto os burros que cagaram as interfaces que eles usam, cite libpurple. Libpurple foi escrita em uma linguagem de programação chamada C.
Heartbleed, o bug que afetou todo o mundo, vazando chaves de senha e criptografia e sabe-se lá mais o que? O Clássico e lindo C.
(Nota do tradutor: o Shellshock, um bug ainda pior, foi descoberto mais tarde, e se não me engano, foi causado também por erros de programação no Clássico e lindo C)
Libpurple foi escrito por pessoas que queriam que seu cliente de bate-papo com código aberto falasse com todo o tipo de sistema de mensagens instantâneas do mundo, e não davam a mínima para segurança ou criptografia. O pessoal de segurança que examinou o código disse que há tantas maneiras possíveis de explorar o libpurple que provavelmente não tem sentido consertá-lo. Ele precisa ser jogado fora e reescrito a partir do zero. Estes não são bugs que permitem que alguém leia as suas mensagens cifradas, são erros que deixam alguém tomar todo o seu computador, ver tudo o que você digita ou le e provavelmente assistir a você cutucar o seu nariz usando a sua webcam.
Esta ferramenta adorável, OTR, é baseada no libpurple na maioria dos sistemas que a utilizam. Deixe-me esclarecer uma coisa, porque até mesmo alguns geeks não entendem isto: não importa quão boa sua criptografia é se o atacante pode simplesmente ler seus dados pela tela com você, e eu prometo que eles podem. Eles podem ou não saber como, mas eles podem. Há uma centena de libpurples no seu computador: pequenos pedaços de software escritos com um orçamento e prazos irrealistas por pessoas que não sabem como ou não se importam em manter o resto do seu sistema seguro.
Qualquer um desses bugzinhos servem quando se trata de tomar todo o resto de seu computador. Então nós atualizamos e atualizamos, e talvez isto expulse os intrusos, talvez não... Ninguém sabe!
Quando mandamos você fazer atualizações, não estamos mandando consertar seu navio, estamos mandando você continuar tirando a água dele, antes que ela chegue no seu pescoço
Para nos afastarmos um pouco desta cena de horror e caos, deixe-me dizer que as coisas estão melhores do que costumavam ser. Temos ferramentas que nós não tínhamos nos anos 1990, como sandboxing, que mantêm os programas escritos idiotamente onde eles não podem fazer tanto mal. (Sandboxing mantém um programa em uma parte artificialmente pequena do computador, separando-o de todos os outros programas pequenos, ou limpando qualquer coisa que ele tente fazer antes que qualquer coisa possa vê-lo.)
Determinadas classes inteiras de bugs terríveis foram enviados para junto da varíola. Segurança é levada mais a sério do que nunca, e há uma rede de pessoas que respondem ao malware prontamente. Mas eles realmente não conseguem acompanhar. O ecossistema desses problemas é muito maior do que era há dez anos atrás, e é difícil sentir que estamos fazendo progressos.
"Eu confio em você ..." foi a frase que eu menos gostava de ouvir das minhas fontes no Anonymous. Era inevitavelmente seguida por algum pedaço de informação que não deveriam estar me dizendo. É a coisa mais natural e humana compartilhar algo pessoal com alguém que você está aprendendo a confiar. Mas eu ficava tentando lembrar os Anons que eles estavam se conectando a um computador, transmitindo através de inúmeros servidores, switches, roteadores, cabos, ligações sem fios, e, finalmente, o meu computador altamente alvejado, antes de estarem se conectando a outro ser humano. Tudo isso estava acontecendo em menos tempo do que leva para uma pessoa dar uma respirada profunda e comprometedora. É óbvio demais para se dizer, mas vale a pena repetir: os seres humanos não foram construídos a pensar desta forma.
Todo mundo falha ao usar o software corretamente. Absolutamente todos fodem tudo. O OTR não criptografa nada até depois da primeira mensagem, um fato que os principais profissionais de segurança e hackers sujeitos a perseguições de 20 países consistentemente esquecem. Gerenciar todas as chaves de criptografia que você precisa para manter seus dados seguros em vários dispositivos, sites e contas é teoricamente possível, da mesma forma que executar uma apendicectomia em si mesmo é teoricamente possível. Esse cara fez isso uma vez na Antártida, por que você não faz também?
Cada especialista em malwares que eu conheço já perdeu o controle do que algum arquivo é, e ao clicar sobre ele para ver, percebeu tinha executado algum malware que deveria estar examinando. Eu sei disso porque eu fiz isso uma vez com um PDF que eu sabia ter algo de ruim. Meus amigos riram de mim, então em voz baixa confessaram que tinham feito a mesma coisa. Se alguns dos melhores reversores de malware não conseguem manter o controle de seus arquivos maliciosos, que esperança seus pais têm contra esse e-card que supostamente você mandou?
Executáveis em anexos de e-mail (isto inclui coisas como Word, Excel, e PDFs) que você recebe praticamente todos os dias podem ser de qualquer um - as pessoas podem escrever o que quiserem naquele campo "De:" dos e-mails, e qualquer um desses anexos podem tomar o seu computador tão tranquilamente como um 0 dias. Provavelmente foi assim que sua avó acabou trabalhando para criminosos russos, e porque seus concorrentes antecipam todos os seus planos de produtos. Mas se você se recusar a abrir anexos, você não vai ser capaz de manter um emprego de escritório no mundo moderno. Esta é sua escolha: constantemente arriscar clicar sobre um malware perigoso, ou viver sob um viaduto, deixando notas no gramado de sua antiga casa dizendo a seus filhos que você os ama e sente saudades.
Especialistas em segurança e privacidade discursam para o público sobre metadados e compartilhamento em rede, mas manter o controle dessas coisas é tão natural quanto fazer painéis de sangue em si mesmo a cada manhã, e tão fácil quanto. Os riscos em um nível social de desistir de nossa privacidade são terríveis. No entanto, as conseqüências de não fazê-lo em uma base individual são imediatamente incapacitantes. A coisa toda é uma batalha de atrito de merda entre o que todos nós queremos para nós mesmos e nossas famílias e os meios que temos para sobrevivermos em comunidade como seres humanos.
Eu vivo nessas coisas, e eu não sou melhor. Uma vez eu tive que passar por um processo para provar minha identidade a uma fonte secreta. Eu tive que tirar uma série de fotos mostrando o meu local e a data. Eu enviei as fotos, e consegui autorização para prosseguir com a minha entrevista. Acontece que nada da minha verificação tinha chegado, porque eu não consegui deixar o envio terminar antes de nervosamente desligar meu computador. "Por que você me deixou continuar?", Perguntei a fonte. "Porque só você teria sido tão estúpida", minha fonte me disse.
Touché.
Mas se eu, uma adulta relativamente bem treinada que presta atenção a estas questões todo o maldito tempo não consigo fazer isso, que chance as pessoas com empregos reais e vidas reais tem?
Alguns anos atrás, eu fui a várias pessoas bem respeitadas que trabalham em privacidade e segurança de software e fiz uma pergunta.
Em primeiro lugar, eu tive que explicar uma coisa:
"A maioria das pessoas não tem privilégio de instalação no computador que estão usando."
Ou seja, a maioria das pessoas no mundo que usam um computador não são donas do computador que estão usando. Seja em um café, na escola, ou no trabalho, para uma grande parte do mundo, a instalação de um aplicativo de desktop não é uma opção. A cada uma ou duas semanas, eu estava sendo contactada por pessoas desesperadas por melhores opções de segurança e privacidade, e eu tentava ajudá-las. Eu começava: "Baixe o ..." e então parávamos. A próxima coisa que as pessoas me diziam era que eles não podiam instalar software em seus computadores. Normalmente, porque um departamento de TI em algum lugar estava limitando os seus direitos como parte do gerenciamento de uma rede. Essas pessoas precisavam de ferramentas que trabalhassem com o que tinham acesso, normalmente um navegador.
Então, a pergunta que eu fazia para hackers, criptógrafos, especialistas em segurança, programadores, e assim por diante era esta: Qual é a melhor opção para pessoas que não podem baixar um novo software para suas máquinas? A resposta foi unânime: nada. Elas não têm opções. Me falaram que era melhor para elas conversar em texto claro, "para que eles não tenham uma falsa sensação de segurança." Já que elas não têm acesso a um software melhor, me responderam, elas não deviam fazer nada que possa incomodar as pessoas que estão vigiando. Mas, eu expliquei, estes são os ativistas, organizadores e jornalistas de todo o mundo lidando com governos e corporações e criminosos que causam dano real, pessoas em perigo real. Então eles deveriam comprar computadores para si mesmo, me respondiam.
Era isso, essa era a resposta: ser rico o suficiente para comprar seu próprio computador, ou, literalmente, cair morto. Eu disse às pessoas que isso não era bom o suficiente, fui difamada em algumas brigas incosnequentes no Twiter, e segui em frente.
Não muito tempo depois, eu percebi onde estava a desconexão. Voltei para os mesmos peritos e expliquei: na natureza, em situações realmente perigosas - mesmo quando as pessoas estão sendo caçadas por homens com armas - quando a criptografia e a segurança começa falhar, ninguém pára de falar. Só esperam não ser pegos.
O mesmo instinto humano que manteve as loterias vivas por milhares de anos manteve as pesssoas lutando contra o sistema, mesmo tendo todas as chances contra elas. "Talvez eu não seja pego, melhor tentar!"
Quanto à auto-censurar suas conversas em face da infra-estrutura hostil, os ativistas não-técnicos são tão bons quanto Anons, ou as pessoas que dizem se preocupar com metadados, ou com compartilhamento de mídia social, ou que esperam a primeira mensagem OTR antes da criptografia começar. Eles são uma merda.
Esta conversa foi um alerta para algumas pessoas de segurança que não tinham percebido que as pessoas que se tornam ativistas e jornalistas rotineiramente fazem coisas arriscadas. Alguns deles se juntaram ao meu lado no desperdício de tempo inconsequente que foram as brigas no Twitter, percebendo que alguma coisa, mesmo algo imperfeito, pode ser melhor do que nada. Mas muitos na cena de segurança ainda estão à espera de um mundo perfeito em para implantar seu código perfeito.
Aí, tem a Comunidade de Inteligência, que gosta de se chamar IC. Nós gostaríamos que eles parassem de espionar todo mundo o tempo todo, e eles gostaríam que parássemos de mimimi sobre isso.
Depois de passar algum tempo com eles, eu tenho certeza que eu entendo por que eles não se preocupam com reclamações. O IC são alguns dos seres humanos mais vigiados da história. Eles sabem que tudo o que fazem passa por um pente-fino - pelos seus colegas, seus chefes, seus advogados, outras agências, o presidente, e às vezes o Congresso. Eles vivem observados, e eles não se queixam sobre isso.
Em todas as chamadas relativas ao aumento da vigilância, os princípios básicos da natureza humana ficam negligenciados. Você não vai ensinar os perpetradores que isso é errado, fazendo-lhes mais disso.
Sempre haverá brechas e enquanto elas existirem ou puderem ser construídas ou interpretadas, a vigilância será tão prevalente quanto ela puder ser. Os seres humanos são criaturas principalmente egocêntricas. Eles, sendo seres humanos, nunca vão saber por que viver sem privacidade é ruim, enquanto eles estiverem nesta situação.
No entanto, esse é o problema menor. A catástrofe cultural é o que eles estão fazendo para tornar o seu trabalho de espionagem mais fácil. As partes mais perturbadoras das revelações são o mercado de 0 dias: a coleta de exploits, e o enfraquecimento de padrões. A questão é quem faz parte do "nós" que estão sendo mantidos supostamente seguro por toda esta espionagem, vigilância e enfraquecimento de padrões. Quando eles atacaram Natanz com Stuxnet e deixaram todas as outras instalações nucleares vulneráveis, fomos claramente avisados de que o "nós" em questão começa e termina com a própria IC. Esse é o maior perigo.
Um chat criptografado e bem escrito, o que poderia dar errado?
Vamos dar um exemplo que especialistas em informática gostam de menosprezar pessoas normais por não utilizarem: OTR. OTR, ou Off The Record Chat, insere uma camada de criptografia nas mensagens instantâneas de texto simples normal. É como se você usasse o AIM ou Jabber ou o que quer que use para conversar, em código. Exceto que o computador está fazendo o código para você. OTR é inteligente e sólido, tem sido examinado com cuidado, e temos bastante certeza de que não tem nenhum destes 0 dias desagradáveis.
Exceto que OTR não é exatamente um programa que você usa.
Há um padrão para software OTR, e uma biblioteca, mas ela não faz nada por conta própria. Ela será implementada em software por seres humanos bocós para que outros seres humanos bocós possam utilizá-las. Neste ponto, você já sabe que isto termina em lágrimas.
A principal coisa que usa OTR é outro pedaço de software que utiliza uma biblioteca chamada libpurple. Se você quiser ver pessoas de segurança arrogantes parecerem tão fudidos quanto os burros que cagaram as interfaces que eles usam, cite libpurple. Libpurple foi escrita em uma linguagem de programação chamada C.
C é bom em duas coisas: ser bonita e criar 0 dias catastróficos no gerenciamento de memória
Heartbleed, o bug que afetou todo o mundo, vazando chaves de senha e criptografia e sabe-se lá mais o que? O Clássico e lindo C.
(Nota do tradutor: o Shellshock, um bug ainda pior, foi descoberto mais tarde, e se não me engano, foi causado também por erros de programação no Clássico e lindo C)
Libpurple foi escrito por pessoas que queriam que seu cliente de bate-papo com código aberto falasse com todo o tipo de sistema de mensagens instantâneas do mundo, e não davam a mínima para segurança ou criptografia. O pessoal de segurança que examinou o código disse que há tantas maneiras possíveis de explorar o libpurple que provavelmente não tem sentido consertá-lo. Ele precisa ser jogado fora e reescrito a partir do zero. Estes não são bugs que permitem que alguém leia as suas mensagens cifradas, são erros que deixam alguém tomar todo o seu computador, ver tudo o que você digita ou le e provavelmente assistir a você cutucar o seu nariz usando a sua webcam.
Esta ferramenta adorável, OTR, é baseada no libpurple na maioria dos sistemas que a utilizam. Deixe-me esclarecer uma coisa, porque até mesmo alguns geeks não entendem isto: não importa quão boa sua criptografia é se o atacante pode simplesmente ler seus dados pela tela com você, e eu prometo que eles podem. Eles podem ou não saber como, mas eles podem. Há uma centena de libpurples no seu computador: pequenos pedaços de software escritos com um orçamento e prazos irrealistas por pessoas que não sabem como ou não se importam em manter o resto do seu sistema seguro.
Qualquer um desses bugzinhos servem quando se trata de tomar todo o resto de seu computador. Então nós atualizamos e atualizamos, e talvez isto expulse os intrusos, talvez não... Ninguém sabe!
Quando mandamos você fazer atualizações, não estamos mandando consertar seu navio, estamos mandando você continuar tirando a água dele, antes que ela chegue no seu pescoço
Para nos afastarmos um pouco desta cena de horror e caos, deixe-me dizer que as coisas estão melhores do que costumavam ser. Temos ferramentas que nós não tínhamos nos anos 1990, como sandboxing, que mantêm os programas escritos idiotamente onde eles não podem fazer tanto mal. (Sandboxing mantém um programa em uma parte artificialmente pequena do computador, separando-o de todos os outros programas pequenos, ou limpando qualquer coisa que ele tente fazer antes que qualquer coisa possa vê-lo.)
Determinadas classes inteiras de bugs terríveis foram enviados para junto da varíola. Segurança é levada mais a sério do que nunca, e há uma rede de pessoas que respondem ao malware prontamente. Mas eles realmente não conseguem acompanhar. O ecossistema desses problemas é muito maior do que era há dez anos atrás, e é difícil sentir que estamos fazendo progressos.
As pessoas também estão quebradas
"Eu confio em você ..." foi a frase que eu menos gostava de ouvir das minhas fontes no Anonymous. Era inevitavelmente seguida por algum pedaço de informação que não deveriam estar me dizendo. É a coisa mais natural e humana compartilhar algo pessoal com alguém que você está aprendendo a confiar. Mas eu ficava tentando lembrar os Anons que eles estavam se conectando a um computador, transmitindo através de inúmeros servidores, switches, roteadores, cabos, ligações sem fios, e, finalmente, o meu computador altamente alvejado, antes de estarem se conectando a outro ser humano. Tudo isso estava acontecendo em menos tempo do que leva para uma pessoa dar uma respirada profunda e comprometedora. É óbvio demais para se dizer, mas vale a pena repetir: os seres humanos não foram construídos a pensar desta forma.
Todo mundo falha ao usar o software corretamente. Absolutamente todos fodem tudo. O OTR não criptografa nada até depois da primeira mensagem, um fato que os principais profissionais de segurança e hackers sujeitos a perseguições de 20 países consistentemente esquecem. Gerenciar todas as chaves de criptografia que você precisa para manter seus dados seguros em vários dispositivos, sites e contas é teoricamente possível, da mesma forma que executar uma apendicectomia em si mesmo é teoricamente possível. Esse cara fez isso uma vez na Antártida, por que você não faz também?
Cada especialista em malwares que eu conheço já perdeu o controle do que algum arquivo é, e ao clicar sobre ele para ver, percebeu tinha executado algum malware que deveria estar examinando. Eu sei disso porque eu fiz isso uma vez com um PDF que eu sabia ter algo de ruim. Meus amigos riram de mim, então em voz baixa confessaram que tinham feito a mesma coisa. Se alguns dos melhores reversores de malware não conseguem manter o controle de seus arquivos maliciosos, que esperança seus pais têm contra esse e-card que supostamente você mandou?
Executáveis em anexos de e-mail (isto inclui coisas como Word, Excel, e PDFs) que você recebe praticamente todos os dias podem ser de qualquer um - as pessoas podem escrever o que quiserem naquele campo "De:" dos e-mails, e qualquer um desses anexos podem tomar o seu computador tão tranquilamente como um 0 dias. Provavelmente foi assim que sua avó acabou trabalhando para criminosos russos, e porque seus concorrentes antecipam todos os seus planos de produtos. Mas se você se recusar a abrir anexos, você não vai ser capaz de manter um emprego de escritório no mundo moderno. Esta é sua escolha: constantemente arriscar clicar sobre um malware perigoso, ou viver sob um viaduto, deixando notas no gramado de sua antiga casa dizendo a seus filhos que você os ama e sente saudades.
Especialistas em segurança e privacidade discursam para o público sobre metadados e compartilhamento em rede, mas manter o controle dessas coisas é tão natural quanto fazer painéis de sangue em si mesmo a cada manhã, e tão fácil quanto. Os riscos em um nível social de desistir de nossa privacidade são terríveis. No entanto, as conseqüências de não fazê-lo em uma base individual são imediatamente incapacitantes. A coisa toda é uma batalha de atrito de merda entre o que todos nós queremos para nós mesmos e nossas famílias e os meios que temos para sobrevivermos em comunidade como seres humanos.
Eu vivo nessas coisas, e eu não sou melhor. Uma vez eu tive que passar por um processo para provar minha identidade a uma fonte secreta. Eu tive que tirar uma série de fotos mostrando o meu local e a data. Eu enviei as fotos, e consegui autorização para prosseguir com a minha entrevista. Acontece que nada da minha verificação tinha chegado, porque eu não consegui deixar o envio terminar antes de nervosamente desligar meu computador. "Por que você me deixou continuar?", Perguntei a fonte. "Porque só você teria sido tão estúpida", minha fonte me disse.
Touché.
Mas se eu, uma adulta relativamente bem treinada que presta atenção a estas questões todo o maldito tempo não consigo fazer isso, que chance as pessoas com empregos reais e vidas reais tem?
No fim das contas, é a cultura que está quebrada.
Alguns anos atrás, eu fui a várias pessoas bem respeitadas que trabalham em privacidade e segurança de software e fiz uma pergunta.
Em primeiro lugar, eu tive que explicar uma coisa:
"A maioria das pessoas não tem privilégio de instalação no computador que estão usando."
Ou seja, a maioria das pessoas no mundo que usam um computador não são donas do computador que estão usando. Seja em um café, na escola, ou no trabalho, para uma grande parte do mundo, a instalação de um aplicativo de desktop não é uma opção. A cada uma ou duas semanas, eu estava sendo contactada por pessoas desesperadas por melhores opções de segurança e privacidade, e eu tentava ajudá-las. Eu começava: "Baixe o ..." e então parávamos. A próxima coisa que as pessoas me diziam era que eles não podiam instalar software em seus computadores. Normalmente, porque um departamento de TI em algum lugar estava limitando os seus direitos como parte do gerenciamento de uma rede. Essas pessoas precisavam de ferramentas que trabalhassem com o que tinham acesso, normalmente um navegador.
Então, a pergunta que eu fazia para hackers, criptógrafos, especialistas em segurança, programadores, e assim por diante era esta: Qual é a melhor opção para pessoas que não podem baixar um novo software para suas máquinas? A resposta foi unânime: nada. Elas não têm opções. Me falaram que era melhor para elas conversar em texto claro, "para que eles não tenham uma falsa sensação de segurança." Já que elas não têm acesso a um software melhor, me responderam, elas não deviam fazer nada que possa incomodar as pessoas que estão vigiando. Mas, eu expliquei, estes são os ativistas, organizadores e jornalistas de todo o mundo lidando com governos e corporações e criminosos que causam dano real, pessoas em perigo real. Então eles deveriam comprar computadores para si mesmo, me respondiam.
Era isso, essa era a resposta: ser rico o suficiente para comprar seu próprio computador, ou, literalmente, cair morto. Eu disse às pessoas que isso não era bom o suficiente, fui difamada em algumas brigas incosnequentes no Twiter, e segui em frente.
Não muito tempo depois, eu percebi onde estava a desconexão. Voltei para os mesmos peritos e expliquei: na natureza, em situações realmente perigosas - mesmo quando as pessoas estão sendo caçadas por homens com armas - quando a criptografia e a segurança começa falhar, ninguém pára de falar. Só esperam não ser pegos.
O mesmo instinto humano que manteve as loterias vivas por milhares de anos manteve as pesssoas lutando contra o sistema, mesmo tendo todas as chances contra elas. "Talvez eu não seja pego, melhor tentar!"
Quanto à auto-censurar suas conversas em face da infra-estrutura hostil, os ativistas não-técnicos são tão bons quanto Anons, ou as pessoas que dizem se preocupar com metadados, ou com compartilhamento de mídia social, ou que esperam a primeira mensagem OTR antes da criptografia começar. Eles são uma merda.
Esta conversa foi um alerta para algumas pessoas de segurança que não tinham percebido que as pessoas que se tornam ativistas e jornalistas rotineiramente fazem coisas arriscadas. Alguns deles se juntaram ao meu lado no desperdício de tempo inconsequente que foram as brigas no Twitter, percebendo que alguma coisa, mesmo algo imperfeito, pode ser melhor do que nada. Mas muitos na cena de segurança ainda estão à espera de um mundo perfeito em para implantar seu código perfeito.
Aí, tem a Comunidade de Inteligência, que gosta de se chamar IC. Nós gostaríamos que eles parassem de espionar todo mundo o tempo todo, e eles gostaríam que parássemos de mimimi sobre isso.
Depois de passar algum tempo com eles, eu tenho certeza que eu entendo por que eles não se preocupam com reclamações. O IC são alguns dos seres humanos mais vigiados da história. Eles sabem que tudo o que fazem passa por um pente-fino - pelos seus colegas, seus chefes, seus advogados, outras agências, o presidente, e às vezes o Congresso. Eles vivem observados, e eles não se queixam sobre isso.
Em todas as chamadas relativas ao aumento da vigilância, os princípios básicos da natureza humana ficam negligenciados. Você não vai ensinar os perpetradores que isso é errado, fazendo-lhes mais disso.
Sempre haverá brechas e enquanto elas existirem ou puderem ser construídas ou interpretadas, a vigilância será tão prevalente quanto ela puder ser. Os seres humanos são criaturas principalmente egocêntricas. Eles, sendo seres humanos, nunca vão saber por que viver sem privacidade é ruim, enquanto eles estiverem nesta situação.
No entanto, esse é o problema menor. A catástrofe cultural é o que eles estão fazendo para tornar o seu trabalho de espionagem mais fácil. As partes mais perturbadoras das revelações são o mercado de 0 dias: a coleta de exploits, e o enfraquecimento de padrões. A questão é quem faz parte do "nós" que estão sendo mantidos supostamente seguro por toda esta espionagem, vigilância e enfraquecimento de padrões. Quando eles atacaram Natanz com Stuxnet e deixaram todas as outras instalações nucleares vulneráveis, fomos claramente avisados de que o "nós" em questão começa e termina com a própria IC. Esse é o maior perigo.
Quando o IC ou o DOD ou o Poder Executivo são os únicos verdadeiros americanos, e o resto de nós somos os subordinados americanos, ou pior os não-pessoas que não estão associados com a América, então só podemos nos tornar menos pessoas com o passar do tempo.
Conforme nossos desejos conflitam com os do IC, tornamo-nos cada vez menos dignos de direitos e considerações aos olhos deles. Quando a NSA acumula exploits e interfere com a proteção criptográfica da nossa infra-estrutura, significa que usar exploits contra as pessoas que não fazem parte da NSA não importa tanto. Proteger-nos vem depois de proteger a si mesmos.
Em teoria, a razão pela qual somos tão legais com os soldados, e pela qual temos costumes de honrar e agradecer-lhes, é que eles deveriam estar se sacrificando para o bem do povo. No caso da NSA, isto foi invertido. O nosso bem-estar é sacrificado para fazer seu trabalho de monitoramento do mundo mais fácil. Quando isso faz parte da cultura no poder, estão no caminho de ser capaz de cometer qualquer abuso.
Mas o maior de todos os problemas culturais ainda encontra-se com um grupo que eu ainda não levei em consideração. As pessoas normais que vivem suas vidas sob toda essa insanidade.
O problema com as normais e os técnicos é o mesmo o problema com os normais e os políticos, ou da sociedade em geral. As pessoas acreditam que são impotentes e sozinhas, mas a única coisa que mantém as pessoas impotentes e sozinhas é esta crença. Pessoas, trabalhando em conjunto, são imensa e terrivelmente poderosas.
Em teoria, a razão pela qual somos tão legais com os soldados, e pela qual temos costumes de honrar e agradecer-lhes, é que eles deveriam estar se sacrificando para o bem do povo. No caso da NSA, isto foi invertido. O nosso bem-estar é sacrificado para fazer seu trabalho de monitoramento do mundo mais fácil. Quando isso faz parte da cultura no poder, estão no caminho de ser capaz de cometer qualquer abuso.
Mas o maior de todos os problemas culturais ainda encontra-se com um grupo que eu ainda não levei em consideração. As pessoas normais que vivem suas vidas sob toda essa insanidade.
O problema com as normais e os técnicos é o mesmo o problema com os normais e os políticos, ou da sociedade em geral. As pessoas acreditam que são impotentes e sozinhas, mas a única coisa que mantém as pessoas impotentes e sozinhas é esta crença. Pessoas, trabalhando em conjunto, são imensa e terrivelmente poderosas.
Certamente há um limite para o que um movimento organizado de pessoas que compartilham um sonho pode fazer, mas não encontramos este limite ainda.
Facebook e Google parecem muito poderosos, mas eles vivem a cerca de uma semana da ruína total o tempo todo. Eles sabem que o custo de deixar as redes sociais individualmente é alto, mas em massa, torna-se quase nada. Windows pode ser substituído por algo melhor escrito. O governo dos EUA cairia para uma revolta geral em questão de dias. Não seria preciso um defecção total ou uma revolta geral para mudar tudo, porque as empresas e os governos preferem dobrar-se às exigências do que morrer. Estas entidades fazem tudo o que podem fazer sem se prejudicar - mas nós esquecemos que nós somos os únicos que permitem que eles se safem.
Computadores não servirão as necessidades tanto da privacidade quanto da coordenação porque é de alguma forma matematicamente impossível. Há muitos esquemas que poderiam criptografar os dados com segurança, há muitas formas de recuperar a privacidade e fazer nossos computadores funcionarem melhor por padrão. Isto não está acontecendo agora porque nós não exigimos ainda, não porque ninguém é inteligente o suficiente para fazer isso acontecer.
Então, sim, os geeks e os executivos e os agentes e os militares fuderam o mundo todo. Mas, no final, é o trabalho das pessoas, trabalhando em conjunto, desfodê-lo.
Computadores não servirão as necessidades tanto da privacidade quanto da coordenação porque é de alguma forma matematicamente impossível. Há muitos esquemas que poderiam criptografar os dados com segurança, há muitas formas de recuperar a privacidade e fazer nossos computadores funcionarem melhor por padrão. Isto não está acontecendo agora porque nós não exigimos ainda, não porque ninguém é inteligente o suficiente para fazer isso acontecer.
Então, sim, os geeks e os executivos e os agentes e os militares fuderam o mundo todo. Mas, no final, é o trabalho das pessoas, trabalhando em conjunto, desfodê-lo.
quinta-feira, 1 de outubro de 2015
Linux para seres humanos
Decidi escrever este texto porque me perguntaram se eu conhecia algum bom texto introdutório ao linux, infelizmente eu respondi que não, mas se você conhece algum, por favor coloque o link nos comentários ^^.
A internet está cheia de introduções e tutoriais que vão te ensinar dezenas de comandos em terminais, cheio de fotos de telinhas pretas com letrinhas sem sentido que afastam qualquer pessoa sem conhecimento técnico. Este texto é diferente. O objetivo aqui não é te ensinar algo que você possa colocar no currículo, é simplesmente te mostrar que existe uma excelente alternativa ao Windows
Então, começando, vou falar um pouco sobre alguns tópicos essenciais para quem quer saber um pouco mais sobre o linux.
É impossível escrever sobre Linux sem citar Liberdade de software, então vou escrever um breve resumo aqui. Como este é um assunto que me interessa muito, eu provavelmente vou escrever um artigo só sobre isso no futuro, por enquanto o que você precisa saber é que Software Livre é muito da hora (eu prometo que vou provar isso neste artigo futuro, mas se eu disser tudo que gostaria aqui vai ficar longo demais).
Então o Linux é livre, quando você diz que um software é livre, você está se referindo aqueles termos e condições de uso que ninguém lê. Em softwares proprietários (Ex.: Windows), aqueles termos estabelecem condições sobre quando, como e onde você pode usar o software, além de colocar certas punições caso você quebre estas condições. Ou seja, o software é seu (afinal você pagou, certo?) e mesmo assim você não pode fazer o que quiser com ele. O Software livre segue o caminho contrário a esse. Todo software livre lhe garante 4 liberdades:
- Liberdade de executar o programa como você quiser, para qualquer propósito.
- Liberdade para estudar o funcionamento do programa e alterá-lo para que ele faça o que você quiser.
- Liberdade de redistribuir cópias, para que você possa ajudar o próximo.
- Liberdade de redistribuir cópias de suas alterações. Assim, toda a comunidade pode se beneficiar de suas alterações.
(Acesso ao código fonte é indispensável para as liberdades 2 e 4)
Então, se o software te da estas liberdades, ele é livre, se não, ele é proprietário (não tem como o software ser meio livre ou meio proprietário). Existe toda uma comunidade e uma filosofia em torno destas liberdades, mas me aprofundarei mais nisto em uma próxima ocasião. Mas antes de encerrar o assunto, uma curiosidade: existe um software chamado JSON, sua primeira versão usava uma das licenças padrões de software livre, mas os desenvolvedores estavam bem humorados e fizeram uma pequena alteração: adicionaram uma cláusula dizendo que "Este software deverá ser usado para o bem, não para o mal." Esta cláusula impõe uma restrição no uso, entrando em conflito com a primeira liberdade, e portanto, o JSON não foi considerado um software livre.
Acho que o que você deve estar mais curioso é quanto as diferenças que você vai sentir. O Linux é bem diferente do windows, mas para coisas mais básicas, que é o que a maioria dos usuários de computadores precisa, talvez a diferença não seja tão grande. Navegar na internet por exemplo, vai ser a mesma coisa em qualquer sistema operacional, então o usuário "facebook + música" não tem muito com o que se preocupar.
Sobre o linux não ter programas: mentira.
Uso o Linux há anos e anos, até hoje não teve nada que eu queria fazer no computador e não consegui por que "não existe nada que faça isso no Linux". Alguns programas realmente não tem versões para o Linux, acho que o caso mais famoso é o photoshop, mas sempre existirão alternativas livres (que rodam no Linux) o subestimado GIMP é a melhor alternativa ao photoshop. Aqui volta a ser importante a vontade, você tem que pesar o esforço que quer fazer para migrar de Sistemas Operacionais. Você está disposto a aprender algo novo?
A instalação de programas no Linux é algo que vale a pena ser comentado também. No Windows, normalmente você baixa um .exe, clica duas vezes, aceita (sem ler) os termos de uso, espera um pouquinho e pronto. Antigamente no Linux as coisas eram mais obscuras, você tinha que baixar o código fonte do programa e compilar o programa... Hoje as coisas são diferentes.
O Linux usa algo chamado Gerenciador de Pacotes, isto deixa tudo extremamente simples (eu diria que até mais simples do que no windows), você abre uma janelinha, diz o software que você quer, ele automaticamente baixa e instala para você, só isso. Porém as vezes o software não está no gerenciador de pacotes, quando isto acontece, o nível de dificuldade da instalação varia, o recomendado é que você vá no site do programa e baixe, lá normalmente eles tem alguma coisa para automatizar e facilitar a instalação do programa, se não tiverem isso, com certeza eles terão uma página ensinando a instalar, também tem muitos programas que nem precisa instalar, você baixa o programa, quando quiser usar simplesmente clica duas vezes e ele executa.
Além de ser livre, o Linux tem outras vantagens, ele é grátis assim como a maioria dos softwares para o Linux. Eu sei que você ia piratear o Windows, mas usando o Linux, você pode manter o sistema sempre atualizado sem encheção de saco e pode usar 100% do seu Sistema Operacional. O Linux também é mais seguro que o Windows, não estou dizendo que não existe vírus para o Linux ou que usando Linux, nenhuma informação sua nunca será vazada, mas estou dizendo que você vai ter q se esforçar muito pra infectar seu pc com Linux...
Acho que a maior desvantagem está para quem quer jogar no PC, se você usa o computador para jogar eu não recomendo o Linux, ele ainda não é um SO bom para isso, apesar de as coisas estarem mudando ele ainda não chegou lá. A Steam tem um client que roda nativo no linux, e tem alguns jogos para o Linux, a maioria indie. Dota 2 e Team Fortress tb rodam. Outra desvantagem do Linux é acesso ao netflix, que pode ser bem chatinho, Netflix usa o Silverlight, que é um plugin proprietário da Microsoft, e como você pode imaginar, isso pode se tornar um problema para quem usa Linux. Existe um plugin que faz a mesma coisa chamado Moonlight, é possível usar ele ao invés do Silverlight, mas minha alternativa preferida ainda é o pirate bay :)
Agora você precisa saber sobre as distros. Distro (ou distribuição) é como se fosse um tipo de Linux, cada uma tem suas próprias características, suas vantagens e desvantagens, a escolha é algo bem pessoal e experimentar distros diferentes é algo que pode ser divertido para algumas pessoas (para mim por exemplo). Como explicado acima, você pode alterar o funcionamento do Linux, isto resultou nestas várias distros, várias pessoas foram fazendo várias alterações e assim a família Linux foi crescendo. Eu diria (estou chutando, não fiz nenhuma pesquisa para afirmar isto) que as distros mais famosas são o Ubuntu, Debian e Fedora.
As distros diferem em coisas como a interface gráfica, gerenciador de pacotes, programas instalados por padrão e politicas de atualização de software, mas todas usam o kernel (algo como se fosse o sistema nervoso) do Linux, então todas terão muito em comum entre si.
Em meio a tantas distros, pode ser difícil escolher uma, existem alguns "testes de personalidade" que você pode fazer para receber umas dicas, por exemplo este ou este. Nenhum deles é garantido de funcionar, mas pelo menos já te dão o ponta-pé inicial para você escolher uma, depois, se não gostar pode trocar :)
Hoje em dia (de novo, baseado apenas em minhas observações) o padrão tem sido começar com o Ubuntu, ele é uma distro muito fácil de se usar e por isso tem sido a escolha de muitos novatos, mas eu sempre recomendo o Debian (minha distro preferida). Eu comecei usando o Ubuntu, usei por muitos anos (até chegar na versão 12.04) e gostava muito, mas nas versões futuras ele começou a se tornar um pouco instável para o meu gosto, por isso mudei para o Debian (o Ubuntu é baseado no Debian) que também é uma distribuição bem fácil de instalar e bem mais estável, desde então mudo de vez em quando para experimentar outras, mas sempre acabo voltando para o Debian.
A última coisa que você precisa saber é onde conseguir suporte, como usuário iniciante você provavelmente vai ter algumas dúvidas, como eu disse, existe toda uma filosofia girando em torno desse lance de Software Livre, e comunidades são formadas onde as pessoas ajudam umas as outras, existem fórums e stacks onde as pessoas postam suas dúvidas/problemas para que as pessoas mais experientes possam ajudar. Vou deixar alguns linkados aqui.
Viva o Linux!: porvavelmente o maior fórum sobre linux do Brasil
Stackexchange: site de perguntas sobre o linux
Linux Questions: outro site de perguntas sobre linux
Além destes, o facebook está cheio de grupos onde você pode postar suas dúvidas, outra coisa que vale muito a pena é ir em fórums específicos da distribuição que você está usando, por exemplo o do Ubuntu ou Debian (as distribuições normalmente tem um fórum internacional em inglês e com mais usuários e um fórum brasileiro, com menos usuários, mas em português, escolha o que preferir).
Acho que é isso, se você acha que faltou alguma coisa ou ainda estiver com alguma dúvida, só colocar nos comentários ;)
As distros diferem em coisas como a interface gráfica, gerenciador de pacotes, programas instalados por padrão e politicas de atualização de software, mas todas usam o kernel (algo como se fosse o sistema nervoso) do Linux, então todas terão muito em comum entre si.
Em meio a tantas distros, pode ser difícil escolher uma, existem alguns "testes de personalidade" que você pode fazer para receber umas dicas, por exemplo este ou este. Nenhum deles é garantido de funcionar, mas pelo menos já te dão o ponta-pé inicial para você escolher uma, depois, se não gostar pode trocar :)
Hoje em dia (de novo, baseado apenas em minhas observações) o padrão tem sido começar com o Ubuntu, ele é uma distro muito fácil de se usar e por isso tem sido a escolha de muitos novatos, mas eu sempre recomendo o Debian (minha distro preferida). Eu comecei usando o Ubuntu, usei por muitos anos (até chegar na versão 12.04) e gostava muito, mas nas versões futuras ele começou a se tornar um pouco instável para o meu gosto, por isso mudei para o Debian (o Ubuntu é baseado no Debian) que também é uma distribuição bem fácil de instalar e bem mais estável, desde então mudo de vez em quando para experimentar outras, mas sempre acabo voltando para o Debian.
A última coisa que você precisa saber é onde conseguir suporte, como usuário iniciante você provavelmente vai ter algumas dúvidas, como eu disse, existe toda uma filosofia girando em torno desse lance de Software Livre, e comunidades são formadas onde as pessoas ajudam umas as outras, existem fórums e stacks onde as pessoas postam suas dúvidas/problemas para que as pessoas mais experientes possam ajudar. Vou deixar alguns linkados aqui.
Viva o Linux!: porvavelmente o maior fórum sobre linux do Brasil
Stackexchange: site de perguntas sobre o linux
Linux Questions: outro site de perguntas sobre linux
Além destes, o facebook está cheio de grupos onde você pode postar suas dúvidas, outra coisa que vale muito a pena é ir em fórums específicos da distribuição que você está usando, por exemplo o do Ubuntu ou Debian (as distribuições normalmente tem um fórum internacional em inglês e com mais usuários e um fórum brasileiro, com menos usuários, mas em português, escolha o que preferir).
Acho que é isso, se você acha que faltou alguma coisa ou ainda estiver com alguma dúvida, só colocar nos comentários ;)
terça-feira, 6 de maio de 2014
Recursividade
Estava assistindo uma aula de Scala e em um dos exercícios tinhamos que implementar um método para descobrir a soma de uma lista de inteiros, porém o exercicio dava a sugestão de usar recursividade ao invés de fazer um loop.
Neste post vou mostrar o raciocinio que utilizei para resolver o exercicio e mostrar como eles seriam resolvidos passo a passo em Java.
Mas antes um pouco de teoria:
Parece complicado, mas na verdade é simples. Recursividade nada mais é do que chamar o metodo que está sendo declarado dentro de seu próprio corpo. Como exemplo, temos um metodo para ver o N numero da sequencia de Fibonacci:
Mas antes um pouco de teoria:
- Para entender recursividade, você precisa entender recursividade.
- PHP é um acronimo recursivo que significa: PHP: Hypertext Processor
- WINE é outro exemplo de recursividade, a sigla significa: Wine Is Not an Emulator
- outro exemplo é GNU que significa: Gnu's Not Unix
Parece complicado, mas na verdade é simples. Recursividade nada mais é do que chamar o metodo que está sendo declarado dentro de seu próprio corpo. Como exemplo, temos um metodo para ver o N numero da sequencia de Fibonacci:
public static long fibonacci (int i) {
if (i == 1) return 0;
if (i == 2) return 1;
long numero = fibonacci(i - 1) + fibonacci(i - 2);
return numero;
}
Olhos atentos perceberam que o metodo fibonacci, chama o metodo fibonacci logo antes de dar o return, isso é chamado de metodo recursivo.
O que ocorre ali é o seguinte: A sequencia de fibonacci define que
fibonacci(5) = fibonacci(4) + fibonacci(3)
sabemos que fibonacci de 4 é igual a fibonacci de 3 + fibonacci de 2 então:
fibonacci(5) = fibonacci(3) + fibonacci(2) + fibonacci(3)
sabemos que fibonacci de 3 é igual a fibonacci de 2 + fibonacci de 1 se substituirmos isso na nossa igualdade temos:
fibonacci(5) = fibonacci(2) + fibonacci(1) + fibonacci(2) + fibonacci(2) + fibonacci(1)
pela definição da sequencia de fibonacci, sabemos que fibonacci(2) = 1 e fibonacci(1) = 0. subsitituindo isto na igualdade temos:
fibonacci(5) = 1 + 0 + 1 + 1 + 0
fibonacci(5) = 3
Pronto. Recursivamente descobrimos que o quinto termo da sequencia de fibonacci é 3, o que bate com a sequencia mostrada na wikipedia (linkada ali em cima)
O que ocorre ali é o seguinte: A sequencia de fibonacci define que
- primeiro termo da sequencia é 0
- o segundo termo da sequencia é 1
- a partir daí, o termo n é igual ao termo n-1 somado do termo n-2
fibonacci(5) = fibonacci(4) + fibonacci(3)
sabemos que fibonacci de 4 é igual a fibonacci de 3 + fibonacci de 2 então:
fibonacci(5) = fibonacci(3) + fibonacci(2) + fibonacci(3)
sabemos que fibonacci de 3 é igual a fibonacci de 2 + fibonacci de 1 se substituirmos isso na nossa igualdade temos:
fibonacci(5) = fibonacci(2) + fibonacci(1) + fibonacci(2) + fibonacci(2) + fibonacci(1)
pela definição da sequencia de fibonacci, sabemos que fibonacci(2) = 1 e fibonacci(1) = 0. subsitituindo isto na igualdade temos:
fibonacci(5) = 1 + 0 + 1 + 1 + 0
fibonacci(5) = 3
Pronto. Recursivamente descobrimos que o quinto termo da sequencia de fibonacci é 3, o que bate com a sequencia mostrada na wikipedia (linkada ali em cima)
Agora vamos implementar o método para descobrir a soma da lista.
Se fossemos utilizar a solução com o loop, seria mais ou menos assim:
public static int somaLista(ArrayList<Integer> lista){
int total=0;
for (int i=0; i < lista.size(); i++){
total = total + lista.get(i);
}
return total;
}
Agora vamos pensar recursivamente:
primeiro precisamos definir uma regra para nos tirar do loop, assim, alguma hora vamos parar de invocar o método. Queremos somar os elementos da lista, então, se a lista estiver vazia, a soma será 0. Logo nossa regra é:
primeiro precisamos definir uma regra para nos tirar do loop, assim, alguma hora vamos parar de invocar o método. Queremos somar os elementos da lista, então, se a lista estiver vazia, a soma será 0. Logo nossa regra é:
- Se a lista estiver vazia, o resultado da soma é zero
Para que nossa regra nos ajude, a lista deverá diminuir a cada chamada do método, assim uma hora ela ficará vazia e terminaremos nossa execução. Então na hora de implementar o código vamos remover o primeiro elemento da lista, e somar com o resto da lista. O código fica assim:
Ao executarmos o código
temos a saida 8.
Como sempre, se tiver alguma dúvida, sugestão ou critica, deixe nos comentarios.
public static int somaListaRecursivo(List<Integer> lista){
if (lista.isEmpty()) return 0;
int aux=lista.get(0);
lista.remove(0);
return aux + somaListaRecursivo(lista);
}
Ao executarmos o código
public static void main(String[] args) {
ArrayList<Integer> l = new ArrayList<>();
l.add(2);
l.add(3);
l.add(3);
System.out.println(somaListaRecursivo(l));
}
temos a saida 8.
Como sempre, se tiver alguma dúvida, sugestão ou critica, deixe nos comentarios.
sábado, 26 de abril de 2014
Construtores
Os
construtores são utilizados para inicializar uma classe, apesar de
serem simples de se utilizar e entender, algumas pessoas tem dúvidas e/ou acabam
utilizando sem saber sobre sua existencia, com este post eu pretendo mostrar o conceito
de construtor com um exemplo prático. A linguagem utilizada será o
Java, os construtores serão utilizados para inicializar um JFrame já
com algumas informações da nossa entidade.
Sobre a sintaxe dos construtores:
- Construtores DEVEM ter o exato nome da classe, lembrando que Java é case sensitive
- Construtores NUNCA terão retorno, nem mesmo void. Se for colocado algum tipo de retorno ele deixará de ser um construtor e se tornará um metodo normal.
- Construtores podem ter qualquer visibilidade (public, default, protected ou private) porem construtores private podem dificultar herança (veja a seguir)
- Usa-se o comando this() para chamar um construtor sem parametros
- Usa-se o comando this("construtor") para chamar um construtor que pede uma String como parametro
- Usa-se o comando super() para chamar o construtor da classe pai que não pede nenhum parâmetro
- Usa-se o comando super("construtor pai") para chamar o construtor da classe pai que pede uma String como parâmetro.
- Se você não definir um construtor, será criado um construtor padrão pela JVM: um construtor sem parametros e que apenas chama super()
- Todo construtor, por padrão, chama o construtor sem parâmetros da classe pai, então mesmo que você escreva código para isso, está implicito que na primeira linha depois de sua declaração existe o comando super(). O único jeito de alterar isto é você declarar explicitamente a chamada de algum outro consstrutor com this ou super.
- Pelo item anterior, podemos observar que quando uma classe é instanciada, pelo menos um construtor de cada nivel da hierarquia é chamado até chegarmos no construtor da classe Object (pois nossas classes implicitamente herdam de Object)
- Se você definir apenas um construtor com visibilidade private, sua classe não poderá ser instanciada fora da própria classe, isto é utilizado no padrão Singleton por exemplo.
Primeiro
eu criei um POJO de cliente:
public class Cliente {
private String nome;
private String tel;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
Nada de novo por aqui, uma classe de entidade com dois atributos, 2 getters e 2 setters.
Depois eu
criei um JFrame, este JFrame tem dois campos de texto, um para exibir
o nome do cliente e outro para exibir o telefone:
public class ClienteFrame extends JFrame{
private JTextField txtNome = new JTextField();
private JTextField txtTel = new JTextField();
public ClienteFrame() {
this.setLayout(new GridLayout(4, 1));
this.add(new JLabel("Nome"));
this.add(txtNome);
this.add(new JLabel("Telefone"));
this.add(txtTel);
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public ClienteFrame(Cliente c){
this();
this.txtNome.setText(c.getNome());
this.txtTel.setText(c.getTel());
}
}
O JFrame
tem dois atributos privados, que são os campos de texto que exibirão
as informações. Além
destes atributos, a classe ClienteFrame tem dois “métodos” que
tem o mesmo nome da classe, estes são
os construtores desta classe. O construtor sem argumentos monta o layout no nosso frame, enquanto, o construtor que pede um argumento chama o construtor sem argumentos (para que o layout seja montado) e depois adiciona as informações que recebeu como parametro.
SEMPRE que uma classe é instanciada, seu construtor é chamado. Perceba:
SEMPRE que uma classe é instanciada, seu construtor é chamado. Perceba:
JTextField txt = new JTextField();
Cliente c = new Cliente(); //outro construtor
JTextField txt2 = new JTextField("caixa com texto"); //construtor para inicializar o campo contendo um texto
Para finalizar, vamos instanciar nossa classe ClienteFrame com os dois construtores e ver a diferença:
primeiro instanciamos o Frame sem passar nenhum argumento:
public class Main {
public static void main (String[] args){
ClienteFrame frame = new ClienteFrame();
frame.setVisible(true);
}
}
Mas podemos também instanciar nosso frame passando um objeto do tipo Cliente como parâmetro:
public class Main {
public static void main (String[] args){
//criamos o objeto parametro:
Cliente c = new Cliente();
c.setNome("Nome do cliente");
c.setTel("2673-9000");
//passamos o objeto criado para o nosso frame:
ClienteFrame frame = new ClienteFrame(c);
frame.setVisible(true);
}
}
O resultado será:
No momento acredito que isto seja o básico, se tiver qualquer dúvida sobre o assunto deixe nos comentários
quinta-feira, 3 de abril de 2014
Usando triggers para criar logs no MySQL
Há um
tempo atrás onde trabalho, surgiu a necessidade de saber quais
informações eram inseridas eou alteradas e quando estas alterações
ocorriam. O sistema que realizava estas alterações tinha um código
extremamente mal escrito, então quanto menos alterações fossem
feitas no código, melhor. A solução a que cheguei foi utilizar
triggers nas tabelas que necessitavam destes logs.
O
tutorial utiliza o MySQL, porém a sintaxe para outros SGBD's é bem
similar (se não for igual)
Primeiro
temos a tabela que desejamos criar os logs:
create table venda (
id int auto_increment primary key,
dia datetime,
valor float
);
Até
aqui sem novidades, este é apenas o código para criar a hipotética
tabela de venda, é nesta tabela onde estão as informações q
desejaremos “logar”.
O
próximo passo é criar a tabela que armazenará as informações:
create table venda_log (
log_id int auto_increment primary key,
old_id int,
old_dia datetime,
old_valor float,
new_id int,
new_dia datetime,
new_valor int,
acao varchar(6),
usuario varchar(50),
hora timestamp
);
Nesta
tabela temos um campo de id para chave primaria do log, dois campos
para cada campo da tabela Venda, um com o prefixo old e outro com o
prefixo new. Temos o campo acao para sabermos o que foi feito na
tabela, o campo usuario para sabermos qual usuario (do mysql) fez a
alteração e o campo hora para sabermos quando esta alteração foi
feita.
Agora
temos que criar as triggers que alimentarão esta tabela:
create trigger venda_log_insert after insert on venda
for each row
insert into venda_log(old_id, old_dia, old_valor, new_id, new_dia, new_valor, acao, usuario, hora)
values(null,null,null, new.id, new.dia, new.valor, 'INSERT', user(), now());
Se você
nunca criou uma trigger pode estranhar o código acima, mas é mais
simples do que parece:
- create trigger = código para criar a trigger.
- venda_log_insert = nome da triger.
- after = tempo de execução da trigger. Before para executar a trigger antes do comando que causou seu disparo e after para executar a trigger depois do comando que causou seu disparo.
- insert = o evento que dispara a trigger, poderia ser por exemplo update ou delete
- venda = a tabela a que a trigger está associada. Esta trigger por exemplo, será disparada quando acontecer um insert na tabela venda.
- for each row = indica que o corpo da trigger começou, o que vem depois disso é o que de fato a trigger faz.
Outro
detalhe importante sobre a trigger é a utilização de “new”,
dentro da trigger temos variaveis que representam os campos (da
tabela indicada depois do on) antes e depois da alteração. Para
utilizarmos o campo antes, usamos old.nome_do_campo e para o campo
depois da alteração usamos new.nome_do_campo.
Em
triggers de insert, não temos os campos old pois antes da execução
do comando a linha ainda não existe. Em triggers de delete não
temos os campos new pois não existe linha depois da execução do
comando e em triggers do tipo update temos os dois tipos de campo.
O que
esta trigger faz então é simples, pega os valores que foram
inseridos na tabela indicada e loga eles em uma tabela, informando
também o usuario e a hora do acontecimento. Para deixarmos o log
completo vamos criar uma trigger para delete e uma para update:
create trigger venda_log_update after update on venda
for each row
insert into venda_log(old_id, old_dia, old_valor, new_id, new_dia, new_valor, acao, usuario, hora)
values(old.id, old.dia ,old.valor, new.id, new.dia, new.valor, 'UPDATE', user(), now());
create trigger venda_log_delete after delete on venda
for each row
insert into venda_log(old_id, old_dia, old_valor, new_id, new_dia, new_valor, acao, usuario, hora)
values(old.id, old.dia ,old.valor, null, null, null, 'DELETE', user(), now());
Os logs
estão prontos, para testar vamos realizar algumas operações na
nossa tabela:
insert into venda (dia, valor)values ('2014/03/09 19:43:00',137.00);
update venda set valor = 777 where id = 1;
delete from venda where id = 1;
Ao
executarmos um select na nossa tabela de log temos 3 linhas:
A
primeira linha nos mostra que as 19:45 foi feito um insert, os campos
com prefixo new dizem quais valores foram inseridos. A segunda linha
nos diz que às 19:49 os valores de uma venda foram alteradas, o
valor antigo da venda era 137 e o novo valor passou a ser 777. A
ultima linha mostra que havia uma venda com os valores mostrados no
old, mas ela foi deletada.
Esta é
apenas uma das maneiras de se criar um log em seu banco de dados, se
tiver sugestões, críticas, opiniões ou quaisquer pensamentos
aleatórios, comente ^^
Assinar:
Postagens (Atom)








