Compilações reproduzíveis do Tails

Recebemos o prêmio Mozilla Open Source Support para tornar as imagens ISO do Tails construídas de forma reproduzível. Este projeto estava em nosso roteiro para 2017 e com o lançamento do Tails 3.3 temos o orgulho de apresentar uma das primeiras imagens ISO reproduzíveis de um sistema operacional Linux do mundo.

Do código-fonte ao código binário

Quando escrevemos software, fazemos isso usando linguagens de programação que um ser humano pode ler e compreender. Isso é chamado de código-fonte. Pode-se imaginar o código-fonte como uma receita muito precisa. Essa receita descreve um procedimento exato: quais ingredientes e qual quantidade de ingredientes você precisa? Como devem ser misturados e a que temperatura devem ser cozinhados ou assados? A receita irá até descrever o resultado esperado: como deve ser a aparência e o sabor da refeição.

Quando geramos uma imagem ISO do Tails, nosso código-fonte e os pacotes Debian que incluímos são montados em uma imagem ISO binária, assim como quando os ingredientes da receita são misturados, obtém-se a refeição. As quantidades e ingredientes desta refeição não podem ser facilmente submetidos a engenharia reversa. O resultado do nosso processo de cozimento é uma imagem ISO do Tails que os usuários baixam e instalam em um pendrive.

Nós, chefs e auxiliares de cozinha (desenvolvedores e colaboradores do Tails), fornecemos a vocês, nossos usuários, vários meios para verificar se esta imagem ISO é realmente aquela que queremos que você baixe, seja usando nosso complemento do Firefox que faz isso verificação automaticamente para você ou usando nossa assinatura OpenPGP. Ambos os métodos de verificação simplesmente informam que a imagem ISO é a imagem que queremos que você baixe: Que a refeição que você recebe é de fato a refeição que você pediu, e não uma refeição que foi envenenada ou trocada por um malvado waiter (como um espelho de download).

No entanto, mesmo com métodos de verificação tão sofisticados, ainda é impossível rastrear a receita da refeição: a refeição contém apenas os ingredientes que deveria conter? Ou poderia pessoal não autorizado ter invadido a cozinha à noite, envenenado os ingredientes e feito o forno cozinhar a 50 graus acima do indicado? Em outras palavras, uma entidade maliciosa poderia ter comprometido nossas máquinas construídas? É contra isso que as compilações reproduzíveis ajudam a verificar e proteger.

O que é uma compilação reproduzível?

Builds reproduzíveis são um conjunto de práticas de desenvolvimento de software que criam um caminho verificável do código-fonte legível por humanos até o código binário usado por computadores. (citado de https://reproducible-builds.org/)

Em outras palavras, com construções reproduzíveis, cada processo de cozimento da mesma receita é exatamente repetível.

Na Tails trabalhamos durante um ano para implementar esse conjunto de práticas. Isto torna agora possível comparar imagens ISO construídas por múltiplas partes a partir do mesmo código-fonte e pacotes Debian, e garantir que todas resultem exatamente na mesma imagem ISO.

Ou ainda, usando a nossa metáfora culinária: vários de nós cozinharemos a refeição, compare que todos cozinhamos a mesma refeição e só quando tivermos certeza disso, iremos entregá-la a você.

Todos nós podemos, assim, ganhar a confiança de que nenhum forno quebrado introduziu códigos maliciosos ou falhas: ou perceberíamos isso antes de entregar a refeição.

O que isso significa para você como usuário?

Isso não muda nada na forma como você baixa e instala o Tails, e você não precisa fazer verificações adicionais. Simplesmente ajuda a confiar que a imagem ISO do Tails que distribuímos realmente vem do código-fonte e dos pacotes Debian dos quais ela deve ser feita. Com o Tails reproduzível, basta uma pessoa experiente para construir o Tails e compará-lo com a imagem ISO que o projeto Tails distribui para descobrir alguns tipos de backdoors.

E, a propósito, não apenas nossas imagens ISO agora são reproduzíveis, mas também nossas atualizações incrementais. E você está se beneficiando dessa melhoria sem nem perceber :)

Obrigado

Além do suporte de código aberto da Mozilla e da comunidade Reproducible Builds que forneceram ajuda crítica onde precisávamos, também gostaríamos de agradecer a todos os membros da nossa comunidade que nos ajudaram a testar este processo. Você nos dando uma mão é muito apreciado!

Implementação técnica

Se você estiver interessado nos detalhes técnicos de nossa implementação, convidamos você a ler nosso relatório para a comunidade Reproducible Builds sobre como fizemos isso.

Também publicamos instruções para verificar técnicas build.

Ajude-nos a tornar o Tails ainda melhor

Tails é um projeto de software livre auto-organizado. Dependemos de parcerias, subsídios e, principalmente, de doações de pessoas como você.

Quer nos ajudar para fazer o Tails fazer bolos ainda melhores no futuro? Doe hoje!

Problemas conhecidos

Qualquer processo de construção reproduzível é reproduzível... até prova em contrário. No nosso caso, problemas de última hora foram descobertos e devem ser corrigidos na próxima versão do Tails: