Rotar las claves de cifrado de disco

El dispositivo aislado de Google Distributed Cloud (GDC) usa Linux Unified Key Setup (LUKS) para cifrar los datos de los discos cuando no se proporciona un HSM externo. Se crea un array RAID5 sobre las 4 unidades de datos y un único dispositivo LUKS sobre el array RAID5. La KEK de LUKS se genera de forma aleatoria y se puede rotar.

En este documento se describen los pasos para rotar la KEK de LUKS que se deben seguir en los siguientes casos:

  • rotación de KEK programada periódicamente.
  • Exposición de KEK.

Antes de empezar

Este agente debe seguir estos pasos:

  1. Comprueba que cumples los requisitos previos para portátiles.
  2. Asegúrate de que puedes iniciar sesión en los tres nodos como usuario raíz.

Rotar KEK

El sistema de dispositivo aislado de Google Distributed Cloud (GDC) utiliza un clúster de dos nodos de NetApp ONTAP Select (OTS) implementado en los nodos bm01 y bm02 (normalmente sin GPUs). Cada nodo tiene 4 unidades de datos dedicadas configuradas como una matriz RAID5 para mejorar la redundancia. Se coloca un único dispositivo cifrado con LUKS sobre cada matriz RAID5 para garantizar la seguridad de los datos.

La KEK de cifrado LUKS se almacena en el disco de arranque, que se encuentra en /etc/luks. Para rotar la KEK de LUKS, es necesario rotar el cifrado de LUKS en ambos nodos para mantener la seguridad en todo el clúster. Para realizar una rotación periódica de la KEK o si la KEK está expuesta, repite los siguientes pasos en bm01 y bm02:

  1. Inicia sesión en el nodo como usuario raíz.

  2. Asegúrate de que el dispositivo RAID exista y obtén la ruta completa de RAID_DEVICE.

    ll /dev/md
    
  3. Asegúrate de que el archivo de claves LUKS antiguo existe y obtén la OLD_KEYruta completa.

    ll /etc/luks
    
  4. Añade la KEK antigua a la ranura de clave 1 para que las ranuras de clave 0 y 1 tengan la misma KEK.

    cryptsetup luksAddKey RAID_DEVICE OLD_KEY --key-slot 1 --key-file OLD_KEY
    

    Sustituye RAID_DEVICE y OLD_KEY por las rutas de los pasos anteriores.

  5. Elimina la KEK antigua de la ranura de clave 0.

    cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY
    
  6. Genera una nueva KEK y guárdala en el nuevo archivo de claves NEW_KEY.

    dd if=/dev/urandom of=NEW_KEY bs=512 count=1
    chmod u=r,go-rwx NEW_KEY
    

    Sustituye NEW_KEY por la ruta completa al nuevo archivo de clave.

  7. Añade la nueva KEK a la ranura de clave 0.

    cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEY
    
  8. Define la configuración persistente para abrir o cerrar el dispositivo LUKS al iniciar o apagar el ordenador.

    DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE)
    echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttab
    
  9. Elimina la KEK antigua de la ranura de clave 1.

    cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY
    
  10. Verifica que la nueva KEK funciona.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY
    
  11. Verifica que la KEK antigua ya no funciona.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY
    
  12. Elimina la KEK antigua.

    rm OLD_KEY
    

Si se reinicia un nodo antes de que se complete la rotación, el dispositivo LUKS se puede abrir después del arranque. Puedes reanudar los pasos cuando el nodo vuelva a estar disponible.