GnuPGEmDispositivoUSB
Armazernando Chaves GPG em um Dispositivo USB (Pendrive) Encriptado
Geralmente é desejado ser possível utilizar ima Chave GPG em mais de um computador, como em casa e no escritório, ou em um computador de Mesa e em um Portátil. Infelizmente, armazenar chaves de encriptação em local sobre o qual não se exerça posse o tempo todo não é uma boa idéia. Até mesmo armazenar chaves em um computador portátil pode se tornar um problema, pois se este for roubado, o mesmo ocorre com sua chave GPG. Felizmente, ainda assim seria possível revogar a chave antes que alguém pudesse decifrá-la, mas isso continua a causar inconvenientes. E se fosse possível armazenar a chave, com segurança, em um dispositivo que estivesse sempre consigo?
IMPORTANTE: Tenha certeza de que foi feita uma cópia de segurança da pasta ~/.gnupg antes de seguir os passos abaixo. A última coisa que você quer é perder todos as chaves por que algo saiu errado.
Conheça o dm-crypt
No site do dm-crypt lê-se: "Mapeador de dispositivos (Device-mapper) é uma nova infraestrutura no Kernel Linux versão 2.6 que provê uma forma genérica de se criar camadas virtuais de blocos de dispositivos que podem fazer coisas diferentes sobre uma camada de dispositivos reais, como dividí-lo, concatená-lo, espelhá-lo, sincronizá-lo, etc. O Mapeador de dispositivos (device-mapper) é utilizado nas ferramentas LVM2 e EVMS 2.x, por exemplo. O dm-crypt é um desses mapeadores de dispositivos, cujo objeto provê encriptação transparente de blocos de dispositivos utilizando o novo cryptoapi do Linux 2.6. O usuário pode, basicamente, especificar uma forma criptografia simétrica, uma chave de senha (de qualquer tamanho), um modo de geração iv, e então criar um novo bloco em /dev. Escrita e gravação neste dispositivo serão criptografadas e a leitura será decifrada. É possível montar o sistema de arquivos normalmente. Mas sem a chave de acesso não será possível acessar os dados."
Isso se encaixa perfeitamente nas nossas necessidades. Criemos, então, um sistema de arquivos criptografado dentro de um arquivo comum no dispositivo USB, onde salvaremos as nossas tão preciosas Chaves GnuPG.
Instalando o Software
Primeiro, será necessário instalar o cryptsetup:
sudo apt-get install cryptsetup
Isso já terá se encarregado das correspondentes dependências.
Configurando o Sistema de Arquivos encriptado
É comum armazenar as chaves GPG em um pequeno e comum dispositivo USB, do tamanho de um chaveiro. Quando este é conectado ao computador, é automaticamente montado em um dispositivo na pasta /media (normalmente /media/usbdisk, se você não tiver configurado um outro ponto de montagem). As instruções a seguir irão considerar este configuração.
Será mais adequado criar o sistema de arquivos encriptado dentro de um arquivo comum, em vez de particionar o dispositivo USB. Esta forma requer menos alterações à estrutura do dispositivo, assim como facilitará a montagem e desmontagem do volume. Entretanto, muitos dos passos a seguir podem ser adaptado para tal opção de particionamento.
Criando o Arquivo
Antes de criar o sistema de arquivos, é preciso termos um arquivo que seja grande o bastante para acondicioná-lo. Isto pode ser obtido com o comando dd:
dd if=/dev/zero of=/media/usbdisk/disk.img bs=1M count=16
O comando acima criará um arquivo de 16MB contendo apenas zeros. Modifique o número após count para obter o tamanho desejado do arquivo que armazenará o sistema de arquivos encriptado, em megabytes.
Configurando o Dispositivo Loop encriptado
Antes de realmente criar o sistema de arquivos no nosso novo arquivo, é preciso anexá-lo a um dispositivo do tipo loop, configurando-o como um objeto de mapeador de dispositivos. O comando losetup -f encontrará o primeiro dispositivo loop disponível, para que possamos definir a saída deste dispositivo para uma variável chamada loopdev e usá-la para diversos comandos:
sudo modprobe loop sudo modprobe dm-crypt sudo modprobe aes export loopdev=$(sudo losetup -f) sudo losetup $loopdev /media/usbdisk/disk.img sudo cryptsetup -c aes -s 256 -h sha256 -y create usbkey $loopdev
Os comandos acima estabelecerão no arquivo alvo uma criptografia AES de 256-bit, cifrando (hashing) a senha utilizada pelo algoritmo SHA-256.
Após a configuração, é uma boa idéia remover o mapeador de dispositivos usbkey (criado acima) e executar novamente o cryptsetup para termos certeza de que a senha não foi digitada com erros (Dica valiosíssima...):
sudo cryptsetup remove usbkey sudo cryptsetup -c aes -s 256 -h sha256 create usbkey $loopdev
Se tudo tiver corrido bem, está tudo pronto para o próximo passo!
Criando de fato o Sistema de Arquivos
Este é o passo mais fácil de todos. Sugere-se o Sistema de Arquivos ext3 (devido à capacidade de journaling, para evitar erros em caso de remoção do dispositivo USB antes de ter sido desmontado corretamente). O comando cryptsetup acima criou o dispositivo /dev/mapper/usbkey, que consiste em um mapa pelo qual o dm-crypt acessa o SistemaDeArquivos. Assim, este dispositivo se apresenta, para o sistema, como qualquer outro dispositivo em bloco, como um Disco Rígido ou partição. O comando a seguir cria o Sistema de Arquivos ext3 no arquivo criptografado:
sudo mkfs.ext3 /dev/mapper/usbkey
Agora, tente montar o Sistema de Arquivos:
sudo mkdir -p /mnt/encrypted sudo mount -t ext3 /dev/mapper/usbkey /mnt/encrypted
Configurando o GnuPG no Sistema de Arquivos Criptografado
Para este passo, crie o diretório .gnupg em /mnt/encrypted, tornando proprietário o seu usuário, então criando um atalho (link) para o diretório ~/.gnupg na sua pasta pessoal (home), fazendo uma cópia de segurança deste último, para garantir a sua integridade:
sudo mkdir /mnt/encrypted/.gnupg sudo chown $UID.$UID /mnt/encrypted/.gnupg chmod 0700 /mnt/encrypted/.gnupg ln -s /mnt/encrypted/.gnupg ~/.gnupg
A seguir, crie uma Chave GPG conforme descrito em GPG ou utilize as chaves anteriormente criadas, movendo os arquivos antigos em .gnupg para a nova pasta, possivelmente utilizando os comandos shred ou wipe para apagar de forma definitiva os arquivos antigos.
Facilitando a sua vida
Simplifique o processo de montagem
Não tem graça ficar digitando três ou quatro comandos toda vez que desejar montar o sistema de arquivos criptografados. Por isso, crie um script bem simples para montagem e desmontagem. Antes de utilizá-los, desmonte o sistema de arquivos criptografado e desanexe-o do dispositivo loop:
sudo umount /mnt/encrypted sudo cryptsetup remove usbkey sudo losetup -d $loopdev
Agora, salve os comandos abaixo como mount.sh na raiz do dispositivo USB (Pendrive), e não no sistema criptografado(!):
dir=`dirname $0` loopdev=$(sudo losetup -f) sudo -p "Password (sudo): " modprobe loop && \ sudo modprobe dm-crypt && \ sudo modprobe aes && \ sudo mkdir -p /mnt/encrypted && \ sudo losetup $loopdev $dir/disk.img && \ sudo cryptsetup -c aes -s 256 -h sha256 create usbkey $loopdev && \ sudo mount -t ext3 /dev/mapper/usbkey /mnt/encrypted && \ sudo chown -R $UID.$UID /mnt/encrypted/
Então, salve os comandos abaixo, da mesma forma, como umount.sh no mesmo local acima:
loopdev=$(sudo cryptsetup status usbkey | grep device | sed -e "s/ *device:[ \t]*//") sync sudo umount /mnt/encrypted sudo cryptsetup remove usbkey sudo losetup -d $loopdev
Você pode não conseguir executar estes scripts diretamente, pois a opção padrão de auto-montagem não permite tais execuções. Porém, como são shell scripts, você pode direcioná-los para o sh. Assim, quando o dispositivo USB for montado, digite o comando
sh /media/usbdisk/mount.sh
e todo o trabalho terá sido feito automaticamente! (Claro que será necessário digitar a senha de acesso e talvez a senha para a execução do comando sudo.)
Verificar Assinaturas PGP sem o Sistema de Arquivos Criptografado
Para agilizar o trabalho de verificar uma mensagem assinada digitalmente, sem a necessidade de montar o dispositivo, apenas copie o chaveiro (keyring) público e o Banco de dados confiáveis (trust database) para a pasta .gnupg "de verdade":
cp /mnt/encrypted/.gnupg/{pubring,trustdb}.gpg /tmp sh /media/usbdisk/umount.sh sudo mv /tmp/{pubring,trustdb}.gpg /mnt/encrypted/.gnupg
Agora, quando o sistema de arquivos não estiver montado, você poderá visualizar estes arquivos na pasta .gnupg local, para que o comando gpg --verify funciona como esperado. Entretanto, quando estiver devidamente montado, você verá os arquivos que de fato estão contidos no sistema de arquivos criptografado.
GnuPGEmDispositivoUSB (last edited 2011-09-19 23:20:55 by localhost)