Implementação de um sistema de arquivos criptografado transparente ao usuário
Segurança total é algo impossível, e mesmo tendo os melhores recursos de segurança na configuração de firewalls ou permissões de acesso, os usuários não estão livres do roubo físico dos seus dados. Criptografar o sistema de arquivos da máquina é uma forma efetiva de proteger-se de roubo de dados.
Formas de proteger dados no disco rígido usando criptografia
Para proteger arquivos com criptografia no sistema operacional
Linux pode-se usar ferramentas do espaço do usuário ou ferramentas
do espaço do kernel. Ferramentas do espaço do usuário são os
programas que fazem parte da distribuição, mas não fazem parte do
kernel, como por exemplo o editor que está sendo usado para editar
este texto. Ferramentas do espaço do kernel são funcionalidades que
fazem parte do kernel, seja na forma de código compilado diretamente
no kernel ou então módulos dinâmicos que podem ser carregados e
descarregados conforme a necessidade. Pode-se adicionar
funcionalidades ao kernel através de remendos de código, patches,
que podem ser inseridos no código fonte do kernel antes da compilação.
Também é possível implementar a criptografia de dados usando programas do espaço do usuário, como o GnuPG[1]. Há ferramentas comerciais para tal, como o Bestcrypt[2]. No entanto, este artigo tratará exclusivamente do uso de criptografia com ferramentas do espaço do kernel. Note-se que também são usados os aplicativos do espaço do usuário mount e losetup, porém a encriptação é feita por um módulo do kernel e não por um programa independente. Com o GnuPG e com o Bestcrypt pode-se criptografar arquivos separadamente ou em blocos, mas usando-se a abordagem comentada neste artigo pode-se criptografar partições inteiras do sistema.
O uso de um módulo do próprio kernel para encriptar os dados visa obter maior desempenho e transparência, evitando que o usuário tenha que fazer configurações e atualizações de programas, além de trazer simplicidade ao processo.
Há basicamente três formas de proteger dados com criptografia usando recursos do kernel Linux. As possibilidades são:
As três abordagens exigem o uso de dispositivos de loopback para possibilitar a criptografia de dados no sistema. Esse tipo de dispositivo não guarda dados por si. Conforme BRAUN[3], os dispositivos de loopback funcionam como um "intermediário" entre o dispositivo de armazenamento real, que pode ser um disco ou um arquivo, e as requisições do sistema operacional. Todos os dados passam através do loopback e podem ser filtrados, nesse caso pelo algoritmo de encriptação. As três opções de proteção de dados com criptografia comentadas usam essa abordagem.
É importante ressaltar que o termo loopback refere-se aos oito dispositivos de bloco que podem ser montados pelo kernel Linux, e que são apontados em /dev/loopN, com N variando de 0 a 7. Não há qualquer relação entre o loopback citado aqui e a interface de loopback usada pelos serviços de rede para referenciar a máquina local.
A criptografia conseguida com esse sistema depende do algoritmo usado. O autor optou por usar o algoritmo blowfish[4]. Algumas características desse algoritmo de acordo com SCHNEIER[5]:
News: Blowfish has been added to the mainline Linux kernel, starting with v2.5.47. Blowfish is a symmetric block cipher that can be used as a drop-in replacement for DES or IDEA. It takes a variable-length key, from 32 bits to 448 bits, making it ideal for both domestic and exportable use. Blowfish was designed in 1993 by Bruce Schneier as a fast, free alternative to existing encryption algorithms. Since then it has been analyzed considerably, and it is slowly gaining acceptance as a strong encryption algorithm. Blowfish is unpatented and license-free, and is available free for all uses.
Outros algoritmos disponíveis para o kernel Linux podem ser usados. A versão do kernel usada nos testes foi a 2.6.6, que não necessita da aplicação de nenhum patch especial para ser compilado com o blowfish. Porém, pode-se usar outros algoritmos além dos fornecidos pelo kernel padrão, desde que sejam aplicados os patch necessários. Além do blowfish o kernel 2.6.6 traz também os algoritmos de criptografia DES, twofish, serpent, AES, etc.
REF.:
Também é possível implementar a criptografia de dados usando programas do espaço do usuário, como o GnuPG[1]. Há ferramentas comerciais para tal, como o Bestcrypt[2]. No entanto, este artigo tratará exclusivamente do uso de criptografia com ferramentas do espaço do kernel. Note-se que também são usados os aplicativos do espaço do usuário mount e losetup, porém a encriptação é feita por um módulo do kernel e não por um programa independente. Com o GnuPG e com o Bestcrypt pode-se criptografar arquivos separadamente ou em blocos, mas usando-se a abordagem comentada neste artigo pode-se criptografar partições inteiras do sistema.
O uso de um módulo do próprio kernel para encriptar os dados visa obter maior desempenho e transparência, evitando que o usuário tenha que fazer configurações e atualizações de programas, além de trazer simplicidade ao processo.
Há basicamente três formas de proteger dados com criptografia usando recursos do kernel Linux. As possibilidades são:
- Criptografar o disco rígido todo;
- Criptografar uma partição do disco rígido;
- Criptografar um arquivo que será montado como dispositivo de bloco.
As três abordagens exigem o uso de dispositivos de loopback para possibilitar a criptografia de dados no sistema. Esse tipo de dispositivo não guarda dados por si. Conforme BRAUN[3], os dispositivos de loopback funcionam como um "intermediário" entre o dispositivo de armazenamento real, que pode ser um disco ou um arquivo, e as requisições do sistema operacional. Todos os dados passam através do loopback e podem ser filtrados, nesse caso pelo algoritmo de encriptação. As três opções de proteção de dados com criptografia comentadas usam essa abordagem.
É importante ressaltar que o termo loopback refere-se aos oito dispositivos de bloco que podem ser montados pelo kernel Linux, e que são apontados em /dev/loopN, com N variando de 0 a 7. Não há qualquer relação entre o loopback citado aqui e a interface de loopback usada pelos serviços de rede para referenciar a máquina local.
A criptografia conseguida com esse sistema depende do algoritmo usado. O autor optou por usar o algoritmo blowfish[4]. Algumas características desse algoritmo de acordo com SCHNEIER[5]:
News: Blowfish has been added to the mainline Linux kernel, starting with v2.5.47. Blowfish is a symmetric block cipher that can be used as a drop-in replacement for DES or IDEA. It takes a variable-length key, from 32 bits to 448 bits, making it ideal for both domestic and exportable use. Blowfish was designed in 1993 by Bruce Schneier as a fast, free alternative to existing encryption algorithms. Since then it has been analyzed considerably, and it is slowly gaining acceptance as a strong encryption algorithm. Blowfish is unpatented and license-free, and is available free for all uses.
Outros algoritmos disponíveis para o kernel Linux podem ser usados. A versão do kernel usada nos testes foi a 2.6.6, que não necessita da aplicação de nenhum patch especial para ser compilado com o blowfish. Porém, pode-se usar outros algoritmos além dos fornecidos pelo kernel padrão, desde que sejam aplicados os patch necessários. Além do blowfish o kernel 2.6.6 traz também os algoritmos de criptografia DES, twofish, serpent, AES, etc.
REF.:
- http://www.gnupg.org
- http://www.jetico.com
- http://tldp.org/HOWTO/Disk-Encryption-HOWTO
- http://www.schneier.com/blowfish.html
- http://www.schneier.com/blowfish.html