Como alternativa à minha outra outra resposta , gostaria de oferecer outra coisa. Algo bonito ... dm-crypt.
A dm-crypt simples (sem o LUKS) não armazena nada sobre a chave; pelo contrário, cryptsetup
está perfeitamente feliz em abrir um dispositivo simples com qualquer senha e começar a usá-lo. Permita-me ilustrar:
[root:tmp]# fallocate -l 16M cryptfile
[root:tmp]# cryptsetup --key-file - open --type plain cryptfile cfile-open <<<"pa55w0rd"
Neste ponto, você desejaria gravar todos os seus dados aleatórios no /dev/mapper/cfile-open
. Parece prudente para mim que você dimensione o arquivo de criptografia original apropriadamente antes do tempo para que você use todo o espaço; no entanto, você pode facilmente tratar isso como outro bocado de segurança através da obscuridade e anotar exatamente quantos dados você escreveu. (Isso só funcionaria se os blocos subjacentes já fossem semi-aleatórios, ou seja, se você não for preencher completamente o arquivo, deverá criá-lo com openssl rand
ou dd if=/dev/urandom
em vez de fallocate
.). .. Você poderia até mesmo usar dd
para começar a escrever em algum lugar no meio do dispositivo.
Por enquanto, farei algo mais simples.
[root:tmp]# cryptsetup status cfile-open
/dev/mapper/cfile-open is active.
type: PLAIN
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/loop0
loop: /tmp/cryptfile
offset: 0 sectors
size: 32768 sectors
mode: read/write
[root:tmp]# b $((32768*512))
B KiB MiB GiB TiB PiB EiB
16777216 16384.0 16.00 .01 0 0 0
[root:tmp]# ll cryptfile
-rw-r--r--. 1 root root 16777216 Feb 21 00:28 cryptfile
[root:tmp]# openssl rand -out /dev/mapper/cfile-open $((32768*512))
[root:tmp]# hexdump -n 16 -C /dev/mapper/cfile-open
00000000 00 1d 2d 11 ac 38 c4 d3 cc 81 4f 32 de 64 01 ca |..-..8....O2.d..|
00000010
[root:tmp]# cryptsetup close cfile-open
Neste ponto, preenchi meu arquivo criptografado com 16 MiB de dados aleatórios. Veja o que acontece quando eu abro novamente usando a frase secreta errada e, em seguida, só para ficar claro, abro novamente com a correta e você verá que os dados originais ainda estão intactos.
[root:tmp]# cryptsetup --key-file - open --type plain cryptfile cfile-open <<<"pass"
[root:tmp]# hexdump -n 16 -C /dev/mapper/cfile-open
00000000 89 97 91 26 b5 46 87 0c 67 87 d8 4a cf 78 e6 d8 |...&.F..g..J.x..|
00000010
[root:tmp]# cryptsetup close cfile-open
[root:tmp]# cryptsetup --key-file - open --type plain cryptfile cfile-open <<<"pa55w0rd"
[root:tmp]# hexdump -n 16 -C /dev/mapper/cfile-open
00000000 00 1d 2d 11 ac 38 c4 d3 cc 81 4f 32 de 64 01 ca |..-..8....O2.d..|
00000010
[root:tmp]#
Aproveite.