DevSecOps

20 fev, 2017

GPG para mim e para você

Publicidade

O objetivo desse artigo é ensinar a usar uma criptografia assimétrica para manter informações fora do alcance de indivíduos, como por exemplo seu primo curioso que conserta computadores de graça ou alguma agência de segurança qualquer por aí. Para isso, vamos usar GPG.

Deixe-me contextualizá-lo, leitor: GPG é uma criptografia assimétrica, ou seja, emprega um par de chaves para alcançar seu objetivo – uma chave pública e uma chave privada.

Sendo pragmático: a chave pública tem por objetivo cifrar a informação que é endereçada a um receptor, portanto, é a chave que o receptor compartilha de modo seguro, com emissores da sua confiança. A chave privada é uma chave que só o receptor tem, e seu objetivo é descriptografar o que a chave pública cifrou.

Muito bem, agora tenha em mente as terminologias OpenPGP, PGP e GnuPG ou GPG.

Keep Calm e continue lendo.

OpenPGP é um padrão proposto, um protocolo não proprietário para cifrar comunicações usando chaves assimétricas. PGP é um software da Symantec que usa o padrão supracitado e GPG é um software livre, que você pode usar em substituição ao PGP – para cool kids. E gratuito tem também o Gpg4win.

Eu disse “cifrar comunicações”, mas podemos criptografar coisas diferentes com as ferramentas. E vale citar que elas também são usadas para checar integridade, assinar digitalmente etc.

E não há como tocar neste tema sem, pelo menos, citar, ainda que brevemente, a pessoa de Phil Zimmermann, pai do PGP, que em 1991 ajudou na elaboração da primeira versão e acabou perseguido por parte do governo dos EUA. Ou seja, esta ideia poderia ter sido erradicada, mas foi disseminada por ser sábia.

E pensar que eu nasceria no ano seguinte…

If privacy is outlawed, only outlaws will have privacy. – Phil Zimmermann

Agora vamos sujar um pouco as mãos.

Criptografando com GPG no Linux

Instale o GnuPG em seu sistema… Posso escolher não detalhar isso? rs Depois de instalado, vamos gerar nosso par de chaves. Execute o comando: gpg –gen-key.

E escolha o tipo de chave desejada. Sim, vamos com a opção default, ou seja, criar uma chave para assinar e cifrar arquivos com o algoritmo RSA.

Escolha o tamanho da chave. Até o ano de 2030 o tamanho de 2048 bits deve ser seguro o suficiente, mas somos paranóicos e queremos algo que só possa ser quebrado, com sorte, em algum ano depois de 2030, portanto 4096 bits é o ideal.

Agora você deve escolher por quanto tempo a chave deve ser válida, e para este exemplo vamos usar essa chave para sempre. Se você deseja armazenar essa chave em alguma cloud, sinta-se obrigado a definir uma data de expiração.

Agora defina suas credenciais, insira uma senha – relativamente grande, alfanumérica com tudo o que existir no seu teclado – e aguarde…

Aproveite para fazer muitas coisas aleatórias no seu computador e ajude o gerador de números randômicos a conseguir números o mais próximos do aleatório possível, já que computadores só conseguem gerar números pseudo-randômicos… Ok, chega disso: foco!

Pronto, sua chave foi gerada:

Agora, vamos criptografar algo muito secreto com o comando:

gpg –encrypt –armor -r concrete@solutions.com.br secreto.txt

Aqui, –encrypt indica que o arquivo será cifrado e –armor que será convenientemente gerado um bloco de texto ASCII para transmitir a informação seja qual for o meio.

Segue, então, o parâmetro -r que indica o e-mail receptor/recipiente e logo após o nome da nossa coisa secreta.

Um arquivo .asc será criado; é o nosso arquivo cifrado. Veja o resultado comparativo:

Legal! Agora vamos recuperar nosso pequeno segredo com o comando:

gpg –decrypt –output secreto_revelado.txt secreto.txt.asc

Aqui, –decrypt indica que vamos decifrar o conteúdo e –output será o arquivo decifrado gerado seguido do nome do nosso arquivo secreto cifrado.

Muito bem! Utilizamos nossa chave pública para cifrar o arquivo cuja chave privada decifrou após solicitar a senha que definimos.

Agora, seus amigos podem exportar as chaves públicas deles, a partir do par de chaves gerado por eles, para você importar e, assim, poder cifrar informações que serão encaminhadas a eles… Contanto que a chave privada ainda esteja com eles, e somente eles!

Quando você importar as chaves, terá novos recipientes destinatários para selecionar. Selecionado o recipiente, o arquivo será cifrado com a chave pública desse recipiente e só poderá ser decifrado pela chave privada do recipiente.

Você também pode exportar sua chave privada para backup, mas não compartilhe esta com ninguém.

Aqui tem algumas referências:

Criptografando com  Gpg4win no Window

Para o Windows, a ideia é exatamente a mesma, mas com o auxílio de uma interface gráfica oferecida pelo programa Kleopatra, instalado com o Gpg4win. E por esse motivo escolhi dispensar printscreens, ok?

Então, vamos lá! Instale o Gpg4win. Marque apenas as opções ‘Kleopatra’ e ‘GPA’ – o GPA na verdade é apenas uma alternativa para gerir as chaves além do Kleopatra – para instalação. Agora vamos gerar um par de chaves. Abra o programa Kleopatra e vá em ‘File’ > ‘New Certificate…’.

Selecione a opção ‘Create a personal OpenPGP key pair’ .

Preencha os campos aqui e clique em ‘Advanced Settings’ para preencher os campos aqui também. Tudo pode/deve ser preenchido de modo semelhante ao exemplo do gpg no Linux. A esta data, se você desmarcar a opção ‘Signing’, o programa não conseguirá gerar a chave…

‘Ok’, ‘Next’, ‘Create Key’, forneça uma senha segura e pronto.

Para criptografar um arquivo, vá em File > Sign/Encrypt files.

Selecione o arquivo desejado, selecione a opção ‘Encrypt’ e ‘ASCII armor’, clique em ‘Next’, escolha o receptor/recipiente da informação cifrada (nós mesmos neste exemplo), clique em ‘Add’ e, então, ‘Encrypt’. Um arquivo .asc será criado no mesmo local do arquivo original. É o nosso arquivo secreto oculto malandrão \o/! Tudo semelhante ao modo como fizemos no Linux.

Para descriptografar o arquivo, vá em File > Decrypt/Verify files.

Selecione o arquivo desejado e note qual será o diretório de saída. Em ‘Output folder’, na qual o arquivo decifrado ficará contido, clique em ‘Decrypt’. A senha definida para nosso par de chaves será solicitada; forneça-a. Clique em ‘Ok’, ‘Ok’ e pronto!

Sim, as mesmas regras exemplificadas no programa gpg valem pro Kleopatra aqui, só que em uma interface gráfica.

Mais algumas referências:

Conclusão

Com seus arquivos cifrados com GPG, você não precisará se preocupar tanto com o lugar em que eles estão armazenados, do ponto de vista da confidencialidade. O padrão OpenPGP não serve somente à criptografia, mas também para aferir a integridade dos objetos. Podemos criar assinaturas para criar autenticidade e é possível fazer backups das chaves e disponibilizar chaves públicas em serviços online.

O padrão também possui implementações cross-platform, então, você pode esperar versões para diversos sistemas, inclusive para Android.

“Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on.” – Edward Snowden

E é isso! Ficou alguma dúvida ou tem alguma sugestão/comentário a fazer? Aproveite os campos abaixo!

Até a próxima.

É desenvolvedor, gosta de estudar sobre segurança e quer aprender muito trabalhando em um time multidisciplinar e em um produto super desafiador? Clique aqui.