Unidade de criptografia que possui conteúdo

0

Eu tenho 2 discos rígidos de 3 TB cada. A primeira dessas unidades está cheia de conteúdo muito importante. Eu criptografei o segundo disco de 3 TB usando a seguinte técnica:

link

e copiou os arquivos da primeira unidade não criptografada para a segunda unidade criptografada. Agora quero criptografar a primeira unidade. Como faço para fazer isso? Ele tem conteúdo, por isso estou assumindo que se eu usar o link acima para criptografá-lo, a unidade será apagada?

    
por oshirowanen 18.07.2014 / 22:32

2 respostas

1

Criptografar no local é possível, mas é perigoso. É mais fácil simplesmente limpar / formatar / mkfs e repopulá-lo com arquivos de outro lugar.

Para a abordagem no local, primeiro você precisa reduzir o sistema de arquivos em pelo menos 2MiB para liberar espaço para o cabeçalho LUKS no início da unidade. Por segurança, encolha um pouco mais que isso.

Depois, você deve ter em mente que, devido ao cabeçalho LUKS, todos os dados no contêiner criptografado têm pelo menos um 2MiB offset. Assim, uma cópia linear dd do não criptografado para o contêiner criptografado não funcionará, pois cada gravação sobrescreveria dados que ainda não foram lidos.

Para evitar isso, a operação de cópia deve ser executada de trás para frente. Não há suporte direto para isso em dd , mas é possível emulá-lo usando seek=$x skip=$x count=1 em um loop de retrocesso que decrementa $x em um em cada etapa até $x=0 .

Exemplo usando o dispositivo /dev/sdx1 com ext4 filesystem:

# make sure it's not mounted anywhere
umount /dev/sdx1
# backup the first 128MiB somewhere
dd bs=1M if=/dev/sdx1 of=/somewhere/sdx9.backup count=128
# shrink filesystem by 128MiB
resize2fs /dev/sdx1 $(($(blockdev --getsize64 /dev/sdx1)/1024/1024-128))M
# create encryption layer
cryptsetup luksFormat /dev/sdx1
cryptsetup luksOpen /dev/sdx1 luksx1
# dd backwards using GiBs of memory. Change math and bs for less memory usage.
for x in $(seq $(blockdev --getsize64 /dev/sdx1)/1024/1024/1024+1) -1 0)
do
    dd bs=1G iflag=fullblock seek=$x skip=$x count=1 \
       if=/dev/sdx1 of=/dev/mapper/luksx1
done
# include backup for region previously overwritten by LUKS header
dd bs=1M if=/somewhere/sdx9.backup of=/dev/mapper/luksx1
# grow filesystem to full size
resize2fs /dev/mapper/luksx1

Antes de fazer isso, teste primeiro o procedimento com um dispositivo temporário. Aqui está uma pasta de uma sessão de exemplo que fiz há algum tempo: link

Se o procedimento for cancelado a qualquer momento, é praticamente uma causa perdida, já que você acaba com uma coisa meio criptografada.

Existem frontends que praticamente usam o mesmo método. O cryptsetup tem um programa para reencrypt, ou você pode tentar a sua sorte com o link . Eu prefiro a abordagem manual simplesmente porque entendo como ela funciona e o que pode dar errado.

    
por 25.07.2014 / 19:12
1

O que você deve fazer é limpar com segurança a unidade original para remover todos os dados não criptografados, configurar a criptografia e copiar os arquivos.

Primeiro, você vai querer certificar-se de que seu backup está correto, já que você estará limpando completamente a unidade original. Limpe a unidade usando um comando como o seguinte:

# dd if=/dev/urandom of=/dev/sdX bs=4096

onde sdX é a unidade que você deseja limpar. Você pode usar /dev/zero em vez de /dev/urandom , porque o urandom demorará muito mais tempo, embora seja mais seguro. Mais informações sobre isso podem ser encontradas aqui . Certifique-se de limpar a unidade certa, de preferência, removendo a outra unidade para que você não possa corrompê-la.

Note que é impossível recuperar os dados apagados desta forma (que é o ponto).

Depois de ter limpado o disco com segurança para que não permaneçam dados não criptografados, você pode configurar a criptografia e copiar os dados.

    
por 25.07.2014 / 06:44