A criptografia de disco cheia multifuncional é fácil de usar disponível?

1

Eu tinha uma configuração em que meu dispositivo removível continha uma única partição com dados criptografados e nada mais para distingui-la dos dados aleatórios. Em um dispositivo fisicamente separado, eu tinha um par de scripts que abria / fechava o dispositivo usando uma chave criptografada por GPG:

open.sh

#!/bin/bash

# The crypt UUID is hard-coded. That way it will not try to decrypt the wrong
# device.
cryptuuid='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# The UUID of the decrypted device is hard-coded. This is currently how the
# script knows what to mount after decrypting.
deviceuuid='yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'

# The encrypted key bits are fed to cryptsetup with specific parameters to
# decrypt the crypt.
gpg2 --decrypt <<-  END | sudo cryptsetup --offset 0 --cipher aes-xts-plain64 --key-size 256 --hash sha256 --key-file - open --type plain "/dev/disk/by-partuuid/$cryptuuid" Secrets
    -----BEGIN PGP MESSAGE-----

    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    zzzzz
    -----END PGP MESSAGE-----
END

# A small delay is necessary to give time for the decrypted device to show up.
sleep 1

# Mount the decrypted device as if the user did it using the GUI.
gvfs-mount -d $(readlink -f $(blkid -U "$deviceuuid"))

close.sh

#!/bin/bash

# The UUID of the decrypted device is hard-coded. This is currently how the
# script knows what unmount.
deviceuuid='yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'

# Find all processes using the decrypted device and issue a “friendly” kill
# signal.
sudo lsof -t $(findmnt -rn -S UUID="$deviceuuid" -o TARGET) | while read process; do kill -HUP $process; done

# Try to unmount the decrypted device and then close it with cryptsetup. findmnt
# identifies the path which the device is mounted. lsblk finds the decrypted
# device (minus “/dev/” from the UUID). dmsetup finds the decrypted device name
# given the block device name from before.
gvfs-mount -u $(findmnt -rn -S UUID="$deviceuuid" -o TARGET) && sudo cryptsetup close $(sudo dmsetup info --columns --noheadings --options Name --select BlkDevName=$(lsblk --raw --noheadings --output KNAME,UUID | awk '{if ($2=="'"$deviceuuid"'") { print $1}}'))

Os scripts funcionaram, mas, idealmente, eu gostaria de aproveitar o máximo possível do suporte à GUI interno para partições criptografadas, diminuindo o uso do terminal.

Na minha tentativa de me aproximar desse objetivo, dei uma olhada no Logical Volume Manager (LVM) para seu recurso JBOD. A idéia era ter uma partição LUKS que aparecesse no gerenciador de arquivos, mas também manter o cabeçalho LUKS longe dos dados criptografados, deixando os dados criptografados indistinguíveis dos dados aleatórios.

Para conseguir isso, eu empreguei 2 volumes:

  1. Um arquivo header.img (exatamente 2.139.648 bytes)
  2. Um dispositivo físico / dev / sdx

header.imgcontémumapartiçãoGPT,quehospedaumPVdoLVMapenasgrandeosuficienteparacontertodoocabeçalhoLUKS./dev/sdxcontémumapartiçãoGPTquehospedaumPVdoLVMcontendoosdadoscriptografados.

Elessãocriadosusandoestasetapas:

  1. fallocate-l2139648header.imgcriaumaimagemparaarmazenaroprimeiroPV.
  2. MonteiaimagemecrieiumapartiçãoGPTdosetor4,112(GUID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)dentrodelaparaoPV.
  3. sudopvcreate--labelsector0--metadatatype2--pvmetadatacopies1--metadatasize32768b--dataalignment512b/dev/disk/by-partuuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxcriaovolumefísicodocabeçalho.
  4. Paraodispositivo(como/dev/sdx)ondedesejoarmazenarosdadoscriptografados,determinooalinhamentodapartiçãoqueprecisoeadicionomaisumsetornoinícioparaocabeçalhoLVM.SeumaunidadeSSDforpré-formatadacomumapartiçãocomeçandonosetor65536,excluaessapartiçãoecrieumacomeçandonosetor65535.Dessaforma,osistemadearquivosaindaestaráperfeitamentealinhado.
  5. sudopvcreate--labelsector0--pvmetadatacopies0--metadatasize0b--dataalignment512b'/dev/disk/by-partuuid/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'criaumvolumefísicoapenascomocabeçalhoLVM,massemmetadados.
  6. vgcreate--metadatacopiesunmanaged--physicalextentsize512bSecrets'/dev/disk/by-partuuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx''/dev/disk/by-partuuid/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'criaumgrupodevolumesemcimadessesdoisvolumesfísicos.
  7. lvcreate--contiguousn--extents100%FREESecrets--nameCryptcriaumúnicovolumelógicoqueocupatodooespaçolivrenogrupodevolumes.
  8. Agora,umproblemapeculiarquetivefoique,seeuescrevessealgumdadonovolumelógico,omaiorvolumefísicosempreseriagravadoprimeiro.Issoéruim,porquequeroqueocabeçalhoLUKSsejagravadonomenordosdoisvolumesfísicos.Eucorrijoissoexportandoosdadosdogrupodevolumesparaumarquivodetextoondepossoreordenarosvolumesfísicos:vgcfgbackup-fmetadata.txtSecrets.
  9. Editaroarquivodetextoresultanteésimples.Naseçãological_volumes,devehaverdoissegmentoscomnomes:segment1esegment2.Vocêprecisaráeditarosvaloresstart_extenteextent_countemcadaumdeles.segment1deveterstart_extent=0eextent_count=4040.Esegment2deveterstart_extent=4040eextent_countigualaope_countdovolumefísicomaior-quevocêpodeencontrarnaseçãophysical_volumes.Vocêpodeprecisartrocarpv0epv1,masverifiqueasdefiniçõesdevolumeparasecertificardequeestãosão.
  10. vgcfgrestore-fmetadata.txtSecretsaplicarásuasalteraçõesaogrupodevolumes.
  11. cryptsetup--verbose--cipheraes-xts-plain64--key-size512--hashsha512--align-payload1luksFormat/dev/Secrets/CryptcriaovolumecriptografadodoLUKS.
  12. Abraonovovolumecriptografadoefaçaoqueprecisaserfeito.
  13. Paraejetar:desmontequalquersistemadearquivosnovolumecriptografado,feche-oeexecutevgchange-anSecrets.Vocêpodeentãoseparare/ouejetarosvolumesfísicos.

Quando/dev/sdxéinseridoeheader.imgémontadousandooUtilitáriodeDisco,umíconeéexibidonoIniciadorque,quandoclicado,solicitaumsenhaparadesbloquearovolume;oterminalnãoénecessárioemnenhumadasetapas,excetonaocasiãoaleatóriaemqueovolumelógiconãoregistra.Emseguida,aexecuçãode vgscan --mknodes e udevadm trigger parece corrigir o problema.

O problema é que ao desmontar o volume, eu também tenho que usar o terminal para desativar o grupo de volume LVM (VG) antes de remover o dispositivo de loop e ejetar o armazenamento criptografado. Remover fisicamente a mídia de armazenamento não parece fazer com que o grupo de volumes desapareça e os dispositivos de loop sejam impedidos de serem desmontados.

Eu ficaria satisfeito em apenas resolver o problema de remoção de dispositivo, mas acho que estou complicando demais as coisas apenas criando e mantendo essa configuração.

Alguma distribuição Linux suporta hoje uma criptografia de múltiplos fatores e fácil de usar?

    
por Kevin Li 27.01.2017 / 23:40

0 respostas