使用 secGear 工具

    secGear codegener 是基于 intel SGX SDK edger8r 开发的工具,用于解析 EDL 文件生成中间 C 代码,即辅助生成安全测与非安全侧文件互相调用的代码。

    secGear codegener 定义的 EDL 文件格式与 intel SGX SDK edger8r 相同,但是不支持 Intel 的完整语法定义:

    • 只能在方法中使用 public,不加 public 的函数声明默认为 private
    • 不支持从非安全侧到安全侧,以及安全侧到非安全侧的 Switchless Calls
    • OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall)

    EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异部分:

    命令格式

    codegen 的命令格式如下:

    • x86_64 架构:

    codegen_x86_64 < —trustzone | —sgx > [—trusted-dir | —untrusted-dir | —trusted | —untrusted ] edlfile

    codegen_arm64 < —trustzone | —sgx > [—trusted-dir | —untrusted-dir | —trusted | —untrusted ] edlfile

    参数说明

    各参数含义如下:

    示例

    • 转译 helloworld.edl ,在 enclave-directory 下生成安全侧辅助代码,host-directory 下生成非安全辅助代码的命令示例如下:
    • 转译 helloworld.edl ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下:
      • 转译 helloworld.edl ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下:
      • 转译 helloworld.edl ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下:

      签名工具 sign_tool

      secGear sign_tool 是一款命令行工具,包含编译工具链和签名工具,用于 enclave 签名。sign_tool 有两种签名形式:

      • 单步签名:仅适用于 debug 调试模式
      • 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名

      命令格式

      sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为:

      sign_tool.sh -d [sign | digest] -x -i -p -s [OPTIONS] –o

      参数说明

      单步签名

      两步签名

      以 SGX 为例,两步签名的操作步骤如下:

      1. 生成摘要值

        使用 sign_tool 签名,生成摘要值 digest.data 和临时中间文件 signdata(该文件在生成签名文件时使用,并在签名后自动删除)。参考命令如下:

      2. 将 digest.data 发送至签名机构或平台,并获取对应签名。

      3. 使用获取的签名生成签名后的动态库 signed.enclave。