Невозможно создать анклав 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`

Другие вопросы по тегам