Criptografia no Linux – uma opção

Por José Reinaldo C. da Rocha

Quando passei a fazer cópia de segurança “na nuvem” deparei-me com um problema: havia informações pessoais que eu não poderia correr o risco de serem bisbilhotadas por terceiros (extratos bancários, declarações do Imposto de Renda, documentos profissionais, etc). Para contornar este problema testei três métodos de criptografia que podem ser utilizadas no Linux (para ver o básico sobre criptografia, clique no link):

1. TrueCrypt – Possui a vantagem de se poder utilizar tanto no Windows, como Mac e Linux. Porém é necessário predefinir um tamanho e, mesmo ocupando somente parte deste espaço, o tamanho total precisa estar disponível e ser sincronizado com “a nuvem”. O desenvolvimento deste programa foi abandoando junto com o término de suporte ao Windows95 , pela Microsoft. Esta é a versão oficial que aparece no “site”. Também apareceram notícias de que pode possuir problemas de segurança que não estão mais sendo corrigidos (ver http://truecrypt.sourceforge.net/).

2. EncFS – Criptografa os arquivos e subdiretórios contidos em um diretório (transformado em File System). Criptografa inclusive os nomes dos arquivos/diretórios (isto força a ter um “dicionário” para saber que arquivo/diretório refere-se a que). Não precisa reservar antecipadamente um espaço para conter os arquivos, pois ocupa espaço a medida que os arquivos forem sendo gravados. Cria um arquivo (.encfs6) dentro do diretório onde são colocadas as metainformações sobre os arquivos criptografados. Assim, além da senha é necessário ter este arquivo também para conseguir decriptar os demais arquivos. Se perder este arquivo com as metainformações, todos os arquivos ficam sem poder ser decriptados. Disponibilizado apenas para a plataforma Linux

3. eCryptFS – Criptografa os arquivos e subdiretórios contidos em um diretório (transformado em File System). Além de fazer parte do kernel do Linux (portanto disponível apenas para Linux) ainda permite criptografar, ou não, os nomes dos arquivos. Também coloca as metainformações no “header” de cada arquivo e não num arquivo central. Permite montar o File System(FS) no mesmo diretório origem dos arquivos ou em outro diretório. No caso de “backup” na nuvem é melhor escolher montar o File System (FS) em outro diretório, pois atualizações feitas nos arquivos são sincronizadas com a nuvem apenas na forma criptografada.

Escolhi o eCryptFS por não necessitar de reservar espaço além do utilizado pelos arquivos gravados, bem como por permitir manter os nomes originais dos arquivos, além de gravar as metainformações nos “headers” dos próprios arquivos.

Diferentemente do EncFS, não encontrei nenhuma interface gráfica para o eEcryptFS. Então, para facilitar meu trabalho de montar constantemente este File System (FS) com sincronização “na nuvem” escrevi um “script” utilizando diálogos através de interface gráfica.

Características do script

  • Escrito em Rexx.
  • Monta ou Desmonta o eCryptFS. Depende do pacote “ecryptfs-utils”, instalado através do repositório.
  • Depende do “pacote” Regina-rexx e da biblioteca ssft.sh. Esta biblioteca provê scripts para uso de um destes diálogos que utilizam interface gráfica: zenity, kdialog ou dialog. Instale usando “apt-get install ssft”.
  • Prevê a utilização de um arquivo-cofre, em formato texto, onde é armazenada a frase secreta que encripta/decripta o File System (FS). Este arquivo-cofre precisa ficar fora do diretório criptografado. Se quiser utilizar a mesma frase secreta tanto para criptografar o FS como para abrir este “cofre”, ele torna-se dispensável, desde que sejam utilizados os comandos eCryptFS diretamente e não este script. Isso tem a vantagem de poder perder este arquivo sem perder todos os dados criptografados.
  • Método de criptografia escolhido: AES com tamanho de chave de 24 bits, sem criptografia de nome de arquivo.
  • Além de solicitar o nome do arquivo-cofre da frase secreta solicita os nomes de 2 diretórios. O primeiro é onde ficarão os dados criptografados. O outro é o que será montado com os dados decriptados para uso normal. É neste diretório que os arquivos são criados, editados, deletados etc. Caso queira utilizar o mesmo diretório tanto para manter os dados criptografados, como decriptados é necessário informar o mesmo nome em ambas as solicitações.
  • Se o diretório dos dados decriptados for diferente do diretório dos dados criptografados, verifica se esse diretório está vazio antes de ser montado.
  • Os arquivos inseridos no diretório dos dados criptografados não originados a partir do diretório de dados decriptados não serão alterados e nem criptografados. Portanto é importante que na primeira utilização este diretório esteja vazio para que nenhum arquivo nele fique fora do processo de criptografia.

Linguagem utilizada – Rexx

REXX é uma linguagem de programação interpretada, com origem nos mainframes da IBM (início dos anos 1980). Clique no link para entender um pouco mais sobre essa linguagem através de um exemplo comentado. Para instalar, use “apt-get install regina-rexx”.

Interface gráfica com Gnome – Zenity

O Zenity é um programa que utiliza o GTK, conjunto de bibliotecas projetadas para o desenvolvimento de interface gráfica, a partir de scripts em shell. Por padrão, o Zenity vem instalado na maioria das distribuições Linux. Veja um exemplo de sua utilização:

zenity --info --text="Teste do comando Zenity. \n\nVisite www.MonolitoNimbus.com.br"

Veja mais em Saiba como criar uma interface gráfica para seu script em shell.

Utilização

1) Instalar os pacotes através do repositório:

$ sudo apt-get install regina-rexx ecryptfs-utils ssft

2) Crie as pastas de origem (com os dados criptografados, por exemplo, diretorio_origem) e de destino (com os dados a serem trabalhados, por exemplo, diretorio_destino) e um arquivo em branco fora das pastas onde for criptografar os dados para guardar a frase secreta (frasesecreta.txt, por exemplo);

3) Copie o arquivo eCryptFS.rex (clique no link do final do post para baixá-lo) em algum lugar que não seja dentro das pastas envolvidas na criptografia, torne-o executável (comando da 1ª linha) e execute-o como super usuário (comando da segunda linha):

$ sudo chmod +x eCryptFS.rex
$ sudo ./eCryptFS.rex

Opcionalmente, após o nome do arquivo, você pode digitar o nome do diálogo escolhido (zenity ou kdialog ou dialog) após um espaço e dê enter.

4) Após a execução, será aberta uma janela de diálogo escolhendo para montar (mount) ou desmontar (umount);

5) Escolhendo “mount”, aparecerá a segunda caixa de diálogo, escolha a pasta onde serão guardados os dados criptografados (ex: /media/pendrive/diretorio_origem);

6) Na tela seguinte, escolha a pasta onde será montado (ex: /home/user/Documentos/diretorio_destino);

7) Na próxima tela, informe um arquivo vazio para guardar a frase secreta (não precisa decorar), redigitando-a posteriormente;

8) Na sequência, digite uma senha para criptografar a frase secreta;

9) Esta senha será pedida uma vez mais para iniciar o processo de montagem do diretório de dados decriptados.

Pronto. Todos os arquivos que forem utilizados na pasta onde foi montado (no caso, /home/user/Documentos/diretorio_destino) serão copiados criptografados para a pasta onde os arquivos serão guardados (/media/pendrive/diretorio_origem, no nosso exemplo). Para desmontar, basta executar novamente o arquivo “eCryptFS.rex”, escolher a opção “umount” e o diretório a ser desmontado (diretorio_destino, no exemplo, que depois de desmontada aparecerá vazia). Os arquivos da pasta criptografada (diretorio_origem) estarão com um tamanho maior e não abrirão corretamente, devido à criptografia, abrindo somente se acessados pela “pasta_destino” após reiniciar o processo de montagem. Se desligar ou reiniciar o computador ele será automaticamente desmontado.

Simplificando o processo

Uma vez feito todo o processo de preparação dos diretórios para serem criptografados fica trabalhosa a interação para escolha de diretórios e arquivo de frase secreta sempre que for necessário montar o diretório de dados decriptados.

Para facilitar o processo além do eCryptFS.rex escrevi um modelo que, uma vez personalizado para um determinado diretório criptografado, faz todo o processo somente solicitando a senha para decriptar a frase secreta. O script Modelo_monta_desmonta_diretorio.rex (clique no link do final do post para baixá-lo) deve ter as seguintes alterações:

/*****  Substitua os conteúdos das variáveis abaixo   *****/
/*****  Início das alterações a serem feitas no modelo *****/
diretorio_origem  = "Coloque aqui, entre as aspas, o diretório dos dados criptografados, incluindo o caminho absoluto"
diretorio_destino = "Coloque aqui, entre as aspas, o diretório dos dados montado para uso, incluindo o caminho absoluto"
arquivo_frase_secreta = "Coloque aqui, entre as aspas, o arquivo onde foi armazenada a frase secreta, incluindo o caminho absoluto"
/*****  Fim das alterações a serem feitas no modelo ********/

Feitas as alterações acima, ele deve ser gravado com algum nome escolhido a gosto de quem personalizar o processo. No caso de ser gravado com o nome de MontaDiretorioSecreto.rex, a execução para montagem será (não esqueça de torná-lo executável com o comando “chmod +x”):

$ sudo ./MontaDiretorioSecreto.rex

Para desmontagem:

$ sudo ./MontaDiretorioSecreto.rex umount

Caso queira utilizar uma interface gráfica específica, ela deve ser informada no parâmetro. Por exemplo, se quiser utilizar o kdialog:

$ sudo ./MontaDiretorioSecreto.rex kdialog

ou

$ sudo ./MontaDiretorioSecreto.rex umount kdialog

 

Exemplo de utilização para proteger as declarações do Imposto de Renda

Preparação:

O programa da Receita Federal utiliza um diretório em /home/usuário/ProgramasRFB. Então este será nosso diretório de trabalho onde as informações ficarão decriptadas para uso do programa da Receita Federal.

No diretório compartilhado com “a nuvem” (no exemplo, utilizamos o Dropbox, mas poderia ser qualquer outro serviço semelhante), criamos um diretório onde os dados ficam criptografados e sincronizados. Nominamos este diretório /home/usuario/Dropbox/ProgramasRFB_Cripto. No diretório /home/usuario/Dropbox criamos o arquivo CofreProgramasRFB_Cripto.txt

Execução:

1) Fazemos uma cópia em algum diretório de trabalho do conteúdo que está em /home/usuário/ProgramasRFB e deletamos tudo deixando este diretório vazio;

2) Executamos o script para permitir a proteção dos dados:

$ sudo .eCryptFS.rex

3) Quando solicitado o diretório dos dados criptografados informamos: /home/usuario/Dropbox/ProgramasRFB_Cripto;

4) Quando solicitado o diretório dos dados decriptados, informamos: home/usuário/ProgramasRFB;

5) Quando solicitado o arquivo de armazenamento da frase secreta, informamos: /home/usuario/Dropbox/CofreProgramasRFB_Cripto.txt;

6) Uma vez montado o diretório home/usuário/ProgramasRFB, copiamos de volta o antigo conteúdo que havíamos salvo em um diretório de trabalho;

7) A partir de agora, tudo o que for feito usando o programa da Receita Federal será sincronizado de maneira criptografada com a conta no Dropbox. Para simplificar o processo, alteramos o Modelo_monta_desmonta_diretorio.rex:

/*****  Substitua os conteúdos das variáveis abaixo   *****/
/*****  Início das alterações a serem feitas no modelo *****/
diretorio_origem  = "/home/usuario/Dropbox/ProgramasRFB_Cripto"
diretorio_destino = "/home/usuário/ProgramasRFB"
arquivo_frase_secreta = "CofreProgramasRFB_Cripto.txt"
/*****  Fim das alterações a serem feitas no modelo ********/

8) Renomeamos este script para ProgramasRFBCripto.rex, gravamos no diretório do usuário e o tornamos executável:

$ sudo chmod +x /home/usuario/ProgramasRFBCripto.rex

9) Para montar:

$ sudo /home/usuario/ProgramasRFBCripto.rex

10) Para desmontar:

$ sudo /home/usuario/ProgramasRFBCripto.rex umount

 

Download dos arquivos

Os arquivos utilizados nesse post (eCryptFS.rex e Modelo_monta_desmonta_diretorio.rex) estão disponíveis no GitHub/eCryptFS.

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.