Topik ini menjelaskan cara menggunakan trusted execution environment (TEE) SDK untuk mengembangkan, membangun, dan menerapkan aplikasi Software Guard Extensions (SGX) 2.0 dari Intel. Sebagai contoh, digunakan aplikasi bernama helloworld. Aplikasi ini secara berkala menghasilkan pesan di dalam enklaf dan mengirimkannya ke buffer yang tidak terpercaya, lalu pesan tersebut ditampilkan di terminal.
Prasyarat
Anda terhubung ke instance yang mendukung komputasi rahasia melalui SSH atau Cloud Assistant.
Cara kerja Intel SGX
Aplikasi Intel SGX 2.0 terdiri dari dua komponen: komponen yang tidak terpercaya dan komponen yang terpercaya.
Komponen yang tidak terpercaya adalah bagian dari memori yang tidak dienkripsi. Jika Anda menyimpan kode dan data aplikasi di bagian ini, fungsi entri
main()juga harus ditempatkan di komponen yang tidak terpercaya. Pada gambar sebelumnya, fungsimain()danbar()berada di komponen yang tidak terpercaya.Komponen yang terpercaya, atau enklaf, adalah bagian dari memori yang dienkripsi. Komponen ini dibuat oleh CPU, dan data serta kode di dalamnya hanya dapat diakses oleh CPU. Pada gambar sebelumnya, fungsi
helloworld()danfoo()berada di enklaf.
Untuk memanggil fungsi di enklaf dari komponen yang tidak terpercaya, aplikasi harus melakukan pemanggilan enklaf (ECALL). Untuk memanggil fungsi di komponen yang tidak terpercaya dari enklaf, aplikasi harus melakukan pemanggilan luar (OCALL). ECALL dan OCALL dideklarasikan dalam file Enclave Definition Language (EDL).
Kode contoh dan struktur direktori
Dalam contoh ini, aplikasi Intel SGX 2.0 bernama helloworld diimplementasikan. Untuk informasi lebih lanjut tentang kode sumber, kunjungi GitHub. Kode sumber mencakup kode untuk kompilasi aplikasi, pembuatan image, dan penerapan aplikasi. Contoh kode berikut menunjukkan struktur direktori.
App.hsgx-device-plugin/samples/hello_world/
├── Dockerfile
├── Makefile
├── README.md
└── src
├── App
│ ├── App.cpp
│ └── App.h
├── Enclave
│ ├── Enclave.config.xml
│ ├── Enclave.cpp
│ ├── Enclave.edl
│ ├── Enclave.h
│ ├── Enclave.lds
│ └── Enclave_private.pem
└── MakefileTabel berikut menjelaskan direktori src dan file terkait.
Direktori | Deskripsi | File | Deskripsi |
App | Direktori App berisi kode yang tidak terpercaya, seperti fungsi utama() (fungsi entri) dan kode fungsi OCALL. | App.cpp | Kode di komponen yang tidak terpercaya. |
App.h | File header. | ||
Enclave | Kode di komponen yang terpercaya, termasuk kode fungsi ECALL. | Enclave.edl | File EDL. |
Enclave.lds | Skrip linker enklaf. | ||
Enclave_private.pem | Kunci privat yang digunakan untuk menandatangani file enclave.so. | ||
Enclave.config.xml | File konfigurasi enklaf yang menentukan parameter, seperti ukuran tumpukan dan apakah akan mengaktifkan debugging. | ||
Enclave.h dan Enclave.cpp. | Kode yang mengimplementasikan komponen yang terpercaya. |
Langkah 1: Kompilasi hello_world
Jalankan perintah berikut untuk menginstal Git:
sudo yum install gitJalankan perintah berikut untuk mengompilasi aplikasi hello_world:
git clone https://github.com/AliyunContainerService/sgx-device-plugin cd sgx-device-plugin/samples/hello_world SGX_SDK=/opt/alibaba/teesdk/intel/sgxsdk make buildFile biner bernama hello_world dihasilkan di direktori root proyek.
Jalankan perintah
./hello_worldpada instance yang mendukung SGX untuk menjalankan aplikasi hello_world.cd src/ ./hello_worldOutput yang diharapkan:
Wed May 6 06:53:33 2020 Hello world From SGX Enclave! Wed May 6 06:53:34 2020 Hello world From SGX Enclave! ...
Berikut ini menjelaskan cara mengompilasi aplikasi dan menampilkan struktur direktori kode yang dikompilasi:
Langkah 2: Bangun dan terapkan aplikasi helloworld
Disarankan untuk membangun image Alibaba Cloud Linux, menginstal versi terbaru SGX SDK, dan secara berkala memperbarui SDK untuk mengurangi risiko potensial.
Contoh Dockerfile
Contoh Dockerfile berikut menggunakan Alibaba Cloud Linux 3:
FROM registry.cn-hangzhou.aliyuncs.com/alinux/alinux3
ARG REGION_ID=cn-hangzhou
RUN yum install -y curl && \
repo_url=https://enclave-${REGION_ID}.oss-${REGION_ID}.aliyuncs.com/repo/alinux/enclave-expr.repo && \
yum install -y yum-utils && \
yum-config-manager --add-repo ${repo_url} && \
yum install -y libsgx-urts libsgx-uae-service # Tambahkan dependensi runtime SGX lainnya sesuai kebutuhan.
WORKDIR /src
COPY src/hello_world src/enclave.signed.so /src
ENTRYPOINT ["/src/hello_world"]Prosedur
Instal Docker.
Untuk informasi lebih lanjut, lihat Instal Docker.
Jalankan perintah berikut untuk mengompilasi dan membangun image uji.
Ganti
${IMAGE_URL}dengan alamat image uji.cd sgx-device-plugin/samples/hello_world TARGET_IMAGE=${IMAGE_URL} SGX_SDK=/opt/alibaba/teesdk/intel/sgxsdk make image docker push ${IMAGE_URL}Jalankan perintah berikut untuk menerapkan aplikasi
helloworld.Ganti
${IMAGE_URL}dengan alamat image uji yang Anda buat di langkah sebelumnya.cat <<EOF | kubectl create -f - apiVersion: apps/v1 kind: Deployment metadata: name: helloworld namespace: default spec: replicas: 2 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld spec: containers: - image: ${IMAGE_URL} imagePullPolicy: Always name: helloworld resources: limits: cpu: 250m memory: 512Mi alibabacloud.com/sgx_epc_MiB: 2 EOF