Elmord's Magic Valley

Computers, languages, and computer languages. Às vezes em Português, sometimes in English.

Posts com a tag: politics

Remember what I told you / If they hated me they will hate you

2018-10-08 21:39 -0300. Tags: music, politics, life, mind, em-portugues

Faz uns dias que essa música anda na minha cabeça (letra, tradução).

I'll just leave this here.

Comentários / Comments

NSA operation ORCHESTRA, e alguns pensamentos sobre o estado atual da computação

2014-04-17 01:29 -0300. Tags: comp, prog, security, politics, ramble, em-portugues

No FOSDEM (Free and Open Source Developers' European Meeting) deste ano, Poul-Henning Kamp deu uma palestra muito interessante intitulada "NSA operation ORCHESTRA - Annual Status Report" (video, slides). A palestra, apresentada na forma de um report de um programa fictício da NSA, explora a idéia de o que a NSA poderia estar fazendo para coletar o máximo de informação com o menor custo possível. Possibilidades incluem:

Como diz nos slides da palestra, "A intenção foi fazer as pessoas rirem e pensarem, mas eu desafio qualquer um a provar que não é verdade."

A única coisa que não me agrada nessa palestra é a conclusão de que "this is a political problem" e de que é inútil fazer qualquer coisa do ponto de vista técnico. As ações da NSA são um problema político, mas: (1) isso não quer dizer que não possamos ou devamos buscar eliminar fontes de vulnerabilidades no software existente; (2) esse tipo de sabotagem poderia vir igualmente de uma organização privada com recursos suficientes, então o problema não é puramente político, no sentido de que mesmo nos livrando de governos maliciosos, o problema não desapareceu.

Ação política é importante, mas como desenvolvedores de software podemos tomar atitudes para mitigar o efeito de ações maliciosas sobre software. Para começar, podemos parar de usar ferramentas da idade da pedra, que facilitam a introdução (acidental ou deliberada) de falhas de segurança, como C/C++. O potencial de insegurança no C/C++ não é o mero descuido na hora de calcular os índices e o tamanho de um vetor (que por si só já é uma eterna fonte de vulnerabilidades). Em C/C++ existe o conceito de comportamento indefinido (undefined behavior), e cada versão nova do GCC/Clang/[insira seu compilador C/C++ favorito aqui] sai "melhor" em explorar comportamento indefinido para fins de otimização do que a anterior. A idéia básica é que se um programa realiza certas ações "proibidas" pelo standard da linguagem (e.g., acessar um elemento além do final de um vetor), o comportamento resultante do programa não é especificado pelo standard, então o compilador é livre para gerar um programa que faz qualquer coisa nesses casos. Por exemplo, suponha que você escreve algo como:

void foo(struct pessoa_t *pessoa) {
    int idade = pessoa->idade;

    if (pessoa == NULL)
        printf("Oops, pessoa inválida!\n");
    else
        printf("A idade da pessoa é %d.\n", idade);
}

pessoa é um ponteiro (potencialmente nulo) para uma estrutura de dados. Acessar o conteúdo apontado por um ponteiro nulo é um comportamento indefinido: um programa que faz isso é um programa incorreto. Logo, o compilador é livre para gerar código que não funciona no caso de o ponteiro ser nulo. Logo, o compilador pode assumir que pessoa não é um ponteiro nulo: se a hipótese do compilador for verdade, o programa estará correto, e se não for, tanto faz se o programa está correto. Mas se o ponteiro não é nulo (por hipótese), então o if na função é redundante (pois a condição é sempre falsa): o compilador pode descartar as linhas cor-de-burro-quando-foge do código resultante, como uma otimização. Foi exatamente uma otimização desse tipo que transformou um erro de programação no kernel do Linux em uma falha de segurança alguns anos atrás. Outras situações em que o compilador pode conspirar contra o programador incluem: remover verificações de overflow em operações aritméticas, pois signed overflow é indefinido em C/C++; reordenar acessos à memória, ignorando que outras threads podem depender do acesso em uma certa seqüência, se o programador não tomar o cuidado de forçar a ordem das operações; e inúmeras outras situações. Dado o grau de exploitação de comportamento indefinido nos compiladores C/C++ modernos, seja por avanços tecnológicos em análise estática, seja por influência da NSA/agentes soviéticos/illuminati/maçonaria, eu me sinto fortemente propenso a encarar o compilador C/C++ como um agente malicioso, e a idéia de minimizar o uso dessas linguagens parece cada vez mais appealing.

Outra medida técnica para reduzir a propensão dos sistemas computacionais a falhas de segurança é adotar modelos de segurança baseados em capabilities, em que o default é os processos não terem acesso a nada que não lhes seja explicitamente concedido, ao contrário dos modelos baseados em usuários, como o do Unix, em que é difícil ter certeza absoluta de quais são os poderes que um processo tem, e a grande maioria dos processos roda com mais permissões do que precisa (e.g., seu browser tem o poder de ler todos os seus arquivos pessoais, o tempo inteiro).

Falar é mais fácil do que fazer. Hoje em dia há uma falta de soluções práticas que nos permitam livrarmo-nos do C/C++ sem perder performance ou outras conveniências, ou sistemas baseados em capabilities que não sejam sistemas acadêmicos cuja adoção no mundo real é inviável. Estes são problemas nos quais eu pretendo trabalhar durante a minha existência neste mundo [aquela história de crowdfunding era só parcialmente brincadeira :)]; mais sobre isso em um post futuro, talvez. O ponto é que definitivamente há (muito) o que fazer do ponto de vista técnico para mitigar os efeitos de ações da NSA e outros agentes maliciosos.

5 comentários / comments

Estatuto do Nascituro

2013-06-12 07:22 -0300. Tags: life, politics, em-portugues

A essas alturas você já deve ter ouvido falar do Estatuto do Nascituro, um projeto de lei que, entre outras coisas, ilegaliza o aborto em caso de estupro (atualmente permitido por lei), e prevê o pagamento de uma bolsa (de um salário mínimo) à vítima caso o pai da criança não seja identificado.

Que como se não bastasse ter sido estuprada, a vítima ainda vai ter que carregar por nove meses o fruto do estupro, uma criança que ela não pretendia ter e não teve nenhuma escolha em ter, problema é dela. Que o fato de que ter um filho pode alterar completamente a vida dela, também pouco importa. Afinal, a única função da mulher é reproduzir mesmo. Além disso, ela receberá auxílio financeiro do estado (de um salário mínimo, evidentemente mais do que suficiente), e cuidar de uma criança é só uma questão de dinheiro, não é mesmo?

Não, pouco importa a vítima. O importante nessa história toda é a criança. A criança que terá uma vida ótima, com um pai estuprador e uma mãe que não a queria e que sempre vai associá-la ao estupro. Certamente a criança será beneficiada em nascer em tal ambiente familiar bem estruturado, acolhedor e preparado para recebê-la. E na dúbia ocasião em que não seja esse o caso, a criança sempre poderá ir para a adoção, viver em um igualmente bem estruturado e acolhedor orfanato por tantos anos quanto necessário, até, talvez, ser adotada por uma família que, talvez, lhe oferecerá boas condições de vida. Mas isso é um caso especial; no geral, a mãe biológica, que é a verdadeira responsável pela criança, é que ficará com a criança. Afinal, quem mandou ser estuprada?

Diga NÃO ao Estatuto do Nascituro.

1 comentário / comment

Democracia direta

2012-06-07 22:47 -0300. Tags: politics, em-portugues

Disclaimer: idéias mal-mastigadas follow.

Democracia vem em dois sabores: direta e indireta.

Democracia indireta, a.k.a. democracia representativa, é o que nós temos agora, e é o que as pessoas normalmente têm em mente quando falam de democracia: o povo elege representantes, que então votam nas leis e tomam a maior parte das decisões do estado. Qualquer pessoa pode se candidatar a representante (em geral), e os cargos são temporários, o que permite tirar do poder o camarada que não está agindo de acordo com as vontades do povo.

Democracia direta é em linhas gerais o que os inventores da palavra entendiam por democracia: o povo vota nas leis e toma as decisões do estado diretamente. O "governo" serve apenas uma função administrativa; o poder de iniciativa, isto é, de criação de leis e outras decisões, reside primariamente na vontade popular. A única nação moderna que pratica consistentemente uma forma parcial de democracia direta é a Suíça, onde referendos são obrigatórios para qualquer modificação à constituição e podem ser exigidos em outras situações, é possível propor modificações à constituição por meio de uma "iniciativa popular" (que exige a assinatura de 100 mil cidadãos para ser considerada e votada por referendo), e em algumas cidades as decisões locais são tomadas por meio de assembléia popular.

Eu não acredito em democracia indireta. O voto por representantes tem por conseqüência a necessidade de escolher um "pacote de propostas" na hora de votar. Nem sempre estamos de acordo com todos os pontos de um candidato (ou de qualquer um dos candidatos), e nem sempre há um candidato que defenda nossos interesses; em uma eleição, freqüentemente todos os candidatos são igualmente ruins, ou temos que votar no menos pior, e assim o mecanismo de substituição de representantes acaba trocando seis por meia dúzia. Além disso, os supostos representantes do povo freqüentemente tomam decisões que não têm qualquer embasamento na vontade popular, situação em que o povo precisa interferir nas decisões do governo de qualquer forma, por meio de protesto, o que nem sempre é efetivo.

Democracia direta tem alguns problemas práticos, dos quais o principal é a escalabilidade: em uma cidade de um milhão de habitantes, é inconveniente realizar uma assembléia popular para decidir a legislação. Uma possibilidade para contornar esse problema é ter assembléias locais em sub-regiões menores (com 50 ou 100 mil habitantes). Essas assembléias tomariam suas decisões e elegeriam um representante, sem poder de decisão próprio, mas com a função única de representar as decisões da assembléia em um "conselho" regional formado pelos representantes das diversas sub-regiões. É importante aqui que os representantes não tenham o poder de tomar decisões sem a aprovação popular. Outra maneira de aumentar a escalabilidade da participação é por meios eletrônicos, se pudermos garantir a segurança de uma votação pela Internet. Criptografia de chave pública seria suficiente, creio eu, se o governo tiver um registro das chaves públicas dos cidadãos (assim como tem um registro de RGs e CPFs); o problema seria garantir a anonimidade dos votos.

O meio-termo utilizado pela Suíça já seria um bom começo, e talvez fosse bom o suficiente. Ele é mais escalável do que um sistema totalmente direto, que talvez fosse mais problemático quando levado a nível nacional, especialmente em um país do tamanho do Brasil. Não vejo por que ter um país do tamanho do Brasil, entretanto; estou propenso a achar que o melhor seria dar autonomia total aos estados, e tornar a união entre os estados algo similar à União Européia.

Tenho que pensar melhor sobre tudo isso. Esse último parágrafo me fez parar para pensar por que é que alguma coisa não teria autonomia total em relação ao resto se assim quisesse, e.g., por que uma cidade teria que acatar as decisões do "nível hierárquico superior". Essa história de hierarquia nunca me foi muito palatável; mais sobre isso em outra ocasião. Comentário é bem-vindo.

2 comentários / comments

Main menu

Recent posts

Recent comments

Tags

em-portugues (213) comp (148) prog (71) in-english (62) life (49) unix (38) pldesign (37) lang (32) random (28) about (28) mind (26) lisp (25) fenius (22) mundane (22) web (20) ramble (18) img (13) rant (12) hel (12) scheme (10) privacy (10) freedom (8) esperanto (7) music (7) lash (7) bash (7) academia (7) copyright (7) home (6) mestrado (6) shell (6) android (5) conlang (5) misc (5) emacs (5) latex (4) editor (4) etymology (4) php (4) worldly (4) book (4) politics (4) network (3) c (3) tour-de-scheme (3) security (3) kbd (3) film (3) wrong (3) cook (2) treta (2) poem (2) physics (2) x11 (2) audio (2) comic (2) lows (2) llvm (2) wm (2) philosophy (2) perl (1) wayland (1) ai (1) german (1) en-esperanto (1) golang (1) translation (1) kindle (1) pointless (1) old-chinese (1)

Elsewhere

Quod vide


Copyright © 2010-2024 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Powered by Blognir.