Cài đặt Intel SGX SDK từ Tarball trên Ubuntu 24.04
Chuẩn bị thư mục và tải SDK
Tạo thư mục chuyên dụng để lưu trữ các package SDK nhằm tránh làm lộn xộn hệ thống file.
Tại sao: Intel phân phối SDK dưới dạng file nén (tarball) chứ không phải gói apt, cần một nơi chứa cố định để extract và quản lý version.
Kết quả mong đợi: Thư mục /opt/intel/sgx được tạo ra.
sudo mkdir -p /opt/intel/sgx
cd /opt/intel/sgx
Tải phiên bản SDK mới nhất (ví dụ: 2.49 hoặc tương đương) từ trang phát hành chính thức của Intel.
Tại sao: Ubuntu 24.04 sử dụng GCC 13+, cần kiểm tra version SDK hỗ trợ compiler mới nhất. Command này giả định bạn đã có link download từ Intel Developer Zone.
Kết quả mong đợi: File .tar.gz được tải về trong thư mục hiện tại.
wget https://download.01.org/intel-sgx/sgx-linux/2.49/distro/ubuntu24.04-server/sgx_sdk_2.49.linux.x86_64.tgz
Extract và cài đặt SDK
Giải nén file tarball vừa tải về.
Tại sao: Quá trình extract sẽ tạo ra cấu trúc thư mục chuẩn của SDK bao gồm thư viện, header và script build.
Kết quả mong đợi: Thư mục sgx_sdk_2.49.linux.x86_64 xuất hiện.
tar -xzf sgx_sdk_2.49.linux.x86_64.tgz
Di chuyển nội dung thư mục extract vào vị trí chuẩn /opt/intel/sgx để dễ quản lý đường dẫn.
Tại sao: Đặt vào /opt là quy ước chuẩn cho phần mềm bên thứ 3, giúp tránh xung đột với các gói hệ thống và tiện cho việc set biến môi trường.
Kết quả mong đợi: Các thư mục sub-folder như sdk, psdk nằm trong /opt/intel/sgx.
mv sgx_sdk_2.49.linux.x86_64/* .
rm -rf sgx_sdk_2.49.linux.x86_64
Cài đặt các thư viện runtime cần thiết vào hệ thống (nếu SDK chưa tự động làm việc này).
Tại sao: SDK cần các thư viện cơ bản của SGX (sgx_urts, sgx_edger8r) để compile và chạy Enclave.
Kết quả mong đợi: Các thư viện .so được copy vào /usr/lib/x86_64-linux-gnu và được cập nhật vào cache linker.
sudo cp sdk/lib/libsgx_urts.so /usr/lib/x86_64-linux-gnu/
sudo cp sdk/lib/libsgx_edger8r.so /usr/lib/x86_64-linux-gnu/
sudo ldconfig
Verify cài đặt SDK
Kiểm tra xem thư viện SGX đã được hệ thống nhận diện chưa.
ldconfig -p | grep sgx
Kết quả mong đợi: Đầu ra hiển thị đường dẫn đến libsgx_urts.so và libsgx_edger8r.so.
Cấu hình biến môi trường và Compiler Path
Thiết lập biến môi trường SGX
Tạo file cấu hình biến môi trường riêng cho SGX trong /etc/profile.d để áp dụng cho tất cả user.
Tại sao: Việc set biến môi trường vào /etc/profile.d giúp tự động load khi login shell mà không cần chỉnh sửa ~/.bashrc của từng user.
Kết quả mong đợi: File /etc/profile.d/sgx_sdk.sh được tạo.
sudo nano /etc/profile.d/sgx_sdk.sh
Dán nội dung sau vào file, chú ý điều chỉnh đường dẫn nếu version SDK khác.
export SGX_SDK=/opt/intel/sgx/sdk
export SGX_PSdk=/opt/intel/sgx/sdk
export SGX_ROOT=/opt/intel/sgx
export LD_LIBRARY_PATH=$SGX_SDK/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$SGX_SDK/lib/pkgconfig:$PKG_CONFIG_PATH
Áp dụng thay đổi ngay lập tức cho session hiện tại.
Tại sao: Để không cần logout/login lại mà vẫn có thể chạy command ngay sau khi config.
Kết quả mong đợi: Các biến môi trường SGX sẵn sàng sử dụng.
source /etc/profile.d/sgx_sdk.sh
echo $SGX_SDK
Cấu hình Compiler và Build Tools
Cài đặt bộ công cụ build cần thiết cho SGX trên Ubuntu 24.04.
Tại sao: SGX SDK yêu cầu GCC, Make, và các thư viện phát triển (dev) cụ thể để compile code Enclave.
Kết quả mong đợi: Các package build-essential, libssl-dev, libcurl4-openssl-dev được cài đặt.
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libcurl4-openssl-dev libnuma-dev pkg-config
Đảm bảo GCC version phù hợp (Ubuntu 24.04 mặc định là GCC 13, cần kiểm tra xem SDK hỗ trợ).
Tại sao: Một số version SDK cũ có thể không hỗ trợ GCC 13+, cần check tương thích hoặc cài thêm version cũ nếu cần.
Kết quả mong đợi: Hiển thị version GCC đang dùng.
gcc --version
Verify cấu hình môi trường
Kiểm tra xem biến PKG_CONFIG_PATH đã bao gồm thư mục của SDK chưa.
echo $PKG_CONFIG_PATH
Kết quả mong đợi: Đầu ra chứa đường dẫn /opt/intel/sgx/sdk/lib/pkgconfig.
Tải và cài đặt DCAT (Data Center Attestation Primitives)
Khởi tạo và tải DCAT
Tạo thư mục riêng cho DCAT trong /opt/intel.
Tại sao: DCAT là một framework riêng biệt so với SDK, cần tách biệt để dễ upgrade và quản lý dependency.
Kết quả mong đợi: Thư mục /opt/intel/dcat được tạo.
sudo mkdir -p /opt/intel/dcat
cd /opt/intel/dcat
Tải package DCAT từ Intel 01.org (phiên bản 1.2 hoặc mới nhất).
Tại sao: DCAT cung cấp các primitive để giao tiếp với Intel Attestation Service (IAS) và tạo Quote.
Kết quả mong đợi: File dcat_1.2.linux.x86_64.tgz được tải về.
wget https://download.01.org/intel-sgx/sgx-dcap/1.2/distro/ubuntu24.04-server/dcap_sdk_1.2.linux.x86_64.tgz
Extract và cài đặt DCAT SDK
Giải nén file DCAT SDK.
Tại sao: Giải nén để truy cập vào các thư viện và script cài đặt.
Kết quả mong đợi: Thư mục dcap_sdk_1.2.linux.x86_64 xuất hiện.
tar -xzf dcap_sdk_1.2.linux.x86_64.tgz
Di chuyển nội dung vào thư mục chuẩn.
Tại sao: Chuẩn hóa đường dẫn theo quy ước đã thiết lập ở phần SDK.
Kết quả mong đợi: Các thư mục dcap_sdk nằm trong /opt/intel/dcat.
mv dcap_sdk_1.2.linux.x86_64/* .
rm -rf dcap_sdk_1.2.linux.x86_64
Chạy script cài đặt DCAT để copy thư viện và tạo symlink cần thiết.
Tại sao: Script này tự động xử lý việc copy thư viện runtime và phát triển vào các vị trí chuẩn của hệ thống.
Kết quả mong đợi: Script chạy thành công, không có lỗi.
sudo ./install.sh
Verify cài đặt DCAT
Kiểm tra sự hiện diện của thư viện DCAT.
ldconfig -p | grep dcap
Kết quả mong đợi: Hiển thị các thư viện như libsgx_dcap_ql.so.
Cấu hình DCAT Service để giao tiếp với Intel Attestation Service
Thiết lập biến môi trường cho DCAT
Cập nhật file cấu hình môi trường SGX đã tạo ở phần 2 để bao gồm DCAT.
Tại sao: Các ứng dụng cần biết vị trí của DCAT SDK và các biến cấu hình của nó.
Kết quả mong đợi: File /etc/profile.d/sgx_sdk.sh được cập nhật.
sudo nano /etc/profile.d/sgx_sdk.sh
Thêm các dòng sau vào cuối file:
export DCAP_SDK=/opt/intel/dcap
export DCAP_ROOT=/opt/intel/dcap
export LD_LIBRARY_PATH=$DCAP_SDK/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$DCAP_SDK/lib/pkgconfig:$PKG_CONFIG_PATH
Reload lại biến môi trường.
source /etc/profile.d/sgx_sdk.sh
echo $DCAP_SDK
Cấu hình giao tiếp với IAS (Intel Attestation Service)
Tạo file cấu hình cho DCAT để định nghĩa endpoint của IAS.
Tại sao: DCAT cần biết địa chỉ API của Intel để gửi quote và nhận report xác thực.
Kết quả mong đợi: File /opt/intel/dcap/conf/dcap.conf được tạo.
sudo mkdir -p /opt/intel/dcap/conf
sudo nano /opt/intel/dcap/conf/dcap.conf
Dán nội dung cấu hình mặc định (đảm bảo endpoint chính thức của Intel được sử dụng):
[IAS]
IAS_URL=https://api.trustedservices.intel.com/sgx/certification/v4/quote
IAS_EPID_URL=https://api.trustedservices.intel.com/sgx/certification/v4/epid
Chạy công cụ kiểm tra trạng thái DCAT để đảm bảo service đang hoạt động.
Tại sao: Kiểm tra xem DCAT đã có thể giao tiếp với driver và driver đã có thể tạo quote chưa.
Kết quả mong đợi: Thông báo "DCAP SDK is installed and configured correctly" hoặc hiển thị thông tin quote.
sgx_dcap_quote_verify -h
Verify cấu hình DCAT Service
Sử dụng công cụ dcap_quote_verify để test khả năng tạo quote mẫu (nếu có file quote mẫu) hoặc kiểm tra cấu hình.
cat /opt/intel/dcap/conf/dcap.conf
Kết quả mong đợi: Nội dung file cấu hình hiển thị đúng URL của IAS.
Xây dựng ứng dụng Hello Enclave mẫu để kiểm thử môi trường
Tạo thư mục dự án và clone mẫu
Tạo thư mục làm việc cho dự án Hello Enclave.
Tại sao: Cần một không gian làm việc riêng biệt để build code ứng dụng.
Kết quả mong đợi: Thư mục /home/ubuntu/sgx_hello_enclave được tạo.
mkdir -p /home/ubuntu/sgx_hello_enclave
cd /home/ubuntu/sgx_hello_enclave
Sử dụng template có sẵn trong thư mục sample của SGX SDK.
Tại sao: Intel cung cấp sẵn mẫu code chuẩn "Hello Enclave" để test môi trường, không cần viết từ đầu.
Kết quả mong đợi: Các file source code của Hello Enclave được copy vào thư mục hiện tại.
cp -r $SGX_SDK/samples/HelloEnclave .
cd HelloEnclave
Cấu hình Makefile cho Ubuntu 24.04
Chỉnh sửa Makefile để đảm bảo đường dẫn compiler và thư viện chính xác.
Tại sao: Makefile mặc định có thể cần điều chỉnh để phù hợp với cấu trúc thư mục mới hoặc version GCC 13.
Kết quả mong đợi: Makefile được cập nhật.
sudo nano Makefile
Đảm bảo các dòng sau trong Makefile trỏ đúng đến SDK và DCAT (thường là mặc định nếu biến môi trường đã set đúng, nhưng cần kiểm tra):
# Kiểm tra phần SGX_ROOT và SGX_SDK
SGX_ROOT := $(SGX_ROOT)
SGX_SDK := $(SGX_SDK)
DCAP_ROOT := $(DCAP_ROOT)
DCAP_SDK := $(DCAP_SDK)
Nếu cần chỉnh sửa thủ công, đảm bảo biến SGX_ROOT trỏ về /opt/intel/sgx.
sed -i 's|SGX_ROOT := .*|SGX_ROOT := /opt/intel/sgx|' Makefile
sed -i 's|DCAP_ROOT := .*|DCAP_ROOT := /opt/intel/dcap|' Makefile
Build và chạy Hello Enclave
Thực hiện lệnh make để compile cả phần User Application và Enclave.
Tại sao: Quá trình build sẽ liên kết thư viện SGX, DCAT và tạo file .so cho Enclave.
Kết quả mong đợi: File hello_enclave (executable) và hello_enclave.signed.so được tạo ra.
make
Chạy ứng dụng Hello Enclave.
Tại sao: Đây là bước verify quan trọng nhất để xác nhận toàn bộ môi trường (Driver, SDK, DCAT, Compiler) đã hoạt động đồng bộ.
Kết quả mong đợi: Ứng dụng chạy và in ra dòng "Hello Enclave" hoặc "Attestation successful".
./hello_enclave
Verify kết quả kiểm thử
Kiểm tra xem ứng dụng có tạo ra file log hoặc file quote không (tùy cấu hình).
ls -la *.log *.quote 2>/dev/null || echo "No log/quote files generated (normal for Hello Enclave basic mode)"
Kết quả mong đợi: Nếu chạy thành công, ứng dụng sẽ in ra thông báo thành công trên console. Nếu gặp lỗi, cần kiểm tra log ở /var/log hoặc stdout.
Điều hướng series:
Mục lục: Series: Triển khai Database Confidential Computing với Intel SGX trên Ubuntu 24.04
« Phần 2: Cài đặt nền tảng và Driver Intel SGX trên Ubuntu
Phần 4: Cấu hình Database (MySQL/MariaDB) với tính năng SGX »