Configurando Intel SGXv2

Ejecutar y atestiguar un enclave SGX en su VM

Esta guía explica cómo verificar la compatibilidad con SGX en su VM Xeon 8368, instalar el entorno de ejecución, ejecutar un enclave y generar un certificado de atestación. Ejecute todos los comandos dentro de su VM salvo que se indique lo contrario.

1. Confirmar que SGX está disponible

Compruebe que los dispositivos del enclave existen y que la CPU anuncia SGX:

ls -l /dev/sgx_enclave /dev/sgx_provision
grep -o 'sgx[a-z0-9_]*' /proc/cpuinfo | sort -u

La comprobación de flags debe devolver sgx sgx1 sgx2 sgx_lc, y ambos archivos de dispositivo deben estar presentes.

Si falta /dev/sgx_enclave, su VM no recibió acceso a SGX o el kernel es demasiado antiguo (se requiere 5.13 o superior). Deténgase aquí y contacte con soporte antes de continuar.

2. Instalar el entorno de ejecución SGX y Gramine

Esto instala el servicio de plataforma (AESM), el proveedor de certificados DCAP y Gramine.

Ubuntu / Debian

curl -fsSL https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/intel-sgx.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/intel-sgx.gpg] \
  https://download.01.org/intel-sgx/sgx_repo/ubuntu $(lsb_release -sc) main" \
  | sudo tee /etc/apt/sources.list.d/intel-sgx.list

curl -fsSL https://packages.gramineproject.io/gramine-keyring-$(lsb_release -sc).gpg \
  | sudo tee /etc/apt/keyrings/gramine-keyring.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/gramine-keyring.gpg] \
  https://packages.gramineproject.io/ $(lsb_release -sc) main" \
  | sudo tee /etc/apt/sources.list.d/gramine.list

sudo apt update
sudo apt install -y gramine \
  sgx-aesm-service libsgx-aesm-launch-plugin \
  libsgx-aesm-quote-ex-plugin libsgx-aesm-ecdsa-plugin \
  libsgx-aesm-pce-plugin libsgx-dcap-default-qpl

AlmaLinux / RHEL

Instale el repositorio RPM local de Intel SGX para su versión y luego:

sudo dnf install -y gramine \
  sgx-aesm-service libsgx-aesm-launch-plugin \
  libsgx-aesm-quote-ex-plugin libsgx-aesm-ecdsa-plugin \
  libsgx-aesm-pce-plugin libsgx-dcap-default-qpl

Dar acceso al dispositivo a su usuario

Añada su usuario al grupo sgx para que los comandos no requieran root, luego cierre sesión y vuelva a entrar:

sudo usermod -aG sgx "$USER"

3. Configurar el servicio de atestación

El entorno de ejecución obtiene certificados de plataforma desde el servicio de caché para generar certificados de atestación. Configure /etc/sgx_default_qcnl.conf con:

{
  "pccs_url": "https://sgx.infofractal.io/sgx/certification/v4/",
  "use_secure_cert": true,
  "retry_times": 6,
  "retry_delay": 10,
  "pck_cache_expire_hours": 168,
  "verify_collateral_cache_expire_hours": 168
}

Reinicie el servicio de plataforma y confirme que la VM puede acceder al servicio de caché:

sudo systemctl restart aesmd
curl https://sgx.infofractal.io/sgx/certification/v4/rootcacrl

Un bloque de salida hexadecimal confirma que el servicio es accesible. Un error indica un problema de red o acceso; resuélvalo antes de continuar.

4. Verificar toda la pila

Ejecute la comprobación de plataforma:

is-sgx-available

Confirme que estas líneas indiquen true:

  • SGX driver loaded: true
  • AESMD installed: true
  • SGX PSW/libsgx installed: true

5. Ejecutar un enclave

Genere una clave de firma para enclaves locales, luego compile y ejecute el ejemplo Hello World:

gramine-sgx-gen-private-key

git clone --depth 1 https://github.com/gramineproject/gramine.git
cd gramine/CI-Examples/helloworld
make SGX=1
gramine-sgx helloworld

La salida esperada es Hello, world!. Un aviso indicando que el enclave está compilado en modo debug es normal para este ejemplo.

6. Generar un certificado de atestación

Compile el ejemplo de Python en modo DCAP y luego ejecute directamente los scripts de informe y certificado. Estos dos scripts son la prueba de atestación; no utilice run-tests.sh, ya que también ejecuta ejemplos de numpy y scipy que requieren configuración adicional de librerías y no están relacionados con la atestación.

cd ../python
make SGX=1 RA_TYPE=dcap

gramine-sgx ./python scripts/sgx-report.py
gramine-sgx ./python scripts/sgx-quote.py

El script de informe muestra un informe SGX con los campos MRENCLAVE y MRSIGNER. El script de certificado muestra Detected attestation type: dcap, seguido de un certificado extraído y los mismos campos. Si ambos finalizan correctamente, significa que la generación del certificado funciona de extremo a extremo.

El primer certificado tarda más porque obtiene certificados desde el servicio de caché. Los certificados posteriores se sirven desde la caché.

Qué demuestra un certificado de atestación verificado

Un certificado es una declaración firmada por la CPU de que un código específico se ejecutó dentro de un enclave genuino. Una parte remota puede verificarlo sin confiar en su VM ni en el host. Contiene:

  • MRENCLAVE — un hash del código exacto cargado en el enclave. Cualquier cambio en el programa cambia este valor.
  • MRSIGNER — la identidad de la clave que firmó el enclave.
  • Nivel TCB — el estado del microcódigo y parches de seguridad de la plataforma, permitiendo que un verificador rechace hosts desactualizados.
  • Cadena de firmas — una cadena de firmas que llega hasta las raíces de Intel mediante el certificado de plataforma, lo que permite verificar el certificado de forma remota.

Siguientes pasos

  • Para ejecutar su propia aplicación en un enclave, escriba un manifiesto de Gramine para ella. El ejemplo comentado de redis dentro de CI-Examples es un buen punto de partida.
  • Para integrar la atestación dentro de una conexión TLS, consulte los ejemplos ra-tls de Gramine.
  • La memoria del enclave (EPC) es limitada. Si una carga de trabajo se ralentiza mucho bajo carga, puede estar excediendo la EPC asignada a su VM.

Solución de problemas

  • Permiso denegado en /dev/sgx_enclave — su usuario no pertenece al grupo sgx, o no ha cerrado sesión y vuelto a entrar desde el paso 2.
  • El servicio AESM devolvió un error — el servicio de plataforma no está ejecutándose o no puede acceder al servicio de caché. Compruebe systemctl status aesmd y vuelva a verificar el paso 3.
  • La generación del certificado se bloquea o falla en la primera ejecución — confirme que el comando rootcacrl del paso 3 sigue devolviendo salida hexadecimal.
  • Los ejemplos de numpy o scipy fallan con "libblas.so.3: cannot open shared object file" — esto es un problema del manifiesto de Gramine, no de SGX. Esos ejemplos necesitan que las rutas de las librerías BLAS y LAPACK se añadan a los montajes y archivos de confianza del manifiesto. No son necesarios para validar la atestación; utilice los scripts de informe y certificado del paso 6.

Al informar de un problema, incluya toda la salida del comando que falla y las líneas relevantes de journalctl -u aesmd.

  • 0 Los usuarios encontraron esto útil
¿Le ha resultado útil esta respuesta?

Artículos relacionados

Boot directo verificado en VPS EPYC.

Para una seguridad adicional, algunos usuarios pueden querer medir y atestar su kernel de...

Creando tu propia imagen Linux con encriptación LUKS

<p>Esta guía está dirigida a usuarios con menos conocimientos técnicos que desean crear una...

Verificando SEV-SNP en tu VPS Epyc

Este artículo asume que ya ha habilitado SEV-SNP en su VPS siguiendo la guía anterior....

Habilitando SEV-SNP en tu VPS Epyc

Esta guía asume que el VPS está ejecutando Ubuntu 24.04/Debian 13 o Almalinux/RHEL/Rocky 10 y...