Estou usando cryptsetup
para criar um dispositivo baseado em arquivo LUKS para armazenar informações em:
# create a file as a container
dd if=/dev/zero of=zulu.bin bs=1024 count=102400
# create a key
dd if=/dev/urandom bs=1 count=8192 2>/dev/null | \
base64 | \
cut -b 1-8192 | \
tr -d '\n' | \
gpg2 --output zulu-key.gpg -aser DEADBEEF
# format the file-based "device"
gpg2 --decrypt zulu-key.gpg | \
cryptsetup luksFormat --iter-time=10000 --hash sha256 \
--cipher aes-cbc-essiv:sha256 --key-size 256 --key-file - \
zulu.bin
Há muitas coisas abaixo do ideal aqui, ou seja, a criptografia de dispositivo de bloco não fornece autenticação criptográfica, etc.
De qualquer forma, não consigo abrir este dispositivo como um usuário não raiz:
$ gpg2 --decrypt zulu-key.gpg | \
cryptsetup open -d - zulu.bin zulu
Cannot initialize device-mapper, running as non-root user.
O que eu essencialmente preciso é de um sistema de arquivos inteiro que é criptografado, mas armazenado em um arquivo. Eu preciso ser capaz de abrir e fechar este sistema de arquivos criptografado à vontade e sem privilégios elevados.
Eu pensei em simplesmente criar um tmpfs ou ramfs e então simplesmente dd
ing o "dispositivo" diretamente canalizado para o GnuPG e então eu teria a criptografia, autenticação e não-repúdio do GnuPG, mas não tenho certeza se isso vai funcionar.
Existe uma maneira bem conhecida de alocar um sistema de arquivos de tamanho arbitrário como um arquivo que é criptografado em repouso via GnuPG, pode ser aberto na RAM e novamente canalizado para o GnuPG para criptografar o dispositivo offline novamente ? É possível fazer isso como um usuário normal usando o FUSE?
Meu caso de uso está precisando de um sistema de arquivos de tamanho arbitrário que é criptografado para que os programas que gravam arquivos no sistema de arquivos não precisem saber nada sobre criptografia; O GnuPG lidaria com a criptografia ao "fechar" o dispositivo e gravar o texto cifrado no disco como um arquivo.