Невозможно создать анклав SGX в аппаратном режиме - "неверный маркер запуска", хотя в документации указан неверный маркер запуска в качестве первого
Документация Intel здесь говорит, что если нет предыдущего маркера запуска, следует использовать "недопустимый" токен со всеми нулями. Это прекрасно работает в режиме симуляции, но в аппаратном режиме возвращает SGX_ERROR_INVALID_LAUNCH_TOKEN, даже если это именно то, о чем он просит.
// Initialize an "invalid" first token, as the documentation specifies (all zeros)
sgx_launch_token_t token = {0};
// Create enclave
sgx_enclave_id_t id;
int updated = 0;
const auto status = sgx_create_enclave("enclave.signed.so", SGX_DEBUG_FLAG, &token, &updated, &id, NULL);
if (status != SGX_SUCCESS) {
throw "Failed to initialize enclave. (" + get_error_message(status) + ")";
}
Код возвращает статус = SGX_ERROR_INVALID_LAUNCH_TOKEN
Failed to initialize enclave. (The launch token is not correct.)
Может быть, я что-то упускаю из процесса строительства?
1 ответ
Проблема была вызвана использованием моего приложения libsgx_urts.so
от /usr/lib
а также libsgx_uae_service.so
из пути установки моего SGX SDK (/opt/intel/sgxsdk/lib64
в моем случае.)
Я изменил ссылку на следующее:
Simulation mode:
libsgx_urts.so => /opt/intel/sgxsdk/lib64/libsgx_urts.so
libsgx_uae_service.so => /opt/intel/sgxsdk/lib64/libsgx_uae_service.so
Hardware mode:
libsgx_urts.so => /usr/lib/libsgx_urts.so
libsgx_uae_service.so => /usr/lib/libsgx_uae_service.so
`